From 8bc18db80fc71b743040b2ce7caa887d9cf05698 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 23 Jul 2020 01:12:38 -0700 Subject: [PATCH 001/182] base class --- firmware/controllers/algo/airmass/airmass.cpp | 10 ++++++++++ firmware/controllers/algo/airmass/airmass.h | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 firmware/controllers/algo/airmass/airmass.cpp diff --git a/firmware/controllers/algo/airmass/airmass.cpp b/firmware/controllers/algo/airmass/airmass.cpp new file mode 100644 index 0000000000..3ede8519e1 --- /dev/null +++ b/firmware/controllers/algo/airmass/airmass.cpp @@ -0,0 +1,10 @@ +#include "airmass.h" + +AirmassModelBase::AirmassModelBase(const ValueProvider3D& veTable) : m_veTable(&veTable) {} + +float AirmassModelBase::getVe(int rpm, float load) const { + efiAssert(OBD_PCM_Processor_Fault, m_veTable != nullptr, "VE table null", 0); + + // TODO: allow override of the Y axis value based on a config field + return m_veTable->getValue(rpm, load); +} diff --git a/firmware/controllers/algo/airmass/airmass.h b/firmware/controllers/algo/airmass/airmass.h index a5ad25950c..338741da5f 100644 --- a/firmware/controllers/algo/airmass/airmass.h +++ b/firmware/controllers/algo/airmass/airmass.h @@ -1,6 +1,22 @@ #pragma once +#include "engine.h" + struct AirmassResult { float CylinderAirmass = 0; float EngineLoadPercent = 100; }; + +struct AirmassModelBase { + DECLARE_ENGINE_PTR; + + AirmassModelBase(const ValueProvider3D& veTable); + virtual AirmassResult getAirmass(int rpm) = 0; + +protected: + // Retrieve the user-calibrated volumetric efficiency from the table + float getVe(int rpm, percent_t load) const; + +private: + const ValueProvider3D* const m_veTable; +}; From 7e88011de5da23fbe5bb09405b9c0df1f8e8d023 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 23 Jul 2020 01:23:57 -0700 Subject: [PATCH 002/182] move impl --- .../controllers/algo/airmass/maf_airmass.cpp | 46 +++++++++++++++++++ .../controllers/algo/airmass/maf_airmass.h | 13 ++++++ firmware/controllers/algo/algo.mk | 2 + firmware/controllers/algo/fuel_math.cpp | 43 +++-------------- firmware/controllers/algo/fuel_math.h | 2 - 5 files changed, 67 insertions(+), 39 deletions(-) create mode 100644 firmware/controllers/algo/airmass/maf_airmass.cpp create mode 100644 firmware/controllers/algo/airmass/maf_airmass.h diff --git a/firmware/controllers/algo/airmass/maf_airmass.cpp b/firmware/controllers/algo/airmass/maf_airmass.cpp new file mode 100644 index 0000000000..c9324858d6 --- /dev/null +++ b/firmware/controllers/algo/airmass/maf_airmass.cpp @@ -0,0 +1,46 @@ +#include "global.h" +#include "engine.h" +#include "maf_airmass.h" +#include "maf.h" + +EXTERN_ENGINE; + +AirmassResult MafAirmass::getAirmass(int rpm) { + float maf = getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) + engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); + return getAirmassImpl(maf, rpm); +} + +/** + * Function block now works to create a standardised load from the cylinder filling as well as tune fuel via VE table. + * @return total duration of fuel injection per engine cycle, in milliseconds + */ +AirmassResult MafAirmass::getAirmassImpl(float massAirFlow, int rpm) const { + // If the engine is stopped, MAF is meaningless + if (rpm == 0) { + return {}; + } + + // kg/hr -> g/s + float gramPerSecond = massAirFlow * 1000 / 3600; + + // 1/min -> 1/s + float revsPerSecond = rpm / 60.0f; + float airPerRevolution = gramPerSecond / revsPerSecond; + + // Now we have to divide among cylinders - on a 4 stroke, half of the cylinders happen every rev + // This math is floating point to work properly on engines with odd cyl count + float halfCylCount = CONFIG(specs.cylindersCount) / 2.0f; + + float cylinderAirmass = airPerRevolution / halfCylCount; + + //Create % load for fuel table using relative naturally aspiratedcylinder filling + float airChargeLoad = 100 * cylinderAirmass / ENGINE(standardAirCharge); + + //Correct air mass by VE table + float correctedAirmass = cylinderAirmass * getVe(rpm, airChargeLoad) / 100; + + return { + correctedAirmass, + airChargeLoad, // AFR/VE/ignition table Y axis + }; +} diff --git a/firmware/controllers/algo/airmass/maf_airmass.h b/firmware/controllers/algo/airmass/maf_airmass.h new file mode 100644 index 0000000000..ac557bd084 --- /dev/null +++ b/firmware/controllers/algo/airmass/maf_airmass.h @@ -0,0 +1,13 @@ +#pragma once + +#include "airmass.h" + +class MafAirmass final : public AirmassModelBase { +public: + MafAirmass(const ValueProvider3D& veTable) : AirmassModelBase(veTable) {} + + AirmassResult getAirmass(int rpm) override; + + // Compute airmass based on flow & engine speed + AirmassResult getAirmassImpl(float massAirFlow, int rpm) const; +}; diff --git a/firmware/controllers/algo/algo.mk b/firmware/controllers/algo/algo.mk index b4f6ed9fd6..e76d082c9f 100644 --- a/firmware/controllers/algo/algo.mk +++ b/firmware/controllers/algo/algo.mk @@ -11,4 +11,6 @@ CONTROLLERS_ALGO_SRC_CPP = $(PROJECT_DIR)/controllers/algo/advance_map.cpp \ $(PROJECT_DIR)/controllers/algo/engine2.cpp \ $(PROJECT_DIR)/controllers/gauges/lcd_menu_tree.cpp \ $(PROJECT_DIR)/controllers/algo/event_registry.cpp \ + $(PROJECT_DIR)/controllers/algo/airmass/airmass.cpp \ + $(PROJECT_DIR)/controllers/algo/airmass/maf_airmass.cpp \ $(PROJECT_DIR)/controllers/algo/airmass/speed_density_base.cpp \ diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 02d31504b5..4f56c7eba8 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -23,6 +23,7 @@ #include "global.h" #include "airmass.h" +#include "maf_airmass.h" #include "fuel_math.h" #include "interpolation.h" #include "engine_configuration.h" @@ -153,41 +154,6 @@ floatms_t getRunningFuel(floatms_t baseFuel DECLARE_ENGINE_PARAMETER_SUFFIX) { /* DISPLAY_ENDIF */ -/** - * Function block now works to create a standardised load from the cylinder filling as well as tune fuel via VE table. - * @return total duration of fuel injection per engine cycle, in milliseconds - */ -AirmassResult getRealMafAirmass(float airSpeed, int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { - // If the engine is stopped, MAF is meaningless - if (rpm == 0) { - return {}; - } - - // kg/hr -> g/s - float gramPerSecond = airSpeed * 1000 / 3600; - - // 1/min -> 1/s - float revsPerSecond = rpm / 60.0f; - float airPerRevolution = gramPerSecond / revsPerSecond; - - // Now we have to divide among cylinders - on a 4 stroke, half of the cylinders happen every rev - // This math is floating point to work properly on engines with odd cyl count - float halfCylCount = CONFIG(specs.cylindersCount) / 2.0f; - - float cylinderAirmass = airPerRevolution / halfCylCount; - - //Create % load for fuel table using relative naturally aspiratedcylinder filling - float airChargeLoad = 100 * cylinderAirmass / ENGINE(standardAirCharge); - - //Correct air mass by VE table - float correctedAirmass = cylinderAirmass * veMap.getValue(rpm, airChargeLoad) / 100; - - return { - correctedAirmass, - airChargeLoad, // AFR/VE table Y axis - }; -} - constexpr float convertToGramsPerSecond(float ccPerMinute) { float ccPerSecond = ccPerMinute / 60; return ccPerSecond * 0.72f; // 0.72g/cc fuel density @@ -202,13 +168,14 @@ float getInjectionDurationForAirmass(float airMass, float afr DECLARE_ENGINE_PAR return airMass / (afr * gPerSec); } +static MafAirmass mafAirmass(veMap); + AirmassResult getAirmass(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { switch (CONFIG(fuelAlgorithm)) { case LM_SPEED_DENSITY: return getSpeedDensityAirmass(PASS_ENGINE_PARAMETER_SIGNATURE); case LM_REAL_MAF: { - float maf = getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) + engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); - return getRealMafAirmass(maf, rpm PASS_ENGINE_PARAMETER_SUFFIX); + return mafAirmass.getAirmass(rpm); } default: firmwareError(CUSTOM_ERR_ASSERT, "Fuel mode %d is not airmass mode", CONFIG(fuelAlgorithm)); return {}; @@ -384,6 +351,8 @@ floatms_t getInjectorLag(float vBatt DECLARE_ENGINE_PARAMETER_SUFFIX) { * is to prepare the fuel map data structure for 3d interpolation */ void initFuelMap(DECLARE_ENGINE_PARAMETER_SIGNATURE) { + INJECT_ENGINE_REFERENCE(&mafAirmass); + fuelMap.init(config->fuelTable, config->fuelLoadBins, config->fuelRpmBins); #if (IGN_LOAD_COUNT == FUEL_LOAD_COUNT) && (IGN_RPM_COUNT == FUEL_RPM_COUNT) fuelPhaseMap.init(config->injectionPhase, config->injPhaseLoadBins, config->injPhaseRpmBins); diff --git a/firmware/controllers/algo/fuel_math.h b/firmware/controllers/algo/fuel_math.h index d0b52aebff..28a88787a5 100644 --- a/firmware/controllers/algo/fuel_math.h +++ b/firmware/controllers/algo/fuel_math.h @@ -22,8 +22,6 @@ floatms_t getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX); */ floatms_t getRunningFuel(floatms_t baseFuel DECLARE_ENGINE_PARAMETER_SUFFIX); -AirmassResult getRealMafAirmass(float airMass, int rpm DECLARE_ENGINE_PARAMETER_SUFFIX); - floatms_t getBaseTableFuel(int rpm, float engineLoad); float getBaroCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE); int getNumberOfInjections(injection_mode_e mode DECLARE_ENGINE_PARAMETER_SUFFIX); From cad0d47443fd181de0083fa70fb7d70473022d16 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 23 Jul 2020 01:24:02 -0700 Subject: [PATCH 003/182] improve test --- unit_tests/tests/test_fuel_map.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/unit_tests/tests/test_fuel_map.cpp b/unit_tests/tests/test_fuel_map.cpp index 8d4d53c938..896960cc22 100644 --- a/unit_tests/tests/test_fuel_map.cpp +++ b/unit_tests/tests/test_fuel_map.cpp @@ -6,6 +6,7 @@ */ #include "fuel_math.h" +#include "maf_airmass.h" #include "trigger_structure.h" #include "allsensors.h" #include "engine_math.h" @@ -14,18 +15,25 @@ #include "efi_gpio.h" #include "advance_map.h" #include "sensor.h" +#include "mocks.h" + +using ::testing::FloatNear; TEST(misc, testMafFuelMath) { WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); - extern fuel_Map3D_t veMap; - veMap.setAll(75); - engineConfiguration->fuelAlgorithm = LM_REAL_MAF; engineConfiguration->injector.flow = 200; - setAfrMap(config->afrTable, 13); - auto airmass = getRealMafAirmass(200, 6000 PASS_ENGINE_PARAMETER_SUFFIX); + MockVp3d veTable; + // Ensure that the correct cell is read from the VE table + EXPECT_CALL(veTable, getValue(6000, FloatNear(70.9814f, EPS4D))) + .WillOnce(Return(75.0f)); + + MafAirmass dut(veTable); + INJECT_ENGINE_REFERENCE(&dut); + + auto airmass = dut.getAirmassImpl(200, 6000); // Check results EXPECT_NEAR(0.277777f * 0.75f, airmass.CylinderAirmass, EPS4D); From 5e681cac1a802f007f15d5736d9ceb1065c0aaad Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 23 Jul 2020 02:51:08 -0700 Subject: [PATCH 004/182] add new options --- firmware/controllers/actuators/gppwm/gppwm_channel.cpp | 5 +++++ firmware/controllers/algo/rusefi_enums.h | 2 ++ firmware/integration/rusefi_config.txt | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/actuators/gppwm/gppwm_channel.cpp b/firmware/controllers/actuators/gppwm/gppwm_channel.cpp index b643092249..d975c5a789 100644 --- a/firmware/controllers/actuators/gppwm/gppwm_channel.cpp +++ b/firmware/controllers/actuators/gppwm/gppwm_channel.cpp @@ -7,6 +7,7 @@ #include "expected.h" #include "sensor.h" #include "map.h" +#include "engine_math.h" EXTERN_ENGINE; @@ -27,6 +28,10 @@ expected readGppwmChannel(gppwm_channel_e channel DECLARE_ENGINE_PARAMETE return Sensor::get(SensorType::Clt); case GPPWM_Iat: return Sensor::get(SensorType::Iat); + case GPPWM_FuelLoad: + return getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE); + case GPPWM_IgnLoad: + return getIgnitionLoad(PASS_ENGINE_PARAMETER_SIGNATURE); default: return unexpected; } diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index ed4f81e8d2..891a0fb55f 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -952,6 +952,8 @@ typedef enum __attribute__ ((__packed__)) { GPPWM_Map = 1, GPPWM_Clt = 2, GPPWM_Iat = 3, + GPPWM_FuelLoad = 4, + GPPWM_IgnLoad = 5, } gppwm_channel_e; typedef enum __attribute__ ((__packed__)) { diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index c443ec0b74..eeae813e95 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -289,8 +289,8 @@ struct spi_pins end_struct -#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT" -custom gppwm_channel_e 1 bits, U08, @OFFSET@, [0:1], @@gppwm_channel_e_enum@@ +#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" +custom gppwm_channel_e 1 bits, U08, @OFFSET@, [0:2], @@gppwm_channel_e_enum@@ struct gppwm_channel output_pin_e pin;+Select a pin to use for PWM or on-off output.; From 2a1d076a3186ae01d35c85be7632d856f8535e9b Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 23 Jul 2020 02:54:24 -0700 Subject: [PATCH 005/182] table Y axes --- firmware/tunerstudio/rusefi.input | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 2bcc8400ac..dc6be42fb4 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -363,10 +363,10 @@ enable2ndByteCanID = false time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 From 9d4f10df05a82ac97a1a2f9507b07b4b3c4dbc7f Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Thu, 23 Jul 2020 11:03:07 -0700 Subject: [PATCH 006/182] enum names --- .../kinetis/config/controllers/algo/auto_generated_enums.cpp | 4 ++++ firmware/controllers/algo/auto_generated_enums.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp index c1716c340d..c33a1762a9 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp +++ b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp @@ -778,6 +778,10 @@ case GPPWM_Map: return "GPPWM_Map"; case GPPWM_Tps: return "GPPWM_Tps"; +case GPPWM_FuelLoad: + return "GPPWM_FuelLoad"; +case GPPWM_IgnLoad: + return "GPPWM_IgnLoad"; } return NULL; } diff --git a/firmware/controllers/algo/auto_generated_enums.cpp b/firmware/controllers/algo/auto_generated_enums.cpp index 0b31355cb7..3290b2a344 100644 --- a/firmware/controllers/algo/auto_generated_enums.cpp +++ b/firmware/controllers/algo/auto_generated_enums.cpp @@ -916,6 +916,10 @@ case GPPWM_Map: return "GPPWM_Map"; case GPPWM_Tps: return "GPPWM_Tps"; +case GPPWM_FuelLoad: + return "GPPWM_FuelLoad"; +case GPPWM_IgnLoad: + return "GPPWM_IgnLoad"; } return NULL; } From 09d14a48619f6aea3e5924ab5e0cffbdd1781fb0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 16:59:47 -0400 Subject: [PATCH 007/182] proxy progress - getting REALLY close?! --- .../com/rusefi/LocalApplicationProxy.java | 5 +- .../rusefi/io/tcp/BinaryProtocolProxy.java | 25 +++----- .../rusefi/io/tcp/BinaryProtocolServer.java | 23 +++++-- .../java/com/rusefi/io/tcp/ServerHolder.java | 15 +++++ .../com/rusefi/server/ApplicationRequest.java | 2 - .../com/rusefi/server/ControllerInfo.java | 2 - .../com/rusefi/tools/online/HttpUtil.java | 2 +- .../java/com/rusefi/tools/ConsoleTools.java | 2 +- .../main/java/com/rusefi/server/Backend.java | 1 + .../com/rusefi/server/BackendLauncher.java | 7 +-- .../java/com/rusefi/ts_plugin/RemoteTab.java | 60 ++++++++++++------- 11 files changed, 89 insertions(+), 55 deletions(-) create mode 100644 java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java index 099b2653ba..2d4f6a2a0d 100644 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java @@ -4,6 +4,7 @@ import com.opensr5.Logger; import com.rusefi.io.IoStream; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; +import com.rusefi.io.tcp.ServerHolder; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.rusEFISSLContext; @@ -29,7 +30,7 @@ public class LocalApplicationProxy { * @param authenticatorPort local port we would bind for TunerStudio to connect to * @param httpPort */ - static void startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int authenticatorPort, int httpPort) throws IOException { + public static ServerHolder startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int authenticatorPort, int httpPort) throws IOException { HttpResponse httpResponse = HttpUtil.executeGet(ProxyClient.getHttpAddress(httpPort) + ProxyClient.VERSION_PATH); String version = HttpUtil.getResponse(httpResponse); logger.info("Version=" + version); @@ -40,7 +41,7 @@ public class LocalApplicationProxy { LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest); localApplicationProxy.run(authenticatorToProxyStream); - BinaryProtocolProxy.createProxy(logger, authenticatorToProxyStream, authenticatorPort); + return BinaryProtocolProxy.createProxy(logger, authenticatorToProxyStream, authenticatorPort); } public void run(IoStream authenticatorToProxyStream) throws IOException { diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index 7cbaac625d..c2d0f6a6d8 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -15,30 +15,23 @@ import static com.rusefi.binaryprotocol.BinaryProtocolCommands.COMMAND_PROTOCOL; import static com.rusefi.config.generated.Fields.TS_PROTOCOL; public class BinaryProtocolProxy { - public static void createProxy(Logger logger, IoStream targetEcuSocket, int serverProxyPort) { - Function clientSocketRunnableFactory = new Function() { - @Override - public Runnable apply(Socket clientSocket) { - return new Runnable() { - @Override - public void run() { - try { - TcpIoStream clientStream = new TcpIoStream("[[proxy]] ", logger, clientSocket); - runProxy(targetEcuSocket, clientStream); - } catch (IOException e) { - logger.error("BinaryProtocolProxy::run" + e); - } - } - }; + public static ServerHolder createProxy(Logger logger, IoStream targetEcuSocket, int serverProxyPort) { + Function clientSocketRunnableFactory = clientSocket -> () -> { + try { + TcpIoStream clientStream = new TcpIoStream("[[proxy]] ", logger, clientSocket); + runProxy(targetEcuSocket, clientStream); + } catch (IOException e) { + logger.error("BinaryProtocolProxy::run" + e); } }; - BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null); + return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null); } public static void runProxy(IoStream targetEcu, IoStream clientStream) throws IOException { /* * Each client socket is running on it's own thread */ + //noinspection InfiniteLoopStatement while (true) { byte firstByte = clientStream.getDataBuffer().readByte(); if (firstByte == COMMAND_PROTOCOL) { diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 910340293c..55115aeb9d 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -10,6 +10,7 @@ import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; import com.rusefi.io.commands.HelloCommand; import com.rusefi.server.rusEFISSLContext; +import com.rusefi.shared.FileUtil; import java.io.*; import java.net.ServerSocket; @@ -75,24 +76,33 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { /** * Starts a new thread - * - * @param port server port to accept connections + * @param port server port to accept connections * @param threadName * @param socketRunnableFactory method to invoke on a new thread for each new client connection * @param logger * @param serverSocketCreationCallback this callback is invoked once we open the server socket + * @return */ - public static void tcpServerSocket(int port, String threadName, Function socketRunnableFactory, final Logger logger, Listener serverSocketCreationCallback) { - tcpServerSocket(logger, socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); + public static ServerHolder tcpServerSocket(int port, String threadName, Function socketRunnableFactory, final Logger logger, Listener serverSocketCreationCallback) { + return tcpServerSocket(logger, socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); } - public static void tcpServerSocket(Logger logger, Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { + public static ServerHolder tcpServerSocket(Logger logger, Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { ServerSocket serverSocket = nonSecureSocketFunction.apply(port); + + ServerHolder holder = new ServerHolder() { + @Override + public void close() { + super.close(); + FileUtil.close(serverSocket); + } + }; + if (serverSocketCreationCallback != null) serverSocketCreationCallback.onResult(null); Runnable runnable = () -> { try { - while (true) { + while (!holder.isClosed()) { // Wait for a connection final Socket clientSocket = serverSocket.accept(); logger.info("Binary protocol proxy port connection"); @@ -103,6 +113,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } }; new Thread(runnable, threadName).start(); + return holder; } @SuppressWarnings("InfiniteLoopStatement") diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java new file mode 100644 index 0000000000..134ff36247 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java @@ -0,0 +1,15 @@ +package com.rusefi.io.tcp; + +import java.io.Closeable; + +public class ServerHolder implements Closeable { + private boolean isClosed; + + public void close() { + isClosed = true; + } + + public boolean isClosed() { + return isClosed; + } +} diff --git a/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java b/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java index 6d8e12d801..dc8e8a73a6 100644 --- a/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java +++ b/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java @@ -2,8 +2,6 @@ package com.rusefi.server; import com.rusefi.tools.online.HttpUtil; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import java.util.Objects; diff --git a/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java b/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java index 65ed561dd2..8010487e26 100644 --- a/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java +++ b/java_console/io/src/main/java/com/rusefi/server/ControllerInfo.java @@ -3,8 +3,6 @@ package com.rusefi.server; import com.rusefi.tools.online.HttpUtil; import org.jetbrains.annotations.NotNull; import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; -import org.json.simple.parser.ParseException; import java.util.Objects; diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java index 3b65b97571..702d656aac 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java @@ -15,7 +15,7 @@ import java.io.IOException; public class HttpUtil { // todo: migrate proxy http json API server to TLS public static final String RUSEFI_PROXY_JSON_PROTOCOL = "http://"; - public static final int HTTP_PORT = 8001; + public static final int PROXY_JSON_API_HTTP_PORT = 8001; /** * hostname of PROXY server, not primary rusEFI web server - those are two separate hosts at the moment */ diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 3ad6109eae..6824f9fb64 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -62,7 +62,7 @@ public class ConsoleTools { registerTool("compile_fsio_line", ConsoleTools::invokeCompileExpressionTool, "Convert a line to RPN form."); registerTool("compile_fsio_file", ConsoleTools::runCompileTool, "Convert all lines from a file to RPN form."); - registerTool("proxy_server", BackendLauncher::start, "NOT A USER TOOL"); + registerTool("proxy_server", a -> BackendLauncher.start(), "NOT A USER TOOL"); registerTool("network_connector", NetworkConnectorStartup::start, "Connect your rusEFI ECU to rusEFI Online"); registerTool("network_authenticator", LocalApplicationProxy::start, "rusEFI Online Authenticator"); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 48c1ec2579..1f015308ea 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -33,6 +33,7 @@ import static com.rusefi.Timeouts.SECOND; /** * See NetworkConnectorStartup + * @see BackendLauncher */ public class Backend implements Closeable { public static final int SERVER_PORT_FOR_CONTROLLERS = 8003; diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java index 002af62898..c1505dd795 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java @@ -4,24 +4,21 @@ import com.opensr5.Logger; import com.rusefi.LocalApplicationProxy; import com.rusefi.tools.online.HttpUtil; -import java.net.MalformedURLException; - public class BackendLauncher { /** * need this method to be not in Backend class for console to work without all backend classes */ - public static void start(String[] args) throws MalformedURLException { + public static void start() { /* todo rusEFISSLContext.setupCertificates(new File("keystore.jks"), System.getProperty("RUSEFI_PROXY_PASSWORD")); */ UserDetailsResolver userDetailsFunction = new JsonUserDetailsResolver(); - Backend backend = new Backend(userDetailsFunction, HttpUtil.HTTP_PORT, Logger.CONSOLE); + Backend backend = new Backend(userDetailsFunction, HttpUtil.PROXY_JSON_API_HTTP_PORT, Logger.CONSOLE); backend.runApplicationConnector(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, parameter -> { }); backend.runControllerConnector(Backend.SERVER_PORT_FOR_CONTROLLERS, parameter -> { }); - } } diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 99ff85f18d..27286cecf9 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -1,18 +1,24 @@ package com.rusefi.ts_plugin; +import com.opensr5.Logger; import com.rusefi.LocalApplicationProxy; import com.rusefi.NamedThreadFactory; import com.rusefi.SignatureHelper; import com.rusefi.autoupdate.AutoupdateUtil; +import com.rusefi.server.ApplicationRequest; import com.rusefi.server.ControllerInfo; +import com.rusefi.server.SessionDetails; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; import com.rusefi.tools.online.PublicSession; +import com.rusefi.ui.AuthTokenPanel; import com.rusefi.ui.util.URLLabel; import org.putgemin.VerticalFlowLayout; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.IOException; import java.util.List; import java.util.concurrent.Executor; @@ -37,7 +43,7 @@ public class RemoteTab { refresh.addActionListener(e -> requestListDownload()); JTextField applicationPort = new JTextField(); - String portProperty = getConfig().getRoot().getProperty(APPLICATION_PORT, Integer.toString(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS)); + String portProperty = getLocalPort(); applicationPort.setText(portProperty); @@ -52,25 +58,19 @@ public class RemoteTab { requestListDownload(); } - private void requestListDownload() { - listDownloadExecutor.execute(new Runnable() { - @Override - public void run() { - List userDetails; - try { - userDetails = ProxyClient.getOnlineApplications(HttpUtil.HTTP_PORT); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - showList(userDetails); - } - }); - } catch (IOException e) { - e.printStackTrace(); - return; - } - System.out.println(userDetails); + private String getLocalPort() { + return getConfig().getRoot().getProperty(APPLICATION_PORT, Integer.toString(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS)); + } + private void requestListDownload() { + listDownloadExecutor.execute(() -> { + List userDetails; + try { + userDetails = ProxyClient.getOnlineApplications(HttpUtil.RUSEFI_PROXY_JSON_PROTOCOL); + SwingUtilities.invokeLater(() -> showList(userDetails)); + } catch (IOException e) { + e.printStackTrace(); + return; } }); } @@ -92,7 +92,27 @@ public class RemoteTab { userPanel.add(new URLLabel(SignatureHelper.getUrl(controllerInfo.getSignature()))); - userPanel.add(new JButton("Connect")); + JButton connect = new JButton("Connect"); + connect.addActionListener(event -> { + + SessionDetails sessionDetails = new SessionDetails(controllerInfo, AuthTokenPanel.getAuthToken(), + Integer.parseInt(oneTimePasswordControl.getText())); + + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails().getUserId()); + + try { + LocalApplicationProxy.startAndRun(Logger.CONSOLE, + LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, + applicationRequest, + HttpUtil.PROXY_JSON_API_HTTP_PORT, + Integer.parseInt(getLocalPort())); + } catch (IOException e) { + // todo: proper handling + e.printStackTrace(); + } + + }); + userPanel.add(connect); return userPanel; } From ea19cd47ae61e498bd6de71aebb01dc57a95e114 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Thu, 23 Jul 2020 23:54:40 +0000 Subject: [PATCH 008/182] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 4 ++-- .../controllers/algo/rusefi_generated.h | 8 +++---- ...ngine_configuration_generated_structures.h | 4 ++-- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 8 +++---- .../controllers/generated/signature_all.h | 6 ++--- .../generated/signature_frankenso_na6.h | 6 ++--- .../controllers/generated/signature_kin.h | 6 ++--- .../controllers/generated/signature_mre_f4.h | 6 ++--- .../controllers/generated/signature_mre_f7.h | 6 ++--- .../generated/signature_prometheus_405.h | 6 ++--- .../generated/signature_prometheus_469.h | 6 ++--- .../generated/signature_proteus_f4.h | 6 ++--- .../generated/signature_proteus_f7.h | 6 ++--- firmware/tunerstudio/generated/cache.zip | Bin 841913 -> 842300 bytes firmware/tunerstudio/generated/rusefi.ini | 22 +++++++++--------- .../generated/rusefi_frankenso_na6.ini | 22 +++++++++--------- .../tunerstudio/generated/rusefi_kinetis.ini | 22 +++++++++--------- .../tunerstudio/generated/rusefi_mre_f4.ini | 22 +++++++++--------- .../tunerstudio/generated/rusefi_mre_f7.ini | 22 +++++++++--------- .../generated/rusefi_prometheus_405.ini | 22 +++++++++--------- .../generated/rusefi_prometheus_469.ini | 22 +++++++++--------- .../generated/rusefi_proteus_f4.ini | 22 +++++++++--------- .../generated/rusefi_proteus_f7.ini | 22 +++++++++--------- .../com/rusefi/config/generated/Fields.java | 8 +++---- java_console/rusefi.xml | 2 +- 29 files changed, 147 insertions(+), 147 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 15b818b643..14c7b64b27 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Jul 22 19:41:17 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Thu Jul 23 23:54:04 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3530,4 +3530,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Jul 22 19:41:17 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Thu Jul 23 23:54:04 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 3665dbfe00..3a8b43ceb8 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -658,7 +658,7 @@ #define gppwm4_pwmFrequency_offset 4410 #define gppwm4_rpmBins_offset 4424 #define gppwm4_table_offset 4432 -#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT" +#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" #define gppwm_channel_size 88 #define GPPWM_CHANNELS 4 #define GPPWM_LOAD_COUNT 8 @@ -1074,8 +1074,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3833170085 +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 2227197319 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1343,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.22.kin.3833170085" +#define TS_SIGNATURE "rusEFI 2020.07.23.kin.2227197319" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 70c3e63e8d..58115ec4a6 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3530,4 +3530,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 6f7e5a9f56..db6577f2f3 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 135b7662b1..700777625f 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index ef9557d3a5..ff26cbe54e 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 4d2821901f..52bcbabc02 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 778699efa7..2d5589ec73 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -658,7 +658,7 @@ #define gppwm4_pwmFrequency_offset 4410 #define gppwm4_rpmBins_offset 4424 #define gppwm4_table_offset 4432 -#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT" +#define gppwm_channel_e_enum "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" #define gppwm_channel_size 88 #define GPPWM_CHANNELS 4 #define GPPWM_LOAD_COUNT 8 @@ -1074,8 +1074,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 692540479 +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 1241418013 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1343,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.22.all.692540479" +#define TS_SIGNATURE "rusEFI 2020.07.23.all.1241418013" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 65f52e49ce..e6553d4b8b 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 692540479 -#define TS_SIGNATURE "rusEFI 2020.07.22.all.692540479" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 1241418013 +#define TS_SIGNATURE "rusEFI 2020.07.23.all.1241418013" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index f3dea3c05d..dfee3f1ed0 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 4156569820 -#define TS_SIGNATURE "rusEFI 2020.07.22.frankenso_na6.4156569820" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 2541348350 +#define TS_SIGNATURE "rusEFI 2020.07.23.frankenso_na6.2541348350" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 02414ee618..e1d3ec6593 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3833170085 -#define TS_SIGNATURE "rusEFI 2020.07.22.kin.3833170085" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 2227197319 +#define TS_SIGNATURE "rusEFI 2020.07.23.kin.2227197319" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index ee04715c9a..364a50f0be 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 1622770353 -#define TS_SIGNATURE "rusEFI 2020.07.22.mre_f4.1622770353" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 24467 +#define TS_SIGNATURE "rusEFI 2020.07.23.mre_f4.24467" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 7e6cf57e7c..b3e25944a5 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 1622770353 -#define TS_SIGNATURE "rusEFI 2020.07.22.mre_f7.1622770353" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 24467 +#define TS_SIGNATURE "rusEFI 2020.07.23.mre_f7.24467" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 951d6e1ab6..d3e4a195ec 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3696987323 -#define TS_SIGNATURE "rusEFI 2020.07.22.prometheus_405.3696987323" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 3168948633 +#define TS_SIGNATURE "rusEFI 2020.07.23.prometheus_405.3168948633" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 93f1cdbacd..fcac79cf3f 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 3696987323 -#define TS_SIGNATURE "rusEFI 2020.07.22.prometheus_469.3696987323" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 3168948633 +#define TS_SIGNATURE "rusEFI 2020.07.23.prometheus_469.3168948633" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index fef0319235..e3cf60b6b4 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 2765497840 -#define TS_SIGNATURE "rusEFI 2020.07.22.proteus_f4.2765497840" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 3295672530 +#define TS_SIGNATURE "rusEFI 2020.07.23.proteus_f4.3295672530" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index a9279fabbd..dbde7ff7b5 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.22 -#define SIGNATURE_HASH 2765497840 -#define TS_SIGNATURE "rusEFI 2020.07.22.proteus_f7.2765497840" +#define SIGNATURE_DATE 2020.07.23 +#define SIGNATURE_HASH 3295672530 +#define TS_SIGNATURE "rusEFI 2020.07.23.proteus_f7.3295672530" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index bb90ae23003a017aebc6996f2f71db35213bba09..cca79cfb87571619154007dac339e5f5632b0f30 100644 GIT binary patch delta 291404 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 z zhU96;&(1`09irtb?j(^Ed`)$)IyRxP^}^8T{*|JD-Puip!1VBHi~_? zNQby@r*X2$kEF4nkTI4X`l)3TA~KArJY-3_Q@t1VUN6MBgxVf-Q94t8THX1^J!HDb zDKf&4JQ!=Dw@xMXb3A`v29rd_#AH9DYV~zRZXlNDm!lk7fPqQl6b;{~eJspdQAx&) zQygat^aqu!l#heVi2^cHliS@iu*Bt9d6!cChUqSp%WU)+Pk*5CBY!(uO)_9+B31Du z5%y8^6CacFP=p8=5QR+p8~f0wxmk2!ds-O8W)Go`0Z5{7dwNhBZVV#)IU-f0g!l1F zFJ;{R#G6;sy5AlJKr>Si@NwCK{InBFe#{WxtWZA)Lvog(j@%gcaNo+HYcYsl@a^Fs zDp*k!+a{!UO+LhNe|SzYb)a@>2m|(?*q19g z#br7E6k(hkllt#snOcHNQt{HoaP-vk1P_+6WC^yqbp*xJijGh7{TonF=`Bhxaa5&U%nmBP^HK zSdeR6ChA&-(K5yL;zyly-n|*@PDyN0xPwxWFMAbT*zn-xMsZ{tSqTVNiS6xgfBvvL z-LNwFT}c{^j7BT0sFPekx$T=0BvvR3ZFoTHHEenyGxj2?`Nbcptj(wcv0cOzMsD%x zW5cjYY)BoM*Q{LMg{${Afybm9g6w`=nL_U@KKDawI%V)n29}Dvf{3Ro*o5P6#{<0+ z&!)K(o|WijiwrZ$!(rejxhuQ=ap4lZ3(R6#xOf0roSf+|fMj4+2#u|05 zP5q?_X2bnuq<)0l$AJ>rr3Hs2slX;}&1@O^oOM}@#xaq#x0de*6BnH zF5?WNTc7B}uk+XCel#mcS&YWO?27!Ef4a(x)$!X5#v|{i-^N?-Nxemcfi2Zfg2D(b zBOx~p5E81?&v%ZvC=R~QVBg$ziD)^mnaIwBa$c_TM$>PYp@eZpMQ{eZKc|+Yq=Mzl zbL8y3ndNedi=ckq%f-~o#nL-W%IPL}6V*l6NGxu4(A`7aS>>tlA|}R}E;EN~SO6cpk$=bu}*g}J?BH`8iB`l`KED!G?G}c=^_N%n=SH4*_MGoY} z-Xd+s{PY@gZQ{sPskQxF(-q<0!zh2^S=;#M!-bi-DxY-L`I)&)AGO=-AVsr>Qa9c(b7t-4JRqONyhb?7Zv<*+=eK8r(Uw1Iyn%TC?xpZYRwK zFV=VY^4$68PMMhbV>@5ZMGlSZE$|eSQ(8ED6T5Dhz@XfPezZc^(1^Zn#0^RA3dTN!z;_8Nk*e~0U^ z9VL!|)JlUg-N0;b;+msq2WQh-(8mV_H!7(wa>SJa6PzQH;AtO5@{IRMg zZ1j~G2UTd6In}HjM-2yYS!X=lh%IMHn{X`d*R{~Rn3z!kGP6C$L$`fMq4Vxr6x)et z6g3~MC78-DF+Z2RONy^E@{_d}`3G0MapME+!%?SSS$-JwnAyL72aA}v>>tzr_Ry-u zK!>Rr*Z-H<+H^fMN^z9eSWGb7i}lt*4XuRFSKu=3Y3LV{7GsRf>0uwzGo-UG+_ENd729zHFl%dS5WgG`A9*~+*bQ1@C~ zo2Bc0IaowyOK(jPpLaONNIq#Y?cJC9gTUjtqpX4lTT?^-oCj;R;~?m3<1gaj7|kSu zcM;vuY_A3_*3a+nX*}_K%mt#I*sodyRz@HKv>|7UI3 z4-}N4+9&Ddx$UeyH8K$4tNT~9XguR(WEi%%cG(jxqU1LDB5n%!f}Q?okw4vjQBe!$ zMCzIDD}Tn6;;t}=Ex2`}BdfW&LxT=Dp2~_!m{7I!;oj#t$&FRuxpaA=Z{on9Dy`Z} ztts+Y67h5|${dwD?l9>aPLO_zQEaxin30Kv4+|P1S0Brh{=#K(!>^^-Z&`UP9fP6o z5F0(W$ItHk`k2R73`eGiyuLkp+xzOEg0DbeV3|-HMmN3SVA;fgZib^^MqjDOfE3+G z43`cucz%(XMc*KHavJ~0 zm|-Y7vF{H(sYD?_(hkU-JX(T|Z6J_ByxcyyJGi^Ee#YrwXePZ-3B(qSr)YR5o~a|h zIpV`PK=`e+gLgyG!~v;=faj<80>(LBvN6A^M=L(t@BNG~awAZVWoo+ko2XQb_a`^8 zQFz-fgWJaSz4j5=!|6=fNWRe;xDiD9<1j{SAJ}$0>&Rc!_cox3t}T?BYrY^#gdplB zO6(sIz2_mdI4cdB#`k<^@>^84IV7CwMbsjD@A}!@?ZgN!?^5ScR$Gur%2H$fZ2sE@ z&UFCA5JK}!BhlIKO_D;MUzV=hGX_b6;VZ52P6rExf^OQCn+O5x`<-XcqUvf{_&ak* z&Emek6=WTq{m^3^HnhxYf^_U7cLc%wgScLEvf3bah1-i3t)X$j=tA{;M>UJ9LQ9$Y z$UToqu(%;zYmpPZLhBVAT1to5MDM0q%GdM8n+wAB6LaWnco^pCk7x&jv6Z6$>A?9) zLVC)`m--a<9OZWBrbdEm`m9@@6Cg(~d5mC*21vI9q~g0zZ*5+YUxq{ohFn9`WmdG; zs1!1CvQq@wWJ{ADc6jbN^9Pkv$`qcYS8RW6n`wyL`Q3cQ%o84=FL;K=cH{F7AzXT5 z=WS-%L8zTYx6VgNURE;}_UzPWW3u5N*e?@3KN!;sqwyVocBZ9S-|~#bfk&sPSDmKw zO)cD0qHx8DsHDw}={8#*+27!VG@GRve!QmK1Z@vLpA$4((ewE|CTDEOG=K6v?U z+*36Kf=P6sTz@+orNgGx5+fn7{oJ1S=*vO(T{j2scJQn>p69 zK@qy`*K3;8#MM~$Z46>~M_eqa&Rb>cS|__3{RV zOuA2{e$K&|?dsj-+q;WUi(9#p)5HhcEm4y)rS%}Wjor%Rc|)+`qJ(xaH*+N|+v8n}R2AXA zbRJrQv)M`uQ>?@jBxy!p;$iW4i~~wn3%ix=n}CD zFMJ-U4+2c% zZYp_)1u6?-g>^Y*w#b|F(P(u;&r?}N{H=bf+cCG?gl3gDLW=Y=3$gnR!-SYwHodC) z2ls~Pxt^swe+v4A=jBe@zAoLsh#$gYIe>{-gQ4mkh3+3kiJ|LhhNo42*pbJ4D zX6*-`?fkP07J~I_n4$sc4Yi>AB?;HwWQ7PWUuF;L2)-4`KQgc=&jvRX+GtWHGT@ zEx;>u`4uA1qQbigcGwYD?88z9!^Q}9{N`A#M84t2xPi>W3!=hjc=+X;cBr>^Vbclu z?gaJ*{g%(Cz*Sy=DhtqN*0E=~NlMxpzda0%oo`E=$K_m`b^08;NU&#(buq`dsl^$q zuWd)KZ*+y+##YPLeKl8H&}%Kf8S9o@>qMheq? zKG_T^beSJ*9UHjoIy&od1->ll18kp=KFkemPRqcp>Jo?yBN@gfFtDQmMduiq~3W)NaN zi0Gr}v%G;=1<6Uj?IN0pR`9e!aebbZDq4nHH|wAltzz~Y%FazF&*hikZV4W#-YMNiB8)i`Vb167WHi*T_GvWo#cSHUz%tvFnn!5d?u#iP z&xec=({jjjJ@!d`*v^P;=7d_?&YOghyIV5Do_@VK@~!&zt2JeuDg4{&PEwa9_RApG zqA7XbzF%7Giwj}B?{Agf-tBD4=WuP%GZHKNXqB@bb$ zY5i7g#Vk4c@H_IpmbLeRXyER=h{w7q`FIPWJrRsg617YEG=#bH_L34gO6d7m!)WeN zOtl6ESF(iBS^e(L^zX8@8?76w(5{z+O&4(oIT=pqNC)2$sHg_|oKj{Y%)Ye58EHGz z7BEcS=99j|K?t-?elK;*V-z9sxH$aowXUdD&B$$Q)tsK`Y<}h` zglGQSe?Mt5pPGui{ zl4!j2>i@1BB4x)UlU;!*GT4}c8BFmr5;96gf7P7H(j8pGPVALv&Jx+=jB2j%lKuRE zAQh*nZ!0|3mRxsbq5AKe28G|g-*x(ckw&*%*EI~PzCyq5EEK$5~bFM8Pg@&aK zZjB+x;er5Vy9Z@hlRT@I+%{}1n#_-QNW5B#y?-!DiMPMp*nfOe&Br!6o|z==3{sO^ z802q+G+|qfJx-!?cWe1hm!9w135P!tSA9G|k1k3%o={~%lrca;E9%u36LWjHoT_t- z6up&Ho(%fh{AS6cq_*)@y9N(v+^7B34%!}rs`MZWz7}wlfiNb6$fx!?x>-R+8)FM{8l)QMBJ<29>c~8X zunUeR0?a1OST^p62XXM9YT&MB{e_HR@8|t}TH&s`{e{+`?k8Wp>E$jkRPBf;`4Kl{ zvc5c0CI-MNQ=DW{V|e_8#qR&%=l=K18;qMcc*?|3SP{35Kyl91atg>vrUAxH7(6A; zkfJIk&2sIHB~i)bL*k1QU$$ssp_;F~K`-Xsz4D8t4dnA8^wd;{7mg4l|Apjy%Bk_2 z=a~ZRfPM8>Lo1qg>|Wx7Ud!SB)b}%FKdxbgK4QLfGP@K&OKzz)i_4tD*=PRc7mf6` zGq-1hpG&if=7rs4trT(1P!Ls%(avj!C7uqN8bKWnm7GU|Nw8Mo^WHqFcAIuvCrC0OMsBK@29E9jp#Q(Cj~ zP@&JcCr!dg5g(+`M_T>I(54?(ty329aYol4=N!k8rPnr87*lXs$>nQza{S9UJ4oSG z%}-7bSnoEo)yrTrr?nudW4899*IOmmwJsy-BxI<*q+>$L+G7~FQ+)Kn9o|(m*>1^l zipjh)NV;Pt0+2k#`@`Ov6<>nG0q?Z11dO+`R-!uo<#{Bu^UuhJ4bt%Kjojnux!MD% z&T`xtb|joiS3N4ehjBnS4DtKXZJe5q^{+Wcp0$d zIp}d|tC+&k;lX^WPRbL2QpI0W9mW65R=VoQ@nrW*>L6op#MgJGQH*;l=?=vdS<8mvxrl&?)mIx)7Au^5K4Cr%oI_|A^si?@O+=YwLn(q+u;HZitbC_>L2a~dcn3E`%2rteU1w!vZ}v4INUZd{mu^WQzqp zKMe(GlAjxeK>Coh&&0zl6jURj@6Vj7oQlI0*%vd+qGOo8;xpw&l|}6em7zD>_#an9 zFIq^f9@|DA^-L9iE3bZ$#(7a%9(K;1OREc4$wOS=c@{u$T#sG<)Z+CtP3Em46SQlO4M?K_!kRiCtHabjkH+10o&;g%vDUuo$)VkZ-Wp+w<4LhFE@C~8UJK-z4=O^wmbb{ECX+)$|K}8-Z`VVO{Ng> zy;fW(mSdq1N{f}iDmO!;N}fw6p-};&|J%IrDVx&}2Ab}n-M=01^G}ToSs&0Nn-Fnv ze^EJf6R1Q5S5!-&OL_!1u+lgD8WS~V4r0m1lktQ664frpIfColzdO{Mttr8gDWWKLjS9 z6PmLZea#G-lMJiV^{^jZK4)BmP5AQN^ z&S%Ezlf0I#3=7}=v0m07=tV7KP0?)`5nsJn3~9ebaLXhP{^aD)#_;5@p4gT-h(fFv zzdy&GaAtHcl6#vbyB<<~22V&!|F?u+P?Uo+oK_?DAs@r}oFg!XsNd$KjRb5BIhkT;hPq;gOE`o!{h(FsHCtx=u;{R)ayj9`p+PmN zxfqJ!^1jFEvuxxCqAjz)uvelyX-r`yFUSvmpYnPCk-Jb4V(fLn;+plJo+6I%ONCq@ z^u7pCDMWgWbaUB_HNEb7pvxH26Q+w10?v}coBnV#8e=Pz7PnI7BAvx};1E|Ag7 zBUWA8>qbku5N2gV|Gknz-dup0tFHO2c{8N4*Da8AVM)upnI`J+j%jL1&b(PHY6;Fq za8QCu826+&h18^e|$mt5o!~Bl;^k&Ytm7|1a6R+M85yJ23$Qzb#E?hI`S=`8SBK_nBoRE6$((d+&G4 ze?aTd(|ZJVbo{@>`hN{TtOH^l5bJws7X#5y3>0kIB< zbwI2GVjU3cfLI5_Iv~~ou?~oJK&%5|9T4k)SO>&9Al3n~4v2L?tOH^l5bJws7X#5y3>0kIB&9Al3n~4v2L?tOH^l5bJws7X#5y3>|2Glqe{1%j zgyx8X|Iw}YZ$};eUs1OOqU=AT>Q-n6?7x$R4~XLbOrQ)_h$qkf)!O&p_BtF46$~!4 zG8Y3MD)JE#_n*`2fx-?HcA&5Wg&ipDKw$?8J5bnx!VVO6ps)jl9VqNTVFwC3P}qUO z4it8vumgo1DC|IC2MRk-*nz?h6n3Dn1BD$Z>_A}$3Oi8Pfx-?HcA&5Wg&ipDKw$?8 zJ5bnx!VVO6ps)jl9VqPoKPv1vCy4Cm1b-Fw{~ADH2MRk-*nz?h6n3Dn1BD$Z>_A}$ z3Oi8Pfx-?HcA&5Wg&ipDKw$?8J5bnx!VVO6ps)jl9VqNTVFwC3P}qUO4it8vumgo1 zDC|IC2MRk-*nz?h6n3Dn1BD$Z>_A}$3Oi8Pfx-?HcA&5Wg&ipDKw$?8J5bnx!VVO6 zps)jl9VqNTVFwC3P}qUO4it8vumgo1DC|IC2MRk-*nz?h6n3Dn1BD$Z>_A}$3Oi8P zfx-?HcA&8TZ&TR0wUGq>qg(I4753kHNV5No{##+cGe8pmXYy}_9rypGutQJvkO&iw zQgHt{7ZB{pfM5p%J0REr!43#^K(GUX9T4n*U0px@!RgLuL(S-$3F)C;UsW|JMKnJ0REr!43#^K(GUX z9T4n*UkWxH%XG#?KZG<|UL;8JXhW9Q!}6 z12}fTu_ptL9dPV`V+R~N;Mf7j4mfteu>+1BaO{9%2OK-#*a625ICj9X1CAYV?0{nj z96R9H0mlwFcEGU%jva99fMW+7JK)#>#|}7lz_A049dPV`V+R~N;Mf7j4mfteu>+1B zaO{9%{|}B``NnXvphx7my6{b?`N8WOS9;E#@lyXU*}U4DRB<~o0Rq1*O=pIC(aZTa zh_CmVWh5)kpZ;?*_kVNjurMqM?PQeDQUW+abfUj1`+p6fvICVJsO&&x2P!*I*@4Oq zRCb`U1C<@9>_BA)Dmzfwfyxe4cA&BYl^v+;KxGFiJ5bqy$_`X^pt1v%9jNR;Wd|xd zP}zaX4peravICVJsO&&x2P!*I*@4OqRCb`U1C<@9>_BA)Dmzfwfyxe4cA&BYl^v+; zKxGFiJ5bqy$_`X^pt1v%9jNR;Wd|xdP}zaX4peravICVJsO&&x2P!*I*@4OqRCb`U z1C<@9>_BA)Dmzfw|F@~^Ivl7J3B=^s(BUo&0xV1zW=$AopySt2mu`Bzn%7f-en~@IypY%1qW*o zt}w$3YFh-=nGO4zsY~pWTM36P(zHg`|I^-`M>TQnaR46@)?`4Cu*s?vf+9j(*j(y{ zs340)T#;w3P)r3>z>4n>6s;RAYSa-#sDRk22v!6&D8wCwfK*nC6-5LoOF^p^(Ki9l zli{TOj_v5_2HN2_nVM#z)V$U+!64l@=*W`20!mCb5 z7Yio`XFXk4<>)M|Za5XN{cMz`tgh8X7$&Q&vX3i1XP_4Gt}!)HP@>y%IlX{oQ@u@7)zcYH43N7IRWsnCzCHOUUA*n{wyyG&YE4YKX?9WzPQ&PCJ}-5uA27 z?Qq)Rw8LqK(+;N{PCJ}-IPGxS;k3hPhtm$H9Zox(b~x>D+TparX@}DeryWi^oOU?v zaN6Ot!)b@p4yPSXJDhen?Qq)Rw8LqK(+;N{PCJ}-IPDCl-SeM0?M0Vg`h0NODcfRo zC$13y-Ks$hT0PO(U0ki{X2ha|n9Y8yPb^z@F+5xl!Xa~>^pdCOv zfOY`w0NMex184`(4xk-CJAifo?Eu;Vv;$}d&<>y-Ks$hT0PO(U0ki{X2ha|n9Y8yP zb^z@F+5xl!Xa~>^pdCOvfOY`w0NMex184`(4xk-CJAifo?Eu;Vv;$}d&<>y-Ks$hT z0PO(U0ki{X2ha|n9Y8yP_Kyi@r?=UoXrO&2V{g5FlwICLqwGEdn+7=S@@Cp$H$6B( zWAwm~ev4hceP48jBv7)AAY#|B2)_8PML)$pa1%dJ?7s$26YV=~$L2i_F}`@YyfM}5 zRn1}Zyi-c!&9>M}Z6hS2j2a`}Pmf;x!d>{_jpkj~CZ(^t?wCeS*;M6sGwDR>$)*0< zZ$s{jU$zy$NuM{X_Grq+Yok-EpAETrV~6GIaK8%EZ4vJL%Db~8B9acR^f?gBYgs@3 z*|Ip-YFnSfJ%FE4sUF7^;QA>C2ZiACg zWENA|Gq%TCrJ5y_xdrjczgTqrQrH>y7Qoal>>?$6uSfzJ1BNg z?4Z~|v4dg<#SV%c6gwz(Q0$=CL9v5k2gMGG9TYn#c2Mk~*g>&_Vh6&_Vh6&_Vh631VKmiSa{`pu@}|i)oaqCbC^Cw@RZG5Y z-v@%7G8xGkGcYJ0_&V_QZ$(?Sd2VX)4tt)mqIt`^onFHW#w(v| z2#%b|preyUkfLlkk{Ya5VePly3iqMz2|yr};+uhir{|kaJ3QkeE6qi{;ziHUvsZ_gtVv1BwAw4VreDeXGZIg=Od*I_o}X)(K}DbGvmxlL6^{4LwL zLF2iBqb_HsZ=T@m@zt`!v2LC}C#LHNfv*E!uK~Ued>!~Y@O9wpz}JDV178Qe4tyQ> zI`DPi>%iB6uLEBPz7BjH_&V@);OoHGfv*E!2fhw`9r!x%b>Qp3*MYACUkAPpd>!~Y z@O9wpz}JDV17Bz0>)x*d?)`B6(~h%0I`3Hd+qhSee8KgKtj&kgoEAPY-`kw9W#Z%D z71gpE+-%oI!@e72u)|=7!488R z20ILP80;|EVX(tshrtem9R@oLb{On1*kQ24V28mDgB=Dt40agoFxX+R!(fNO4uc&A zI}COh>@e72u)|=7!488R20ILP80;|EVX(tshrtem9R@oLb{On1*kQ24V28mDgB=Dt z40agoFxX+R!(fNO4ukz;GuX%JbEh))*85|~wuV%g4M%%mOdrOs z%f#4Oge9Rv<(wxC#qCKt1EZm`AB4&dmHkc7yy^+lg63!o=B~cj=Cm@AJPkR*Ww=*cYrZF>0Qdw93tI_M5t>W{BK)b>#}xUc~g3BsoGKNsP%0JFU*(39r4rd z`n;}f$_$C5TisG?*?*%_)%{= z-tCD#y<6w8=}(V#T0GHc3pH9&-VyV8@rev~zt#C!vqip8*`czhLuH4`4wW4$J5+Y4 z>`>XEvO{Hu$_|wsDmzqmsO(VLp|V3|hsq9>9V$CicBt%7*`cySWrxZRl^rTORCcKB zP}!lfLuH4`4wW4$J5+Y4>`>VmD!b=DQ`xUDRCX#TjqAWQr8)NZ2RL?c?BLkJv4dj= z#}1Ai96LC6aO~jN!Lfs52geSM9UMD2c5v+A*uk-bV+Y3$jvX93ICgOC;Ml>jgJTEB z4vrlhJ2-Z5?BLkJv4dj=#}1Ai96LC6aO~jN!Lfs52geSM9UMD2c5v+A*uk-bV+Y3$ zjvX93ICgOC;Ml>jgJTEB4vrlhJ2-Z5?BLkJv4dj=#}1Ai96LC6aO~jN!Lfs52gm*~ zaqRRqdsMszIhnDyUO&e!Za)@Y{JKbt;{0`b#+3% zdtY>hBv7)AAY#|B2n#}o5Qc=ViU?URZb&j?ba}>vYr+#*IoNI0nPOvQu}0aqx-l%b z^2LzO*E7PKh9zH!bY9;Y-cRVSp2g_DD`p02BMbQV@O zoC?@}HcC@g*Xkk+lhsz)#}%J5P>Xoin3^ak(QUb$Ucj;`N$l(?Bl-C@Lu?DW1#Bl@INlFwD14sK?RZr$y4%(~ETHF6S3!}RWYtiE zHg^|^a|7QmH?p<8qkDgrT}VdfsHNHudIZa@-lmvn{hlc;i>Y{{WEou^z<2QX?usF` zw67eCIVmkncFWHtWbx5WxpR0L8$>fTL}Su2=YI!}{UAJccGV^hsU)?WAvn8@z7a`7-~U?}=PVMv?3N$x9a0dd_`#wQ9NV)6sSH%U4Qj)x4jR zD%_2q?_0R|!kJvX{Tr7_?(1_+;wqP)JXv-xG+8$CcJJ|;P@}xlCc9O{!#Ukf)uEU~bjg3#0T2ej>v*Yh3Q#>~C*@CISSvuLZD_QTGXa=1P*DzMkSvVGOOwkTo9OQ~yH zUa6$o+w3gCci{y`0lr-@1azjQED~cX*?>*8~FgUM(apFqECyYGhH_Bou$)mJ?CiQiBgX*DE zspWS_W2LE7YB4!RVf({k(wN;Iq(YrJMt4*GGs&Se3rJ&yv2$eyCq>lR6HHay`-(*|h`_gt2gNv0j~&#U0XCSMM+CWbaz2 zN(p|T>)3OLG*lSYSFZC?Rk0F}M}0qB>3y||dhDy#J3v*Opg)3&Eg-c83Znj|(uC#x zqkLCGFQLJymj=zMEn`*>QGb?@<8<{0)k!B&Q%mXjyiYAFB`4S`X!qeKbbeYvFUD)? z1mVo+bPrWjN={XnBv!2+ORr@@i9Q63q+-fmM!GmC8foBSwq_)a_NAnyqzNUjT%ag* z;1rK$q)w_<6HARvs4V)+r%x{~0|l30(p`EP#!gWeb4^Sr*;RU`6-6DDM>$Scr>5z# ztf>?!IZR=gPB|UMouN*JPgi%8FJ}dPF(#SMINw@2lOEuGt%Gxm2F)_F)@Q})ltZz) zy}VANL3PrZR9~HA1R9j@SyGo;bC(>ht0=6m(8lo^lyriI2^HGQ=JZ#qD7LTK3lsXf zG^2brvkc`WD~SA?lD9kd4K+$prgTujHjImPs6azpG{Ug|W;JY3#dIoVQAtlmjU`9y zX=zG5EFyJv6-8~9NA2QssNo|yhVon1aD`#5bQo*ONNV^!a-2XxKa3JB87De)RA1-T z@)8wg4qU&?63ufs;%PR9|6RYve^q6m0hf~IlZO4bDn(&^W$GAnshsn4Sl_*BY6P1n zUoDEl<>j)kn{dT@ZAVaHHXKd)$twu_o3ay4-w)RJ#T}e0e?Mwq;Z}@GmYL3_glSwG z`RU2uup0QgDu4Cr@Kt&?9@Ce#nj9lg5a3hll47=*MG&6a1Tlrt^*$|9++b@>Wmc1B z3RC63y>w>ZXC5OpR)?e-RFo%Ck=i70oZ?esTo4OJ`dc09>l%_jtp9vf=%0FmxJv(- NO{d=&J4Dj|{RfJ5iVOe% delta 290740 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 diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 13d4d576a1..07781fbfe9 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.all.692540479" + signature = "rusEFI 2020.07.23.all.1241418013" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.all.692540479" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.all.1241418013" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 35f7da6009..e02d02691d 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.frankenso_na6.4156569820" + signature = "rusEFI 2020.07.23.frankenso_na6.2541348350" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.frankenso_na6.4156569820" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.frankenso_na6.2541348350" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:10 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:57 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 9bf176b70a..bfb5a0203c 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.kin.3833170085" + signature = "rusEFI 2020.07.23.kin.2227197319" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.kin.3833170085" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.kin.2227197319" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Wed Jul 22 19:41:17 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Thu Jul 23 23:54:04 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 5d5167fcc2..e2de2ec9bc 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.mre_f4.1622770353" + signature = "rusEFI 2020.07.23.mre_f4.24467" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.mre_f4.1622770353" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.mre_f4.24467" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:09 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:56 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 54e84e4549..ce787a670f 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.mre_f7.1622770353" + signature = "rusEFI 2020.07.23.mre_f7.24467" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.mre_f7.1622770353" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.mre_f7.24467" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:05 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:55 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index c34e62a29c..19d7f8dce7 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.prometheus_405.3696987323" + signature = "rusEFI 2020.07.23.prometheus_405.3168948633" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.prometheus_405.3696987323" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.prometheus_405.3168948633" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:13 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:54:00 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index eb6b6e7b94..8b723c80b8 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.prometheus_469.3696987323" + signature = "rusEFI 2020.07.23.prometheus_469.3168948633" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.prometheus_469.3696987323" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.prometheus_469.3168948633" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:11 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:59 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 4f4a7713fb..00a0179b81 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.proteus_f4.2765497840" + signature = "rusEFI 2020.07.23.proteus_f4.3295672530" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.proteus_f4.2765497840" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.proteus_f4.3295672530" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:16 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:54:03 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 5e67ef8f94..51d6e6e64d 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.22.proteus_f7.2765497840" + signature = "rusEFI 2020.07.23.proteus_f7.3295672530" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.22.proteus_f7.2765497840" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.23.proteus_f7.3295672530" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:41:14 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:54:01 UTC 2020 pageSize = 20000 page = 1 @@ -1050,7 +1050,7 @@ page = 1 gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm1_loadAxis = bits, U08, 4150, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1060,7 +1060,7 @@ page = 1 gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm2_loadAxis = bits, U08, 4238, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1070,7 +1070,7 @@ page = 1 gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm3_loadAxis = bits, U08, 4326, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1080,7 +1080,7 @@ page = 1 gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" + gppwm4_loadAxis = bits, U08, 4414, [0:2], "TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID" gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 @@ -1647,10 +1647,10 @@ page = 1 time = { timeNow } ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} + gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : ((gppwm1_loadAxis == 3) ? intake : ((gppwm1_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : ((gppwm2_loadAxis == 3) ? intake : ((gppwm2_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : ((gppwm3_loadAxis == 3) ? intake : ((gppwm3_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} + gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : ((gppwm4_loadAxis == 3) ? intake : ((gppwm4_loadAxis == 4) ? fuelingLoad : ignitionLoad))))} [PcVariables] tuneCrcPcVariable = continuousChannelValue, tuneCrc16 diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index 25ed10ff86..6e59a69a4b 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Wed Jul 22 19:40:59 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1056,7 +1056,7 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; - public static final int SIGNATURE_HASH = 692540479; + public static final int SIGNATURE_HASH = 1241418013; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1303,7 +1303,7 @@ public class Fields { public static final int TS_RESPONSE_COMMAND_OK = 7; public static final int TS_RESPONSE_OK = 0; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.07.22.all.692540479"; + public static final String TS_SIGNATURE = "rusEFI 2020.07.23.all.1241418013"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; @@ -2357,7 +2357,7 @@ public class Fields { public static final Field GPPWM1_PWMFREQUENCY = Field.create("GPPWM1_PWMFREQUENCY", 4146, FieldType.INT16); public static final Field GPPWM1_ONABOVEDUTY = Field.create("GPPWM1_ONABOVEDUTY", 4148, FieldType.INT8); public static final Field GPPWM1_OFFBELOWDUTY = Field.create("GPPWM1_OFFBELOWDUTY", 4149, FieldType.INT8); - public static final String[] gppwm_channel_e = {"TPS", "MAP", "CLT", "IAT"}; + public static final String[] gppwm_channel_e = {"TPS", "MAP", "CLT", "IAT", "Fuel Load", "Ignition Load", "INVALID", "INVALID"}; public static final Field GPPWM1_LOADAXIS = Field.create("GPPWM1_LOADAXIS", 4150, FieldType.INT8, gppwm_channel_e); public static final Field GPPWM1_ALIGNMENTFILL_MAP = Field.create("GPPWM1_ALIGNMENTFILL_MAP", 4151, FieldType.INT8); public static final Field GPPWM1_TABLE = Field.create("GPPWM1_TABLE", 4168, FieldType.INT); diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 5448a59080..50f83273a4 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - + From c5f30897dc3fe7833b468387c1d9fadadff7e1e8 Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Fri, 24 Jul 2020 00:32:25 +0000 Subject: [PATCH 009/182] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 1a0a33e8cd..ca81341b68 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200723 +#define VCS_DATE 20200724 From 4b71e07b3fd63282aef05f8dca259da09ce0b1c8 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 20:52:50 -0400 Subject: [PATCH 010/182] proxy progress - getting REALLY close?! --- .../com/rusefi/LocalApplicationProxy.java | 13 +++++---- .../main/java/com/rusefi/io/ByteReader.java | 2 +- .../com/rusefi/tools/online/HttpUtil.java | 7 +++-- .../com/rusefi/tools/online/ProxyClient.java | 3 +- .../main/java/com/rusefi/server/Backend.java | 5 +++- .../server/JsonUserDetailsResolver.java | 3 +- .../java/com/rusefi/ts_plugin/RemoteTab.java | 28 +++++++++++++------ 7 files changed, 40 insertions(+), 21 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java index 2d4f6a2a0d..8f50b1fd65 100644 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java @@ -27,21 +27,22 @@ public class LocalApplicationProxy { /** * @param serverPortForRemoteUsers port on which rusEFI proxy accepts authenticator connections * @param applicationRequest remote session we want to connect to - * @param authenticatorPort local port we would bind for TunerStudio to connect to - * @param httpPort + * @param localApplicationPort local port we would bind for TunerStudio to connect to + * @param jsonHttpPort */ - public static ServerHolder startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int authenticatorPort, int httpPort) throws IOException { - HttpResponse httpResponse = HttpUtil.executeGet(ProxyClient.getHttpAddress(httpPort) + ProxyClient.VERSION_PATH); + public static ServerHolder startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort) throws IOException { + HttpResponse httpResponse = HttpUtil.executeGet(logger,ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); String version = HttpUtil.getResponse(httpResponse); - logger.info("Version=" + version); + logger.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", logger, rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers)); LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest); + logger.info("Pushing " + applicationRequest); localApplicationProxy.run(authenticatorToProxyStream); - return BinaryProtocolProxy.createProxy(logger, authenticatorToProxyStream, authenticatorPort); + return BinaryProtocolProxy.createProxy(logger, authenticatorToProxyStream, localApplicationPort); } public void run(IoStream authenticatorToProxyStream) throws IOException { diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index 4942d9a057..d615ccf0c4 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -33,7 +33,7 @@ public interface ByteReader { throw new IOException("TcpIoStream: End of input?"); listener.onDataArrived(Arrays.copyOf(inputBuffer, result)); } catch (IOException e) { - System.err.println("TcpIoStream: End of connection"); + logger.error("TcpIoStream: End of connection " + e); return; } } diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java index 702d656aac..ac7404ba72 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java @@ -1,5 +1,6 @@ package com.rusefi.tools.online; +import com.opensr5.Logger; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; @@ -33,13 +34,13 @@ public class HttpUtil { public static String getResponse(HttpResponse response) throws IOException { HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity, "UTF-8"); - System.out.println("responseString=" + responseString); + Logger.CONSOLE.info("responseString=" + responseString); return responseString; } - public static HttpResponse executeGet(String url) throws IOException { + public static HttpResponse executeGet(Logger logger, String url) throws IOException { HttpClient httpclient = new DefaultHttpClient(); - System.out.println("Connecting to " + url); + logger.info("GET " + url); HttpGet httpget = new HttpGet(url); return httpclient.execute(httpget); } diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java index c019192b5f..b145623a0f 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java @@ -1,5 +1,6 @@ package com.rusefi.tools.online; +import com.opensr5.Logger; import com.rusefi.server.ControllerInfo; import com.rusefi.server.UserDetails; import org.apache.http.HttpResponse; @@ -31,7 +32,7 @@ public class ProxyClient { @NotNull public static List getOnlineApplications(String url) throws IOException { - HttpResponse httpResponse = HttpUtil.executeGet(url); + HttpResponse httpResponse = HttpUtil.executeGet(Logger.CONSOLE, url); List userLists = new ArrayList<>(); try { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 1f015308ea..cc231aa94b 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -146,6 +146,7 @@ public class Backend implements Closeable { // authenticator pushed hello packet on connect System.out.println("Starting application connector at " + serverPortForApplications); BinaryProtocolServer.tcpServerSocket(logger, applicationSocket -> () -> { + logger.info("new application connection!"); totalSessions.incrementAndGet(); // connection from authenticator app which proxies for Tuner Studio IoStream applicationClientStream = null; @@ -155,8 +156,10 @@ public class Backend implements Closeable { // authenticator pushed hello packet on connect String jsonString = HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer(), logger); - if (jsonString == null) + if (jsonString == null) { + logger.info("ERROR: null HELLO"); return; + } ApplicationRequest applicationRequest = ApplicationRequest.valueOf(jsonString); logger.info("Application Connected: " + applicationRequest); String authToken = applicationRequest.getSessionDetails().getAuthToken(); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java index dfbb893eb6..a0e4387730 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java @@ -1,5 +1,6 @@ package com.rusefi.server; +import com.opensr5.Logger; import com.rusefi.tools.online.HttpUtil; import org.apache.http.HttpResponse; import org.jetbrains.annotations.Nullable; @@ -14,7 +15,7 @@ public class JsonUserDetailsResolver implements UserDetailsResolver { public UserDetails apply(String authToken) { try { - HttpResponse response = HttpUtil.executeGet(HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); + HttpResponse response = HttpUtil.executeGet(Logger.CONSOLE,HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); JSONObject json = HttpUtil.getJsonResponse(response); System.out.println("String " + json); Object getUserByToken = json.get("getUserByToken"); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 27286cecf9..e09604f41c 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -17,8 +17,6 @@ import org.putgemin.VerticalFlowLayout; import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.io.IOException; import java.util.List; import java.util.concurrent.Executor; @@ -34,7 +32,14 @@ public class RemoteTab { private final JComponent content = new JPanel(new BorderLayout()); private final JPanel list = new JPanel(new VerticalFlowLayout()); - private final JTextField oneTimePasswordControl = new JTextField(); + private final JTextField oneTimePasswordControl = new JTextField("0") { + @Override + public Dimension getPreferredSize() { + Dimension size = super.getPreferredSize(); + // todo: dynamic calculation of desired with based on String width? + return new Dimension(100, size.height); + } + }; private final Executor listDownloadExecutor = Executors.newSingleThreadExecutor(new NamedThreadFactory("online list downloader")); @@ -42,7 +47,14 @@ public class RemoteTab { JButton refresh = new JButton("Refresh List"); refresh.addActionListener(e -> requestListDownload()); - JTextField applicationPort = new JTextField(); + JTextField applicationPort = new JTextField() { + @Override + public Dimension getPreferredSize() { + Dimension size = super.getPreferredSize(); + // todo: dynamic calculation of desired with based on String width? + return new Dimension(100, size.height); + } + }; String portProperty = getLocalPort(); applicationPort.setText(portProperty); @@ -59,14 +71,14 @@ public class RemoteTab { } private String getLocalPort() { - return getConfig().getRoot().getProperty(APPLICATION_PORT, Integer.toString(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS)); + return getConfig().getRoot().getProperty(APPLICATION_PORT, "8100"); } private void requestListDownload() { listDownloadExecutor.execute(() -> { List userDetails; try { - userDetails = ProxyClient.getOnlineApplications(HttpUtil.RUSEFI_PROXY_JSON_PROTOCOL); + userDetails = ProxyClient.getOnlineApplications(HttpUtil.PROXY_JSON_API_HTTP_PORT); SwingUtilities.invokeLater(() -> showList(userDetails)); } catch (IOException e) { e.printStackTrace(); @@ -104,8 +116,8 @@ public class RemoteTab { LocalApplicationProxy.startAndRun(Logger.CONSOLE, LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, applicationRequest, - HttpUtil.PROXY_JSON_API_HTTP_PORT, - Integer.parseInt(getLocalPort())); + Integer.parseInt(getLocalPort()), + HttpUtil.PROXY_JSON_API_HTTP_PORT); } catch (IOException e) { // todo: proper handling e.printStackTrace(); From 0ff0da170786288357341aec97c714fc26658c54 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 21:48:44 -0400 Subject: [PATCH 011/182] proxy progress - getting REALLY close?! --- .../java/com/rusefi/io/tcp/BinaryProtocolProxy.java | 9 ++++++++- .../com/rusefi/proxy/BaseBroadcastingThread.java | 13 +++++++------ .../main/java/com/rusefi/ts_plugin/RemoteTab.java | 9 +++++++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index c2d0f6a6d8..a0975014b3 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -1,6 +1,7 @@ package com.rusefi.io.tcp; import com.opensr5.Logger; +import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.IoStream; @@ -15,6 +16,12 @@ import static com.rusefi.binaryprotocol.BinaryProtocolCommands.COMMAND_PROTOCOL; import static com.rusefi.config.generated.Fields.TS_PROTOCOL; public class BinaryProtocolProxy { + /** + * we expect server to at least request output channels once in a while + * it could be a while between user connecting authenticator and actually connecting application to authenticator + */ + public static final int USER_IO_TIMEOUT = 600 * Timeouts.SECOND; + public static ServerHolder createProxy(Logger logger, IoStream targetEcuSocket, int serverProxyPort) { Function clientSocketRunnableFactory = clientSocket -> () -> { try { @@ -33,7 +40,7 @@ public class BinaryProtocolProxy { */ //noinspection InfiniteLoopStatement while (true) { - byte firstByte = clientStream.getDataBuffer().readByte(); + byte firstByte = clientStream.getDataBuffer().readByte(USER_IO_TIMEOUT); if (firstByte == COMMAND_PROTOCOL) { clientStream.write(TS_PROTOCOL.getBytes()); continue; diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index 4806b7fc7b..3776b7b393 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -2,10 +2,10 @@ package com.rusefi.proxy; import com.opensr5.Logger; import com.rusefi.NamedThreadFactory; -import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; import com.rusefi.io.commands.HelloCommand; +import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.SessionDetails; @@ -18,8 +18,6 @@ import static com.rusefi.io.tcp.BinaryProtocolServer.readPromisedBytes; public class BaseBroadcastingThread { private static final NamedThreadFactory BASE_BROADCASTING_THREAD = new NamedThreadFactory("BaseBroadcastingThread"); - // we expect server to at least request output channels once in a while - private static final int IO_TIMEOUT = 600 * Timeouts.SECOND; private final Thread thread; @SuppressWarnings("InfiniteLoopStatement") @@ -29,18 +27,21 @@ public class BaseBroadcastingThread { thread = BASE_BROADCASTING_THREAD.newThread(() -> { try { + boolean isFirstHello = true; while (true) { int length = getPacketLength(in, () -> { throw new UnsupportedOperationException(); - }, IO_TIMEOUT); + }, BinaryProtocolProxy.USER_IO_TIMEOUT); BinaryProtocolServer.Packet packet = readPromisedBytes(in, length); byte[] payload = packet.getPacket(); byte command = payload[0]; - if (command == Fields.TS_HELLO_COMMAND) { + if (isFirstHello && command == Fields.TS_HELLO_COMMAND) { + // first TS_HELLO_COMMAND is PROXY request, consecutive TS_HELLO_COMMAND would be real deal from user desktop application + isFirstHello = false; // respond on hello request with information about session - logger.info("Sending to controller connector@proxy: " + sessionDetails); + logger.info("Replying to controller connector@proxy: " + sessionDetails); new HelloCommand(logger, sessionDetails.toJson()).handle(stream); } else { handleCommand(packet, stream); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index e09604f41c..30653375a9 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -67,6 +67,7 @@ public class RemoteTab { topPanel.add(oneTimePasswordControl); content.add(topPanel, BorderLayout.NORTH); content.add(list, BorderLayout.CENTER); + list.add(new JLabel("Requesting list of ECUs")); requestListDownload(); } @@ -89,8 +90,12 @@ public class RemoteTab { private void showList(List userDetails) { list.removeAll(); - for (PublicSession user : userDetails) { - list.add(createPanel(user)); + if (userDetails.isEmpty()) { + list.add(new JLabel("No ECUs are broadcasting at the moment :(")); + } else { + for (PublicSession user : userDetails) { + list.add(createPanel(user)); + } } AutoupdateUtil.trueLayout(list); } From 31363ccb777d2626d45061471a72a0205f73f31c Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 21:54:50 -0400 Subject: [PATCH 012/182] proxy progress - getting REALLY close?! --- java_console/models/src/main/java/com/rusefi/rusEFIVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java index 0c7ac50f68..93a39feb56 100644 --- a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java +++ b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java @@ -3,6 +3,6 @@ package com.rusefi; import java.util.concurrent.atomic.AtomicReference; public class rusEFIVersion { - public static final int CONSOLE_VERSION = 20200717; + public static final int CONSOLE_VERSION = 20200722; public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); } From 4d5cbb2534ccee39a995817fb871a629e70bebbc Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 22:10:10 -0400 Subject: [PATCH 013/182] proxy progress - getting REALLY close?! --- .../main/java/com/rusefi/io/ByteReader.java | 3 +- .../com/rusefi/tools/online/HttpUtil.java | 7 ++++ .../java/com/rusefi/ts_plugin/RemoteTab.java | 41 +++++++++++++------ 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index d615ccf0c4..07a2e25465 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -2,6 +2,7 @@ package com.rusefi.io; import com.opensr5.Logger; import com.opensr5.io.DataListener; +import com.rusefi.config.generated.Fields; import java.io.IOException; import java.util.Arrays; @@ -25,7 +26,7 @@ public interface ByteReader { Thread.currentThread().setName("TCP connector loop"); logger.info(loggingPrefix + "Running TCP connection loop"); - byte inputBuffer[] = new byte[256]; + byte inputBuffer[] = new byte[Fields.BLOCKING_FACTOR * 2]; while (true) { try { int result = reader.read(inputBuffer); diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java index ac7404ba72..04476e7adb 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java @@ -6,6 +6,8 @@ import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.params.HttpConnectionParams; +import org.apache.http.params.HttpParams; import org.apache.http.util.EntityUtils; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; @@ -40,6 +42,11 @@ public class HttpUtil { public static HttpResponse executeGet(Logger logger, String url) throws IOException { HttpClient httpclient = new DefaultHttpClient(); + HttpParams httpParameters = httpclient.getParams(); +// HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); +// HttpConnectionParams.setSoTimeout(httpParameters, WAIT_RESPONSE_TIMEOUT); + // without this magic http response is pretty slow + HttpConnectionParams.setTcpNoDelay(httpParameters, true); logger.info("GET " + url); HttpGet httpget = new HttpGet(url); return httpclient.execute(httpget); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 30653375a9..386174d0df 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -112,21 +112,18 @@ public class RemoteTab { JButton connect = new JButton("Connect"); connect.addActionListener(event -> { - SessionDetails sessionDetails = new SessionDetails(controllerInfo, AuthTokenPanel.getAuthToken(), - Integer.parseInt(oneTimePasswordControl.getText())); + list.removeAll(); + list.add(new JLabel("Connecting to " + publicSession.getUserDetails().getUserName())); + AutoupdateUtil.trueLayout(list); - ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails().getUserId()); + new Thread(new Runnable() { + @Override + public void run() { + runAuthenticator(publicSession, controllerInfo); + + } + }, "Authenticator").start(); - try { - LocalApplicationProxy.startAndRun(Logger.CONSOLE, - LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, - applicationRequest, - Integer.parseInt(getLocalPort()), - HttpUtil.PROXY_JSON_API_HTTP_PORT); - } catch (IOException e) { - // todo: proper handling - e.printStackTrace(); - } }); userPanel.add(connect); @@ -134,6 +131,24 @@ public class RemoteTab { return userPanel; } + private void runAuthenticator(PublicSession publicSession, ControllerInfo controllerInfo) { + SessionDetails sessionDetails = new SessionDetails(controllerInfo, AuthTokenPanel.getAuthToken(), + Integer.parseInt(oneTimePasswordControl.getText())); + + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails().getUserId()); + + try { + LocalApplicationProxy.startAndRun(Logger.CONSOLE, + LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, + applicationRequest, + Integer.parseInt(getLocalPort()), + HttpUtil.PROXY_JSON_API_HTTP_PORT); + } catch (IOException e) { + // todo: proper handling + e.printStackTrace(); + } + } + public JComponent getContent() { return content; } From 02cf57eafe81d23c61c4142114f201e497d38735 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 22:16:16 -0400 Subject: [PATCH 014/182] proxy it's slow :( --- .../io/src/main/java/com/opensr5/io/WriteStream.java | 2 ++ .../main/java/com/rusefi/io/serial/AbstractIoStream.java | 6 ++++++ .../io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/java_console/io/src/main/java/com/opensr5/io/WriteStream.java b/java_console/io/src/main/java/com/opensr5/io/WriteStream.java index fa5e27f26f..9e215204ec 100644 --- a/java_console/io/src/main/java/com/opensr5/io/WriteStream.java +++ b/java_console/io/src/main/java/com/opensr5/io/WriteStream.java @@ -12,6 +12,8 @@ public interface WriteStream { */ void write(byte[] bytes) throws IOException; + void flush() throws IOException; + default void write(byte value) throws IOException { write(new byte[]{value}); } diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java index 4dd56f039f..78bdac9d59 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/AbstractIoStream.java @@ -2,6 +2,8 @@ package com.rusefi.io.serial; import com.rusefi.io.IoStream; +import java.io.IOException; + public abstract class AbstractIoStream implements IoStream { private boolean isClosed; @@ -17,6 +19,10 @@ public abstract class AbstractIoStream implements IoStream { isClosed = true; } + @Override + public void flush() throws IOException { + } + @Override public boolean isClosed() { return isClosed; diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index fbea5e9430..236efe3d69 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -65,6 +65,12 @@ public class TcpIoStream extends AbstractIoStream { @Override public void write(byte[] bytes) throws IOException { output.write(bytes); + flush(); + } + + @Override + public void flush() throws IOException { + super.flush(); output.flush(); } From b274f39f53e007dd16da2282be57b69967e54586 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 22:19:20 -0400 Subject: [PATCH 015/182] proxy it's slow :( --- java_console/io/src/main/java/com/rusefi/io/IoStream.java | 2 ++ .../io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/IoStream.java b/java_console/io/src/main/java/com/rusefi/io/IoStream.java index fdfc27ae8d..9cfac2cc7d 100644 --- a/java_console/io/src/main/java/com/rusefi/io/IoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/IoStream.java @@ -44,6 +44,7 @@ public interface IoStream extends WriteStream { writeShort(packet.getPacket().length); write(packet.getPacket()); writeInt(packet.getCrc()); + flush(); } default void sendPacket(byte[] plainPacket, Logger logger) throws IOException { @@ -56,6 +57,7 @@ public interface IoStream extends WriteStream { // todo: verbose mode printHexBinary(plainPacket)) logger.info(getLoggingPrefix() + "Sending packet " + BinaryProtocol.findCommand(plainPacket[0]) + " length=" + plainPacket.length); write(packet); + flush(); } /** diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 236efe3d69..2eb96a4363 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -65,7 +65,6 @@ public class TcpIoStream extends AbstractIoStream { @Override public void write(byte[] bytes) throws IOException { output.write(bytes); - flush(); } @Override From 5a38fc99a824bb1a2577d25f6eb1d7eecf7c5c2f Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 23:33:23 -0400 Subject: [PATCH 016/182] time to use DFU --- java_console/.idea/libraries/dfu_java.xml | 11 +++++++++++ java_console/build.xml | 9 ++++++++- java_console/lib/dfu/IntelHexParser.jar | Bin 0 -> 23836 bytes java_console/lib/dfu/dfu_java.jar | Bin 0 -> 36517 bytes .../dfu/libusb4java-1.3.0-linux-aarch64.jar | Bin 0 -> 95572 bytes .../lib/dfu/libusb4java-1.3.0-linux-arm.jar | Bin 0 -> 96804 bytes .../lib/dfu/libusb4java-1.3.0-linux-x86-64.jar | Bin 0 -> 115255 bytes .../lib/dfu/libusb4java-1.3.0-linux-x86.jar | Bin 0 -> 127345 bytes java_console/lib/dfu/usb4java-1.3.0.jar | Bin 0 -> 49868 bytes java_console/ui/ui.iml | 1 + 10 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 java_console/.idea/libraries/dfu_java.xml create mode 100644 java_console/lib/dfu/IntelHexParser.jar create mode 100644 java_console/lib/dfu/dfu_java.jar create mode 100644 java_console/lib/dfu/libusb4java-1.3.0-linux-aarch64.jar create mode 100644 java_console/lib/dfu/libusb4java-1.3.0-linux-arm.jar create mode 100644 java_console/lib/dfu/libusb4java-1.3.0-linux-x86-64.jar create mode 100644 java_console/lib/dfu/libusb4java-1.3.0-linux-x86.jar create mode 100644 java_console/lib/dfu/usb4java-1.3.0.jar diff --git a/java_console/.idea/libraries/dfu_java.xml b/java_console/.idea/libraries/dfu_java.xml new file mode 100644 index 0000000000..d471a6f9e2 --- /dev/null +++ b/java_console/.idea/libraries/dfu_java.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/java_console/build.xml b/java_console/build.xml index 8b321d3275..61eaa4f416 100644 --- a/java_console/build.xml +++ b/java_console/build.xml @@ -2,7 +2,7 @@ - + @@ -148,6 +148,13 @@ + + + + + + + diff --git a/java_console/lib/dfu/IntelHexParser.jar b/java_console/lib/dfu/IntelHexParser.jar new file mode 100644 index 0000000000000000000000000000000000000000..2c43c34fb360abccca13cfbda1fd91ad29aade2f GIT binary patch literal 23836 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 literal 0 HcmV?d00001 diff --git a/java_console/lib/dfu/libusb4java-1.3.0-linux-aarch64.jar b/java_console/lib/dfu/libusb4java-1.3.0-linux-aarch64.jar new file mode 100644 index 0000000000000000000000000000000000000000..0f53f1c16b61dd86f9ded3ae95cab76dc05298bc GIT binary patch literal 95572 zcmaHR1yCGO*JU6O96|yi1P@LEgA;TJ1a}A$Y=Q*~Zi5X$0>OhM1a}A?+!-Xe4DPPM zhd~EMmhZ2Bx3;!+x2wCVtNPsc&O7g(?&|xVw%S8Hst1IGgbx(I>1#ar-wvV&cn>rb z-oNEl(NqLrh8{e4_&{5Yfbc&E-2aAY|38DN?h*ehSmUjxilTzvdp-@tbB&QFtuFtx(E5%$pQ^@d6^#k6QamD~f3$z;jGyz^-O#Xe>=p35*`uM}reXj2 zV8#*Qe&&wzUo4)VNlCxE??d7K`VR}@2M_L<{hvd?yMOB9ZVUK-Bgp<6;pJf|>|o(- z@&AF+{h!d!_Rd~lUJDC%D?3r){|fxS3(5We5BzLz`9FK-^Kdz8_ceWgc@2bocyHRn zpy9#KTOcefQZr2{w(M3sYVrILtqra1qj#@Z8(jxG)$RK$zN-#SYflXf4fxT0;5+{P zq3(B6XmbFp`Fc6k12kf@KL>>NZ{^3QTxab`S9zFMolE@ZoNHg#lUJfRzdTEr20|w9 zp6Kd?(GtNHkM?#2R5x@V-ZX}KmW`NbO=5-YtFw1`RAf$q4&@^uZ@cnA@Hx}a5UP`q zk1Bewl!LGBrPCz-GawJLiyy*s4@!@<3V*fmn71k~mI2M^#@o#$^*dZu%3M&~hNgiN z&u36X1&4UQ4Kq916ccw#^#XZj{|v++jZ z0c2f#0Og@3(O`GWnmXcSAj2PRM5M8QNouxR-E^J>Yl+YH)HQ*(hp;0v*+310SyE5k0cA`33q2{%9ZV+0&}qp4-Ew)F-#bPAhP1kY$u5oqN8hB5NuZHPEhoPJDJW0nRZq>T0=D-Y{Jf3-#_9b_ep*!ms|lB?I-=bR1ZC!*4@we(dkn5Y z9Th!Y?W(cE9U2E}Z+q1^Db6aGQdt?yY!25!+t6{#Zw`Xc;OT{{Sp-ML=kQ!z=fm+B zWQWe>qH1rD!lS+mrxPnCs!59;)MvH!YjkH0ZLr3pJ5j-Rckfg&CJ$pc3*K6E>6Xnt zF)I9hc|Kf}d|NT{{6$mOJe%hYDpRMUS)i*BU-!`)^^ZEXYlKXLd)_7H{KgK-(JZ`C zArY_lAAkNv6mvFuah+)mAN^zV`5S`arHVi(E-5DZ*_FME5j}i?`FY|vi&{({$LJ&5 z7)R=fMvIRI6H}Aj;R+V*0cILx*{{#4fNI3V;FjW3PDfM>i#%yCFK)U@hZe=b>`VTa ze+(bocE8{f-&O+1`9_|Af)OuPpqg`++M==x-((1Fo+bzQT|F~f%RT(m;v8H;+L zEz2EN^K^)ht2H;^fel46MI`jwXtdV9Tkd4Ewu}`_CIW$<49G=M3>j*x=FsQut&Lyu zo5jl^8HXs;`(WCTVE2rFPqj7W#PN5;xS;aLheO#HC;(S+Zia>6P;N%3JL3>OS4xg) zk*#6Qd)a2uB*^<3$(%4*qQX6&sd@s_o}3HoOE|3k-F2`d zi0k_8KEV!7H&cOQP!oB9KWmb}uak&QujecAUk;VI@^fP>+N?HYh=;&jPjl4sZ1vV9 zsE2yA8CgHSFx9x1+>)qvd`5L{-%}%}EVeSzQzOrj*wpr|o2;9hTeWE6WZ(-^Tlv(7 zHhjsPL_x%rTJj%cFJ3nBg(FCl*|mQPd>Gz`;G5NMv^*I)*EXQM!Zn-g6d@Rj);6~k zG!MTs%xU9`nKI6qlV2d*(eV38FsI>}O)=M)(?+(#z?Gi+IoH-?|CZ6LvF9?d1rTTyRM#N0XIHmT8Dg*_<2hIVVv5FD z=%wE^dwN{ko3pLN0vGoa&rBzz8Fpzd9OW|m6LxYIjdBD z_Z5+J3tq*qxhtd1r&yAMy8Y~)BwH_+h2pt!nc^3LX#2k&OwMFXSL-w%YE#%nXoX~-zSW~%~fkd1~uUxAOm3j$VmWN(TeCqOW<&&>(HqQP6H~@uIuDhXQRa zISIL&2+B)$7U$<)L~W9!#sbkd9eZnGwsTOE=Uyz`ZoC0{RmI(sZ5daiK8E>YuelaG znntfU2xz3vX8g~`_>86k(V#$BK)tiU?IM$CSS(1p<~(~=X~`u9TH7DDqZHKk5m~f< zf)Pg-BP)V}c02%CSky*cJB<=n4*@075?K}ShmZFJWuq%AY?d1dXp+(MTM3d%9nD@E zwH$grQhKha>nei`+WF)04O4r0bHva1_@7Q$vpYk-_sj$9)U1}wQa~7sxvoyh)%f$n z;`_QNvk7%+g`1B4dE>_#px=6!3Wh) zeb`N_QCT2rj%d5wIM}oO%LyR%UIpIG?!-er27dBu6@S`y6nJ`0K@q>= zYvb(Je_Y1O87L`wjZBOKd5tj|&z8DnLoo7-S#-CtzW-+2+T{*1={*tonp1H_WIj$A zNpmIWBEuTd!o{?){h6l0NKFVV)#}qt(Ajc0dmy5bVzFk{ckLIxPln8L!0qK%nDd)P zPAE2%ZZ(e1Xd&RT|EKbxRlDB_Of4s^3S9eYahQ#kM@=)B<=TD@^QwsLLKceirBPoB-& zK71u*ks)5XP?8A~)`F}D1Nc@GMEAS&0RRvBCdAROg4XMlj`nSd<>PdsDJI5+^GL_| z2x`1oH8b6+4|nN}W;}1;`zx=M7}2gOe}M|@n&{O#mA#jeem zulIRxQ;*V`lc@6%1rz#w{=#Z>wPKk`wDj}8I0}L+?%NU#<-b`jh|s;dY;;#A83;1r z;F2G5)_8g3vU=Ag?N$u9gF?VPK7~Ie8M&Dphy!X4ukYlqea@jGJ(x&Vhbu?+Eya=a zWjD`rfi9<$lV^SwhY9H8lV7ueov|!tYvA2pnyi15kY8o)+7WFP+h9%FXEYm74p_#|Ha}$Z)D#oLsj-RY)l&Q- ztlh&uX(+1AY)&&y@W}VDcl#_|s3D~{?vI#p1KWLmVy@A2^3Len^Z446hN~d&i!#6! z%GQi?D)n~>$up-ku#U&;S?nZt-GsH%6dNObns{AsSC)ckZTgMP31s*$-HrvR5f>};a07>dbE5-pGfx;vy;0(fCmbGfv1SnSeqy$%P_ z?Miuik7h`(flQwJv)gF>ySBjwWcnT^nnaz9fw^|h^C(lSjFp_7&rGu&mHM=f>zwB? z6vwuZKu^E!1()>GlhgyA=DVTj^iOMNTR)*d--Doy!r{|5ccEMB$7R|3p1TQRxT4Qy zgLd0HnSfAVldDPjt%t;Y_01F8)vPj1M=FxO1yWYMdC8JI<_nTMC6+8(;Qu!aHA><^7;?lsn-E8WH- zvqM-r(ywNP{Gr)?hgKdk>a^FJ!`Vd*CvC19>t0C>s#@D*BC*8okJ|k{x@?CE85cJM z9-l@es%GJc7yDQIzV6=@o8q%+vpRl%Gmfc5Qb4M&5^i}-$Qar!yV}NQO2kf~XFmB= zY0$u4jJ2z$GFIQonS+7J;>NLm3bcw{9s~G^90s~9?*+}=2^>cgmH0!@HkU$?RoL$@ z&d&#s(DpUaC`t+7aK#wYnOnH+r0a%2z$>~O%;K(=I_jvOzY zsKp)y?hI~)_s>CRHuHO8{nc4#E z#sMUaLDl8HkggLx(7Yw)K3&7E z2M@~Moq%q`4@=hKrPnaSA}q)BdwuoCH*be2@`Jz-)8&-GbQf|y5_|6&t1S@d%!SFS zgRtnLF5vn{ zg04sqsvvwQ_#HLs*)=lfc5li&ak@J?Wy|P=l+hNWlKTOtDVMEa7R%RWqdy z{G+L55)9^{gu7?oArS-8O#=Ku>lB<8w>l$%cHf`R4UJo+li2dFtMZXjD3v^>R`U2EDm@yL7T$qwYyKtfWeVKOO!k%c^!>N5s!}AE9qY0h;w|;uCz7(^1w&Zo&YGzAcyuV%|;jVc&zjuLNb!#QZ%4NEp z77A$rXRCW`(Vht6%&Y#xm@S@6@3@(Xy8-@Fuq}fm-u?(p5JOOh0s+>$>DmiR!w^tA zcJt^(`&R$G0xx~zgIb~!3UQg_&#K)nSyiguZaoJ+i8`%XtO!-?b@}7Ow6>%ut%qumCGyeBVV|e*v zZw~7AI5U0GNn_`lwv z(w$k_8Qs4Axa4uexX!SjYbnoVK@DCdhiE+Dw&!$C`sj0N_;~oY+m-5g2kVY zbJ-~VLiGJjHgkZ$AS{n&>cIcZ@0tr-t+0gI^Z$;vqHZHPyUugFPw#wtEWBts%cLIj z7$O;ahjZUb8P8GPx^F&p0QE+6I1l(jq!8p=;PYakVqU2ldSD2|e`$UxWv%0qDD>_y zB2e-bc$-iG{`d#9DkNoM*l>p2iEgT?ZsO`NCU{W`P(5>*QgRZ#|Grki-VSSDvvoOQkBrJj5l5ZtvZ#FG4qb6$QH)!YC zu~bVt>w+(9J;=$H0D&c2L<%OOI8EW%cU&j5$Hx9yc{e}Bl@A+_?U#o+>~~B#kq82r zc~CcyJ&63EGFAw%rg|=xGK=r9XNhPm_pf(r`hF9OuDjY_j#*?Kxkg}!%`ejPu9do> z1xO=h^zBdhCnseWii%bD1H*8QE-Xg?3sUQYmQxUjgbjF99;;U6$sY8)Y@J5mKQTM` zWcKRtMLnmqUTfUz3aw-N(jP&9(L-H7ozs^Ac(E=EE5<-3wPWrV`IkNZ+>AftCU4U- zXEQs)sjj)kGW7bzK$0E(ks#vtH$m+5P~W8Eqhf}tSJPu73dH7eH)K(qJ3iV{ENzZJ z<5Q0D7I`#rL4dp;h^`94sO;tv(Y^NdhI72-v9vA@BOAu7Zk1YncCndyhf^RqJB)HQ zdC?xMxzU&u*r2_t`@Jf&_;L`_CtxgjopVO^x!ehMb4N&#FBJ?oB%<(D>LLph%ZK0- zp(Ru>sjV>=leXjBWCKiT_We8fHS*wO(bF_Fw|dlfQJKFwcWS@U6@<`bm9BUN$2)%? z{>wvKClry`WYc&*2TxE<@FLJ?DGO+i=5Z`^x_6w`iF8NW)w)js;?1qY(mC#qJw5|f z&$}m(FPj!wI&^y`+HD#^vP+D2A8W8GPAG9j%;RTOv2-MMfiW*O$`a0_0i!9m#=wBs zBU<$LXV|1oS=>NW{;rGUpbU$3b|aAsmFh9g>={Gd*eCC)z8(##>zBuim({FD`E|pN zG{}mU_cy6ZCs-|2c28|RMksvO{=|gX{9RKpqIwxvkI|kFIeMH|kJV1pQ+88{1>P+t zWnZ&n3*NY9^oiL<&ti_1HI+NOA;>2|BTK~Q>R`j6o>)0X4C|=RWsj~1c0qZIx><*= zpOF)ZgQhl(r5olxp=Hu{6#)z}-w_1l*JHC}wt*KDivrzq+HJ&nvAqNikjb#V_V(E- z84h3_YmW)jio*uHVsHBNbzDj;7GbDSsXhIxBxuG(>R%7=SWLDfT zA;HMDJ!3Y&)E$Q6|8`5gs=1W)XxmW7mRg)Y@eQ0=}o_KahpJHtSIz06ES1OP=|;Wj^~+mJkuf+yO`?}i$pb`VkWDU zh#=`G9wm6$J7e3>Fs}xRSSzD1Ke5a^8-;R==AYT_#+$$2w)^4kRHvTu$kOisUkw0B z?i?=re(!OfI>MxHOYa1S{LjAyNnaYaiLx=r zS3BYfqxHxc|74fs_TR$e%3x8XmV{Hx^vzR+tC5?mE0Kb0kD;lMyn1gg7GPvr)w%C72IYc_1ah5XETCT*F=@9vbmpyOGawbIJ1Kncw~FP!N5Ggs;3;)0?@uLHt; zUgw+}*yGK9E8m5+7j{d{3EP~nr*HQ-x3hZ_7MsN4ck|JdETB9o{@g4B46JU9Lt6$U z=bN0l2%0dGWI7h+`;fcn8<>1WvQw-~eil@irAM?U6w4|Aa^S>os~SzI)S-Vxy*aN| z(D;wf$zOBwR#$be<)H1K60+b-bI3&>*+boKnblB1xno#S@0YHd^__d0sP$jl1apQz zQ=ZgcJAGF#bEYEX6FK1Xytp~vwA1E@`aQTmcb4@eGSY8VGGSFOOzLF}YwtNf;?<=T zD!O$*i*XhKRM}Gy$gg*^Vi>)4x9F(K@h%F=U+Is{JBN+zhXf#&2EHz$=N@?T+NsxK|O@@FLomPuZkWk0u z$y0eQ@^=kW4d<)}hQaHNnh31r?FLX)tI*3+^Eo8m+gzBvJ@ukT?BLB+{`nIBkpGMa zMu`hR_5?A>?kVGX#KMcA+M%A1Gv8oq?KRcEfXLp+AKWqLf?%b4UK~yVCRPQ$7u7G7 zMpKIPmg8RQz)3eLaxR5OK(wICy*Z{FFBWF?)_91nw31U^tji&{3*hnCAn-j54Vmaj zDJk$Z<|z-|uY=eSo%+m9HoYgrKob!WiLa0SX(e}hQq}4X2h1EGuP(}hZyAN;H?Thu z)h{I|NN?o2tiEBbUaUQ^Fpo$ADF6&yXIyBe{1PZjjt!ZS@?Za)e#^aiY@S!I<%3Ad z7+ws(1bVeU-Rx6ND^{p_1-^%b`8g{BKN`Kep*ZlblsfJJBp~`;`%&BxZ?totDEzeF z8xE|?dhzvAIC$58w}%*-HW#RZV#mc29T@%^uVSeKsurW~LfQ80YoHsn_+0Fmu{wYd z;pvv<_w4z7(=pi_=f$}&hN-wMTkC9uSlynSl8Vc&^r95X%WGA-aJ1C`?>lxa?|3ey zK*1hJG(9f+0xvk7Tckr z?4zyB5=^hym$R?7g5!yNNqQp&8tprhP_>?n)UwAQWt56F>`#2%6-uWbYh97ere{jl zl)b2e@Sl<*%g$W^1eG4Nn_09e-rx<{PA=K+^}>?Z6p2r(nDW~yKL>lSB`cgNk)AEO zWh)-T7>dmZ(o62jtLo1zI7VCLEIQ&jBsmGaF`2U^c*e!kr}7+=QloEj?<=)@JHafM zb;oUr2-dHsw0@J#)zcb>6cfTAQqPmzN1k=~0+ps!@ADat(J6}(iQIUU0kqr#PgcamW}`|$PdSvA$z&4EMM&|k^yoj z&#NCU38);r%-YY#GD*|t)kT8oPvKarfB z0)KVN_h57g`kt^@t9IA1&UYzEztOI8pLw+e4wnYn85H;8nDAAw9^klAZir2v`)&lj zlU@Xdlb{`xt^{;fotaVWL;3DsrG}K|j{Ssx^_Di4JN$I}4&U&cOK69PI<(Gxi2IaRxiHZ(`Rf zg&X$zv~b0RyyzVDC#4=a&$h_4uvK?>^a!zsC$XjnGcnJ*`7We;=yLZP^e8Ro0OKPz zn$o6Jf4-@f7Qer}myA*EiQw7e-;u0?0*-m=fj-|w0hyZTFU7Q%vY<2PaJjD_blks3 z^|jhJG6#-{9_2qoW$tvdT+7qFO<(N)&2FeOXUYe87G$N5>cfJ$8T-BmeM(%-ct)I` zW(!e9I^^)LjfT+>`X2d3B`I12W+)(4x(^qxPKz#Isu=+)r+jNrYQNZEcblonoXLcT zyP?A7Hj-i2j#NQ4|4cQdUG^2+Is%eJ`Ren}O&$gUO0&*Mi_tDwaCFbHFu*;?khG*D zB28;gZND2i>6`}GuiG$y>94XuRlzF$d>8k%vklw(|4fR=+#CAmC8MpXT!2`rMe(f7 ztc#59s@onr2it=2v9%drVHG+G1}e_{7mjEY#o`6+l!_{Kn1Tk63_@6o* zIvm^8oZQ(lMWy5nug^9!kd{U@&hsd=e3i$L^_JC_N!>tTG7)+C0$Gs^EU8Q zyCdPe%sc4pyF)fb{S{Gx+v~h@T9LK8pNQ>W4aPzLl#z)R!J=8F`DnBK0A5J&u0l*_ zQ1XpO*mZigws`{Pr)V~qP)A@WRzqV13=ev`gtq?w?J_*cqP_CS-#4|HOplO3g)hb)R0LUreo9L!r@v5h4@jPQn z7)t!_YptKmGqp2ld9}fqZX!te{K?^+oksSMi5X8f;rmkQd^ygE9%H zc56vL6F{_IZ=T5?zVD{~3MEPP$3;3B6dGtY-%1BOb%K&lwq!7tt@tqI25=;;#{UM| zPW)K>;A!eVCa#GVPgz|&lU8%*flT!EbSWBNUps6CQ6RDh0xDKx5B!;K3xf|%^UAc` z^X}J+l_r`}9!=bNcKes^4PO3hW$0dG1;(Gv-OfCa$QB@8(?Gx7d;dXa5v_T@jP*;! zKK|A}PiSB*k7;6vg0bj8e=#2dkodmZ_=)J0MpO^_a$m}H)C!pI1$u&rO0j1EQhO&i5i+I3mbx| zYMyLKY9-32oHSEr1nfuF|0Y`>vUz;Y)A!v)M-C=BE8^_FTQX%sQNwiN`)G(N!f&98rAs~gHvWiBImv*oTJqyj@#MN+`TrMzP^3oNG8xa zGHG;p#3C9ovzhi$q(4?oGvld1zfG)iYeWi z|9Sqohu{05&yE#}UE$~-wyGVd&UZgZ*wRaGHh4! z-KvT;@vSmEZ<{KSz-if6uI-y?3GWRRybIQsekL#HTM(v7#*)@VY+TRsQcWbhV#qjO zqs*ZCuSV8$9kmUF?w3~|8E!a>`ey4@lUaLzSgNR$>r-dAd>U3Sb9`AoV^LpX8J%va z5m%OZ=Hxd1tLc4o+0Olb-bt zhp2=Igx+2=F7)p=BtJ`ry|A@%hCd0d1Th&3QIio&jvjN}Hk5)ydE8}6ZgK*-inND>BCBa`1%hA3k zc`*{ZtER=b90$CtGjpY%&?Oy~B4ytjqZ*8n&#yfN-#IOK?SAJ2G{+x>jZv|OfzM#2 z@on5CLpG|@URr<=ev^xp1rlIo^vn@+Tj>|=?+3}B3fNVI`i#toxZRTI8}_Fv;(jOp z{d@C<(CGWk==VU2I$rM@q1jhUc#gWnpT1qF6Y`j+i_-m%{GRy~Gppf#t zS^Zn@rR22v&x4{VJcb=}J9S0=Z+866G<`GUG%_pQA3CX4A09gJ>SFFe*XZ~e>3g4_29d2^NnIUi4 zLxZIfy%m%9mY1XC!sJz@%p!Ckv#hekwenWiXhDv}3VzB`Ro5Y~*JV97Nz!*~%?O$G zr%6-(qWP4YS-Y#-^BLUrNjrb~^o%v1Jjm(zXQ--CsjCt0Q2xuZu|@t%0Eo9Z&!Tkn z2S0wpi-tGmdiB?z!49gmy{ShH4kOMg>TWIRrH@4@+-4>!8WOKA!e;8HUCTF#n9LR4 zI0Cv8?HYW?qNLFH)7E95@V)Qk@@9_e3@By6PVZ!`R%TczbcL8_sp()(HExjwt!f6f ztWS)j+i^ORzbK0^xJ89>$%~M)mRocGjO2@$$=D{R5PU@P8`pp?=4+ZeTV?gjI{O%E zcgOKO1H6G`YYpA^bMHN#+flyC`-JurVv(-rAa|Sph|g&4)}>HUB_+^17|##uw4M3q zlgdk!|4Ud)5*}$_Dq`TXKd6&6Z9pCa&v|b+^mye{F3GRp{J3K^e#wOe=|S9a>$99& z@ra&;&F7Aq?n_3G)Ca%4pG%tHe&&()qh3k}=i;!5US6lJmH17T`r)i{-PMsKx6L2v z`m}vpt;}S>7dH-+fDehLUS=_6e4$r2wTh(b#qXn6$5!(h=9$C5rDX2LpG8;kibp!r zJ_-)Mp5e%23AAPq2ra!FdGF(D$pR%G`_RreBkefza^|h$=O;+JOF2hEe)CnZ zeNS}v$B>KGhQ8khr7u1na6EhUM)wJ)_{iWG7-p&UXRvUy1=mvVsclp}WtoD$c)C}? zqM2pjb*M3+oA_?01JJ`Rjamz%{NM|R5yCdDoVXksWmsZd=1?-I|BA;bR)1#?K`HpU zZ0l3YQ@St~fUc{astAD`Ba!8!p|I(f54}u$xt6iTsqbC=GezF4&LIg_e4x2&d*BTx*R!EtBmy^-`TWAra9*1Dj@@apSrX%SSf)bE>oz3YU00 z18eABCR&xl4}Z5Yka6phGcp`~+D*)hYQMp(s%O$Q&1J4t@VxiFA4^YCo$+28CV^mv zfyT#0IcbeQMW)Nn&^Bb3{lBJIbs5ap@TawFZw(PMhFP&||HSi|=caohtXUUsA&9xs(CJ!8dq9?J=GR0UFZsIWS@gCZz`AU z`qqdyxAc=oC-15^NHSyos-Du?Ur$bFLgQas2eEHU|Aei4SH; zL_vc1@B7o8ETLv`;%Sv8x`|ur)#Ussy+@w*7R$kol+EWnf>RRx*1?khS{Kz{ig-ito|3b1K)gS4Lc6BW=nD~#m2`j_ zqis*9tOvdM&fF^aDHA8uFFrzI@Qm3A!VtH*qh4oxJYbs|`7>oSJvlAIxwg&1)j^W?EMP$w5xNvmG{u52dGCADiAicTUpVEZ2Aa zmtUT>g-{|OPE5vqh@&@WQEzlsPujl!Bb(jC)-mK1+TUUS=)62@U`1CEu){YAY+6yKZ2_ zSx)|Ye?Nu*F{vB)to5Pd+D00y`}*(1nT$=LqlXYxyvHNYc1j`)#@PN=yDdF`!KMYS zs^4aMJkDb^t8ET6VsL8`9sZWYdKSfG^}UlxttUZXu-Hr2a>(<#m_PE*54B`Ur0nC# zkEyN>jKke4erL3ZznuPy!NOqosGg$5v3+W4zvq$>sfysDwy03w&A*+yD`4lj^Ifbk zVC0Wc0zW{@W-IiGB$vwjdiEiUw^xC_0?PU^FX=*shXEQp`>~Yv-nj2PKSQYl-gF&( zhq0`9%uq9tqiZ??=|%rOBgnUt7ezRv@FrxHxktVvii+(kkVw>JNcdzcS5?YTJ%&qB z@`5+n@OqHDwoFRS_+d+gA)S-;-7ob>)i>wQyz$z{7LCjxJY%$dn<2bPUNHN##qt^V zF5bA@@Q6O42}kS8PjZY?V9w=gyuiMl-wq#*veh+BYI=F9LPU`Sa$BW;7BX7mSDa4@ z?NPLo-<>4RQ1u6oCwzidEp{FXWD@d~hAa>4DywKBc;YsTQds)6-hPx~H!_`wXDJ^b zh}5Lf6c=|1z7&x85C^ra^N=hQT^t&d9FCOqGF8gFvi614yjBz`6z$_Ip7vv5=BzM? zl8NsA(mo5apKk*DpNtB4zBq^sFn%<;__Ex_`RN;hV}-SZ!U5K8RUO!d#ZdpN?7?5W z&rlarCOqFA;(HX9O1`O7w-y+gxM%#N&JRfo_&Y?WursX2B1t((eQhK^Q^&^n*F<>{ zZXBq%+0fd#@f|oGPD=5b#6w7&+&HAYKb}<}^Woap2N|1xh8A*(O4$~s@pZ-?3e-!}>sk)zJa|~v`8suh^`j+DIkyyiLy-z?q zHqk3d=q+Z|5FoS`OAVk zk>X58K{Zj7QrjUPZNBIkKbgCjsYZJnP z?+#ubfC(;Ggon zva&pV&SDPv$DG?Qz2`I3_>_2#y!dN>)FxTiGKldFL0+bcQiX{pGXK>zb-Pc%A0Yc2 zVKWFZuiBrYVejDm&jRwQzn^o{UMbT5oZL_Q7#$tj{6L5>{FT5=>X&_qukM41-;VD!>8`u8@A$H-3bEwf%O&c_!1{iilr-M|(cjm(+zp_cbX$aR9?J?$J^k=Ht zW@Ub1DDYhSeQD*Vv$F=za=aoPXi6v5yhT=QnFj93+26)q?*NNO9hsJ576*IHLLa6^ z5yB6R7aGg##heW`xBuB^$69f%efeM=z8{zTzBR(C#j2%SfPpN+io?Y`XGLZFO;Sy6 zFc}ZW@Qp&v)PAblMP}J_B9kXi+~(+PZO-36^ni$aiJ2s8S?VTb5;cHR1j~eP zJ?G!4sA|48@HT$(h32zE?MMlRC1p>!Zm?=!7w^mY{1JRP+KbBQ4+)+C2U(4gNqMie zir0YVLl^@eA$--%qosv!Gvtv~SakKnPdrU#Qa1uk>1_rrR$6}LQx4(M?Sm{DK1LO8 z9^--A4ZR=C9+yaiPLz}RH$oh0*m?&yl&sDH%eJ@|FjLt9%d4L(jn%X^?s^I z%q=o_l(FB(hT@c2Nan+KXk2Wi)lwb6msGZ%~+Qp`V$yiJi|MfwaG89N@}Jp z*Hb=CMRO1yFe@yHFHwfa^|`b)^O@1MU2u;Ob+I^E-;4QuCtJVki{0WnY2)nj#QwP1mf z>OXzO-Rk{baxyVJ1g}$m?z5e%mqpa`Sl5jFv~63e(oV5`my^;|_-IwQ`8<+Q14YSa zRm(=3aBBSsS*AunR5Paf74uQ^VHX>_2(1?78E^Cp)(`zRR)0J1o|OMg9lAXf+_HaB z@Ug)&iIu&#@NzP_fNfCNlHRy0&sQ!T7n#wOC;T2mi??HdnKbXnr(q_Rk4oeku+`$I zT?wpOo}bYACa{p2_U_5H3;h;bO`M;nYQ)={`%=^QhIKR0Kj|X9nr4j?(X?_z*SA3` z60(#OMMyjpsZ=Bz9iV0SzBFTENNI=}^g_n(-QSOTRgBW7dO=^m15lSq*xs`3j`N&) z^dYBdJy<^y5~fl=zPtBxlhfYohKSyhgbgss#$YbJAcMWW#$qsQYuLLxY#B5Wby~SG zbgCjO`yr{lMW(OA{DS1&88Uby3(NV=_v8@5cpied+eiJI6Am9gT~U7w*JZ+oJ%$f3 z4xP>nQ^7-IF0cbcO=xp`7$tmjf;j8dI(yh2(TzYi3Enb)GA0|R8WcuD)RX|X#EIu< zd)FyM1msx%8kQ1u%-N=1$GNeCYyKAe^$P)M{#sD8aWnxXBlCJf7y&VubmJ{ zP7*>2O1NBi4_;ds+!Y7Fy3ExO^ac$)$7R$2Cx795%*eZ*8rJ^}{Zi`fXW)i64uC_- z?EZ!pm+`p@2C%*nW*fOB2afxqM49#KDg`cu17mKJr3ZAA^j#RV?-BA=I2r`9>lvwtl>0^V@Dl}6(_Gh^^@ z8tMLB`;vfj;zMi+!AQV%1TJH$`k7uG#fAc|`BB~*?)ynj`G#h1Q~ylyzhWsy;_=$Q?WCYu#p7(D{?c2%l2_a zx~0FeX62Wq?1D?3qthwj4%{pSaPAk|PvbYlV79Xq!h31^@ubq=x;XJHZR(v*2>~>B z3inA03 zrA)+45?b$*)8N7TB1;g~Y(0-{-T`+s;@2k>kOo zm|5pTBG_Zsha0K5jEdl&U+9SLUB%UXpC{pPIh^={D;g58@P-X;mMnPSRS59+7W=x+ zxn0|Tv{Am-MoRTwoA_t0k{be+{)AeO;iTQixLGRTmM^xHSuE?~VYb9zzKsvKSxWbI zpm}`n)vxzn1ygR|sx*Hg zcx=wH9(-SHAU?~6Ke)FIBiA}h7y%LZR~m>2+;p&q>->JJ=P-n664S-EPMiKCofM}k z2TQ}J)akL0%^aXc{%1GZKbnbzzo!pV6chKfsCrBUrP4NzpJ#Q#FJ%~|GB++jd_zHk zv@&6XgO)dT9GvkR14GYq>uI(_PHpZS<($l}&?*vgihlW%=heF~L zq%NKC=ivnWQo$P$zsx0j=-3S=L8<5svJd|5&oO*S*~4(yuMDa1 zY+DpQX(K;IE*v;`6a8G~#~o)6)B;S@1GI3D6KE4SH017y7ZA50b?LqtrtJtBtojJn z>jP9=uCECqaY(ZVw($f}=HUbas0T?_A8%4(fMFX9O;{lmV0Oec9AM)fLwY)h&c3G| zZwcn_$){b7*^jjV%S@$r!eO+|wl`#qhP12UcfcMo!S+;A=+})8q!iX*@*a={ddLRs z(U;v1e?|)Ucw>2jB|YtfzYJd+ywx9pcaZ`t-hhhZ1eUvQ)M!_u&Qb*0M0)NS#?;q_ zEM=dm9UA%nhX!XjfnXc&)2DyojOFM@_dGF=!>eq;&wG}Hq%t-d1(yflv`PrPVf_89!`*D7haizO?+ zA#PxB!EhQul-fN%gM8a{I6n zQ4q;Cp-wMODqp7;7xf+r29RfB_)L^35MLWdie=ZDL|gh2A$}^#?+`1VjPP z0^BJEkRkq{BBPm&j!CHpKvrBpi|{K^rO9l$Kz}e)(8-i*ShcrN%D^cJA8}ljH71lfSWBap2^oPjTRnOSd@rhfaEu zGYWZ9&z)nSMwpX2*PfK;$_dJSGa2333sGo^U=9Gjg?PXnZ2cJA30(oyzG;VE?$ne7 z;1kCJ>Gn1Qh}1EBc?JvtfL_pUfE1ekWC(#%&@yl=LVSs28I@?i9R}16dmR`9O<_wf zm{_d|L1cgybU?JhN-02f&qiqiypGb843-9(H}^N-1zO`PC_#n@_6}pEfT&=<3DTUq zNI=j|pr$Q-VnSLIZVQ6bmP*LvlqC`u^mHfYgt*R1GzdZS!@Ps;5&&lGZugtZSny7UDtrDAvhdJ1%ASs z%O}+9^#tMy1rmXN?z{Vj&RHSCrOe3O6#{z z5%1KKq+X8#tpM320MaFMfS&|s?a&9Eww$hZO&I_fm|-BrUMZ?Wl-!BhH(=ShU#nAG zp(kC9=t6?I_)mC*u-~ucQpb;@gd~-cmmnw5<(|YeOt9q)J(*e%$xy{kvhzf^6rO2n@w6*<=g*#E; z0RSW_Cjcq+(n-=jq0~NXfVP`LC(H)u+r*QpLk|Q<7&~EJFwnNar#o?+p&tPFFhfA% zmrt7QpO%$ykC~u`5K{5(@ zaw@_|P^F^4NC3b}8~<}l%%5XPrWJX9bxlMe)t}>j5|bdB`g)@znyk2iyOXjjom%o|E7$Mc^~kYG$Q=&#aajF-nH@d57dFO1E4dxg6(8 z?|rY(^prAe)a9K;@5YfT#`eHP6=vlP`HNY}$EZ@`STrbcyJ1AG`HP3rE#jLHZ}4B_ z#_8{{(aYaalj^MMlsNtvB9}7zp>*JxO~}DjKpOo5Tv(hR`nb0s6wJz(2uSG;r4_gi zrDp&?IZ?nq2cXRlXb1nrVDdQ%Lm!I+t5^Wi_A7uy29Rh0D^vnLD%B~6N(Vf^-Z8Lc z0iGKRLLZ+5wh#%ZpEv?-R$}t;fD;gKROJJaE9Cs4H1Ry(1P_>i0Rc>v!mM=Q2JArr zW0)GC21FGCL_`z@)R_Mw9Z+g{;CDmN{|j7DNkdQ|$>+ev4|r^U4lX1CUhyYLyd!e) zg%NqGk57_5N#!2k{w$z*7tmw{BGCi15;Q3B(_~FbTw{q zn{L0>!GP&Y!1NkmDgxwf1ehb<6S*kdfI#6d>hu4?2nIBU01Z<>!!Hj&<{^L#;HRDS zP|g+y0x~=WsH*{5>VTFe5G(>%nR=4?*-b>`|9pS}TO?o$10--Do{(#RlztOZ=XQ33 z)eZ;R7>;v2>wUH`>oniM2D>T};?0vcDcPbtLgEbJ84==~=Q@;woUEmA72pWNrqRZg zL6<Bs~BR-a^OkuKyp&DXKlnbrwWfKpaI0{ST)Aj=g%!x<24J%?(_(f}zA z*yI2zxd9beIO#Z`uLFU;K2Z4!<@uiv24HDcphh5oN-E)i4`o1#1bhfRhYJ1A2MzG9 z5&;l}AE+J>&w&9D!%2_A)m0H;|5sfE8ayGm_Z?tk1&l2K;}9S+5&#Y>&<+Wzl$`(d z$p2xuP-p+Ei!lG)MXCSQMW~Mdb>e9t$Os_FXaJl<0AMK4;S^~gb;iF?q5r}5|36yt z^T6-_uRuY?|JP_y|4&d_r~YHKAhQ0q$TuJv5g-{Opwg89(Lx!4TFL-f`g}(y{x6~b z!@$M-Hz=(C0g81VIPU)rl$8G$C@7t@`xs#G&jW+M1q8r<3W)gpU(~>Vor$PH%HB$V zJ`+{C`^UI5WggQmylj~fD z>$6D|QhF_Ue>u34$Rh&Lb3oZNfkAT0$r8aB-wd>y@rvi*w*9=M+ ze8MZ4LsbYfdG^4^)ANLC<;(V+BDPBwF0m#w;!4mO-jst|D;4!FJ3XWX&lB=h#ZwU% zW%Nds@3Z(1Zo_HxCUE_k>w=kWl9XWA_LdhdvZtqiD-n}|is>V3{HP5Pu>JNrxd95r zy)kvNRKr#;rRt&Dnsq|b-XziUclbG4(jkG51qo|70UEwNjxNtSU)I!$mhS>|D&fr zCDdhK?-bGlVR-z3wmGRl`_-kEC8m6(`X6xxwrZcmSEVxH@@S`>O5kr+u5oo>+w7G! z50|x8EP6+M8advWe|{!!!&RrnbdB_sD_V&N_T4gakvbv{$uwIzKb2ajghRT}SEe$@ zgrV>IF_wx{I6qaseu>rKn9eyFvj?g(VEAtI5oYsH*)l?4R{bzV`I_9UCrl0DH(Pmr zXHr~ouSJ0c^!69z4(VgJoBp|Dx?|1nT>jT!r)lS<40Z2)Na}r59h5clvL=9uNN0s0 zJgaRXJxfXWo7U5KmbYSBB~ei%$qg<}GV9$3Ue7N47N16Ij

3q0H9}hKt(O*H-DQzO8rj*6%mx^9Vw;I~i_cyq0 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 literal 0 HcmV?d00001 diff --git a/java_console/lib/dfu/libusb4java-1.3.0-linux-arm.jar b/java_console/lib/dfu/libusb4java-1.3.0-linux-arm.jar new file mode 100644 index 0000000000000000000000000000000000000000..635a77b4b490fda0910bb758dff7311461111f12 GIT binary patch literal 96804 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 Y$Dy@1 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 y9C92PuV)U%5`4Q?SJ1GTT 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 ZTuZ&e!|=ae!$XxDOy|&4 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 UckcQJc$et&Tm+Z>T~uuOUn1iKegFUf literal 0 HcmV?d00001 diff --git a/java_console/lib/dfu/libusb4java-1.3.0-linux-x86.jar b/java_console/lib/dfu/libusb4java-1.3.0-linux-x86.jar new file mode 100644 index 0000000000000000000000000000000000000000..6ccb81562ee468e7f0f13f376a61eb4bf55beef4 GIT binary patch literal 127345 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

pT~@X1_BVI1HS;p#}LFDP!R?jE|&(E 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򮪩VkO5e$zH9<%j&m8g%hjG$HROIO;z#r7zoq58H#$p=_fD@eO!NQ=mMsBxD&4>`x>^W&&_P!92VTuUd{f zj9G<`Lhze1?OR@A=2+v6XXksv;Q$)=eO$`N47^|93I~42Hsbf=SK)lwt37Pr!T~{U zh-D3Tv-rI;G}$Gv4lnN=V1|QtVSVEr=kl$FkY_Hqj(SWUX>fzT?Zpp}1yHr{Dx}#z z8XRsH7|-C#$R;5*N^HQg<0P#2k~VyS%yJ22R^`(8Z<7T!;ro{elMhD*;KRYvldu*q z$1rh=R3b?CKEp!6$I{#qalq^7*L90xtIZQnphnYU!S8t^;{6^_>kmsCVbbC&hge&V zs1%U~%V7W9DADlA>ts?x0}N0#H(7j${&Cl)zX=-p9iO46&;=7UYG?YjaiWUN4htSb zCoX#seMad!s17;eyz4Q2UyvMsH$DVGzGmPr5q96g0x?He$R2E$XJY)Yq?k$fRbvI( zDiWv*)d@G|$pnK0>yk(L7r6Euvw>$G;{C*)JC%b7!75{6m{Cv*%8LF`x&-62e zxm@Xq!ZM!zT){}I9qTUqJ+Z!G+(_wL>}#m)kpHxvJ5D1R5ZN4j!@Avu_Xluzz+Ymd zzuzy_=b&ygeNsGOjZmcSu9AZCk)UA=+e#x_0R0IyN}c!ztOb#lpRf{lF88QwmE#+w zii|i(98Jdgwe8xu8r~P(hZKTDl0}H_6~RxBzds5K$KRK`zx0UCT2gGBQP?n++1i)? zqRjS+`IR;mC6@UNp5w#&SR>2U@|N?pqr2hp`IGA@WRE*mhXEvjOD59$O zni14(8*JNZCm;|3rH+KW^(X6!;?Pw2UhIo~2*o%V_+mddyl;H|#TK>rXCm;5zVegR z##1fQYeaVnuGC6?tCDa2dEB1S%8Xk1Eai7&AM-QoL_WRhZ~hDLVu(*U0k7()E%a}< zhT~YHnq&?SEcdvx-8^oMF-m^8~6MBn~rKy)`MeKZV9TZz@R+Q4?2UNP5d>!KtB4 zL&(lJL3+-E;@2d6eFV$gYkne3oTQh|H_)~)Us{YxAvwGC7aRQXq%mywc@jy`p;}Xa zd+tZKfLYmNpYRtSjE1(QR!&#sRd&q~bOrQQ<&6;=qr2h2A4jJ?)6YCk-DeCLX$0;vBnEhi4fQ@k(O*oq{WRa%gtX1k*^&WD2bZy8Ce>> z2^4GvtBA@_gB60mS(sbzAy|Sh%z;%n{&D%(ni?rOgv}Kr2RBG(G1a%0gLdwz4|Dl% zMP&h=-w70p3oP?ho9%%3-Y6Ht%F_^ulY$PW6k)$O7tEDLsxf->r2TuQ-|< zw!XhR*yy8tx{Mg0{dGNKsk@&=z$Y|HkyDZSUCz`t=Si6xQ=vu9K9%u>cn;CKTiiJ>L!96H?KK^;UtV3ctqvWkzg`7s zu3G!KNYW)?zC*)@oHvX-Iqni9>}Lx}wF4mK!a=C z7K{~x@y*yOA{;@(PSladlFOcRr(h)9xrIrMcVx!5SteV?O5!W)P1?Q_xt*gsRC%A( zmIP5tNM3RUg&CE->ECgc#z7;_KB@EW9%&=twCEM7nL>i8?-Q79t%%~n4>xZM1KC4um>Xq8@yF2H)#@+v`ZcN@_Z>d8WKlOk_o>6v1(d(lY}SFt1+CdxgY|`fwPi6rv~M#(Z8ejy8L~!m7EG9lDXWLr zZcpQn8IZcR?ogPn4TM07gjv$gN&24QCFigIH4eKbTh9&vo8>ml0buF)*6 zc(`g8V)mnGtTw-Y3;KEuu>a&@(b7I@4a<2OsZv$tO{1T+|6c!#pSu26_5C~PL`%d) zEUi0c{tv5m(qsvYSREpkb!M>5jYJLIv-A*nosa2e&HGqUxK(jf%Ay|z%V@xmW*iRu z%xz1l&zR)#=oD94Ly{KYoDsae(R~65djM`G|yVAJMEM6?>EqX68 z(C4}Jv@Li8zAN06Q&LZfKeUqC66f2+640Pus%Io<8mv4YCu}l_`4CXT8Zpg%E^oqM z&iNE2%hjaxLytdGe?4J<7MnzV_CY*><@ALp{IPdSrXW-W*;zKB+Jmnt55rw(vRJUW zeDk&ogi6(d}23v|)00nBa>}(B4c^xXvQdpBz(L zgj-owW;hE=#M}Eo?BNgE-2L91!I5c)H53vDwTs+~_AM5+7kLX|bYzo2e%QjU*#uq5 zZ*TkCPEws;54LKhne1wbAQ%b=A}wZkp154tm|>&#SFcl4N4cfkuE_b{Ks=Bor9q=AJW$Os)1OklJ(Bn-R8IJ9BtY?|OQ_e|6rrwBM6G*fSR)qFEc^^@2 zBl3#0qy2nMbDasY^n>HAAOF1vKVMvbtnsFg#V&zUMKCZij-=S#2wRbgAg-F3{<)m8 z^1ICyy~!n!Us^WtM+Yqx0M#d!N<5X4M-kZ{koqrKR`(Oy46SvR{XWZ@nLj=&gJ1@` zRMP;I|1Yt3J?rH>Z_#)|?)_-P$J=(w*j^XC>zdXqYVQ_A?71I zp>N=VDhH7J@TFF`@{ESY4e4?QEdu#W%SFkcunZzXb%m?Dzjbp`D92^9BbY2O%uE;W zf7@@p4y`1bFGS3;>@hjCQ->vNPNv@cv9h0+z#oH082z*vR84GFFL5`0Cx`Z9V>ONw z66VcgUfFT+_3fX2&rG3-yiFL#HCJ*xM`KZ$^DeXb?Pn=!MFQ(y%hE<_0cUi|31?4L zV(eX>K-|MyMvy6U=GV!4|U;3|gMdt%=Ou zJrl;VudoneZS@LPf)fNfz2w&CA}{O?_uGL*oWoY|LHbs(%i^9iL@bBgQXc2{y}7hR zx0o-9`?PI)w|;`m&D+$C!#ke|UrTk&cgR2jA$aC5wzhfA7kNXq$8edw_@mf7=_$8> zv)KM)IM)*UILlbp{kPq@%|#|0%1mFbs=6W5R(fbVMz?;`rvI8>DmX>jACJYPzjJs5 z49xJQWME>=MNkM`L~`l?b5z(0boQLG`uhRzc8PIk-?N$BOw z5H0wyd|-Nx+Pw)(YM2o%NMo&}5G>^9ErCQ_lXY5Uki96YS5o|Y@&p1tfjftFPbLHS zezV#KO;~dh7zN?nA$8Y_(VKT7DKc6lk%lzn54Hsz50cQ z3!6vEOs$Gezt#I~I!tdaw)>m)!07tyx#)@^`Q#R&Vejn$iNY7}VI0wh#c%}1dvas- zd?2J%&cQt~3d6l8AXKvFEn$?^d9sLgIMViiha*GnlBLuym6E}y1)$@{IwuEA$CG*W z%cWl4FKJ3$%Sq4bM3)-8DTV>MW0d{H!~2U-c4JsS2R9jDZ0hq5hArR+V1WTdORY{J z=<$**U>CgSDpZCD;}A9i%%%+k7sH11o7sEF6`Y`Yfh3+<_5@Mo-&?2P3>&PP3 zOG98$UB(#W^r#VX@iloK4*{khrLGXBb%)L&`FUbPz<7Mx*IW(`G;JbyZNz{6J@Ll+ zYBke!MNJeS%8~men`T!8s=d9izOqJGaF*HCz&7rUHk^hwVz~O}1=?Dl4#LDG+FZ1- zXDi_@59irM`|cTsJ-yR-AHwADD?BZVq}2KXSpm+&DB#}nQQfORXP%`ujpA)mk7i|p zX~;=xN4{dOrzD}PN2WIeEc9l`FI{@m3TNeS$c9_vE-3kC8C!j`=s3yH*XnKX@o!sS zsNM;Aiu;?mrStV=;q{qt)LJPqfqSLqp}ir5rW`9__4IMa($rWevP=iqYtDzp&jJ(C zxWn<>2r&LBEaE`Q&+5~^o7Ma&#jLl0-O%m0*Zy%q1_dC)f zx%%YUwa$n@qL*q$dgM!)j89(k=)b-rOqC|}nXecJCh=n7FV!_2wRE{f z0)D>Fr#t?5-V7n0zjF_8enKy7B)KPQZUI`Umpj+6oZ8R%rqTuQLE!0S~U%dCLNn&ha_jn&yo!xi5 zP+8b;T;fMIOGmf3u-IUK*rGK5TPSd5mtxUKeR6-@W1f-QgGiv(l16ar)05QC2ljD$ zqtgXe{Er0*_dm5OWWcIzjxDpZcH5z;J}lA5xFFTmHrjq3^HbfH zvU1MbYB>F>H`5Lnx<>>XxMEzPO>pFG$E?Zk|J^Iwi@XNNZ4iL^Y>)0pOknSHek=<( ze2Ajras2|1Pz8jJ&r!P!N5QA6^Ds||bUX|%gIR1WypD6ht8z7;HEsZ}wQ&#|J$h~E zz)aCVmxBES&fKYLsM4lZI(3nV21>pQ7oK2~^<20cX2rzEHF4B9Xl-nj< zi-VU$$}AXfr;c~vWq$I`_T}i8cig$+_ez5$-A`>{_hqAa>$zMhlaSmWA;JXeMM{Q~ z-uUzTk=h=eU{?9X-32i)=D}Ggnz!h|LJl^Wx2tpj@iT+54!57p~40VnIv1!LL zV%#BrYIz`3hqd3*p;>1}P(cZQ%X@jfZDIVO_*bSS4gAe?wTjiPjeB=eBc1o}SK1a8 zP1A@4B^_qWz!PX+j^W6U!Z(YvFqDBxGG<#d9DL}hMNf}`+g|TEf-`NBs$aZwBj-sw zXC+;^c*1asgm>+*P^3?;bcuHH3~wF_m6dlWp}wq^t8JG_2q2$7zeAf)oiN?kzc(#Z zm9PbgdzGy)`n}0N{+u>yB{-e%V?&IxXyL`=i>PB^mMhN?i3!LR!k7)7I;<*=Oy^$2 zP_b)nYhut5@4ly$w&wMOBW*x8pR|a?(#rO6Vyo;!BKG;7cg^?OygSQ2kD=Uk?a?({4$zosp@{d%qB zSbl!&pwZ5CpbQ=&8)kuEl#k^GWpm9)q>4&qeyntMv>m1M67)6W9d@y@lnLo zl;seDiHi*YG@Uj_`EPGAr3Z6lVf8a`=_gA}a5*$IIJ_y`R?B?d2@ zAU3Uu6++SjbAa;0!22DWbTruoApi&Z)h*+2DvaoWP%8q;++z~r#Q`b2YT+VA))t2w zqTTU;0kJ!!VMXw#x&Ad^U?+xeb%(lZ?C_uwb*~Tta)O&qFSbgC4JZuFM)7R1H#rJP zl5OW8pL_%KGDdDs2&4kgaz5|6JIgocD>L#=O}}n}!{JNY4G$xs+}rF;28u|J@s8u6 zC*nB?ZO}Z#kQ0(i$y`UaR^Clbao zM?gxNpXB;`ps&7D!>KzVYsBro!e#ugw4u>23K!3v+yF?wQ0c@J4xj-)*IkFFmW~`Q zgL`O|b07hH9@fy%?D=!Zgoy{)iJ6H4&3c#O;2|?)qC(}wY(VGL3Etn678)0}ufsfB6^!RM%;2H4#E^+{fI2;7 z8?K#)JI~qSU<~VnlaE3t(L#>cp;6S!ZK#?p@H#CDR%lE+37p^du9k4Zj!Ehqm}9+J zLPz*H4#icVLC2a%D(5*=77l?WdWeio|BM@Tu!Bz_={ta~aSz(v+4=!M8p#t;1T^J( z-|*IKCW`XDbL|ZJY!PE^;2$C?17$!c(VRmI;oK$uEjn;BiKs;Eq0%;XG0SOpQ?V&9 zW&JxP`qk~~92&APMYW=a;fZ5I=0@75=Xrm1PCt_JWO{w0A6e_rxwttAz4>MJ-cV@^ z;(T)J*_J7PndI9xQ|q5Os!a*4(o_Ptb|&y==^nkA;Z=6G?Jk-+d_Ur*3v zei7uA#FE#I?|pBK1kSGua;YlE$R}=XJrAlC$xmyL9m7b{SNot4S#uAaYLkm4v!a5fwZOrnb-xgMRH(`_HNSJ?{&OwEwruKuE`m3WnhrMDWd9Q4GVwkmw~`nI&X_*)&Vj6 z=NV&ho)Vmm-i5S)p2XF_d@ArsPZFWh%(^u>s}0wz^aci7(#jt``CNbX?rRqM-d-uR zbs)nvAile4_(Alah;pMW-gh(4&fh_(lxp;!)O2J>+TdkL_nN!Rs*3XQB5O1=z-DL9 zc@)ir$G7-Ok;$jrE=jd=P91Y7t07aY;)K&1A@m)C*~4 z?;M%GN``Ovhko&$2VN=(s1$BeJ-Z6I$^h}NHsd`ryyaKfhkU0RE6y%L_89V4HF<+S z+?c!%A#mY!!a0BAV?Q8MO!6yq^pH_tsco7IItYGzl^?k}q`JkGTI4zMSCJuUVtEw7<)n{OX>=qYTX=sRZnz@ff(&TheX+gCN{Q9yO_A?xmhB3V8C5YVj zg@uOtJPadQ+iqs_WWtjEqr#IH6A`_AWITIsj2OQieYFe`A3qO2!e%xLAzmj#c~y)P zCpG;Xh{u7G7-7F29k{+#It~AzStcyU)gbw zg#k9dJl;iNuGflMi!^fUWJBtkhx3VF=&0KVn7Sca{`0BAsGnGMop~;QxPii16liGX zGC2F=%C9?Qp+&|Fn(&u??)2jh#otn3iJ1A`zD>33AB$E{GG7*2>ztv{UT&d#F*!F2 z>FhdK4k2Z#M4QJc zMqDZIj(Z@NBjr60;(8n2cCebV(%Unz21@pOv0-x`$jINX!Kq(#53#A~qy;Fq{-Dqk zq&tfqO@9;=^MbYF%8NSO ze!qCO%M^H+{!_t(*S}TU-vZ|>Hcr4pZ7UPU)vjgzt&!148v0>FtiRO#E)hjtCxzFS zgqO1G8dc8hT3ZSRnNeHbbz1BuB&~L*DW!ktbqC~+u*M9>fUaIyaOJ2v;dj)F4yWE1 zt95>BYYMr+VN^3-Qa^){3V$+J$vz(6vaVDR=!CEq>R)rv|8OhrSrn|*MycH<>y5Kn zRolBMwDO5f*`uH0KOJc|XTUqoS+?q!jJEuo`(Tpi;%0^RW8~?_(AxL3v{?_k1XwRh zyf8AI;fsR$r>?-5CI;C=*_(gT%XTU(ovBnDcxRCYQ%0Lq`8Fiqb)of&szP*bq(rlF zss%S45mRe5N9-siRz1S|Q!UX+ZcptviU-G|Ol6^f%{^PsL zm1Anx6Mu!7R9W~97eIdS?YlkQ3FEqNa%z7^PH=pW>eYuHmrtTs9JLEe;K!S{!-pQK z$sy_R;#_Aw^}NtY>Ra1zC<`Gc#i4ET%}=!qmSgGe;vtgL!;{6^bfxMMShx+|wSPH2 zb8ho)%J-%{^?Z)l4A>}Ttt3sI&z8*epV5@kWmI=k63NfAGR}_5mwB&eD6mfu5B^3c zDE~Cl;E$^RgSX%?C#rR16%aTKV`5V5dslrT9c!avhI_N*%9tlMcU@<{l+!WohQc>R zNyc41iIX&U)mc;`>dHIPw>~(M50UDH`CmR>8>^1&VkxdYfClG$oO00Nj)&9qB38N# zUf=x8ceBtm@9jypg`n;Dt_hwD)oLW|Ye#eC$9wfnannN*#8Ua#9!WaKJJI6%$%ntE z>Yvln{@Gq&c>?%wOtMKdUFkYomze{M-ZajWTAbW}|1yp`r-QyxHmNPMYuz~ijil4U zi`;$#Ss~9?=YYU|`-&^@7}L~25l;i@Z8Q0CBld~E8~A^+;KLgJ)Q!L9V(^b9bvHC5 zzKne!U1MH-F77y-`fjf5+U9_b!0MvWr_dfZTAlbX<=h(-;XOyTf_CHZ*{ghEv|lkn zk;i^(hyCAU*3PsYBbs?Hp8xFQ35)dx6E%iyk%I) z&79J-wAADuzlu5;phT{i%wE?!ilocEt#wPEIG$oB?7)>ieyy{Z<*l=o%=JC+VJKsC zzWubrS`YMG^{_v95D$D%QiJ3G4GWy?A+h#QNJ*D&S;zq2`>vFoD{s`J%Hmiw>v}f2 zwx8ct&G;2vf`TEuazT$|xrp6!T2FTNSpyLDQOQr}Lto?6@@akCCZQ>*?W`{A~$V zmBlWyuQ}eRy|^S~lbUS}@i>)O?@PIOO_Pqby}OJJop0D6^a)&Vwv`hW3kOUVNW{*$ z`aklIO6`b!ac}AyW#naQzYsN#DHYA^B&lp4{Mb>J;mCapyh&)Si%D>xB}LwkM@NL& zb*9!GhwK7>m~!Tlb}d|(SVdOriF-_28T7Jz$>MC`xFJFl*t-30m?`3 z8P9&?4-&j8f18>+^?f6?#nKX~VT;R|@5S9zG<+#WwjhwlpigN(S5d-4&C<^mo3moX zs%x9^6=uZhXeeS3yv(voy)e(HF8`g>F_>?AbLtuj%_hG1kXFMx$(@U)5XG__v0q=O zWO@T?`52*tB5d=b&~-oEK$BQWn|S$MPcum(jtG*)emSM8tL}emdG>tB6?^u=H$W&5 zwSn3Gns}mSrZyTz30P6<E@C4#oBPL;`Ln^jP}*xY&JL(^X^Wta zyQ;PnDV&UF&Qzq;5e}8Xp^smXq;+D2CDKeQIG~5CgAmV zcdDqjdnZACzb#>aBNWHlN8i&#~)6w#1SXyvXnkQ#SoEFoZUKHpYkbh^T)2z(=Rp_2shh` z)fmQiR!d~i8A!8!Cos5wDzFrv9}5YQSRS0d9uF-QQVA04{QL@?h&WXQHm`YVYym!k09Yxy_|{?womkn?%4eP`k_i{ z?9(TiTNA&O_@d;tx$mJ`dRYfnLMzFiS-+`hWD!hqi6nyOtTGUkRTK-zU(-Dy*4*HI zyjeemQA@ONW^l0ndn%deni|BOOvIh+z{z)yF{t{U8TKWk-R9Pbyja|)mz14*E&P8s zx=^s+7%!MhVK*MB9l;=ya*}G5)Yt!a@QSK=eFPU&?X94?`c`oL+(G`Vo`Lu6m{YUV z@rx}9b1i9`$?33*McWzR=l-s;{&Yc4P_F7|N+<5u=NkRY-xnd}^FyX<+7P5;W9o{4 zmUMxuWo%U02Xc)It$qT_>*@s(5E4&yiIbmfC_T<#(#LahA@rIV)FO*AYvzxn->~l;7$$9u-)hw9u4FM_VmsCQmD`a(}wO{vIAZ5}8 zh1c@s^y!|LhXjwllS@Bw6dW)8LO^_4RIB;exNv14+L!(4=@SK(ifjY62I#%+IkQ2KQRL3j4 zHv!MhMMsvK0knb4knh^H^y~Zs3zZm?R3@NF7~Ml)uS7nw$PwRL<7CX+g^<|}i ztxRsTYTUS?MRujeP$huMrOQ&w{l_N+c7tymW!I3J&K1OYM2@IHH}><&%*ya|<=Vx% zoTNf;`3J!-mJh)P2q-U|S7gRkwQic}3+I&0$oD^-%N=&k>N~5x*3IvxQ;2?VDT5%x zph&e=P?m8vo7x7R_UrVfdfliiNQzSu2k{Jf#^pG}xHNm)HM{=b?Gh<8ZHC|Oz1gaf z8NS|Knt2c6HC4r4tF5H~XV!|iYN401SGmFejBhqBkTKg-3|;rvn*&!tG?Lvm(lzi- z;Lz7Pf9Q!8hwvxgqOp?x>X82LF3(T_r!>d(R=1Rz!U*lOb1hgH63ZL(HP*-rzEj~9 z+c-1H*=5^UGz21!y3=OTNkom?W4(PIZ<$k(ISKHt+T$lN)GBHZjhB~oOxx?}=F@^+ zGLlkG-}m_y*URVZl`iv{HEHN@2dVY61@pNV?od{W?7JH7-56>tH9JBr{`_a7M1Fi zPeR1=Rs0Y0{?>Y{w#&)UkCx3RNyW?hkGbl4Lt_+fHqGB#>z#a=pC957o~x_M8`*9K zK49pK^r6wGhukV}NeX-d+C&=7J4AT%Vm|rMe-5y_^@)P6e}q0y*AN3=%=~k_B}*#* zhy5pGm_cA*GDKP_s>(`*C1OjRc9<3$S$*f(m%@}_obr!hBcUxe1Y;}GwMV=v9Yw3L z(0A=t*YCg>E=Hz-jj=`3$DN$q)Ot80?ibZqMoF)1;m+cx_uDX^80@28+pTF>XUBc+ zRGJ<6%_#cFf~#2i{glgNN6YsM@^hKaYKspZBL{8O?)$rHHYD5sxnEZuQiF^#7V&cH zzaHRejADH8-k|Tp@!R2*W!~=RPK&p%_%bftl}H31)cOW5P}m+=x_6hUb=~D9M~P${ z4o~gB5E@RjDCr=vBu<)kK6mty(zswPpuTVOGEp;?t9AB z{iM?~|IFD6%?`ypm%n=%dxRxHxueH_aj#P6`$M9NiSWVsQ2BaS-~(71^@34Nl6z)aePf$j`|olz3SspS3sKpj#~+6A zqe`E*0@NfQG-7-?A2A*+)!p#i{VLp&wK+rL*uY;45yMXtTtN%E%?LN@n=TuQr42$< zMh00NeQG^VSbw7UA%ms?q(~XKWBx4B0Qcj%vNih|4QrBz_(Rr!!qeSm837jh&%60= z7H*`eXPHwvTE1S-NT@v-6E{kMjyHeombvxA2l1%%(fsktf%Gj4c=+a_jf%SsTJo!R zql(kVyIrp5^I}&5i7SAor;Y3@&VElFaN#eLDJHK-`A3reOs^RixF?xnPpg{tsgR1g zG-Q*hAdkXh*h_AZt4wLjI%Z**xR`}Xj`TOnoqZ=NYjXFs(h4=zc1yQc`at~%{A0=>EQ~StA$4am z!FzMb>(es^zE-tBZp4O6LR;-4+@=oZn8LT~aO@7f?l({LQx(J&W5Sh2E%}aUmU3aZ z&gidi>eu6sMwXrPC?pl%_Ix@jZ8ZrC$co$@b*~1bZai|#GpTo)Hkl;wo=ky$+s8;3 z?}icwn@nV(CC7XIA~C4rk2q>g0Is^14cuu0=<0W%Bfu{H93r`T_zUXeiXAXKHO4^a zAu#9;7R8VqRTLMo>AvV6E=z6YP!i-b1v8n9m#fk(`eIosd(YYsb%DHL3U^8VrY?4c z#J9#WOxll)T(RN;A8PrO{dIoQ*E72c3y$65=aRNdzhsqH`su%IJ$wx#e(`qYc5E!R0!_KtZp zP@z=$UFP7Psp|n}Pg-WJ`1b~#FHor!*Tu+HgShO7%8l33?X*`vG1{o7KU*>l=VwZj z95L{fm5=J^)4)FNh+a6TDD3*`7c>93}?0ft91kf*(0~nP1C5a%5tj zo-@`;LNlh6*jYCC*{)JC>ueXj{%|KM${z8khM=okdCy?6yoXyq+|G8(N0>|+$uIGY zr!TnaZLU`ev%ew`0V66&x|ywR~NW<5bO)ErT-DnGxlt=a48MQgFoGCU}p zUX{0exPoalF8F)T*{LQfY)*nvaJTfzIu}hw&d=Ju{0~Pg_U0+b;~%6FtQ$(^2=MyxVrNmm)V$^g@;%_E-@MNIdr zTlWEv#p=iTWWGMet3e;w^#|^L{|7HX(7&Bu z7Q4PqXzPmxJ&^+zUSRN7DdNmg#zEx%3#KeevrziiQxsc7<`5rC=jIR|iO%_rg_`iuHslt*5Pdv1t(-XHhe9QT}X zbL_J{?s;(B^9^y&g>lbianG~jo}Y<({!>Bhvn}rVSX}w9{$~Na#{rsmC0*>J=LyqwuKY1J|*9q~)N~CbVrDpG}U}l8h z17n|!l$gFd5=>@O$Do1HM(Tgy@~Vd|robh5RVilt9?c?TVA9)V$^sp3!2`A`g5vb|J`jO zUwx{Y$;8=w6~b3_G8lNU>g0^zxzaxIpJwxyz%i>IH({1P$7E@s*pMJ@Ne~;&)JWjM zs*{rf>9coLoxCe}Sg3cv2XTv8Y%tf3i%^N+KQ1Fdz@q1e-6u9!sA0LJP26IU#c3vOti^o#c znkvlu#!5U;sNYg%tt|%ai#>4O%IVKF4_MO;vvsD6GZjF zA@g=I0-c@#otBxX-K_}sVL9U5@vvOTw|`%JlJApyFTe!dLjkjtF~s5k}$Y*O}MJXdvQ z5+Nlm==FKMiP-LYnP8vjKjgfD*x^{Zd#uC4Gt!5lWsb5vH>7 zP@6lA-Py;LZMw;1+4=O&1^%=xQT`=Ld{4Hl|!YW zSK%>-36KAcHwCW?IRTAV+ZKme%rMJ&NIMRdKvePw4WqL%LUnIcG;F;GZ#QEo#wj!A zXc6X5Ng~I<1T=t20SewsZN5U~GuY=E6Q{r1lu>O}C(P6D77v?&2BwdPhC=2hXlRy) zZpy*!)aGYzpX75~&gXao*J{$dG`(N*>7_}hsr&95ZI08}WZ=}{ez*;z9xb)woB@NW zdDWyL!)2)kNr_THp0dtzSIstCf-c~22}5B{g4fWcGcHTGoVIeDchtv0It5|Ui)&Q_ zAc6Xxto9usHdi3Rsxc47JVmhn%tzrd&8j9#&A_g68imK+Z6kwlR!u~x{VNi4bwAMm z!eR7UsPSU#mttDNY3dSA7OJoAMIjrw2pk}9-J*XdC)WLTbzs$(@POqq5OyBDn-@Z! z6y*g!S#adAsvd=2LH4*EXpu*@p|`Zs=|qtX*kE)%C_T>|GTcWAr>o!1(V8DrM@3SHktd}Y&D9Qs+v zSDMVoS+E!MZyO2k+7rCkeVp(Xa>9F>6CMH+e&m!&7ef6_2|)gN;h(sg!fB+Tn42Dc zGSJ9yweN{A8R*}v9cEEPi!Y81@v{BD;`CJQq)`3|&Wy~62|)+YX@mbTg(SGMB^DmOE3CHU~quK>fbFV+Q@htKqtTo58=Xh-ICTQq6HLHovXSOSCbJZ-)kpy!sG1j^F))$EG$*GQI-&$cBE0hb*gj!%s~$5fflZqh#n|d*2mYpm!dJEHNQ3x%%p=F_eIBj&2O!o zyMx2l6kr3UhG%ltHaRjV3O5gtpB zVsQ%;2&>GG1Mc;O2WYVu;cri9zgmye6lT+tO1Ee?cKIL`(X(W7dck&5d11&l!-|9AJOg=v?-s=6^P&_TZne3x>-7lUuPP5m% z^f^ZHpu0!vFZ*4R&m#NtB%f9GkCc2iVRe4NWXYXOxsp2MbMjN;$44QG3Y1Ea8&pe) z8U<6LYl|dvIF*^bO7ow3Nl{y&cA_St}b>Ck?c-% zt+GS6=n+{$HO5H#F`S+bMrn;!q{6zLh>8CW%lD%^SuQmq_m_^cqTkhcEOHro*>59s z%}Lx=V8{nv*2lw12ctQ;YzT!a(HS_4E_F}k5uH0J9-o4FHpThBCXoN@Cd5YxpnsaO z@{O@1Ow-vF3@SXTh->}GB)o+Ei+RHcywoye*kD22r=t(ecdm34^Z>O^Kqe62Rp?u% zM3a?hfl1ZkGyt7=jzO6JawjM)Vz>VmgHi`m3JfS+rt&}Z&SQ2xXdF*usU37c?KB;= z$A8mMYbDe!&NCPd3u59;xeqIBjF*by+Z)BSeZK+I>kR%F!uRWO_kWM0_>Yl19xl)6 z0U9r;&2yeB)HgueTl_piYOF@`bLMHW# znt4ps*GEd((RYUPJtxNE=$^^v2avcAiwl}gpeWjY<)Vz5y@4B*0t`56D1^Vsm?Unm z8d!q|Pi{}4>B>NO=``L!=K57taO}~1GI)t_eFIRK4U>jG->wDcd`Xkp5(y0CCD6?Z z1s)!0XoAn}+cELNc>bH<|H94lnUW+PI18v|&M#`%U+HkQkxufVaQ|Nk`TyKJz6S&N zrX|Z2baNBPZ``h-h^U0(>Yg=JItt9@e5qXu@e4HVJ~rtW?oIwPbOgGGP~SLxQclb4 ziB*-(K^cK_2BZEFG0*;#k70;TUsWf1O}`fdB9qviu-O9UO89z72uviciy?9OnB^B9 zNY~IY?f?pX$SH85zF|&aSM7-scx>KCD46cU3kW!^zZDmMeb`Uu-$xKRkc~cVm>P8* z%?H4?QK?BID84o$^B5U)QYP1tt#UQRH~#A4HXSr79i9CHNj~4WqA|76c!U|$*Z}IX z0BG(q{L+-?yu!o-H+sS9xyoN=Dm4l4lvJw9W|iz8WEn~&_EI}1fuD+-zY*)0l=p&Y zHNd+Ye12tp7T|_$I)XV$aINLi6%W@VXYip~OY1iBDGjvDEUYefUhieAd}LoqQ`O^l zp*)lRA|ou9C(u%yD4xR8XgnA!MVNm)fgr=~DQ<~feuN9{H=!mV2sK%WoE2n) zYCZQhc*xl)&JM=-udF1WN!3Q3!oOb$-x?!-3-uPKvT!-fd94M-_A)#=n_Q$UOdE@SeUuTi+3}B6?Zo25ptj5- zwfUGRd6JaPP4P~4_Vp@DDTu${vE_Im%oo|ud{JhN)wg&c1>Ad{=FQ_l+Je}1NmcwY zh41Bsn``)b5mpym+CCWu*dCsawgVhOa#Una(H$R3!HUHrz5(oQMbx?dBJ@`wf=O;LHe3$k1aFoZD zFZ|FT!Yt9`A07j4%zs5AS$9K}pO*}c<>xrw-wWyd#|`Ru6Zv@i@bUI#+lO~HULPNC zDeHc`iP7;kltkfQu&ayl_Kl9$SpLpkJsR(&G?HD{N5@+_q~mxkRO;pH)$v;Rc+cYF zwX@HLbvE8R_;@RR?0&qK=yp>`uN zyhLF>-Xj~W>_e`T+<3?;HIi7{XNR!5!9z!#sy<09ifeD6)?UT^AS@*$3N^LFH!7Xx zoY3sqVg&XR3Tv)*rlb9>BvSL$tl8o(iR;iWz2_G(WNvoo_{cd>TX1$HaDlkRoOAHu zOrhT9lXh3{tms`;=`))GhjI=y<((b5A^2@m-gPF^oNYEOGlq6fF+?Al|D`_j5;O-? zjL%*u6J0bLbpISrECL%wQq7LQq~%s=Yw-MITayEs!s;@2X2ay1`z(QrWAa+Thdla_ z5coVMpTa*=1E&e~<6M~y*|#SJKa5OIE-dm#d{)tLepb!9&|m~SCjaqhI{!D6n-pN5 z78@pT&-Cd-iF94Et5})#lRVm?JoJ<5#8IYra<&H@%@1??R=z{=+og7q*>gS%Op!vz zl3a8yiagPuU&Rerun*^9bLfBnji0(n;STzjhiI|MHqad2k=+j2XGhO>GW?Z>TYOSG z+kFk5#lU`WaM)3BvDQQ2Ds_WRiM{`U>%X^<{yRj^XI7RB@{n0m--T-2Dy1e|qsl6) z8Vi(!)^W*g@iOa>n84`3P-QU&LrXrJOg|L2Rq|N@NNHZS7IO3bm0DD2EIfKl^?I3N zsd-a5dxGyM^C&WU9z{mKq_>QqjJ6ru_cQ-TJVyFSyiaV>IN}7=`8GmkW%6&=6FL7xHxhEB5ue}%^?tBb;H>2)y7C)B}S%H*&d z!Mubi(Rl6ERxRZGe(Z0aHZ2VSr?>+!l&XEcD>H^7G<|n5;eT&%uZsD_6mGvwSxnep zOxQ_xCV^F5-4Bw$qbp9_psxMa3-F0-o zX)Sbf9NuAIpHMTCTdVN~;F^gft40F0r$hDm-EZde`-XaKDFr?sy~z;Yx1V=TN`z4TSA5!Goh;p#P@BX- zu%SZasp^+J8Po6)0H@ooem$`LL0&{z?wPe z*Di3t^M111hBhM2Dj}I;0`W;c29%9N7A;gi!Q-@S_|&l+w4P@U{9QXv=VytzMs13W zUAVoO0%>)s{RHFM*CJ)h_T@gQMci&??cBqZgK1vAp%5X8b^DP^OZ-AcPN%g=;U`gE z59L!#WB4Cxyq`{g`P^);jV*jZM1RJR(C``D=nUBMv*S6u{Zr}?NuWIn4{H9EOGXm^ zzgp)9u&l)prRwyszE^9u65#Ja`N}mN}%<(+hEHF{ZbxOZr1VM9O zO}~*2zzXgKn?c}84vkOK@@VchHc;e~>~r8*zrOHODzy064}3uZvzOWx&reFeJ;&k< zzNf9Xd6&m5ZDal(zfTH{QDy|#n0$(V$l_UOTos^kQap#^X=}De^*ec#HRlthuq`lM z9%ZlD8SE_&#}lQc$A({=82oO^a0f~$Qi0Q|YP`r9Kv+?gUxy+-52KGfFcS5LyEKaY zaWhdQY3>#j&sO6iWk9(&Xqe-s+0mhI@A z<}E)(EvLq|tlLYZCN{#2*!b5~JR;oXLL);(iZZp*%Pzf23qGUa`y8;t^_BB0@Hkjg z;9A*d!Hh<*4O=L$2M5qi@Ts|WS}voIbS>8oKTiyc9%`u7{0136N*)TFrZ zB)iz;!a!svaj5mU6teKNt?6!UzP{YZwRfH-AoEzK`9#^vdDws6m2{rIkhi4nxJ;k= z$9Yr7+?IsES+W~sV9E^XVfB}5k&()*2JvTyk8Qh*2PZDQJQ@q7pI^9^Iy;cb?b88g zft;ig1oexZ?$$dUxDmJcN^aMJZN4=FLn#@hHnBKaGheF5+~1pp8W)C-CpEdhH#NEc zWs+xEL+-DM8eEu4f~;B=p#~Gz;Muc~`yi)>{Zs}>E)>XV5vrfU@1ytE>=dezrRIcS z&60>9R5vD2?2k+Or1@;lXNOxek5CDrdKntgXcZ@kGaaVDSvj9n3c+tE?e9$ob4EF4 z?Wv<%JKa0v;TC1|Hp#sWen=xN(kM&K5uxTvzEc7YNv2F4te=s|bw)hXbjL*R1odDx z@S>Ax@VSL8YSV&1wPW?Fyx}`ovsb9eMi=3%9XM(QI`s!6AN>ox=LeeQnEdPtvRyUv zjLDFN4ef+ON&lj3CC9(Rh^NNGN#@;C_A(wNl|1;sluy;W%ItGaM0PG2im^Pi&Q}(g zuKCM0rNTU?6<-STabubjHZ8h(hS-pRU`g)%)U2BSgwF=$Kgns4dhde3WXWGahx}?s(&`jyH()W}e%TG<4q9<1UIA~WG$4e^`VDu{u|$W)L*cJoWve{M zYw2xJdb(9Lus**o%1G_pnv)!Pn^@jUxlvD1?e9b!!>DUI3krN^8?h_nSmHTruqmY(Khv#;mz z#t!zcKXoXq(gV_8SA-CrLGEzd##U}2v$N;^#KZ6%Y$0zkyyO(po3w`n0QSw*`glHq z@oc079)2?DrLu`@xxtGW;(z)2chUO4obUGm*zfgqKM~NO%wo|4@aIw^c0WtFoZ`5? zryV9S*BlHe_ce%G1}ksG6Huq4;vy=xBcT@lMI-*fi^-)BlW#(C^%7gm(_M=A`)%B~ z=%L$jQ}v1X`x-tGr`oW&;3|;rn^)9rB!9?qL;QtaUq8uS%4;@nBYTEY5r84*-9Y(| z(@6x+si+XDf8(nS__!g{lX1NXwR=oFp*JlIkZT;;;&4~M%21}Y!Qu!3Ia`G4mkAd8 z?OYUsUw3ln56Buc-m1|T<30+UYFb-hChWJg*}75ID2MS~ygV^@DCgtKiNQX2PIjoz zQRxK?!nkVP7b|X;hn;o3w)wn|Z1?-CxOkT#yD^r=21vtXj1EFV0^;wk)p)qb3W%Ui zgEG(G+z>0*g1po;hW+V!#7@&?6l|NW%&Me$OU6CqC|lc33=pIU!O5xmXjHyX<W+#WBn+{=th#Xm|3N8flr5O&oE@@xw4>c&TO5;4S6@oKKd3 zGzIfCc#n9(JWl*J;-{b%T_nAfE@4jbYjP_4;xdx-oq%>Jq==#MY64v<-Sz>uMu7tH zB3H!h@bgu!#bFY<+Nagn)X8E+l1ZrfkOoBDvY|pyKlFnShZD&$gw9YrQw+F+P z6w7XvI57pLW@D^DL6Oo;MCu8nPGoG`CUl6$0zBQ$?cpjxs^=d+zzN9Eb?5#hMofi; z8ltx*z6dzJhhks!J`f zkYD580WEm<%kgwwb}FB7vyYwjK4+@4)v&2NI_rr?T5|EoChTChYl#66(ORi^4FC?mFi0~BrlAnEhOesJp%^h+jXp!E5`@rD^Pdg++$~ml1f@o@!cPF#%bvNA z1eXG6X=tU>5tyJ%ZNWZu5?isgx+0PgAP5GLLA)j3e#v@MT;k0(~7qd`3rj4Ir4kxy0RS&hRt7_yLKFU)5f+EtqEP(?Mo{oKqN5>n< z@rSn!)E+)t4e~Sjn8L#n!dFw0ipyeX_#J*rde}w*@f%{6(Ua;8>ck^X;%XtQ2!?jE*)2Y_%v$Ac_(qowx#Wn(mX4v-Ngt6 zn|Fn=Pb zOIe6efT*SXR8!M+*>_W zv)v|TSc{Oi13J!W42X&txWjms?C4t&9zQ)b4@$r!Wzi&IHk9c3rOPhUCDuHw4X7bt zHL-8yTbw$Na{kKCKVD7eA1~6*v!_EPR9L5_h)tC~R(c^yrc*CQuR{5`d^rEINUXXc zm`eUcKl@92j8WXUKhB@PJ*B$BJNPXO`Y22Avn%3i>F58mDE{Zdj_`0%$ICvu01r<_ zbE)*zSbE@kuC{!sF5lHbOEqZU9+nW*5!fw8@FzG2u5g73@oajEhabM^#R z=uIM%xHY+B!#;NI`<%5cHRgY$@q{kWZ-_#(@e|nFCe_;RXNfqXwAA)8Kt+z+o6h^ z8sOhKO$W)Q^dAQ|w|p~*A1*!nT=m%z7r&(U_eN}gFJDRaAFaPA-eufh>ovS9jwo)R zV2X~uZ94kO_-)DD&s-PZAJ_k=vjc++^BtIM=ySjz<6NKP(B}F~nTBs%4>|zLbpXOE zdN6;@b#dd*r11~J@e9?@o3zXU94fS~>g`J_IBxGh-@xdB=K9J{ao-Nc1lmA*;+)^l zN(LBgU{BHdd5YH0L3QPjXcF8-^NUqb!tt?R-_|&zpPfCRi+K!t)j*Kw{TCT@|Hb*- zewjy??VJOR^lBhVS%049Y&W)JYW_yc@4kfU59zAD-2V^ikE8mn=jruf%fe)qR|8_M z!)tAnI&7&I5^j-)HQTk+vwg&t`*_Z5Lq2cbe$8Il6x_-yLaSQc#|K8VAVV!5IGqnp z#L3(;<2+I)PnWAu+aWCv%J6LECgaNv`6L%#LHTdag=TwG(5PLZdX#g*LiKYv(H|?r+JtH}1|4%sG=~WJ22A3?0*qdij^0EnW<9JFf zXN?Am>G@Wq&&NogvPqXC$ymhNw&b9SytJ|T)eiI= zN+P$bE#lJadbEKeDeuL1JX|aq~kAJ?D;-9HJ3ca>m6WO)NzD<_vWJ(RrekBy7#oiY& zhOMCbqdKo2;n|?o7FOvk81omiQfk5K&@SA-?cA?a5@|c7qtXfXc^l^G30{c{kxyG7 zO}$?XlLk1Bl;WOu@Ewlx7tP zq3&t^D_N?;OBl7$tNTFno=)PC77r%=KR~xnV~)SFWHxo69>4Gg--(3H2c+#qig@;I z+^+y=a^V>=opVh1JLgZ6rH3u5gtN^qjR2|OO4vx1`KU)KBdpRbHkp1)WHb=Ta%7gs zf(0m;{7)`&^b^oDwTSck%&&k43_wdl{Zc+eJEn?vMfPytv~!M9Ncv0T50a#hj@mb?gX)>yfbhP&Wqz)mFBkc~}AB4S1IU6$i#kkcuzjNE<(N@f@ zX{FqnJY^9JxydmtzDamu?(ei<7&|+BIv0U2JOhDzTH6}~%jGAR@&%XyW6O%>nd@Z! zFQNHAo99;xIJ03H-B+n>T80JK+B5J<&N7(7RcD|j5QP#n4)csq&(gbt{GFY@>wPZ1 zQ&H&P?;eD5CCXe}4CC;5%$exc3`p(@$sORPOKEO8{Yx~$t!Uf`H#cfNlgL=Yl`D(` zvpCr^eRXl*e3Gawm`dI1W2vV!i%z3ZOR)$%LttGkC+1R<)e4Y|b!f#%+7W6Q6)ooe zDu?b^p7R2h!{nazBT2PuXj3azoB`O)+&Ny_q0gh1nUadKV@_hR2-LkCC`v(Hz{^ax zvd^#p=6e3f8UNYKN>AsjVdClB-DP9G)47){nSDKoJFM(%`03G2;+p&~4xYnY_ zs`+JIKR^Up&sBXJFlbm7SgSB*o`$wKnWh-7n9MwY+l&{(nwam!9DQ=&1ZK&q?-=GxhxOz~HBIQv*%NJ-F1O#_k3) zkhsOeQk}X55hS4bNX&DZkeD&zr6q6{t?yAbDOqf=(5v9D82A*j%rlwPme1?UU3XEp zg2w-=G=1anMYR8&VboXnpi;F#S>x`9TuoK{XYlo1?#z})IE8voS`pqv1v7mw&&1s@ zkz5uIKIu;^MbWSd-tmj%th%k*hIv#*IO$v>jK0#te93^2hbg_IKSds1p^OS318fUA znr~J2EqL#?!h3j|vm=l*^gdUxS(%l__1|PQrom|rUc>djKGY!j)38mbg>CK#hEUbq zQdz|QZ6!<@&S&`9w^l8;Gv;gtLiogrOvVL2RbL&K#a2J7`dFVAxap13e^*fahLwy_ zy?pHNd>ak}pNbgcop}7pqzg&@O{VizGpY9%Rehz!JbjATk`OFb#9v_vVbG4HEWz(# z)6UW4<8#C&v)FD4Tp(A!mwFN}u+ZhD_guaCb+jCB3YsiY@(w8@JrM0Nd_o-Yr+pakbL*R&}8NUO@V< zpxyqLB70Io2`F+$rr8zIJ%eb&d9TI{W-d{MA~n86+K%~;sFDBl<11!bifqyXT=L2^ z7p>`D?h#Y{_#hwUVZLxbtL?2K?pT1;G(7Y@5%Yt9&FH+PVx+BUiRuQJkqXn6#8J6H z4>;BG@q9`i(XFYJ|FoZWCbR@|a%*lM%Fc-Ca#OVY-r@%K^& z23%UDhf`}u^r91+Bdio&JtA4*@rTj~7;?i=x?>s3I%-EGd6_>&XABkBNQ{NJcq#2{-MdC8RnfXgfLz)@&D|p$|bM&B>7X7}u^vx(yj+a`9$J5O( z&3laZXK1&Kq?OT39>hN|c|ZvVi;);G3OuM3mQeuaBU_yhB)v(KG5g455Ly02GnD5nN53Mb zrbid;1b$Rcow5thQ<1u^l|pc@Fl+P1&eYJY-V-3K4ygezVuRJgo))z4TZC#1%%NG$ z+*zA|KWw$b%@Uj3$gH*7G33_%Xn`|%vNS3ob0>fKD4H2s@Hf1*WbUj2$=^h;2f~Y_ zic6H?s68eF!QmC-5q>#NxrZfNwOyISM?9!3`BJ4_lN%3Po7}xjP3|Q4-;zL~@a2-* zn%PjhzZMT?0N9cnX)K-Mdo>z!JACZqIr?BK@U;78;ApV)3F|P;7y*U$M!XUgzBzELn83ycFKpw(8&3A1 zeqz`4D^D7C3%*~_{dXyJ|6QL%E_j-(AU~RP!7~)RfuD7pZegR6Rc;swjDw+9eS~Qx z@k6HmL8!*m3F=iteBH7e&(Q5Yo_h)V8wmSmSP-E_sue4`uduVC<;$bxH>*efaQ|PV z87v~#u&W1>5NBcOTqV@6Ibt6s>+LLp2Ab=Qqo?t+>~rbD%-waQFP!ec{YgPJvk z-w4*vt}@JIEo}wp{{ucMH zR^9(0yGwK#Y-u82G45jhm6T|ZHNAc@Y=%ah)X28p+(ea;vj^Z$QL?5hm2a0)4uT37 z{ILj+<#3r+5pNHY%57896=Ip6#KuK0t!j_ldm^3A1wU-?&lf;jW-~hAJ*B64d1y>z zS~}a;TN6fHtT&25Cb6ZzP>m|1*m73DFY??;Y50E`zj2qsm~j=)c!Ed+0lve$}#n%3T5n}6Efqb!*+m!-)6fvuutl32vUDz_4JibnTl|e%tP1_opGu|u* z|5+|YF5-#gmDqS`DKv&nAAlq3&qsvzF$q%)mL_{GRgoF#Y+f%N@IV$@Yva^(79BxA zr#?XB)9z*~j{)g&4w9%}>ju9zAr$;kJzv0%^~e67vc&Z-sQvdg^nX3eQTtB_c*K_E zKoLTc%^|5WLXsN;$xDyNLZY4jjDd&WHun{VGDMp9tMTltgrI9lBysfXQRiNcw~7M!NRITAs~s96M}gS2XnU(Oh*iuW9P@sX;*N5qo02z09Pk) zgDL=rDG%hSPETnsb%rlCfKp01d>1@w^rvDFqcmb7 z-X?K0CU3_!8^JqXI*M;Oz+do*-`gSok)84%neqHC`ZMK46pA5NJJE23hWh^A=;;!< z47s$0ayg)>xzy^l4D+(#37S)20PT_M=gw@8ti`nC|9(}devD*!3mtGFcHw1bBt&sC zg5B7M?=0y}mB)bjk0*CHl`DSe|@<<`}kX7SwWx(8sCk1X* zMEhSkU&CB^J7%jo%>TpKvw$~IWu25z0u(1g#fsgZ;>M*&S6W4-f?B1etQHN0q=;4d zePFE>3M5bvA$1by5JtNe6+L zqPxG}Cv9i$+~>LH{lJ4|fjC~P-eNNw<>zy^@+q*m8k*60=QKtlLZ7AdhUpJ78R&a9 zKb2IBr^@1^!k90IHDfh@#`>O*k}1-6%m-Y6ef$zj;(d$=Z~G3l{fWk_e@;dYvDWg&(|KB*+ z;k1`D@`sn0B;PY8v^Qh?8$YpUPtLVtrPM$3xnp%*1AoSMKs&={m8O&J$j6d6Y{L)z zEz;u$%$P1Q)ePK&nLbNZg5isGJ9D5ggU^$ThT)Qg{)5Tpa6v2{k8lZ}Mfi=lSr;-k zg0hG24v5&PIW2>j`Novcjac?TX;;GRZ@+;eaPh-&xBol@pJ_FC?Z93;BAy?YgCKj~ z0x@R91N;+k5M&fnM^O{xi|ID#O__H&}@nM~A{i1jt$l0!64pUzIa)iHwe3shYM?OVFqt-p` zAuSb{ma@tJWg)5Ehq6s4qv(4Je5y&DUW&GQrKxM|hWIf4?b6?xn%d8UvkZe{8&(cM z&j8F35f1X-;Lc0Fd@u>zYRwA|KZ~ioQZ*hiJp4>&`#aVD?1l9|PbZW4{1n**{fwJJ@pV62R3SV8)a@O14sFQS+=biu{M&efbGxQxYL*ZSR_~ zd`o{MiZd2&RSDV}mYqi9K$;R%Qta&AHtMsjYGgbZ5$ell2i%vPQJpcl!=kt|&rII{ zHE`q~&*Zd0TxX!@DwC3uEe9>RyQUul@g(vr$dPgq(XWdn-y)Pj`ntyf{9I2oY~RBM z8df`B%QcfJfan*$PTMtOnnuUdjl`=K30C-)xPF13vh=?D^5|qf*J!w>X4h!IGXkf8 z20XWmgxeANqZXm^#sbR$XVRSQ8~(%@r|_gGCJ3{k%mweq3vUPBWu*oJvb`98G`2mH(NR41w+E<6zTn9+hoOI z%V{*mm#m)wcXv12)Dz(3Zr*qGAsbSAUFHA~^USzs@??lt1DH*s<1Q|{*lDeHur;Ry z#JI;YW+H-ok$bF8kcV^O1EmIcjxKx*RAuWF#1h5)kctv$biVKRXf)&_vzEBn+BS^= z=qk6L_I!u7aWmie$mi$8_hV$DYg|qn+t&k@=WS1lyZs_(73pn=?*m19hMUt`tjATD z=02<(Q`#Z_*#Icd7tQcc&{W;YC|dVSWvNc|1F*4G?NObG!iDL?8hO`J#-bx)|EK?7@KQ#ZwcuBFs zG-a!s!6KN1!m9flR5RQZg=l@4fGaUDY5QXw8;8YQVD2Y(4!A8X@`~<1hA=%k)4$!* zJ-qlB!FhP~S>c~Cr#tL&zmu@bRyOzA#5iD-f3QV+TN3$yzHW{4rP-*Vo27B8?rd*W z&&%Bh(XR<#9qN{-Ps)kWuiE|1iA8oN=;Ly2^M@ldFn3U3f<-PowAO z2lBWqp9{rT|Je*`v@4Yz`h2ma;cvOh8uK*dwDg43iA$QfP^af<!0Ilt%1NwxUJhg7XoYQU=Mdh4JJ7B8?sh^2*?%+4n*nc%2q(>(lMIgS+i#rWDw@eLCtOy0Ls+ysD}i(0v>!osF@l1edG+RzykV2FTWZ5zMmnaZ|t{iKAEBK z<*(S^@C!6w@BE!Pd^n%1Mi{HfDo9m8dSW@^L3D-5%sPMfq!=TXkgr+r_xC5md38Mj z=atGAQXH!sPv_P7w9;K{!s+;FZ9Iz=ytY>Ls@{?k-&E#1tuK2SEZe2!ek&DIn#JXR zno(qHg8Yf~CxYzrt}vq+#{n#})H>@-tg?AAq-jitfBppj{ErDMZ!(CVL5o2d*e1KG z74|%9m1<`rEV^qKI9Na}R`*CqnrV{!K&Sby7n|Jw3*Gd<>cLL- zAj#^)TfYd`ty@kD*sOLW=<(8L;%4obrx_LpP`&L?H&}VX7wETEU~F%W%}i&lkCNga zO%ea(h?uvC>}9zfIy^K^!DzD7#P8NUN=67YUENE_S(RI1+aq6|LvNH%`2Ox@Gc2&b zeU8D21Ly`S(-k+zovY_|L)Y+I!JrOEK-kppg!F%_y-*;^aB;_+B6B*>w|7p{#cgt5 zAuiZ9L;k76-YWFoBC9n25-Ypy6cLI5s(JZcB>gSt=Q8E?UXl;9thXm2#g_87iAzY{ zAQ~I8qKE?+a59Ly51&9HqRRPGDLJtjBbyh@rO+ixQEY{K-^=s7982;%!{;`YQuiXw zES(##--a#2(-Y(oKDSbEt^rESKLn+@RVH&EVkyTOj0?u>>gd zO5A^?DGVh&jsEU@Idpjrxy{# zxWhfBz=d;vLYLf${86Zz;9U_Q0vASpG2{adn_(;k$FiWqxeaQ8xNFNe(2VkSnB5bn z5A$|dW?l*XsdckC?C>9DUPz#6j%)GXnIrUc7DK*p)P^5ISlD?G=SCHssnz6KeE+fP zvhtk*Zy@7aJznRlr(?0M2acffL)nZF3bsxxhn_cz%hn6WfO=t#ym(GDX8ta=KS3V0 z3W+Mb>IlM;H8A16Kvkaq8z@U5J^pDIjQUHF8_ROG=d=XguYz0AUGtyl2n@?TDJ{(6 zt<0y?IcB*rCHJ(4abeOL80pB}CM{N>gIgxa2fa{brK4NmO3oB#DqjLYbQA+MRI5R6 zqW;|m>XMHf{B<6B@9`E{Y|d=bnpm7*8f1e_s5!~fX>EQNtk_^xEi?Ux)qEK=KADPD zDYJIgqF^Ql>G2^+2#{K7IbsCo+HD$tX4~ZDPp*T1q+8p;9e(Kiru|9ks4S3yU=FXw zqMD!Ph9n#v0@W=3m|_V8CfMd(0aBZq`ZoY*HS6y=Ek^s$1!YQ+ElX}rF@Kc1%k!&w zE=T+m=<;&RDf0=LgD_hw35R0~l*$zIcgpBYr7C?8pJt5%1TpZ&#*)UQ56Njm6*%W1 zBE5+Z3Yv4>5V(IMx#-2*@0n0f6PuNVYZ!T0tYP*S{O=THD|#ZZiW5;`Ot=Z{Qx9Mg z;fa#(a;la|21`5&QZP7#askwAI;aO{k&dBF^1p4y4dMtNBz=c2<-bG~=ZC2dD;r3T zePJjMqumRDpDuxi9D#9pswEFZI(4pGrWUkc2iRR&c#WAtwX?*T^wCA`U;r}~WYNG@ zr5j&Y@(Cny_$?H_5mv&!)C0XDenCULp%q1;!p?6reX&+uV%c@i$LB97sOd8$JvJc z8h)Y^`tTT@5Mazc?l8lTn+ zqNsbzS*`uvsgR1>VBh2Nbxvc>b|J!`b4qVcLL|;vNx)v&y!@Z@!43_wbsBiH^n;3# zB4tblq*h^^RlwY8l zG6{2jhPjDx8Z`+yC+!R36GCjz(P*MQZfGS{r!jQ#ikqa>PF+l{McyG?rRz(`e(I(u zCr$(QQbpR$kX$3v-{_GzDF8?8c>Z(9UBH>(pME4k@2f<51LPv@G;GE?mW1XX`T1m2 z%VYosLI3tqcBO;$`3(lD>K?d|&#oip&eDwfTHYVf%(FYme7g&ryBw3SrE;O?3$+fo zO;qctb&PX@#Q_({>C@BMiW!3I6x1grv0pC#cEIfVu_S}PWv<+Ac5^Y_iYgFee1KRl z2fdcIxU_f9``Bu5E?{pN+Zg$Yt~lr`2VhW#3L5*eUQSCMn8Nz8sNhe)y=eqSxk@#M zX!avO%3HCQ-?%_!W~?$bR%wyeLIly`N@UXDPOP7fiDgFdGag}L*1B1(G3(9t;;13(5vRYHErlJ^0y6fy*~=z_u%&skdeV%^b^0I7(1XsdCmdKD8z& z2WFSIq{KYdu@I6Un*|AXSCZ*LWVyL&I#fQi$OS28z{@R?|2Wktvj#?60*+L(D_y;D zw%k5jTKE{e*eEZXL*7f89emu8C@Q6dJ}Og{pPU&te8UdJbupo7q@DuaFd7gbAO6M zJQqo~MtY*%C9B#!QfXFiGUtXo$5gqE+&;J9K8}iO>*rRI=lM`J{oAPSc@bW&)k#xt zNgm+=BJ}UfiEdT4Q%4)=?Bq-Gkvd` zF&9Ux5{=BE^XXVG$qxa|?O5u*Sz7Qj+^vq4lCK1xy(js>2!n<7@<|y6av;I~R7{R* zC$TmybYo?*fzFSC5}g5XBnq14t$cTDD~8WXm()L#kt8KBJ5?<)D`Qi6Gc~1_12OLa zZ+6E9X~F#f86Ep1AH=Lk3mWkG5y{ttzeL^31FC(s@UKEuoYEH{T$iGD{1Ase^%N>bqg;F;P_wwduP5auDUE(H1!` z#S9^G<1FG{=UL?TrIPO>{`dU9$?Z!#PF05KZ-V(b^toI-MRStO%7r4LzIQEJ^0%QZ zx(8tn=#wZbBezE--z*E2qMk}kwWvwhU;tjR!34nd50et*pPC+G#4Mq**7I2{eHh%x zZJ5Ksb6%*xW`GY&SYl%Dao`UXzylK&xn}p#%;ZNcTnIlx1tDS{n~UA?0dW+*(m ze+vJC&lJpY;d^4>>8Q$^62>d75POHd)Yr#wbcCiW`0pFwOX5q&#WZ#eE8nZ}lazR^ zA79qpcVcBH7yHvj+PzU7V4JI%1#`o3PCP`qALu&ru3GnU{MFau6`We+8MUrH{;EN| z!uvEE?R~Ia;_Wi=7B9>lsDuiSk7;>ekIWS3Mi7;uL)3#08ILbK0&Y#6*18z6r`GiP zhe-2;C#^Qd$VD!BzIl7BJg zhgmhvc+8&im;m=Kl8>FiGlv6*V(kKQ!#lyg%JHLmbCUeSS$BUz9j57M1U78SpmN>O z^cq&WM}r1R?3c0|Gkmi9>Io38YuD?^QT`N8XS&a#sZspio(E|!^08!P`tT~g1oY~a ze-^AiA)0p|q@pEi2_%UbdW04ontN`45s_45XWFhbd-jD7&0@e&>V|7rRRIeb-4;Qf1)=z7J*X+AWg* zB;*+S`83@(Yr;VsDx(kYJFOvxq3o+KY0t97e7c{EPHX0^>c1>QEncdc)GHu(uFYE1?vOslUsG-zwp7|Ayu?!#HmGtPsJwp@=<+7Q@~;$S`L zGk?tev3IWh!Xys{P4t7jvg1&-ZiPvW=eIt5cMJ`YfbsstXMFN&h%$Vc^zx`Qz&ZCj zXU?bx<4cdcGMVtDkAGcmjx_OkZbJ4mtm|WmZ?{h;k9OX7f$d4f#SfZNs6eub{AY0 zD$Qnt(rmc7s4o~WoKHE#jfXGnV5}0JjIk_)^ zZIDCeKtVce2HTC{@Uwr?L$zi?j>8c!XAoE&<8Z?HsOO5{1+>LIIeyRot5L`TF6r?*;DdI4U4A9|3ug#% zlG(HMd5qBKF<6@i7?NX>Zv`-A@@vWPCI8di1(1PSznFg@`5QpHE5EG0Y)PW5g(dhH z^x&}kL1sM--HfPKI&I56Vwj~g%nA6U4q#30;D5dcJ#i`gQ2@~uh=C4!W~eIwd1C09 zo9{;;py5xB;=14_=XVn+jK=f#6Ju-adm)VX)ie+UAe?f{XTnKH@_z`o6Y;GXd%S{P zRd3lC_c;anwwmG`Ea1uKDDT4F*sW0}Faiw&W$LA-R+H&E@UoJ85txU3>+C4y;T1FZ zk_$^Ayh`w22yv>3c;N6~jP@fwmGwRNPvlI?O$uYreIL`5>4l(~$9*+5noR59pYXrQ z4n(vBHh%~xL7jd1t4m`@yfb3-(~kDVuEKmQ{{SHR$#)2%{!4MzzY<`QqG0*~0{pE& zBm9Q}bSdBeB$Dy0l5gNyL!B?ah5dif_5Mqs!>XR(`T+_iTM4`5N1-Q5^0cV(iTE8T z(_!!JNoX1m$za0-mcz+P_Y)U5*Paq?#w>j&rt3g7e-beiwefkdJ9@)5fGX+;@`?8m z%$c>5xJ7(p)%IaWyuTs*od9QwYw}-CnMKi87fczZ^8Wltx_w8wLu?xEaW?V%upNF; z-j_Gt^DQ-QR`C48m!9oZZ`sg!Ki>Wg(H>zW47{x1FAeQ7c)Q26c5pYtWxw0*Lf&qo z)($RoIOliU_2%ua_*Qd@nIT{-17M8*6TaTy_E-Odz+>SnPYe0K8)B15v-N#Ea2M?3 z(qt_Uf^Q_ATz>reZ@r67;j%MAPeVh-xgg-qkto1ATBuXMXY1LtCEM|;14gC!C;enPUkc%0|Hd4kvryJGzA9Mf!#vM!$*IW{XM%H2p}aChlab zfmQsSa*VzDjd1UH{5q)jHGd8owgT_-w>7Z5Y~Dr|ZKN6ql%jUUr1`bh*x?GV?lm%V#V~yD*OaIty3Lrlz(GDw_Vd@spk-gT z4_JRJZ7MwxG7HAyZBQ_^bHTP86*5_XR0Mx1#0SX_`6R(W&QZ-Z-$GU=NL^dcA2vX~ zJ#ZI}Trru;=cUR~zPv#@%{x#fWn@0lO5G<_495Qpvvq`hRo+2M}|ctAw53 zqPd9P6sUtym4XTW7SEdrT|%mtOyC^~pa@ZA&=16P{HSz5W`$yQ z`-h-gn}D}tgdNR*?7i>lbb#tTOSdCD7W5~O*q;^d(mj4s++^FTGS%7jg_!q1H#> z>H`VdPx*;nXB!CVfB$91qeSJ?)%q>Lf<{O* z_?}IrI~$a0R5-$B{;1-o7-cASvA=&O)clfC1Xt}d+@FGU;xJMX><)hsHN<&@B;Rr} zqnBUqVAWsi7Hi435A*Ao(XR{6aLKnEcN7c=CWCA;?CuHWe|51*Ejs&g71h(VYR>ga z1?OBU)8s~*!lguYbvig1K`74Zm2UhE;(!M#U{MarqO!;NAES3{8eqP>)ZCz2w!?in z*nRPw3Lv2N0u(3Nt6TMf-vO8`7>cbud$g{0ZP6TUZBPoOk^Im&=7+PE);b4(@_HD! zmGjwf8Uqo?7}+osZ}>BKsqLst`6xutcDY`Uw3WzIrLdlQ(%AzgM4jfN_A3k3oipfn zRFytJzoSy;4lOTo^Ec>e2XjVJe6ilVH4En&*;___O$O_RNDom)(= z*3=1hHs6I83HN1nkoKjoV6Wt%?u2cDL2q*jEn#WD`8S6O(6$_2bw;!8gMXJQUo{8u ztIL6Nvy&dea8Kg|P4mPx4Qg}3NwD3ld z`^_;-kMP1OCmq}J)5dxotRKJIT?c)bWO9w;6WJ^u%2aF5B#R^!kQ}YT4*nl$#q93w zoT>QNI*BrZjkM%`<-S@us2o+-t%<^94oYi}ihcp!oE&MUoPr{H4oXLq`xUkH{2%}q z5(==3ngu2LWBKW?esnH*{!I!XgvvM=q`8C-CaFBuw2>YA?cIxsbehm{MxDk5e|Y{d6h$ zyV3q{B;O{|$K+`dmTFnHx^Va$GL7kamm+?(Fqa(gHsIVLygc4Ecu3;MMKD;6|x0Vwhg~E%VUf5qyBPl&Qhyv?v%i&4At>-?p9@&=a4_< zw&Y6g@u2qy0D}M~RX*g^Ag+{MKaQkuh|>cFb#A_Ww6qZJMUJ@e@KFZq+Zc^?^3VCn z>KP1rrdIa#_vrQi8*l{wmY4!{1gR zxylgEGioge?#gB*72<%i*wg%~!54f>9S)2=N%xEaeLa3$vk7;*tk);Xx;u2TRcFeGZG>@JA z3LyQ3V3H|NXlGNuAo`~iW>t++3x{G-gMLnn*TpO$&3)!!-V(@`B{nMyRK@+?*258` znm0{C*P#2Sw4d=DQCAB+hKnucqy;+QlN;>-`=zi2xY%P2{LL(IJBfS{mnYdrpOAOW zMeYhB4-XTfd48VJ1EF9nap`p+!G;Ql!lzs&=*E9VD<2A#K&Ng1)PLL1Br0)$d9A?d z z3~qZ2guCq^+;MIL{6C8PMsJhQZ84oSd!|u(vWa&&Y#Yi2w~=SNd!SnP3Aqe|TDzE1 zPJ#XNHbP(3aepSjwF8m1UglsG9l~&<^RbrVga#{43By%P*CeVGLLKWOfe zRf+U&9P9W3w&=NL^1qT73$@!ijvv_N^_Z>~A41~=%mgM`5w|vd) zo=gdSR^$7bhW7{g`?f7s$%o#hc;rZITi)07j{bq9E*^0XW6}o zZqV(hbC8SpdvMay{2gpQaL_d9o4~Wt*Qt-Kw-Dz_F!;bug!VP?`yGUX!l#k(o%mR% z4;SA;gZIXGA=dfz!{YUiP#mr?q%WxwmQ)K5SHvH#gNKjcILrLlQ7-SVd^rE*Z_qJ& zg3qN>{0WEuoe2M%0RGbm{=wDM4AkOFq#ZRv@ejGG<@$A`;Q!iWO1ONu*t;~rY2JJ) zX0;k%i@o}B{Pv&T2#S0><==w>cJT+%*zL5B@zZA)?1=AZ_ZFOnZ3`Zgp0Chsx?qXnd7%lgf8QJH392UcZj7Z#n1n5_-J^UuVJV zbMoKsfGxhJL11BlVtf_CkirTZqlVhUz8t)sktzzcm@fc{$X`H$D`G8&C=2X!TQpUO zi#0SGMD}WpQyKON#(rH6a5BU+@pgx}w2sYDNU6w4@$yeJ6hDGLKm^}MN0wXN194rD z23BX~O~}9g^PnKdlJAa~pbR~>2(>P<5E_5)-mZIUiC9;;iVl3QPveJ+*yW?~$jNcw zOI1GMiyzxXX2YR-K8?oW^;8dhit^7!lz-F}NbTyE@^97ETYR8u4idEz{1X9o(t2%y zobh(|FCk^#%0lwXU|miU{rS|8Z}EvW@JW`T=y5IhqVsLD2J)<%slH!gesb}?8z$v; zSdag1J@|n*|4=Hq&hQ-fcKq4BmP;D%0us5-#Y!6WJ|LGw5F{|(JkQ*gUue#7pAYA-l|Lvj z;RDYx1k-8puRsMINk)D0HmPBJa!ef^qp^PFO@o$Xlat*PZ+;DEn8AwQrB>M?H57G? zsSeJ4UBJ7)jeis2XM8l6-xclXsge(@1Jc?8(}+tX9|SOt7)U8P;O4IHE;M#OMTK5w zLr*=O^a?>xSYLu>tYK%AV^i7QwVKzIt$IsVo``W}U#{bi+mofo7bChq;iu?MzTx~3 z8yCP0n6JwF5ciqNyRqM}n+&YtaIM*W8C#-ta0_-YV!=5bl)+LW8-ixo+i*7E=DW3z z`r=2>3I9DhUc1O9^YP6X@4e_F0M5(S8~xpT2CVAXn7>7_%{vd- z4x|0e!CqY>E_>w1_(lY`c>MS{)(_ur!1t->i}V`u3Yd;h$Ro-w zcKkzVR)@{fAxVl>Ga=V)w@$a|`Pb+2dl#KK4CBZSS=E%}o#8;fYEnLnRT5?@e@A14 zKX><63(e@eutAT1Fip<@$Q|vnC{wJ8)1(ww zluX5A1#2495Tfmi?yJN=8zzBQb)|8XGb3;l8rcjijR&3LcNucF2e~5X{dI#oM zlyVF2EKqD!9Jf-P1(d5~S>;hSGg{`D zrl0Y*Y~q*SBo%akd8C66R}4AN53keK(?mJE%=1$D1Qp)dD4Su9kCg(`GtUxmSz(cn zqFq99T9nK9LYodGK}tyTX9`&5oeA-@p#sVj^DCjRm?wo@#AmBy*>esvi9kKvB5)gj zbY>Mj+7xdeUIo0H#}?VD*MAEEybOFV4lnbpu>PqjU<(C41IwmZ1BEuMo&tu5ap>by zbrpF2r}_b`A>q=XCe@-+0Dt}kCiv%!gJrJ5?Ubk5%z}yqK)Mf%qAP=Vbv#aLrj6aQ zikulou8PxQ(1XFP-8Q)vv!mQ(k(({KJ19p~e)DF7KNr0Bx46>+N&KV}Th;y^{nqk( z`+~3q_BBbQfl1+)j5WT^=Y376&`JW2EmTPHoP~GVu zATDMvP;FnAfY8m%4c!=MH0=&&8Kz7sUer-$vY1Hk&)PZHd;4AGL(~fUU!81E zoPn7Nj8LVS-$2fSl;6qua=v8>*XA@nyDLALr@^!$1*XKanV$O7?2Z)rC- zB>DPMHa~}mGoXU0!q28(lRkzd=F0mR&zp)LY&3D{tZ@~Q=OaJ|rOe& zyw>o`5Ohh?pan$YqY1DfoHDVt+Eidc!gyj|4hmFOk>@~>oV|D_tpkcbE zx?T%W_AWPp8-9^Jb1YM-8TsC8`8$_31NaSF1>k430>cd-mc#jFKv`1$GmHNu2*hB< zwRmpn^kk#mY5~N-cD$`g*MGYX-nefH`Ya}kAcsRrSbt6TydrWGLtez5-` z9=Cdn$w~>5YH?>HM-uHL2bxg+c^f92VTsQy&BZ$cmVy;%Q;{CuV*+0}3+TT-gL_%m zb0LU_78|G8N-Ge>NMD10RAU#am&Tb&@VP~`sS*S<56aUf>B;6nJEey0{_XBB0vqi^ zdA~VrCtVPUASt z6%H)KT*z^FzT9N?wRi?Z?&aTmJ4)Rn)d}X@?`Mv$NljM1;xDDOV`E&J%HVj(^S$b@ zwl|d7th}PNUvRtM|y(ZG!!n z@FvCAYLT^V%Bh+nzWD2rX#M=Ic5s&~r>`wd28qh^XLS@8oOq*%O{Y%>&BIdqdb;~t zg84SHiOXk+`H2xe3vs{$D>eVCVZipeSY;d=e+*C+Vhs%uJ_x+{C|D~}c2+#@ZMYk5PdAvIZr?#6<=DH6O5mA57ZE$81Yt?d(8 zk<+N5PJku|;tyK->*+a^Z4suu=d;|KKp$a0a@yEc4X`6$t{~~>Po zvJV0ikg$w!u zXO>dC4=zv*M7^r=;Dwkbth}!}*Z!9hmx)zPFX0<`6pEQ|$rgw#oA0A}g-CC;zA*he8-VL6P0R<%;X~OR@R~3zeqMfHHQ2jzIGj}f0P}9z zXO&()nbNdBMd_&CZ{m-te}px5->Ec9Yh`F${iBIL>E5h-)%_Uz7Fd{(DIpm(alq_j z8^lzN?q2dEnV6;hAm&mBq7?b9v%iM&CBnp&8(;%Je-+jE#mtR&0czblUFIme;C(P; zts~JSXo!;lblSciK3&Q`1=LCPC9O)R3=*Ak8T)lzu^A*jHspnD0O*D_OwB7oD*z{c zFa8R}kjk)x8UOQ1_;Uf(UZ5x5U$t^uboWZw6nwJL(5CcPCo-l zcffZsu*Pmn!lYaO>uop>9h4zQGv}I;L{4X<)4>Js&aBE~IP{dkJAOZGC9#=SN9=0W zrA?@^=WRin{y8z#N~eA}LVwjLFG2kWoKE-UTK=U}tbyI=?j6AU7@)hkt@{qoC2;-C zENwMnFonYyq#+Gwo-z1GbNP(#U^rFyiNpGXUJxYAdcAv;zf8X`uWIs@OlN+MzM0Q= z{rfQA+h3viQoZgzfd$Z>g5dDidA&5uBaJ))N|XgOi1SMECWl?%ry4e zGB63v%w+$fS6S?7{);-QNU_-2idKX=_;p#U266D$ldZ<$ZoXCx(%`R|typekC>ujP zX0v?yWf&Vyzl>m4&@Xvx5X~c>Wh^6ALE19i_FyRQ)>)qYZ}RT%>-Ukrd0;K-vaH!>HEd5W#<|-ZIy~&!VrUgWdl;nqt_a@9Fw6$=7NU`qXak>WtDV z7&-v_Gw1IsK@9}D&q#W$F%D$+J9_)MCKPjf%Rip=c33_8z(1m@52{p-{sWEHCh*Tn zCwbb%4y{1U3Q1`kuJSJI&}z|@=asg6`v5cKZ?^Dn0M5I@VL90AP#6vTJZ0gKJ3$-X z4bv|VN1;CZiMdt{|5Naocs!m7U7Sh7&&7BOo}S1+W)8i0Ya94_x(7w zVGSJC#D7zGUA{d%=N-D|E8|31g8sw&35LcLbqUZ`a0R@%I|T zK=Q&GJQ}qgh{Sp@XCGhg&eETLwunFNK~MYYPshjGdRFiqr`4^od*Mp)<9s<4isyl9 zV0**a#zQX?zHX@wZeB&xM*>PmsOa;u0(4n*=|)`VdK34rnKC5tXt?PtPu1&cSV% zhKo*que2xJA5D_q%H z|I*f}{xx=Y^9xB@4uv>AB>jwog?@p=1HjpCNt5@TxTBN(D(LO4^CzS)Pi5n=*Avet zfz8#Xw6o*KVlghx4hb&kMVZnp)j=Td<)A5>{7Xy-slYv-F!*B<6CKxg!TR6A^*^tz zA2i%gVeg*qg2K-fYf10A5w~?eKmCcfb09jb!It|=$S49_;bS--2kU*nuub}S-9EZvJB5xd{K=Y z;v%1EdYs5^-QVHln=ryN|Iqd0q~(Jf58h_lSXX)*@FXQ)6nn;LyRVZW*JzoG?c6V} zM3#XJdmGNDPwLF^$-K`eb0tjXty<)xp(8V&|39_OTnX+5fLPG2K>p|jP?y5rx|&{O zzxva1Li8clNB{ViKn2H2v;-v>=VM%KJ|}d-fCwCmqr}PfzCyfnh|m9DI$iPX5L1+SpF! zqw2Sqx&DO;|^K}lqd~fM|g+- z8IGTfvMQ%vKabx7Cif$auy_C6fd@+@h2Dzn&2OUT11uuNOs zs4VvYwGJGil&0W<9&i?XHIOU{DKNQ{adjAmzRqE)7Z!**su47A@1R- z{2(fnEhP?h6o;~t+L%?t0=M!#aNnrbO{2Zs8`Xx>{WeP20XhMtNg0(E*@5%8BQy#P z>^L6~=5byjQGaaa8!(%`OW^`qIE^bt{}~mWjam6?m>}jlem`E&c5#rm%4||cg9037 zdgYjuzl|fsTcc3@0KV1qxcr_UN%Tiknjrrl4*1G5FyMrIiak-~*$c_|G0m!J{7YTz zGLW^%MQBT!!^L_mO>kB_O>qoXPTK*{G=E|(;cU=*J_*Uy3n@NCl^4-(skL!`AsepO z$sVuM1&x<9YR>up=e2e31luWJ^m?G75CZGD5XWAEMjW>3EZ@^NwYa-fy_MwON+bee z%~T&+%^d89e_~doG-YAC30=W3Z+&?NWzz2QPgwTzLNT-uf!^g%3(FkLN)i01mxK&I z;7XCx0vEnrdbuN|X+jFkPsMlYUtTCGQemsX@wFG@+JAWg z&mfari>%5)HUqw$g5R!4_%^5Wx3AN;7^%?A2EPFEl{U?jUjf>$e>Y){FF+4g!_JpH zM}=PCj@+0Yo@3PSf>Tf_=RxX`=6Je$>yd!C&kM+KOj^22wtZcz%TvrdPk-k*2Vj|5z=6ZhjD)5KYX8&_`Mmw&-nj;Z%_Qb z32Lf}hv$6H_ai?rF3sPf>~Qxqe0OfY$_}G{7Vq~#=yzP2vLmv8axLGVrr)Cn<6lAk z?@58LGg;l^L=PT$PNxT%Ko9B{5Ar?ZWV#CCuz zL+)DVwx%mzA(BS{1qnJu{$d?>dP%n;xh@6Wr)TqFUL3TEHJr z0_`kd2>grpb_jA;{Q}km%vjJk!oiL&)h3`|OfdgAls5vVm{9)=^HJQGPyElOqV*)msSgT><;PK_RQ_csV5yP6{Un(~! zH{Qc1{H>U95l;9foG>Z_Zli!X*yiw3kzWS>^y13j0!LX@l;$ z$l#lCGM_v_1yI5XL+yS>3^n`NF!;H$r%#Fj#Ry9Cyk#8WXM5L+!{7^#dDqin_ybg~ zKAYX0@LAYHY$!A4W6|m#z6cQX%j0lkGxLGX0RGkNV9%e`v+G=!B;1`Krg|ZkOc5?V zm>ZTOmD`?4WNn5#VPND}fU}R!-kY>pkYh5q5am*Ge;!;zre*!yEly-&Tx|Oy9aL{M z!wnAfkee-Pbu1cTL+ofLqpZlQF)D*V8?)8F2rb)dyNy^`;G?|*@JzWMJlRLUd zkHhW+eW?;CsHC+%oPx{>M)aQbBtP=NV%e)iW9F}8KL|bwh%~xfk0wz_SqNs7PWDyJ zO9DM%aYHavx!`HO6NN>{>Y$8AT{&3#F5-342eMgx0KI_bb19zQHnsQ93EnY?YKzLI8qLueqA2ngVLU)T{;=#p$iU|+@5Z)c z?-`MQlkdkr&e6|$*P*cF?vm5EIsDMs1pLNf^YwoMZ2oQWAIj@;u*k(;+HDlpF#{MtV`ww8M;+_lkK`%LIbKz{v@9F~}Qr_6yy%YDh+{}W& zb zFBMot^gceu9zM$P#`TxG&lA9LR^LT5ElrO5bN?B8*}MqF)>x&L-LrtKH#a}2y8v4y z-v==CXp35x1NWIJV^Uc6qXHRn3eG-$TEEQXCzk?lRjg~g6PtUkwAPl>=4AaMy)@*Rckb0+8RkRIDlSWvAW z!+UcQuC1_FIN9sZqA41mfREu~D{@F~R{M1xRgYnJ@$kgu7o`E)s)nn__U znv|aXyQVz0ph@ABPMQ5{O!{KkB|lK*0CzVo-TZPE1Y_6>@K!a{Z)Aamh%e?{rpnh7 zZU8Sqy8$uu?7|TPx+lJklp=#&!%1?^H)MlO=oRrFP7Ji#leCF>`UChHv&umcRo40h zn658?xg^RKnb6w=YFUz1mVLg zccduCvN>DO0uraRvfWy&bX*FIMfH!sWOQ#<7d@mPn!<**OZKJ@T|?wPD=u7Vb0 zy<;{UCrvAdSHxS#`OyF{KjBJ^Z*-QRd4sR&$!B3zS1d%MLo!)Lk~JF$l%W2*+3?U{ z0+D z3nB&i2VpdI#TbG$vXCUx#emrTPJ_SsI1LWDS7Gp8+TiY|Re9cj?8C(>>0|uxi}>xm z9o=KeWitM;LwpqAJtRf zfZkk{Yicy!&Bb02A4P`h@wrR>^ZXuC6Ah3bEzyT^5Pw;kSl>(E)v?7T+OU72PMnbs z*zm;~{PRx-oKtTV@$aio1E?4JP@bd<3@)Y|^?N(+m7W0R*4uH~b6Hb=!tSI47t@Ef%zVp1}nQ7-}I^a(0I#O7~^M8`@E_tP)-E-W~kpSWl7$LZ&{zBu@nC zsOn&xuM_z&JWBv#E_h7yxGpw;!h^(XK%6zdWf!2(VXXH8e$kgcuDjO`=kKRyQjCHN z6cFndYVTT%zR!aGJ*2>nC&hQXF@ZkvxqV#+bDLdl}eet#lciC>w8BV1TbCPOOhl?m}+kD4@5KPz%uJa158wYH+GDPdRJ zY>m=h>Obtx!=t=OW6|8_^F~ew+o?4|Cfvo$3-v?wyvFXWA-^)LQ@kZbz$`1OF}Rx@ zm|UyrqqaN=Q@+nD^ie}um${^mis-$L8VdTCH-WEg;+ygAe%(@_>!FVF^&>4qmbDW5 zw0SkOp?s;wEsKARu0x!9=H=g&TgYlZ}(((E4Hc5}eFeFq!kU$y_F%{ndRb;MT2u0Jl0>%ufP12B7!; zf>wS21lGEPDDJQizQi0$BSEg&+6@dD;0$-oY;=ua{rx&DXG^}f@WW#@q+dNx-0^R? zWFM}>SEs1Y2dU5V@erL{p62picpA2NnUs-*)FMOPn(UyNI{g?Bj!rrYz_m1-haaq< z5Bi?-f!+84C~3nIeqdJcgI_R{lY0cND}~lIjNM&D>nhX%X4Ejrw+mb&>&{ceJ?#Mt z!qmid{iw60)Y(M7LnSo&avz$G(v^kaU#dICTt^C-cg7STfgN<-ZsZ?(E;sNwoh=UA!u2zPcG0qj+-$n$F5yVT#epX>dN z1rv;ued87V6+)qaL5iU>Tc^(c3eyc2VW`tpv=yq}U${Y*IXd6G%x;j1?1+itJV835%j4zk6-~tqQG*1Zv9gYBeyP@nB=O&%(0m!x)Qe`H1w-|ae z*+j-DQn02=KCemG!@Cg+>m7Ev(&V0?jxux6DGT#V733+YtK?vk9GyRFF67_E_7^@v zo}}R1kcokHF)AlDjAi+Rs@Xk8hB_v|kH`#kvMKm!iq5HpJaW_iBtAmOl8u}RZ$7vn zpM3nyO2O!aJW{AX(K3Ib%N^u@`t%WfOY$T?XgG;(?=t!itzU%x&s9eL$f4=uh9Ijk z6Bk6zPaC`%Nq7nzh^4iSM*kp9Ker9^e_=khJY`Cb54r_J8J&`ako#{lj}{trwEU>i+IQ{FD64oXRhNA%3fYGkj_$ zW$1BQA>;Nb#04opyN}?n=;l~yWo2F+D!x#fCEs_je+7F{jI3Rkwa!KplVbew4l6?_5P+kmjJrvahS)(e+VVeYQ$45vc{v0O~lWW;&4hlI!0sb3yaKSPtZxU7Zw8J7BSdY)D!_KapPJ8YJSCrfZ;FdCdC`M0j!Vv0_P=DLp-n6faBeoX8W>`;; zw#rg-19}NjWDVHC=Iat|UZ4S8T%H#1)T|DUK$HTLgF$6brNH7{4*X*jb{Ct*EeHm` zh(mn+YGu_pWjFgthWX0Vl4wg$Y}BerTu%2}`N;USsI0G}zAQLpRE;ePOZr$CibvAKh%$Tfd7d;1_$;BS` zYHf#GhWiHm zW%cHT)IZ0K4$kc5m4buYE(bffA)b!;;>ZogIH4!p@jd$sKIt`I00n1OZ`7|#OZ?ga zg$(7Duq9fr?pu(L^Xa36Jb#LOX7mRsVFUGXLhdz`FKAwToUf-C$I;+Vz&XE1o=Wi71#~i)kF11|j7^GaYuL_DG%;=z z9C%R}wK~~r>$P^b<0dU#A0PIjNI~4s_XfkbbnVVg)y7@@s6H;!d>%a8BMbC%O^>hK zV6P>A(_}9!fBD0hGpm@RvZu6>B;O+1WhLlf-)lsCKaId4`NAAhl)C8%1j(LB^Bpor zv|oE#w0G}Nj`6?$at59CH{%~r%Y*;17C+f|KYfBVRoSPM?Kbj!Jl^4OV*CR?zfW9% zpGMAyCHz!@8HC}27qi-V`XWAvFQOk2Ahqrz55&N#km7bcg}L$Fo@=BVzv>j_es5Ku z%iRaPRlO~qpXJ6rjuMgQER7x1fUoK!2rGj7&Y(Q8|L{DU_COuO?8{IdHt2yLREw}xpkD@k` z)18N=5w6j#GoBGe4}@HSFgHP|V7C)TB8d>nXMfQM4 zw0Ah$x276aCix*xV1m|M_@@kX%;U++=^Nz96n5MLicnsDV@jQ@TR4r7EB{hYEX1_1&ohN<$xMPTjJ zBC#s$qn+$~Hwn{i?h6e$R9wXlC)+}=AWe`J06sv$zf+0-$(UtjjeU|8qPm>yd1^-+ zl)-xG0`peMmz*TxO`qZWK|!V(NTjKY?b#MApq(!HAU_@C9*bN+`}e>s{UWafnHbJ? zzgpP`)jY@8gp;^~Uto$^m#AQosX@*#7n_AAn&txUZVn6UrWi6`x?k{a0?7^uBo#Vd zI!zz07x@K(P+$vq;l$V?#9f|ITI)GeHIQ(!291%C{3Uu^h?C8lEv|I+mJ!xOdkbl$ zQ`A*(gIw%|)fy=%KzLL2zpuhLrw~%N&@50NI9%-dDf&zw*7BqFdpNG~*opH7mGzo7 zf}>F}%!5D=W9{@XM@LQRZ1^OAFVqk_ev9WKHt^Hf%s1_i9W5pQzG%F|Yg;rP?TPIW zO!6jZO|VMS5&kdvf6hk#&j&QbL2&^9ppb zBO-BE+Mie9pH@^6T&9Z?njJ#*kc1m;Yy>{C_{n|GmHnh@t+YEc1HZk<%FOPaOqXlbo1?CB1{| z19j!eRk$|z^$`AA3cvnlEhEEb_O=(yDTYdz}e>oHL zU*3oHdHMD@Aabsls-HXB(3#cjzO*aOGv990ZpyN^h4Y%R4lVzJzt`HPJJ^SBqkel* zz}rgCpm>DbZk~BHv<+Zh1{8=e`Fy2%Hdb72B~{~)>CtmP)rtT)!D&TS7hx@cOgejr z+QFpSB1#oLQROv6&$G1oq2mjVtEPO3&8TcZhIt#NoKA7~2JiF0O_t%KERyebaDv?t z$W%QRwSMnuT#Y@_N63RAOQ0J}|0lXK9Lb%!L%YR4!f2dizTb);Il$o4WfdMMpCAPN zTZi-8EBPlAmP_-uNHza53oilwdIH1|(^O+aci^VqvVyh~b^^BrdYE|&U;%Z+R$NVx z?2ZmFr3KA_*WmMVlliP1vc^0Z!pgd?03h_3Sjt^ES!kZS3Snw1&XjMmw+0Vhslm9x zZsgx814(jE<89J72blr$1I@xvaOTc(Ia!5Hi~R4H#6p}n%^bZ`meF{=u|1U-|9aOS!$TFW=GgN84?Gb6 zgIx~1ORHE9J{xwvrkirW0Fwh~Fm^RF-xn8Q$nN)q3uS>;wmd?GvyR*+?0%YpxpvdJ z@$DDkXzTBU(eC4;RRVPai?!enpyvy8U_Os`e<4=IxewGr`VL=??RvosHsc)L{guyQ zkJ7px%=PTPRzb_|)8ggH4_1{wgu7ebg%xXjs(Uyvz=3I;2~_L8MyZ5%_tS4+76$*X zob5`h5DD2QzllKMaD~oaYoC6mefpZ-s8G*qfSVo$0quAE^SVt%{dXzsNJU_c-D{#? z_xGV4g<`d`V~3Dg_CID4e$6n|PHUQ1p-qGis#VJGVC(Ti&s8G!sx{{@TaJ(1ebvBc zBtwBJeJuO+gxItSk!TwEO}_pPTvx_1(uS-R>&BVoY{z$&V}@cD9IijWbAJ!)$AhN8 z>bBnj-1QPVyj(EQrVwpI2E;;T-XY&oKTT4u>IOtm8D*>9vII2%s1}eXJdWu2G@#>u zm=GQJ3IIAj$|(udb8mEwTYm{0)~bhLUG^3Mf|X#aj=N@eWa452{l; z%AaQ!jTa_esRq;o#&QJ1aG<4k7^QBk#s==3>Pq`E;!&)s+(bdCDHPjbErSH7PIi5X zPVD|c#|Y|LP_R1LJwhkbZuWc#*E*MX>1kBuF;w4&%eIx{G>Cm&t?Z)Kj}7Ra$DU^z z%(`@BV^`BS)mvcM3I3O?=RFXXB1i9b_h9{RCnL{g)KGVBr1Q;b!@lOY$Zy~!iuaZK z1+?9$jGsjLY=x3Sn{Z6gY;k^;zwrGpp|WLL$&7JP$R_>6<(Gy9_MH^DlvmILwCr$3^@{S2!HX zn{nw&x*_GcF4!OsQVhKYhXv8AIgRT<>;_DA^7xAN8GunC25}QaD?pjBEPki6t@y`W z`_N#%{c1CRGA#Px;pk*O#0dTegvZC6Y{S3xp`}r zqv$sYV-nJKNs>Srm@_2UtvMD2WyQ7iu?Ydy473zOl24PS@yqZarwm>=y8 z|Mcm?pQPJqW1<-~9g7iAS)_#-+N>5%jB_qi@JZMEX{?9eAY&a+8axdlbE%f=sb@$U0h^YpVQxNk z>w20QUr-Xi!~@;gl za9LWq3W&`Gh)#oV^p)l#9V@pw%KMd@`CTcsVg4=lc9Ec5Rgm?@7Ek>()5Q9eQeFgj ztf}xZzcf5pcS_4Iy~#qOThr*L1q=FGjdfte?WN1$nv|W&!`EuA++!(FJt5 z4*CnfeYP|IgCd&)j03lZc@xI`I44iwfHk_kx+NjB3>f{PIBMAAEsvMa8u ztE=v=yI#BU@jw)XB#=qKD+wZpihw8`M=**e;Yj9NRj*%9PY!p#zu)Kg-w&P4bib=! zy?XVk>b+OhCYi)R788i|Cefx zXET~1B+YJ5EgX#zIwLe?A!GCUc_yY5{DAV>8mi#3RKq_pqQ;)X%uub>wT*Kzz>t4U zq_z{}2X}PmVRY)*%;dA)_BoXQsJ=aSn9rjHS?GosK7ui>Nd$}#Q=hi5Wz+K@Tg2hb z?N6iS4e1Ui@64y!35t=o89P=3`@j5Uf1+0Of7xF=2j>4Whx}jOf$P@=8*|7ynu+Ka zLg-d@yTGEYIc)4!i&bf%`c_=>YxI^P2kL!5m1P@} zQl_@`Nn`2SDCnE`f93DgM)|5Xyj-ly0h!voG?Re2mlvqJo1f~Lw;1FFPXu5b;hV$#^Z#>+0Uznb zncA4U^&Oh0IOx*;4ZD$cjmuA_eap!p@Tv2eEPsVwQsyNf3O<2qa z?U98n4tiooaJ3kuxf-|U-D!3SPc0rsZwWDW?e#^(9^Enab?UnPsduA+G5q~=#%Ja_@jM&YY&UH6|2xihUVgBen(}V>eXT%mU&3Kjpxdx zT&2Bgb|IEA@+gkT=v(=Sh!5XH*}Hm=%7d8yM${vITBuh%gavr()%+`%aWH0lpJzPY z-5+M2!Hjs>1tEB5VE}^HDf>td9vK7{5P;!fEb*#dVwI`H1}c#ZB{BlJAI01o5Mi@9 zAa_!}gS`NG9y2cO=e{J_5AZ&cR{CqY|8y%ZTx&gR?eozgDdV_g4dQlU__pDXGcUs| znGa9%iwaiA@VzM4xf)X)*dzE(i(`B`76U9;$C;RWI|?hPu#hJC9nQgNWShv)_O|-D ze=}g#>qlt?3#ems6jpp>4ym(ijrm9CgBCLB_7M=x#3pv&tW>Kr_A!RhV)`4F3cQ@z zC=>m7?s3^|0hV>MzTbG@PF7#ZGi2tA^hO@gZd`2SlMkz1k?m5H__6pA$g24uv=-q? zgnI$F3ejq`$i5stc(%!o?t%5y1n*1hkGTFt3HohPESEs$nMug%pAy*eRh(`tUlmU6 zp7}wO@B^R({~LB(sL&;hK*Nle<=ISR^KdP30GrwlI5Y2q!(8!j0%0XT#~HO-`^TNhXJPu}kDUtuBJvR^819f03b>Ibp056a0 zAzT?CgP;p-Qw;g;@Lgp8o!{I3JHEPAibr^GiPP=lr#A)p9W|X(*Zq!eTB7}q>btH_ zePf`$(O4fYMPyNawx8NqJwKW4yGc~xp?QY<$OJftw&_vq<)(1D;(@w4=`ScS#fn3 znb=fNi_eMmNoV9E3d#x0#{{rZ1nnAB;@r3~Fx_S+epOC=|*wNH_XF_NiX3&yFj{9I#A z0(BYdlecW5JPQ#HuXTzLIOe!12wtTtboCglh@zFTV23j;T}q?Xp`A;m2HR3eU&nKb zMzEzszwen|@!K*pE<&&0OSC1Kh|@F4VZv@n{?w^$+o_(cmj3!|KC4r+UE zWe)7w`FV==Gmok~IfqfavYS;IrN??;dh%B($gC~W@J32!7SlkwNBJzM-A@eGN!i8Q z+kIPfe?y1T>HfFg+UwL>N5x=mgWf`vSq)TrLe^ixn)K5Rje!5;46P)YA?eG2y>f|m zA60+(92TGTb?mh^7cw#g^p5AVL|aJtzn!h;uf_bsDSvH0`RRU-)&OhA2JcoVvqbIO z@Ex5X*!g!nyrjN43C&4zgjj_xG}SugXn12adb^_DG>z=6>k7rVn{{e6ZeV*hhM^!wqXkvv1->KVD{BE zc!dK_hiVgB-PLjIz?b`J%&dCs`1dh<=}?pRzo5;7mC;SlZb}0k#Q!E%;(rqXfIP3< z;Zb@X#-k$LuMm4o?tVdQpU298VDYz$O4t}Lg7q@T8${zP9z&S z{~gM6Y8TJu4MCw!Dpb7$n;i<}aOAW_0He1WRSrSDzfwK--zjzKE>P=)U2bX{JTvuesF?Q@)|DVyB{Exr4b)w@x)(;NyOQd}xrZ!wMJV+V@rU9Mstc`22jpXI1w?C{g}CXL$N3Xm zCXFdQm`!Oyqx*4M6a z&`dT9v=qq1aO_Rl1n7HV;E^0)3}g5hGKLVtP>4hMibGA=qFpiv2ki|uwa`SHvhDvN zwZ!q3Y>Z1mpVgFFHT_-f)!8_HQEJL=&qm}vg@YJF^1p@nQd625Q$C=319^P5thq{` zDVy;PNLPAPtA5Z807KueAVSwY^~WFR2$#PbNFGpmYtA?&&;;UO%rq zk6a#0x5Wk2Snc{`I;Y-5WNxyD303s&R+a$7=Qv(oz3$$D?DkFr_)L* zR=tT3g!>+b!32rBQhS&wC`1a5Ol>DrsNVm=z_XgMe%wMB0N0Zkt^rr^=XT-}0mI1_ z6q0(|TF$~WsXoxt3+B7wwRQ|xi?$ZJ)0TVI+yy+frT2ITbVR$elRtCOM65Y_*3Wtp zSXCU_mf4)gskM;q4(~kJ_6K95owtAAzAzAc2!$l2d*dgcCdSj6<=vvutP(pQx5$A#wP9MX-ukl6~)64 z?Yjj!jO$5Xc(o` zhM?scuVEbEe5oSQs}MJ0TN4yN1hv#tnsiGK;2Ci`7*`$YbDKUvbfIT7Xt88B)DHZ_ z?Pm;z_jRx8nGUVUXex>|Woe7VTBTV~Yn=A4xxDh~Q{p4I@OFODruCTPEgrs=^xq_s zUrC?W4xohHN+NS_|BX!lp(68=(0(6e6;UJY>vS{-NiR@p_=Z?%g%7%wtc z8EkJ_q75eCUYbJv!AKIijxw&lk9J`S_A<`6Uk|<8vk)sNpbD(YcI<^^{UB`^NJF02 zpA9EVLe(SW0oZ2#IH)%n+KWUFF+@FH9^>?{)q-yHvUQFG@eoA#F~ zE>pT9*H2Ovnh8PvxIN0GO|+XO00jA8FuO+BBS?p{CilRw2BjZi>BA^}G^Q`nzFk1) z9|P^Z*aZY5U#u!kVJ3H;ip^Bdx2&G)sh&f>>hYWH6HicuNt1iw>-by~zG{B~Uu&lS z0={B@>W#1KsJXqrB6EmGnS(It?jz_^7*!ameSIShE1l2_(igO~M|%8&+)&zGiIDc^ zPe40^P1LW%Cb}Zaquf;w2p4cCtDpTYem`LIe1vM!uke0=G{K`BMP=fFXg4>w{ zn{=ZFM$=2ztT%IsXpB}f6}OF*bA#jsF!u5X@0=%*Ef#HDCO`HL3War^FUoj?zam*a zfLDyQHz(2CcTS@9aW}TRJGS%iGPT*bUaAPcCw_1g*g|0vy4Gn&dY7?kd8b~%zq~4*07gNk| zM4I|TUDs7=kv*cb1?^^qg4(3EkPZef4&33;K3heH*pr|)tB0Yr2`3X>)u+z8CTye3 zr!4J5&zbLGpY;cF${P%NPiiQC$M=ERKjsUp-xtGI;kEE1{Auj>Cy70N-G1^!GV#9~ zsCOO=K1M6cuvvT~lDrXWug&5%S%%MTrh3t}5_-UQXlt?F-ty68YT-a);5;$+q1PeZ zt!ksYlrFz?i>{ldXKIZ_>|lRb;MEC0Q$Z~v7!%NEUsTXJ#>Oy2MB`j5v+6_{ZW)z7 znc%!B(EkM1e}eDvISAk6Uxx3d05D_w!k4^?Lxwyh%DC1%09>Z^u*L-69Q2Ywc${R0 zuX8rVe@H<17P)ahKh0i5#{}>QK^n1=d*FEzJWJKBc-2L$3Nh`$4-ciA7?>|wZ5rJS z{Sm9K45c`Bbm2yAR`*8Mi&c-&M&(T4_&bDc>Z3bfk3|Cwi*ohs1=@H@z}qS8;*I}d zI;}8;#f8E>Dzv}Gltq*;O#(V{r6RXYT4YZUtI$CSV3ZiE+7@|Mtm55uAja}iHYOc7^eaE0%z0JF_M8Ly|{ z2Zm_o@7bEYHdR~uD>BS-U%P1bMmJGY0rA**(ptoM@DvXp3t)}VQT+pR3TF3GC+|^q zFVfFfyBUB{YF%WDSXGQf;}^;!VQm!2%{hp?olWO|q=M9oHp*9Q#4#PFZvh`!U+`0*<)|#1AGzopXch+>3QKfCT<9#e)u@ zXqq?&@Pu+0Oc+8D?yHZ)3qi^F0bC^zu2{IuRP8oe1u*t|G|gIA2JxE$pE5p=fQxjs zF7Z?w-VQbVDCOeXq*kR57eZ!LOj6r5 zKOXn(3M*e2`jpZH&HBIEByPP}Ic5>JW?0mH8@|G6tL&#`=sBDg zb5g#`OZ4lcm+T%{feIYOk^2 zuPEi{45g{EW|qZVE+j^E@8U)Q7e9nH0Ei7trA}kM%ulphcso2Rp|Fg?@VhQY@Y7k7`5G zIoA?4PU6$ht$i|ACu0Ny^fdG(etZGE)(CX72n$9DYK5p83hzmcXY6)Dgui-(%s8J z;$L_@$yJsH^+(@3o6sTtTeZHg5^H^L2jYoFYu2e0|1XZ+*GB(8YM1uRd1lIy3eW;{ zcXjQ$D=TLRYnFNDSv)b5edu->@K9Od7uL*6YL?Hi`}bq@oyPU+Zny=B=N&}(x~N-_ zFy29QuV0Y#sXUy{fP6vA89IarV+tLeDq%nM`Eug-0s6h#Vxr#-(9kVNWAES?uX{PM z^%nTHici-o^@Ds*neLa3y_wGckL3q=6Htc`x582a0@wYZfaWOemYQU{n8(hqG@{1d zP^Vo*pvj|?y34Pmgz49E>(ND?`JKvH%W6^Sx(e34fP0(y8P3!U4M?OSzK=mFeu{c|339zm z_;C;RTH7(E$KTr?bssf<`LzR_2Z=}pee)`ADBWD!E1n9yt8NuHgU%f>y17rhI_CeB zns{qWko*lDy9-ERH4Svi^~_&PgEsYgZhsgDLSsdI10cn68m*SUzgkbBkdtDv*NkWQ z?XgZU#VJ%CGGSm9{J4NZh4!wU%LV52ViY}HFhtK9@_FWDvj5tNo{{t5d_`}f z4N{3`d-)%DATuwCgBVSuPW(gdlsaj)XZr(~N>|@bpZSNB=-K`-zPO0Luz8d}!;6|U zyT~qmEgQ{oy%pX`GkWXEyP3?XtG*!reDG(ZANiMs5BWklC9N#c|u|b%+gUo{#f1=fZ=JQ zuVHqwPWf9t6EVI>uBqMAtljIV-C58s*{dR`xfe!<2->Q6-X|}qbKR_4cJeR#!zPdm1*RkzCDsNv?xsOyvIg6~7JM=vtoLdoFz3_P*Qtb`(U5P`J9NHogV}z4=mt9fV&eh3ZRnoL=q))JkMOWK$J05jSCB(} z5&@)Sv~J7*wA`qM;i;b(v%g=DveX2R)eQIVVP;@F%nwP*fS~!|K@zZV)_E${l3t9R+>R%nElfLEK)NB4H(ER@|`uEdlRsU=Ki!;H0 zm$`oy)<1LlGM2uW`gbgLp#D8Rk?en0GVjWuU_k#CxhGSohN;Gt0qDlRC-nF&7}EvR z$f`a1(MSzlR*`QbkmYyO)hvP@dz4IS^A;|Xh*eLL_JNl6Vhc>iQQl3`Y%YCX<;BEhJa`u%Yv9kpa~>RJIq&Yil|zyj!;jd zS3ceTX@LH>;gk&qAz8Ip+HtOo;}%qA7nlzk{FOQ&o^fFS%Z?NQnu{@-D&b8@(dxwD z^6F%GHeVPw^k36kW^az4K=;3{FyH?IF$d4BF$X(cm-hI*)-VC%#Rtv<#+t_UdGokO zUeSBKY8+4e{|bX%t2<=0s!akuvJUMPh);gj^(8^S^>U0cN424|ISEvea>-4$ttgAe z9B_hydG{!O3b9d2$H+Yy4(;Xv8N9choA{WO$Dljd5oecxa{<9UVe)1YU`=M8!;_H7M% zUhVrw&~u*ek3r96z6XPzuci?Uv_F>aHEr^w9G!M|`A}8!th3aFwJqj$KUIUSLgrd6 z%(D)I95}QMFu*l)EviE6;`Z z9uKzv6;JzL!^!^|x*Adsh&!THZ&fSEU4ChqXZDe48REu>P=@MPlx>d#s=x4mjq9EL z36tCsLZtN2awMgp!)d)Ur~itjXA!CWaA}|P$t-;ZrMFKJu{i7vCR)j>ph*Y~Ar_`e8$?;17G<@rcOgNUvBm!a~03B8XY9xJEapW@#amc8I4{+((fs+9F#b>!jkkufyt&heqy?)NVoe%6|GI{R*Zsr>!gu&Ut1$JUQ>C%9RTx>l!qZdK+d`wzP+%H4yDFG zWIT#biF6XIpZnR3V`%-q#H1hNeG>FfjqKN2O-ICGem^`su&$(uJBF(bRp?2Ut-qkd zrl)GZ1*s8IEDbm|t@25<_u_iaebXyHnd~dJ5R+W;n_=h<&i6^*^JilTzQ$q9pbZj3 zhL#%)*w2>+S+f65On5lTg^!Y=6wp^@9~F0;0~U96<+B2_yDvQte;h$qF$7S55{XIC&5ml6sK0pft#l^^e8>t<-LNf%(^ z`0!p&l?w5V+BT06;|1>lxKA%U)dz8z2HJnVPp~`NnZj|NsHJFj4ZS!|}JTyf! z;d_GFo@E(I_E{WOu56Yqc zGXnJOXvB|=j$X_g$q{mo!kmOVWB8j1NnRPGf68GgQt z(~X?~5vx97RitO)p{YzQA%diQS_R0N4siRWcV%X1lVh2c3Ztte65qKr8sCi5z2Gtb zbAXdYIv^b}1|Vz3YZbti+*3Ng^zFv|kBIzJ7CdH{8qVa;aenjt5<|ax-7sUSzd{xF zZQ~voq|e7shBkvYQ}JisCw8NP993(TZ0ffq`vd1|JxYyfJdT;iO0aDok)jS_#hQ%ISP_RPcGv7q3D97F@*q z4JO-5(H}Eztw?rj271k#e|ZB5e$wZ!dEuH zLHYnPuScYz}qrNw4whawD%IINp2!a_iQ^|KcN z`k7>c=XwUuUvd$iJ2*Ueo*;(cd1Hv-KQochZ{>6WLv=*Jtok1-=Yd!21iO%5Feqwo1k!2i2muxJg|$ti3GL))49sSqxa(K01Qnz=SMS$ zb;%v-8M0_;lNd0CfpzPk>jT4S5nCjxI}od44Q}qDVFU50S%)$gJj`RAMrzyPI<@Vpqn%mjI0 zsK{5d!*ptkkoqMcRjkIizznhCwx5|bLErx%d|ETKpY$c(FaM8evl{u>8zy``V#e#} z2-4@w>6^^>v|#!+JUi=qr1M}~P2l|MTbGmn?+9k!EV9qUZqK$*C`s&GCb?U@?@`0u zA_hC4ZA$ec@eg(Ck5l%_7=J8EO+ke>86DE%H$xWunyFRDHzVd$T$NPk$)1s*<~T6iY9m^gA$Jb6;%g zjbDZiX;b{&dS|N9&4W9vx^^AjJ^C0U6?CIs)L`5~qVYX2634eZENFaR6KH(Rkz}&Mn?aG5MRqK>VvQOT#J+cWZ-I+pW|wBki5k1 z|BRsfKZA^Tt4KG06S%+BaoVR$)K|T9Qhu#HPVI);qkV~+EO@ND!Rp41wQEQWe+lxc zKj4}1mZYZDU-pVyrci{%49y;4iUu!z&KA?S4DCV)ZFEgS_*$S$FN3w~_Z75d zVT4cBn|~B1*K#(nI-l)Qy`Hr*{CYLdLNzK?6YzHj@*lN!E|dkoBV<;rQMy9cp(h9j z^L*=I_YxKxRC9xy1u?NRCNR>F4{-$EP@Y1EJ+p?GbYQvFqnvn>HkUYYBo9I-BEPk8 z<2dtUas)}~Uj{#+`wy4W{fAI?|6#4&W^7&gr4o;-w6PvGJsF^H>H@bH%z}!j zw68IcpX|feAd2fB55fC9VRWCTvgbeC=h+=Y@h?KyeV)V)-_`m#+N#$pd(8KFmYwIl zW%qf)gYNTye19L+ba{v|zDn2n@(QJE#JU^%3~;fbA}978;H`o2wc+??N1DfXpGSE% zczp9|eE-atp>Ml+eE%IZz6UQs2rDf8jqg1k<&QMJz9?o-uR=x1-2ZdD|Kq6tBjwKn zV|y`QRw^cA9058)q4ca5=d}lhR=LMCp!wzjEfx5HwwU4pTu0FE6^!##N>_OKe1;bR z@v?x+*A%8Ah9MBtAN`z2Trieo!jjy>u=FXz&&R>^KaA*K=np?DJ<6YZ;YSF<&(yQQ z_=zy%=QLlbDyEz86CQ*gt_MV$&?KADv;Zn$XxfYZ`3DoUFZnIO{A5r+{KOyrU-FZq z=%ek2uwMM6{fQtmlV%Uqy%g2= zKHvJ}Mdbg8fX#O+A24S{B1Ip}Ul!nBZ!>!}`lLE(sM_=S7_%TX4lT-Qr|J4yIDz!fa~9M7#awagghW3c zHj#&z;%Oj66En2^oDs`ksoJy&eE(k{IByZ6fzbX~t2X)?%&yznKKNWqRju@|X%plR zD%XVw(%*c$d!GkjK;UJ#c>n?YQhP8cGo3e=rh8;dQjcpq8c{ssrUMDKoDyICB6K-L zy_>RxZlS^Yk#r)-}ozAAL(plSb~^*@UGf0p%sE!&SKr~H2DZUE!Hq>Ej1 z6I-{oq1asac%UoLH;w7hhduA1A(=W*?Wdw`@3t51p*#86urk4Ob_a_X?)D-Z<*#0tV6xO{~DnZn26qsdmr@-w#cv$r}0_U=~kRLc9LZAS*@qFMa$~=!+ z*r_qdel-{5nf-`pGD;;scG2c>w43Y;WmeOEM%_=;KXbZ^rJrHvKQWzI2u5mew0HZp zk1sIV#v9|yIuDZBJE*+G%6BmPzq$M*cv$Lt1LUF0!x200{6yH@&3~#$PMO)3c@t#{&A>n+H!dv)Yxrg;+PzRZf#RQ z>T&1+ghpz^&Iaa#h5WhC50N%O1B>jjKq8lD*`JYOQS$^I=F=>eFtn0WlVdG3zyy=^ zy0(?({lIx4=0^S%!1N6kcDn2mDp>+0Z*~v&%(kddZ>oh8$XfJpc5bY61&t)R`}^Ma zl1V=a^v+?yB6t_P8~tprX8v{=K7)JTNPzL)lb>Ymk^p4rFqXP6j}D+40F0SppqsVj z`-2%jvkoJED(*MqMw%Gtov)7eU(k?;`$aa3=FnD=$QkXK7T1=j#~Tc!cR94%^z?Dz zZIxu7-+_!00cv}z8=nzQi&#BAMEBE3_wRg10{*}LU(%EG?`c8}(=oNxPiy{{qNdhgHTnXB%$@bjko@iFis z{k(p@5zY9C9o&%Lb{Buo?B4>}zfUuMpB&)#2-oH8Y%iNdw{UGTG8%`Cnd)D)|)L$qy3!OXO|KE7nHm+sdp00~vKAPdFHc%3&2Po>apH~BK9yBjxJ zqtdk{ZA?%9w=u4Tx1?*QxBx8`dr6#%1@gu9KOJ-o2Wui$(WBZ&vnty1P5cX?=IQNP zw|;2G8hCBf4#8{kFKv!{3)?MWD z`j{cBC%em06-aQ0DeJ5j=_aLX$m(m9+E909OlW4ba`b}5>zNysR9|*6Osx5#%CQTU zACmUET7&l2m30voxk1tJ{C}Mm;(!tktrK{i8^bsGUWSn{!S^rby=o-EcMJxB>6icP zLEz?nN8_&>_jf_B`QW*?utmQj321XB`Vn_m+5`$-H4_%(a2lZ3PWHFnC7$vCk3ew0 z9bqfaNicmpb?AiV%6yL%94d}hy55TL` zOLd!#5%x?Z{;OGaGu0_=BZxm^D~TP6exFyDA0K`3DSlzo3o=ex?~PKi>N(0*i`m2h zvq|ebkG}mB?g_DAb_dS_Vk9$v+1aG2o7${BS{V}KCVDx8_p3eOLoI_wA*DSifLX6FVU+>z{Z9dX%gRVh+LA0j_ zsDw^*Yk^KIM_Z`LV`1G1J{)(^gl_rXq+-4&=pmMt!D!=UpXfwC4W{pe-gC1HLp=ZZ zJ@%i!BrNFhLNl~^Moaf-f5v=*+SvJJb?r7b_+7r|P54SM;bXdiFZ)T3FLU~g!1(Lw zUaMVb8xPg)M8T?ULGSTr{O>IBzmrJcYuyh~1P453Ty7!fjTDRmbekHBzJEXg9JFl0 zPZZNmLB0BoW^k`-+1(i14#cjmomHY=R~(N-KQP4^f%PW}q!G0}UejY!IPlEr^Smy) z#I?}UVQEkgZ0Hd{#}hZAe#kuK11d-2Psy2!WY1@N%R{xw({u7N!TX_$8>}l>9fFEq`M3R{F zb#HzUm`bmG9hge->{w+i`a}GY^MsaTCZ4d#=>KjVF+PCEx-`Aa3Sj$^8loc#`SgY=2fDFHW%RUamV}N(W|rU4U#K z(G3O|G&mC|`um^wI$c3=Dt=UshpTnUvGAmp@^vb#TgtI1%JC`iRI1i*_@)-9e#3G6 zoAhJ(-RK4{Y-*8xq`X9Vms;~n7XdP3lh~6yjV1PKpT9)g|1)Al{t7uH1~7D|L?I#nh0Zud=m9ePGW;KPhlakM(3|??K=0^2CJQ$zG(Yk2S-W)&Xj#n|`7)G${m6Rj#@| z9YY=JS*SZDM<82Dgpsql)@vOhNF(S*fgGVN{>(U-l*^6{`{n3Nf4Uy|SjF2_+B
%MhaVD6h8RfS_8l@C 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

+ * If the system property {@code logformatter.properties} is specified, then it should contain + * an URL to the configuration file. Otherwise, configuration is loaded from classpath, using + * /META-INF/logformatter.properties file. + *

+ * The format of the file is: + *

+ * Configuration file is loaded during class loading. + * Any errors which occur in this class are printed in {@code System.err}. + *

+ * Sample configuration file can be found in etc/logformatter.properties. + *

+ * This class is not intended to be used standalone. + * It is a part of implementation of {@link com.devexperts.logging} package. + * + * @see DetailedLogLayout + * @see DxFeedPatternLayout + */ +@ThreadSafe +public class LogFormatter extends Formatter { + public static final String CONFIG_FILE_PROPERTY = "logformatter.properties"; + public static final String DEFAULT_CONFIG_FILE = "/META-INF/logformatter.properties"; + + private static final String LINE_SEP = DefaultLogging.getProperty("line.separator", "\n"); + private static final BiConsumer STRING_FORMAT_CONSUMER = (s, sb) -> sb.append(s); + + // ============== Instance ================ + private final ThreadLocal formatter; + + public LogFormatter() { + this(TimeZone.getDefault()); + } + + public LogFormatter(TimeZone zone) { + formatter = ThreadLocal.withInitial(() -> new LocalFormatter(zone)); + } + + /** + * Used by {@link java.util.logging} logging. + * Formats messages with the same format as for log4j. + */ + @Override + public String format(LogRecord record) { + String s = format(getLevelChar(record.getLevel()), + record.getMillis(), Thread.currentThread().getName(), + record.getLoggerName(), formatMessage(record)); + if (record.getThrown() != null) { + StringWriter sw = new StringWriter(); + sw.write(s); + record.getThrown().printStackTrace(new PrintWriter(sw)); + s = sw.toString(); + } + return s; + } + + /** + * Formats log message. + * + * @return Formatted message. + * @throws NullPointerException when threadName, loggerName, or msg are {@code null}. + */ + public String format(char levelChar, long time, String threadName, String loggerName, String msg) { + StringBuilder out = formatter.get().appendTo; + out.setLength(0); + try { + format(levelChar, time, threadName, loggerName, STRING_FORMAT_CONSUMER, msg, out); + return out.toString(); + } finally { + boolean trim = out.length() > 1000; + out.setLength(0); + if (trim) + out.trimToSize(); + } + } + + void format(char levelChar, long time, String threadName, String loggerName, + BiConsumer msgConsumer, Object msg, StringBuilder out) + { + out.append(levelChar).append(" "); + formatter.get().appendTime(time, out); + out.append(" "); + int threadPosition = out.length(); + out.append("["); + out.append(ThreadNameFormatter.formatThreadName(time, threadName)); + out.append("] "); + out.append(loggerName, loggerName.lastIndexOf('.') + 1, loggerName.length()); + out.append(" - "); + int messagePosition = out.length(); + msgConsumer.accept(msg, out); + out.append(LINE_SEP); + if (out.length() > messagePosition && out.charAt(messagePosition) == '\b') + out.delete(threadPosition, messagePosition + 1); + } + + static char getLevelChar(Level level) { + int levelInt = level.intValue(); + if (levelInt <= Level.FINEST.intValue()) + return 'T'; + if (levelInt <= Level.FINE.intValue()) + return 'D'; + if (levelInt <= Level.INFO.intValue()) + return 'I'; + if (levelInt <= Level.WARNING.intValue()) + return 'W'; + return 'E'; + } + + private static class LocalFormatter { + private final Calendar calendar; + private final char[] timeBuffer = new char[17]; // fixed-size buffer for time data "yyMMdd HHmmss.SSS" + private final StringBuilder appendTo = new StringBuilder(); + + private long translatedMinute; + + private LocalFormatter(TimeZone zone) { + calendar = Calendar.getInstance(zone); + Arrays.fill(timeBuffer, 0, 17, ' '); + timeBuffer[13] = '.'; + } + + private void appendTime(long time, StringBuilder out) { + if (time < translatedMinute || time >= translatedMinute + TimeUtil.MINUTE) { + // set year, month, day, hour and minute + calendar.setTimeInMillis(time); + translatedMinute = calendar.getTime().getTime() - calendar.get(Calendar.SECOND) * 1000 - calendar.get(Calendar.MILLISECOND); + print2(0, calendar.get(Calendar.YEAR)); + print2(2, calendar.get(Calendar.MONTH) + 1); + print2(4, calendar.get(Calendar.DAY_OF_MONTH)); + print2(7, calendar.get(Calendar.HOUR_OF_DAY)); + print2(9, calendar.get(Calendar.MINUTE)); + } + + // set seconds and milliseconds + int millis = (int)(time - translatedMinute); + print2(11, millis / 1000); + print2(14, millis / 10); + timeBuffer[16] = (char)('0' + millis % 10); + out.append(timeBuffer); + } + + private void print2(int offset, int value) { + timeBuffer[offset] = (char)('0' + (value / 10) % 10); + timeBuffer[offset + 1] = (char)('0' + value % 10); + } + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/Logging.java b/java_console/logging-api/src/main/java/com/devexperts/logging/Logging.java new file mode 100644 index 0000000000..6c2c95f736 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/Logging.java @@ -0,0 +1,235 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.logging.Level; + +/** + * Main logging class. + * It supports use of both log4j and {@link java.util.logging} logging facilities. + *

First it tries to use log4j logging. If this attempt fails, it uses {@link java.util.logging} logging, + * so you'll always have some logging running. + *

Usage pattern: + *
public class SomeClass { + *
private static final Logging log = Logging.getLogging(SomeClass.class); + *
} + *
+ * + * @see Log4jLogging + * @see DefaultLogging + * @see LogFormatter + */ +public class Logging { + private static final boolean TRACE_LOGGING = Logging.class.desiredAssertionStatus(); + + private static final int FINEST_INT = Level.FINEST.intValue(); + private static final int FINE_INT = Level.FINE.intValue(); + + public static final String LOG_CLASS_NAME = "log.className"; + public static final String LOG_FILE_PROPERTY = "log.file"; + public static final String ERR_FILE_PROPERTY = "err.file"; + public static final String LOG_MAX_FILE_SIZE_PROPERTY = "log.maxFileSize"; + public static final String ERR_MAX_FILE_SIZE_PROPERTY = "err.maxFileSize"; + public static final String DEFAULT_MAX_FILE_SIZE = "900M"; + + private static final ConcurrentMap INSTANCES = new ConcurrentHashMap<>(); + private static final DefaultLogging IMPL = configure(DefaultLogging.getProperty(LOG_CLASS_NAME, "")); + + public static Logging getLogging(Class clazz) { + return getLogging(clazz.getName()); + } + + public static Logging getLogging(String name) { + Logging logging = INSTANCES.get(name); + if (logging != null) + return logging; + INSTANCES.putIfAbsent(name, new Logging(name)); + return INSTANCES.get(name); + } + + /** + * Programmatically reconfigures logging to a specified file. This method + * overrides the value of {@link #LOG_FILE_PROPERTY} system property. + */ + public static void configureLogFile(String log_file) { + reportErrors(IMPL, IMPL.configureLogFile(log_file)); + } + + // ========== Instance ========= + + private final Object peer; + + /** + * This constructor is designed for abstract framework classes like BeanBase or + * DAOBase that extend Logging to decorate messages by + * overriding {@link #decorateLogMessage(String)} method. + */ + protected Logging() { + peer = IMPL.getPeer(getClass().getName()); + } + + protected Logging(String name) { + peer = IMPL.getPeer(name); + } + + /** + * Returns category name of this logging. + */ + public final String getName() { + return IMPL.getName(peer); + } + + /** + * Changes default {@link #debugEnabled()} behaviour for this logging instance. + * Use this method to turn off debugging information for classes that do not + * need to print their debugging information in production environment. + */ + public final void configureDebugEnabled(boolean defaultDebugEnabled) { + IMPL.setDebugEnabled(peer, Boolean.valueOf(DefaultLogging.getProperty(getName() + ".debug", + String.valueOf(defaultDebugEnabled)))); + } + + public final boolean debugEnabled() { + return IMPL.debugEnabled(peer); + } + + public final void trace(String message) { + log(Level.FINEST, message, null); + } + + public final void debug(String message) { + log(Level.FINE, message, null); + } + + public final void debug(String message, Throwable t) { + log(Level.FINE, message, t); + } + + public final void info(String message) { + log(Level.INFO, message, null); + } + + public final void info(String message, Throwable t) { + log(Level.INFO, message, t); + } + + public final void warn(String message) { + log(Level.WARNING, message, null); + } + + public final void warn(String message, Throwable t) { + log(Level.WARNING, message, t); + } + + public final void error(String message) { + log(Level.SEVERE, message, null); + } + + public final void error(String message, Throwable t) { + log(Level.SEVERE, message, t); + } + + public final RuntimeException log(RuntimeException e) { + log(Level.SEVERE, e.getMessage(), e); + return e; + } + + /** + * Decorates log message (reformatting, auditing, etc). + * This method is invoked one time for each logging event. + */ + protected String decorateLogMessage(String msg) { + return msg; + } + + // ========== Internal ========== + + private void log(Level level, String msg, Throwable t) { + if (TRACE_LOGGING) + TraceLogging.log(getName(), level, decorateLogMessage(msg), t); + int levelInt = level.intValue(); + if (levelInt <= FINEST_INT) + return; // trace never goes to regular log + if (levelInt <= FINE_INT && !IMPL.debugEnabled(peer)) + return; + try { + msg = decorateLogMessage(msg == null ? "" : msg); + } catch (Throwable tt) { + IMPL.log(peer, Level.SEVERE, "Failed to decorate log message", tt); + } + IMPL.log(peer, level, msg, t); + } + + /** + * At first tries to use logging from passed class name. If this attempt fails, tries to use log4j logging. + * If this attempt fails, it uses log4j2 logging. If this attempt fails, it uses {@link java.util.logging} logging. + * + * @return Logging implementation + */ + private static DefaultLogging configure(String className) { + DefaultLogging impl = null; + Map errors = new LinkedHashMap<>(); + if (!className.isEmpty()) { + try { + impl = (DefaultLogging)Class.forName(className).newInstance(); + errors.putAll(impl.configure()); + } catch (Throwable t) { + // failed to configure with passed class name + impl = null; + if (!(t instanceof LinkageError) && !(t.getCause() instanceof LinkageError)) { + errors.put(className + " link", new IllegalStateException(t)); + } + } + } + if (impl == null) { + try { + impl = (DefaultLogging)Class.forName("com.devexperts.logging.Log4jLogging").newInstance(); + errors.putAll(impl.configure()); + } catch (Throwable t) { + // failed to configure log4j + impl = null; + // LinkageError means that log4j is not found at all, otherwise it was found but our config is wrong + if (!(t instanceof LinkageError) && !(t.getCause() instanceof LinkageError)) { + errors.put("log4j link", new IllegalStateException(t)); + } + } + } + if (impl == null) { + try { + impl = (DefaultLogging)Class.forName("com.devexperts.logging.Log4j2Logging").newInstance(); + errors.putAll(impl.configure()); + } catch (Throwable t) { + // failed to configure log4j2 + impl = null; + if (!(t instanceof LinkageError) && !(t.getCause() instanceof LinkageError)) { + errors.put("log4j2 link", new IllegalStateException(t)); + } + } + } + if (impl == null) { + impl = new DefaultLogging(); + errors.putAll(impl.configure()); + } + + reportErrors(impl, errors); + return impl; + } + + private static void reportErrors(DefaultLogging impl, Map errors) { + for (Map.Entry entry : errors.entrySet()) + impl.log(impl.getPeer("config"), Level.SEVERE, entry.getKey(), entry.getValue()); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/ThreadNameFormatter.java b/java_console/logging-api/src/main/java/com/devexperts/logging/ThreadNameFormatter.java new file mode 100644 index 0000000000..96163c2de1 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/ThreadNameFormatter.java @@ -0,0 +1,179 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import com.devexperts.util.IndexedSet; +import com.devexperts.util.QuickSort; +import com.devexperts.util.SynchronizedIndexedSet; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +class ThreadNameFormatter implements Comparable { + + /** + * Configuration as a set of pairs (pattern, replacement). + */ + private static final Map PATTERNS = new LinkedHashMap<>(); + + private static final int MAX_NAME_CONVERSIONS_CACHE_SIZE = 1000; + + /** + * Thread name replacement cache: (thread name, replacement string). + */ + private static final IndexedSet NAME_CONVERSIONS = SynchronizedIndexedSet.create(ThreadNameFormatter::getThreadName); + + static { + loadPatterns(); + } + + private static void loadPatterns() { + InputStream config_input_stream = null; + try { + String config_path = DefaultLogging.getProperty(LogFormatter.CONFIG_FILE_PROPERTY, null); + if (config_path != null) + throw new UnsupportedOperationException("loadPatterns"); +/* + try { + config_input_stream = new URLInputStream(config_path); + } catch (IOException e) { + System.err.println("Cannot find log formatter configuration file: '" + config_path + "'"); + System.err.println("No thread name conversion will be performed."); + return; + } +*/ else + config_input_stream = LogFormatter.class.getResourceAsStream(LogFormatter.DEFAULT_CONFIG_FILE); + + if (config_input_stream == null) + return; + + BufferedReader reader = new BufferedReader( + new InputStreamReader(config_input_stream, Charset.forName("ISO-8859-1"))); + + Pattern config_line_pattern = Pattern.compile("((?:[^=]|(?:\\\\=))*[^\\\\=])=(.*)"); + Pattern whitespace_line_pattern = Pattern.compile("\\s*"); + Pattern comment_line_pattern = Pattern.compile("#.*|!.*"); + String line; + Set patterns_set = new HashSet(); + while ((line = reader.readLine()) != null) { + Matcher config_line_matcher = config_line_pattern.matcher(line); + // If it is whitespace or comment line + if (whitespace_line_pattern.matcher(line).matches() || comment_line_pattern.matcher(line).matches()) + continue; + if (!config_line_matcher.matches()) { + System.err.println("The following line cannot be parsed in log formatter configuration file: '" + line + "'"); + continue; + } + String config_pattern = config_line_matcher.group(1); + String config_replacement = config_line_matcher.group(2); + if (!patterns_set.add(config_pattern)) { + System.err.println("Duplicate pattern found in log formatter configuration file: '" + config_pattern + "'"); + continue; + } + try { + PATTERNS.put(Pattern.compile(config_pattern), config_replacement); + } catch (PatternSyntaxException e) { + System.err.println("Cannot parse config pattern in log formatter configuration file: '" + config_pattern + "'"); + } + } + } catch (IOException e) { + // Do not wish to log using logger until initialization has completed. + System.err.println("Cannot read log formatter configuration file"); + e.printStackTrace(System.err); + } finally { + try { + if (config_input_stream != null) { + config_input_stream.close(); + } + } catch (IOException e) { + // Do not wish to log using logger until initialization has completed. + System.err.println("Cannot close log formatter configuration file"); + e.printStackTrace(System.err); + } + } + } + + /** + * Formats thread name according to thread name conversion rules. + * + * @return Formatted thread name + */ + static String formatThreadName(long time, String thread_name) { + ThreadNameFormatter entry = NAME_CONVERSIONS.getByKey(thread_name); + if (entry == null) { + cleanupNameConversionsIfNeeded(); + entry = new ThreadNameFormatter(thread_name, calculateThreadNameReplacement(thread_name)); + NAME_CONVERSIONS.put(entry); + } + entry.last_time = time; + return entry.replacement_name; + } + + private static void cleanupNameConversionsIfNeeded() { + if (NAME_CONVERSIONS.size() <= MAX_NAME_CONVERSIONS_CACHE_SIZE) + return; // everything is Ok + + synchronized (NAME_CONVERSIONS) { + if (NAME_CONVERSIONS.size() <= MAX_NAME_CONVERSIONS_CACHE_SIZE) + return; // everything is Ok + ThreadNameFormatter[] entries = NAME_CONVERSIONS.toArray(new ThreadNameFormatter[NAME_CONVERSIONS.size()]); + QuickSort.sort(entries); + for (int i = 0; i < entries.length - MAX_NAME_CONVERSIONS_CACHE_SIZE / 2; i++) + NAME_CONVERSIONS.removeKey(entries[i].thread_name); + } + } + + private static String calculateThreadNameReplacement(String thread_name) { + for (Map.Entry entry : PATTERNS.entrySet()) { + Matcher matcher = entry.getKey().matcher(thread_name); + if (matcher.matches()) { + String config_replacement = entry.getValue(); + try { + return matcher.replaceAll(config_replacement); + } catch (IndexOutOfBoundsException e) { + // The replacement string refers to a capturing group that does not exist in the pattern. + // To prevent cycling log it as is. + // Incorrect replacement. Just use thread name. + System.err.println("Cannot parse replacement string in log formatter configuration file: '" + config_replacement + "'"); + } + } + } + return thread_name; + } + + final String thread_name; + final String replacement_name; + long last_time; // Atomicity, visibility and consistency of this field are unimportant. + + ThreadNameFormatter(String thread_name, String replacement_name) { + this.thread_name = thread_name; + this.replacement_name = replacement_name; + } + + private String getThreadName() { + return thread_name; + } + + public int compareTo(ThreadNameFormatter o) { + return last_time < o.last_time ? -1 : last_time > o.last_time ? 1 : 0; + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/TraceLogging.java b/java_console/logging-api/src/main/java/com/devexperts/logging/TraceLogging.java new file mode 100644 index 0000000000..860655a901 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/TraceLogging.java @@ -0,0 +1,146 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import java.io.PrintStream; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; + +/** + * This is a small in-memory cyclic buffer to keep the log for debugging concurrency problems in order to + * reconstruct what was going on immediately before tests crashes, without actually writing all debug logging + * to the log file or console normally. It is used by some tests when assertions are enabled, + * otherwise this class should not even be loaded. + */ +public class TraceLogging { + private static final int STOPPED_INDEX = -1; + private static final int SIZE = Integer.parseInt(System.getProperty("TraceLogging.size", "4096")); // must be power of 2 + private static final int MASK = SIZE - 1; + + private static final int THREAD_OFS = 0; + private static final int NAME_OFS = 1; + private static final int LEVEL_OFS = 2; + private static final int MSG_OFS = 3; + private static final int THROWABLE_OFS = 4; + private static final int DATA_CNT = 5; + + private static final long[] timeQueue = new long[SIZE]; + private static final Object[] dataQueue = new Object[SIZE * DATA_CNT]; + private static final AtomicInteger index = new AtomicInteger(STOPPED_INDEX); + private static int lastIndex = STOPPED_INDEX; + + static { + if ((SIZE & MASK) != 0) + throw new RuntimeException("Size must be a power of two"); + } + + /** + * Restarts trace logging from scratch (old log entries are cleared). + * Use it at the beginning of the test. + */ + public static synchronized void restart() { + Arrays.fill(dataQueue, null); + lastIndex = STOPPED_INDEX; + index.compareAndSet(STOPPED_INDEX, 0); + } + + /** + * Stops trace logging. + */ + public static void stop() { + stopIndex(-1); + } + + /** + * Adds log entry. It is invoked from {@link Logging#log(Level, String, Throwable)} method when + * assertions are enabled. + */ + public static void log(String loggerName, Level level, String msg, Throwable t) { + append(nextIndex(), loggerName, level, msg, t); + } + + /** + * Adds last entry and stops trace logging. + */ + public static void logAndStop(Class where, String msg) { + logAndStop(where, msg, null); + } + + /** + * Adds last entry with exception and stops trace logging. + */ + public static void logAndStop(Class where, String msg, Throwable t) { + append(stopIndex(0), where.getName(), Level.INFO, msg, t); + } + + private static void append(int i, String loggerName, Level level, String msg, Throwable t) { + if (i < 0) + return; + timeQueue[i] = System.currentTimeMillis(); + dataQueue[i * DATA_CNT + THREAD_OFS] = Thread.currentThread(); + dataQueue[i * DATA_CNT + NAME_OFS] = loggerName; + dataQueue[i * DATA_CNT + LEVEL_OFS] = level; + dataQueue[i * DATA_CNT + MSG_OFS] = msg; + dataQueue[i * DATA_CNT + THROWABLE_OFS] = t; + } + + /** + * Dumps last entries from this trace log. + * It should be called after {@link #stop()} or {@link #logAndStop(Class, String)}. + * It does nothing if called more than once after stop or before stop. + */ + public static synchronized void dump(PrintStream out, String title) { + int stop = lastIndex; + if (stop < 0) + return; + lastIndex = STOPPED_INDEX; + LogFormatter formatter = new LogFormatter(); + out.println("********************** Dump trace log for " + title); + int i = stop; + do { + i = (i + 1) & MASK; + Thread thread = (Thread)dataQueue[i * DATA_CNT + THREAD_OFS]; + if (thread == null) + continue; + String loggerName = (String)dataQueue[i * DATA_CNT + NAME_OFS]; + Level level = (Level)dataQueue[i * DATA_CNT + LEVEL_OFS]; + String msg = (String)dataQueue[i * DATA_CNT + MSG_OFS]; + Throwable t = (Throwable)dataQueue[i * DATA_CNT + THROWABLE_OFS]; + long time = timeQueue[i]; + out.print("* "); + out.print(formatter.format(LogFormatter.getLevelChar(level), time, thread.getName(), loggerName, msg)); + if (t != null) + t.printStackTrace(out); + } while (i != stop); + out.println("********************** Done trace log for " + title); + } + + private static int nextIndex() { + int result; + do { + result = index.get(); + } while (result >= 0 && !index.compareAndSet(result, (result + 1) & MASK)); + return result; + } + + private static synchronized int stopIndex(int lastOffset) { + int result; + do { + result = index.get(); + } while (result >= 0 && !index.compareAndSet(result, STOPPED_INDEX)); + if (result >= 0) + lastIndex = (result + lastOffset) & MASK; + return result; + } + +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/package.html b/java_console/logging-api/src/main/java/com/devexperts/logging/package.html new file mode 100644 index 0000000000..95c5d9998a --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/package.html @@ -0,0 +1,16 @@ + + + +Provides logging classes. + + diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/AbstractConcurrentSet.java b/java_console/logging-api/src/main/java/com/devexperts/util/AbstractConcurrentSet.java new file mode 100644 index 0000000000..30752ab7cf --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/AbstractConcurrentSet.java @@ -0,0 +1,221 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.lang.reflect.Array; +import java.util.AbstractSet; +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; + +/** + * Provides a skeletal implementation of the {@link Set Set} interface to minimize the effort + * required to implement this interface. Unlike {@link AbstractSet AbstractSet} skeletal implementation, + * this one is more forgiving to concurrent modifications of this set during implemented bulk operations. + */ +public abstract class AbstractConcurrentSet implements Set { + + // ========== Construction and Clearing ========== + + /** + * Sole constructor; for invocation by subclass constructors, typically implicit. + */ + protected AbstractConcurrentSet() {} + + /** + * Removes all of the elements from this set. + *

+ * This implementation iterates all elements of this set and removes them using {@link Iterator#remove()} method. + */ + public void clear() { + for (Iterator it = iterator(); it.hasNext();) { + it.next(); + it.remove(); + } + } + + // ========== Query Operations ========== + + /** + * Tests if this set has no elements. + *

+ * This implementation checks emptiness using {@link #size()} method. + */ + public boolean isEmpty() { + return size() == 0; + } + + /** + * Returns an array containing all of the elements in this set. + * Obeys the general contract of the {@link Collection#toArray()} method. + *

+ * This implementation iterates all elements of this set and adds them into the array. + */ + public Object[] toArray() { + return toArrayImpl(null); + } + + /** + * Returns an array containing all of the elements in this set whose runtime type + * is that of the specified array. + * Obeys the general contract of the {@link Collection#toArray(Object[])} method. + *

+ * This implementation iterates all elements of this set and adds them into the array. + */ + public T[] toArray(T[] a) { + return toArrayImpl(a); + } + + @SuppressWarnings("unchecked") + private T[] toArrayImpl(T[] a) { + // If (a == null) then returned array shall be of exact length, otherwise it can be larger. + int size = size(); // Atomic read. + Object[] result = a == null ? new Object[size] : a.length >= size ? a : + (Object[])Array.newInstance(a.getClass().getComponentType(), size); + int n = 0; + for (E o : this) { + if (n >= result.length) { + // More elements were added concurrently. Enlarge result array. + // Grow twice in size, but do not fail when (n == 0). + Object[] tmp = (Object[])Array.newInstance(result.getClass().getComponentType(), n + n + 1); + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + result[n++] = o; + } + if (n < result.length && a == null) { + // Shrink allocated array to exact size. + Object[] tmp = new Object[n]; + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + if (n < result.length) + result[n] = null; + return (T[])result; + } + + // ========== Bulk Operations ========== + + /** + * Tests if this set contains all of the elements in the specified collection. + *

+ * This implementation iterates all elements of specified collection and tests + * them one-by-one using {@link #contains(Object) contains(element)} method. + */ + public boolean containsAll(Collection c) { + for (Object o : c) + if (!contains(o)) + return false; + return true; + } + + /** + * Adds all of the elements in the specified collection into this set and + * returns true if this operation has increased the size of this set. + *

+ * This implementation iterates all elements of specified collection and adds + * them one-by-one using {@link #add(Object) add(element)} method. + */ + public boolean addAll(Collection c) { + boolean modified = false; + for (E o : c) + if (add(o)) + modified = true; + return modified; + } + + /** + * Removes all of the elements in the specified collection from this set and + * returns true if this operation has decreased the size of this set. + *

+ * This implementation compares size of specified collection with the size of this set, + * then iterates smaller collection and removes elements that need to be removed. + */ + public boolean removeAll(Collection c) { + boolean modified = false; + if (size() > c.size()) { + for (Object o : c) + if (remove(o)) + modified = true; + } else { + for (Iterator it = iterator(); it.hasNext();) + if (c.contains(it.next())) { + it.remove(); + modified = true; + } + } + return modified; + } + + /** + * Retains only the elements in this set that are contained in the specified collection. + *

+ * This implementation iterates all elements of this set, checks if they are contained in + * the specified collection, and removes them if needed using {@link Iterator#remove()} method. + */ + public boolean retainAll(Collection c) { + boolean modified = false; + for (Iterator it = iterator(); it.hasNext();) + if (!c.contains(it.next())) { + it.remove(); + modified = true; + } + return modified; + } + + // ========== Comparison and Hashing ========== + + /** + * Compares the specified object with this set for equality. + * Obeys the general contract of the {@link Set#equals(Object)} method. + *

+ * This implementation compares size of specified set with the size of this set and then + * checks element containment using {@link #containsAll(Collection) containsAll((Set)o)} method. + */ + public boolean equals(Object o) { + return o == this || o instanceof Set && size() == ((Set)o).size() && containsAll((Set)o); + } + + /** + * Returns the hash code value for this set. + * Obeys the general contract of the {@link Set#hashCode()} method. + *

+ * This implementation iterates all elements of this set and adds their hash codes. + */ + public int hashCode() { + int hash = 0; + for (E o : this) + if (o != null) + hash += o.hashCode(); + return hash; + } + + // ========== String Conversion ========== + + /** + * Returns a string representation of this set. + *

+ * This implementation iterates all elements of this set and concatenates their string representations. + */ + public String toString() { + StringBuilder sb = new StringBuilder(size() * 3 + 10); + sb.append("["); + String separator = ""; + for (E o : this) { + sb.append(separator); + sb.append(o); + separator = ", "; + } + sb.append("]"); + return sb.toString(); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSet.java b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSet.java new file mode 100644 index 0000000000..98ff6bbdb4 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSet.java @@ -0,0 +1,1407 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; +import java.lang.reflect.Array; +import java.util.Arrays; +import java.util.Collection; +import java.util.ConcurrentModificationException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collector; +import javax.annotation.Nonnull; + +/** + * A collection that contains no duplicate elements according to specified identification strategy. + * The IndexedSet class implements and obeys general contracts of {@link Set Set} interface + * and provides additional benefits over standard implementations: + * + *

    + *
  • delegation of element identification to external strategy + *
  • concurrent asynchronous read access + *
  • smaller memory footprint and faster performance + *
+ * + *

The IndexedSet assumes that identity of an element can be represented by a variable number + * of attributes, therefore it delegates identification to an external strategy — the {@link IndexerFunction}. + * In order to fulfil contracts of {@link Map Map} interface and for convenience, the IndexedSet + * supports concept of explicit key object and also numeric key representation, but these + * identification means are optional and need not be supported by all strategies. + * + *

Note that the IndexedSet is not synchronized! Concurrent modifications of IndexedSet + * from multiple threads must be synchronized externally to preserve data integrity. + * On the other side, the IndexedSet fully supports concurrent asynchronous read operations, + * which works during concurrent modification by other thread. In case of concurrent modification + * each atomic read sees IndexedSet either before or after each atomic write operation. + * + *

The IndexedSet does not support null values, but it supports null keys + * if they are supported by corresponding {@link IndexerFunction}. The IndexedSet is serializable. + */ +public class IndexedSet extends AbstractConcurrentSet implements Cloneable, Serializable { + private static final long serialVersionUID = 0L; + + // 'private' fields and methods of IndexedSet class shall be accessed only from within IndexedSet class itself. + + private final IndexerFunction indexer; + private transient volatile Core core; + + // ========== static factory methods =========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public static IndexedSet create() { + return new IndexedSet<>(); + } + + /** + * Creates new empty set with default identity indexer. + */ + public static IndexedSet createIdentity() { + return new IndexedSet<>((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Creates new empty set with specified indexer. + */ + public static IndexedSet create(IndexerFunction indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified identity indexer. + */ + public static IndexedSet createIdentity(IndexerFunction.IdentityKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified int indexer. + */ + public static IndexedSet createInt(IndexerFunction.IntKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified long indexer. + */ + public static IndexedSet createLong(IndexerFunction.LongKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.IntKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.LongKey indexer) { + return new IndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction indexer, int initialCapacity) { + return new IndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.IntKey indexer, int initialCapacity) { + return new IndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.LongKey indexer, int initialCapacity) { + return new IndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction indexer, Collection c) { + return new IndexedSet<>(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.IntKey indexer, Collection c) { + return new IndexedSet<>(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static IndexedSet create(IndexerFunction.LongKey indexer, Collection c) { + return new IndexedSet<>(indexer, c); + } + + /** + * Creates a new set with default indexer containing specified elements. + */ + @SafeVarargs + public static IndexedSet of(V... objs) { + return new IndexedSet<>(Arrays.asList(objs)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with default indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + @SuppressWarnings("unchecked") + public static Collector> collector() { + return collector((IndexerFunction)IndexerFunction.DEFAULT); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with default identity indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity() { + return collector((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collector(IndexerFunction indexer) { + return Collector.of(() -> create(indexer), IndexedSet::add, + (left, right) -> { left.addAll(right); return left; }, + Collector.Characteristics.UNORDERED, Collector.Characteristics.IDENTITY_FINISH); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified identity indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity(IndexerFunction.IdentityKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified int indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorInt(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified long indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorLong(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorInt(IndexerFunction.IntKey) collectorInt(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code IndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorLong(IndexerFunction.LongKey) collectorLong(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + // ========== Construction and Sizing Operations ========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public IndexedSet() { + this(0); + } + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT} and specified initial capacity. + */ + @SuppressWarnings("unchecked") + public IndexedSet(int initialCapacity) { + this(IndexerFunction.DEFAULT, initialCapacity); + } + + /** + * Creates new empty set with specified indexer. + */ + protected IndexedSet(IndexerFunction indexer) { + this(indexer, 0); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)} + */ + @Deprecated + public IndexedSet(Indexer indexer) { + this((IndexerFunction) indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + */ + @SuppressWarnings("unchecked") + protected IndexedSet(IndexerFunction indexer, int initialCapacity) { + if (indexer == null) + throw new NullPointerException("Indexer is null."); + this.indexer = indexer; + this.core = initialCapacity <= 0 ? (Core)Core.EMPTY_CORE : new Core(indexer, initialCapacity, GOLDEN_RATIO); // Atomic volatile write. + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public IndexedSet(Indexer indexer, int initialCapacity) { + this((IndexerFunction) indexer, initialCapacity); + } + + /** + * Creates a new set containing the elements in the specified collection. + * If specified collection is an {@link IndexedSet}, then new indexed set uses same indexer, + * otherwise it uses default indexer {@link IndexerFunction#DEFAULT}. + */ + @SuppressWarnings("unchecked") + public IndexedSet(Collection c) { + this(c instanceof IndexedSet ? ((IndexedSet) c).getIndexerFunction() : IndexerFunction.DEFAULT, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + */ + protected IndexedSet(IndexerFunction indexer, Collection c) { + this(indexer, c.size()); + addAll(c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public IndexedSet(Indexer indexer, Collection c) { + this((IndexerFunction) indexer, c); + } + + /** + * Returns a shallow copy of this set - the values themselves are not cloned. + */ + @SuppressWarnings({"unchecked"}) + @Override + public IndexedSet clone() { + try { + IndexedSet result = (IndexedSet)super.clone(); + if (result.core != Core.EMPTY_CORE) + result.core = new Core<>(result.core); + return result; + } catch (CloneNotSupportedException e) { + throw new InternalError(); + } + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + *

+ * Returns this set instance for convenience. + */ + public IndexedSet withCapacity(int capacity) { + ensureCapacity(capacity); + return this; + } + + /** + * Adds all of the elements in the specified collection into this set. + *

+ * Returns this set instance for convenience. + */ + public IndexedSet withElements(Collection c) { + ensureCapacity(c.size()); + addAll(c); + return this; + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + */ + public void ensureCapacity(int capacity) { + core = core.ensureCapacity(indexer, capacity); // Atomic volatile read and write. + } + + /** + * Trims the capacity of this set instance to be the set's current size. + * An application can use this operation to minimize the storage of this set instance. + */ + public void trimToSize() { + core = core.trimToSize(indexer); // Atomic volatile read and write. + } + + /** + * Removes all elements from this set. + */ + @Override + public void clear() { + core = core.clear(); // Atomic volatile read and write. + } + + // ========== Query Operations ========== + + /** + * Returns indexer used to distinguish and identify elements in this set. + * + * @deprecated Use {@link #getIndexerFunction()} + */ + @SuppressWarnings({"rawtypes", "unchecked"}) + @Deprecated + public Indexer getIndexer() { + return indexer instanceof Indexer ? (Indexer)indexer : new Indexer.DelegateIndexer(indexer); + } + + /** + * Returns indexer function used to distinguish and identify elements in this set. + */ + public IndexerFunction getIndexerFunction() { + return indexer; + } + + /** + * Returns the number of elements in this set. + */ + @Override + public int size() { + return core.size(); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified value or null if none were found. + */ + public V getByValue(V value) { + return core.getByValue(value); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified key or null if none were found. + */ + public V getByKey(K key) { + return core.getByKey(key); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified key or null if none were found. + */ + public V getByKey(int key) { + return core.getByKey(key); // Atomic volatile read. + } + + /** + * Returns the element from this set which matches specified key or null if none were found. + */ + public V getByKey(long key) { + return core.getByKey(key); // Atomic volatile read. + } + + /** + * Returns true if this set contains element which matches specified value. + *

+ * This implementation delegates to ({@link #getByValue(Object) getByValue(value)} != null) expression. + *

+ * Note, that unlike {@link HashSet#contains}, + * this method might throw {@link ClassCastException} if value is of the wrong class. + * + * @deprecated Use {@link #containsValue} to be explicit about type and intent. + */ + @Override + @SuppressWarnings("unchecked") + public boolean contains(Object value) { + return getByValue((V)value) != null; + } + + /** + * Returns true if this set contains element which matches specified value. + *

+ * This implementation delegates to ({@link #getByValue(Object) getByValue(value)} != null) expression. + */ + public boolean containsValue(V value) { + return getByValue(value) != null; + } + + /** + * Returns true if this set contains element which matches specified key. + *

+ * This implementation delegates to ({@link #getByKey(Object) getByKey(key)} != null) expression. + */ + public boolean containsKey(K key) { + return getByKey(key) != null; + } + + /** + * Returns true if this set contains element which matches specified key. + *

+ * This implementation delegates to ({@link #getByKey(int) getByKey(key)} != null) expression. + */ + public boolean containsKey(int key) { + return getByKey(key) != null; + } + + /** + * Returns true if this set contains element which matches specified key. + *

+ * This implementation delegates to ({@link #getByKey(long) getByKey(key)} != null) expression. + */ + public boolean containsKey(long key) { + return getByKey(key) != null; + } + + /** + * Returns an iterator over the elements in this set. + */ + @Nonnull + @Override + @SuppressWarnings("unchecked") + public Iterator iterator() { + return (Iterator)iterator(IndexedIterator.VALUE_FAILFAST); + } + + /** + * Returns an iterator over the keys of elements in this set. + */ + @SuppressWarnings("unchecked") + public Iterator keyIterator() { + return (Iterator)iterator(IndexedIterator.KEY_FAILFAST); + } + + /** + * Returns an iterator over the entries in this set. + */ + @SuppressWarnings("unchecked") + public Iterator> entryIterator() { + return (Iterator>)iterator(IndexedIterator.ENTRY_FAILFAST); + } + + /** + * Returns concurrent iterator over the elements in this set. + */ + @SuppressWarnings("unchecked") + public Iterator concurrentIterator() { + return (Iterator)iterator(IndexedIterator.VALUE_CONCURRENT); + } + + /** + * Returns an array containing all of the elements in this set. + * Obeys the general contract of the {@link Collection#toArray()} method. + */ + @Nonnull + @Override + public Object[] toArray() { + return core.toArray(null); // Atomic volatile read. + } + + /** + * Returns an array containing all of the elements in this set whose runtime type is that of the specified array. + * Obeys the general contract of the {@link Collection#toArray(Object[])} method. + */ + @Nonnull + @Override + public T[] toArray(T[] a) { + return core.toArray(a); // Atomic volatile read. + } + + /** + * Returns static structure statistics of this set. + */ + public IndexedSetStats getStats() { + return core.getStats(); + } + + // ========== Modification Operations ========== + + /** + * Puts specified element into this set and returns previous element that matches specified one. + */ + public V put(V value) { + return putImpl(core, value); // Atomic volatile read. + } + + /** + * Puts specified element into this set if it is absent and + * returns current element in the set that matches specified one. + * This is equivalent to + *

+	 *   if (set.containsValue(value)) {
+	 *     return set.getByValue(value);
+	 *   } else {
+	 *     set.put(value);
+	 *     return value;
+	 *   }
+	 * 
+ * except that the action is performed atomically if it is properly synchronized. + *

+ * Note, that unlike {@link ConcurrentMap#putIfAbsent}, + * this method returns specified value (not null) if the value was absent. + */ + public V putIfAbsentAndGet(V value) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.getByValue(value); + if (oldValue != null) + return oldValue; + putImpl(core, value); + return value; + } + + /** + * Adds specified element into this set and returns true + * if this operation has increased the size of this set. + *

+ * This implementation adds value using {@link #put(Object) put(value)} method. + */ + @Override + public boolean add(V value) { + return put(value) == null; + } + + /** + * Removes specified element from this set if it is present and returns + * true if this operation has decreased the size of this set. + *

+ * This implementation removes value using {@link #removeValue(Object) removeValue(value)} method. + *

+ * Note, that unlike {@link HashSet#remove}, + * this method might throw {@link ClassCastException} if value is of the wrong class. + */ + @Override + @SuppressWarnings("unchecked") + public boolean remove(Object value) { + return removeValue((V) value) != null; + } + + /** + * Removes the element from this set which matches specified value if it is present + * and returns removed element or null if none were found. + */ + public V removeValue(V value) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.removeValue(value); + this.core = core; // Atomic volatile write. + return oldValue; + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + public V removeKey(K key) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.removeKey(key); + this.core = core; // Atomic volatile write. + return oldValue; + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + public V removeKey(int key) { + return removeKey((long)key); + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + public V removeKey(long key) { + Core core = this.core; // Atomic volatile read. + V oldValue = core.removeKey(key); + this.core = core; // Atomic volatile write. + return oldValue; + } + + // ========== Internal Implementation - Helper Instance Methods ========== + + private V putImpl(Core core, V value) { + V oldValue; + if (core.needRehash()) { + // Rehash shall be done before put in order to move away from EMPTY_CORE and protect from bad magic. + // However in situ replacement of existing value shall keep old modCount and avoid rehash. + if (core == Core.EMPTY_CORE || (oldValue = core.put(value, true)) == null) { + core = core.rehash(indexer, 0); + oldValue = core.put(value, false); + } + } else + oldValue = core.put(value, false); + this.core = core; // Atomic volatile write. + return oldValue; + } + + private Iterator iterator(int type) { + Core core = this.core; // Atomic volatile read. + return core.size() == 0 ? IndexedIterator.EMPTY_ITERATOR : new IndexedIterator<>(this, core, type); + } + + void checkModification(Object checkCore, long checkModCount) { + Core core = this.core; // Atomic volatile read. + if (checkCore != core || checkModCount != core.getModCount()) + throw new ConcurrentModificationException(); + } + + void removeIterated(Object checkCore, long checkModCount, boolean concurrent, V lastValue, int lastIndex) { + Core core = this.core; // Atomic volatile read. + if (!concurrent && (checkCore != core || checkModCount != core.getModCount())) + throw new ConcurrentModificationException(); + if (core.getAt(lastIndex) == lastValue) // Atomic read. + core.removeAt(lastIndex, core.getInitialIndexByValue(lastValue)); + else if (concurrent) + core.removeValue(lastValue); + else + throw new ConcurrentModificationException(); + this.core = core; // Atomic volatile write. + } + + private void writeObject(ObjectOutputStream out) throws IOException { + out.defaultWriteObject(); + writeCore(out); + } + + void writeCore(ObjectOutputStream out) throws IOException { + core.writeObjectImpl(out); // Atomic volatile read. + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + core = Core.readObjectImpl(indexer, in); // Atomic volatile write. + } + + // ========== Internal Implementation - Core ========== + + /** + * Core class to hold all data of {@link IndexedSet}. + */ + private static final class Core { + static final int QUALITY_BASE = 6; + static final Object REMOVED = new Object(); // Marker object for removed values. + + @SuppressWarnings("unchecked") + static final Core EMPTY_CORE = new Core(value -> null, 0, GOLDEN_RATIO); // Empty core for empty sets. + + static { + EMPTY_CORE.overallSize = EMPTY_CORE.matrix.length; // Special value to trigger rehash before first 'put' operation. + } + + // 'private' fields and methods of Core class shall be accessed only from within Core class itself. + + private final int magic; + private final int shift; + private final IndexerFunction indexer; + private final V[] matrix; + + /** + * Quality is a complex value that tracks quality of this core's payload, + * quality = (total_distance_to_all_payload_values << QUALITY_BASE) + distance_shift, + * where {@code distance_shift} is a current tolerance to the bad payload distance. + * Note, that lower value of quality is BETTER. + * @see #exceed(long) + */ + private long quality; + + private int payloadSize; + private int overallSize; // payloadSize + number_of_REMOVED_values + + private long modCount; // counts structural changes when elements are added or removed (replace is Ok) + private long amortizedCost; // total cost of amortization of all removed and rehashed values, see unamortizedCost() + + @SuppressWarnings("unchecked") + Core(IndexerFunction indexer, int capacity, int magic) { + if (indexer == null) + throw new NullPointerException("Indexer is null."); + this.magic = magic; + shift = getShift(capacity); + this.indexer = indexer; + matrix = (V[])new Object[(-1 >>> shift) + 1]; + quality = QUALITY_BASE + 1; // will rehash when avg_dist > 2, see exceed(...) + } + + /** + * Clones specified core. Implemented as constructor to keep {@link #matrix} field final. + */ + Core(Core source) { + magic = source.magic; + shift = source.shift; + indexer = source.indexer; + matrix = source.matrix.clone(); + quality = source.quality; + payloadSize = source.payloadSize; + overallSize = source.overallSize; + modCount = source.modCount; + amortizedCost = source.amortizedCost; + } + + /** + * Returns increment to this core's {@link #quality} that should be added when new payload + * entry is added at position {@code index} with its initial position at {@code initialIndex}. + */ + private long qualityInc(int index, int initialIndex) { + return ((initialIndex - index) & (-1 >>> shift)) << QUALITY_BASE; + } + + /** + * Returns true if average distance to payload values exceeds + * 1 << (distanceShift - QUALITY_BASE), + * where only last {@link #QUALITY_BASE} bits of distanceShift parameter are used. + * Thus, the method can be directly applied using {@link #quality} itself as an + * {@code distanceShift} argument. + */ + private boolean exceed(long distanceShift) { + // mask total distance bits first + return (quality & (-1L << QUALITY_BASE)) > ((long) payloadSize << distanceShift); + } + + // compute quality tolerance for new instance, so that it rehashes only when it becomes much worse than now + private void computeTolerance() { + while (exceed(quality)) + quality++; + // increment to next tolerance if it is close to exceeding current tolerance + if ((quality & (-1L << QUALITY_BASE)) * 3 > ((long) payloadSize << quality) * 2) + quality++; + } + + /** + * Returns the cost of all put operations to place payload into this core. + * @see #amortizedCost + */ + private long unamortizedCost() { + return (quality >>> QUALITY_BASE) + payloadSize; + } + + private void putValuesIntoEmptyCore(V[] values) { + for (int i = values.length; --i >= 0;) { + V value = values[i]; // Atomic read. + if (value == null || value == REMOVED) + continue; + int index = getInitialIndexByValue(value); + int initialIndex = index; + while (matrix[index] != null) + index = (index - 1) & (-1 >>> shift); + matrix[index] = value; + quality += qualityInc(index, initialIndex); + payloadSize++; + overallSize++; + // Check if there are too many elements in the source. + // Error may happen either if source state is broken + // or if elements are added to source concurrently. + // Ignoring such error here will lead to a dead loop above. + if (overallSize > (THRESHOLD_UP >>> shift)) + throw new ConcurrentModificationException("Concurrent modification during rehash"); + } + } + + private Core rehashInternal(IndexerFunction indexer, int capacity) { + /* GENERAL DESCRIPTION OF REHASH ALGORITHM: + 1. Try to rehash at most 4 times. Twice at regular capacity, once at 2x capacity, and once at 4x capacity. + 2. First attempt can keep old magic if previous distance is good enough, other attempts use random magic. + 3. If the first attempt immediately satisfies perfect limits then return. + 4. If we have to make additional attempts, then the best result is picked. + In this case result is considered acceptable if it satisfies consequently worse limits. + 5. After four attempts the best result is returned even if it is unacceptable by the above rules. + */ + capacity = Math.min(Math.max(capacity, payloadSize), MAX_CAPACITY); + long totalCost = amortizedCost + unamortizedCost(); + Core result = new Core<>(indexer, capacity, exceed(QUALITY_BASE + 1) ? nextMagic(magic, capacity) : magic); + result.putValuesIntoEmptyCore(matrix); + totalCost += result.unamortizedCost(); + if (result.exceed(QUALITY_BASE + 1)) // only if quality is not very good + for (int k = 0; k < 3; k++) { + Core other = new Core<>(indexer, capacity, nextMagic(magic, capacity)); + other.putValuesIntoEmptyCore(matrix); + totalCost += other.unamortizedCost(); + if (other.quality < result.quality) // lower quality is better + result = other; + if (!result.exceed(QUALITY_BASE + 2 + k)) + break; // break when we have acceptable quality + capacity = Math.min(capacity * 2, MAX_CAPACITY); + } + result.computeTolerance(); + // update result stats + result.modCount = modCount; + result.amortizedCost = totalCost - result.unamortizedCost(); + return result; + } + + Core rehash(IndexerFunction indexer, int capacity) { + long modCount = this.modCount; // Atomic read. + Core result = rehashInternal(indexer, capacity); + if (modCount != this.modCount) // Atomic read. + throw new ConcurrentModificationException("Concurrent modification during rehash"); + return result; + } + + boolean needRehash() { + return overallSize > (THRESHOLD_UP >>> shift) || exceed(quality); + } + + Core rehashIfNeeded(IndexerFunction indexer, int capacity) { + return needRehash() ? + rehash(indexer, capacity) : this; + } + + Core ensureCapacity(IndexerFunction indexer, int capacity) { + return capacity > (THRESHOLD_UP >>> shift) && shift > MIN_SHIFT ? + rehash(indexer, capacity) : this; + } + + Core trimToSize(IndexerFunction indexer) { + return payloadSize < (THRESHOLD_DOWN >>> shift) && shift < MAX_SHIFT ? + rehash(indexer, 0) : this; + } + + Core clear() { + if (this == EMPTY_CORE) + return this; + for (int i = matrix.length; --i >= 0;) + matrix[i] = null; + modCount += payloadSize; + amortizedCost += unamortizedCost(); + quality = QUALITY_BASE + 1; + payloadSize = 0; + overallSize = 0; + return this; + } + + int size() { + return payloadSize; // Atomic read. + } + + long getModCount() { + return modCount; // Atomic read. + } + + int getInitialIndexByValue(V value) { + return (indexer.hashCodeByValue(value) * magic) >>> shift; + } + + V getByValue(V value) { + int index = getInitialIndexByValue(value); + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByValue(value, testValue)) + return testValue; + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V getByKey(K key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) + return testValue; + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V getByKey(long key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) + return testValue; + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + @SuppressWarnings("unchecked") + V put(V value, boolean replaceOnly) { + // These are sanity checks - they can be removed once testing completed. + assert this != EMPTY_CORE : "Putting into EMPTY core."; + assert value != REMOVED : "Value is an internal special marker object."; + + if (value == null) + throw new NullPointerException("Value is null."); + int index = getInitialIndexByValue(value); + int initialIndex = index; + int removedIndex = -1; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByValue(value, testValue)) { + matrix[index] = value; + return testValue; + } + if (testValue == REMOVED && removedIndex < 0) + removedIndex = index; + index = (index - 1) & (-1 >>> shift); + } + if (replaceOnly) + return null; + if (removedIndex < 0) { + matrix[index] = value; + overallSize++; + } else + matrix[index = removedIndex] = value; + quality += qualityInc(index, initialIndex); + payloadSize++; + modCount++; + return null; + } + + V removeValue(V value) { + int index = getInitialIndexByValue(value); + int initialIndex = index; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByValue(value, testValue)) { + removeAt(index, initialIndex); + return testValue; + } + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V removeKey(K key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + int initialIndex = index; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) { + removeAt(index, initialIndex); + return testValue; + } + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + V removeKey(long key) { + int index = (indexer.hashCodeByKey(key) * magic) >>> shift; + int initialIndex = index; + V testValue; + while ((testValue = matrix[index]) != null) { // Atomic read. + if (testValue != REMOVED && indexer.matchesByKey(key, testValue)) { + removeAt(index, initialIndex); + return testValue; + } + index = (index - 1) & (-1 >>> shift); + } + return null; + } + + int getMaxIndex() { + return matrix.length - 1; + } + + V getAt(int index) { + return matrix[index]; + } + + @SuppressWarnings("unchecked") + void removeAt(int index, int initialIndex) { + matrix[index] = (V)REMOVED; + quality -= qualityInc(index, initialIndex); + payloadSize--; + if (matrix[(index - 1) & (-1 >>> shift)] == null) + while (matrix[index] == REMOVED) { + matrix[index] = null; + overallSize--; + index = (index + 1) & (-1 >>> shift); + } + modCount++; + // we paid twice -- first adding this element, then removing it + amortizedCost += 2 * ((qualityInc(index, initialIndex) >>> QUALITY_BASE) + 1); + } + + @SuppressWarnings("unchecked") + T[] toArray(T[] a) { + // If (a == null) then returned array shall be of exact length, otherwise it can be larger. + int size = payloadSize; // Atomic read. + Object[] result = a == null ? new Object[size] : a.length >= size ? a : + (Object[])Array.newInstance(a.getClass().getComponentType(), size); + int n = 0; + for (int i = matrix.length; --i >= 0;) { + Object value = matrix[i]; // Atomic read. + if (value == null || value == REMOVED) + continue; + if (n >= result.length) { + // More elements were added concurrently. Enlarge result array. + // Do not grow more than twice. + // Do not grow more than possible remaining elements (i + 1). + // Do not fail when (n == 0). + Object[] tmp = (Object[])Array.newInstance(result.getClass().getComponentType(), n + Math.min(n, i) + 1); + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + result[n++] = value; + } + if (n < result.length && a == null) { + // Shrink allocated array to exact size. + Object[] tmp = new Object[n]; + System.arraycopy(result, 0, tmp, 0, n); + result = tmp; + } + if (n < result.length) + result[n] = null; + return (T[])result; + } + + void writeObjectImpl(ObjectOutputStream out) throws IOException { + int n = payloadSize; // Atomic read. + // if (n == 0) then empty set, no elements written + // if (n > 0) then fixed set with exactly n elements written + // if (n < 0) then dynamic set with approximately (-n) elements plus marker null element written + out.writeInt(n); + for (int i = matrix.length; --i >= 0;) { + Object value = matrix[i]; // Atomic read. + if (value != null && value != REMOVED && n-- > 0) // Do not write more than n values anyway. + out.writeObject(value); + } + if (n != 0) + throw new IOException("Concurrent modification detected."); + } + + @SuppressWarnings("unchecked") + static Core readObjectImpl(IndexerFunction indexer, ObjectInputStream in) throws IOException, ClassNotFoundException { + int n = in.readInt(); + // if (n == 0) then empty set, no elements written + // if (n > 0) then fixed set with exactly n elements written + // if (n < 0) then dynamic set with approximately (-n) elements plus marker null element written + if (n == 0) + return (Core)EMPTY_CORE; + Core core = new Core<>(indexer, Math.abs(n), GOLDEN_RATIO); + if (n > 0) + for (int i = 0; i < n; i++) { + core = core.rehashIfNeeded(indexer, n); // to protect from bad magic + core.put((V)in.readObject(), false); + } + else + for (V value; (value = (V)in.readObject()) != null;) { + core = core.rehashIfNeeded(indexer, -n); // to protect from bad magic + core.put(value, false); + } + return core; + } + + IndexedSetStats getStats() { + return new IndexedSetStats(payloadSize, matrix.length, quality >>> QUALITY_BASE, amortizedCost + unamortizedCost(), modCount); + } + } + + // ========== Internal Implementation - Iterator ========== + + /** + * Asynchronous iterator over {@link IndexedSet}. + */ + private static final class IndexedIterator implements Iterator { + static final int VALUE_CONCURRENT = 0; + static final int VALUE_FAILFAST = 1; + static final int KEY_FAILFAST = 2; + static final int ENTRY_FAILFAST = 3; + + @SuppressWarnings("unchecked") + static final Iterator EMPTY_ITERATOR = new IndexedIterator(null, Core.EMPTY_CORE, VALUE_CONCURRENT); + + // 'private' fields and methods of IndexedIterator class shall be accessed only from within IndexedIterator class itself. + + private final IndexedSet set; + private final Core core; + private final int type; + + private long modCount; + + private V nextValue; + private int nextIndex; + private V lastValue; + private int lastIndex; + + IndexedIterator(IndexedSet set, Core core, int type) { + this.set = set; + this.core = core; + this.type = type; + modCount = core.getModCount(); + nextIndex = core.getMaxIndex() + 1; + fillNext(); + } + + private void fillNext() { + if (type != VALUE_CONCURRENT) + set.checkModification(core, modCount); + while (--nextIndex >= 0) { + nextValue = core.getAt(nextIndex); // Atomic read. + if (nextValue != null && nextValue != Core.REMOVED) + return; + } + nextValue = null; // No more elements - clear leftover state. + } + + @Override + public boolean hasNext() { + return nextValue != null; + } + + @Override + public Object next() { + if (nextValue == null) + throw new NoSuchElementException(); + lastValue = nextValue; + lastIndex = nextIndex; + fillNext(); + if (type == KEY_FAILFAST) + return set.getIndexerFunction().getObjectKey(lastValue); + if (type == ENTRY_FAILFAST) + return new IndexedEntry<>(set, lastValue); + return lastValue; + } + + @Override + public void remove() { + if (lastValue == null) + throw new IllegalStateException(); + set.removeIterated(core, modCount, type == VALUE_CONCURRENT, lastValue, lastIndex); + modCount = core.getModCount(); + lastValue = null; + } + } + + // ========== Internal Implementation - Entry ========== + + /** + * IndexedEntry class is a wrapper to convert indexed API to collections API. + */ + private static final class IndexedEntry implements Map.Entry { + // 'private' fields and methods of IndexedEntry class shall be accessed only from within IndexedEntry class itself. + + private final IndexedSet set; + private V value; + + IndexedEntry(IndexedSet set, V value) { + this.set = set; + this.value = value; + } + + @Override + public K getKey() { + return set.getIndexerFunction().getObjectKey(value); + } + + @Override + public V getValue() { + return value; + } + + @Override + public V setValue(V value) { + if (value == null) + throw new NullPointerException("Value is null."); + V oldValue = this.value; + if (!set.getIndexerFunction().matchesByValue(value, oldValue)) + throw new IllegalArgumentException("New value does not match old value."); + set.put(this.value = value); + return oldValue; + } + + public boolean equals(Object obj) { + if (!(obj instanceof Map.Entry)) + return false; + Map.Entry e = (Map.Entry)obj; + Object key = getKey(); + Object ekey = e.getKey(); + return (key == null ? ekey == null : key.equals(ekey)) && value.equals(e.getValue()); + } + + public int hashCode() { + K key = getKey(); + return (key == null ? 0 : key.hashCode()) ^ value.hashCode(); + } + + public String toString() { + return getKey() + "=" + value; + } + } + + // ========== Internal Implementation - Helper Static Constants and Methods ========== + + /* + * This section contains constants and methods to support matrix-based data structures. + * Such data structures and related algorithms are also known as "direct linear probe hashing". + * The code below is a copy-paste from com.devexperts.qd.impl.matrix.Hashing class. + */ + + static final int THRESHOLD_UP = (int)((1L << 32) * 5 / 9); + static final int THRESHOLD_DOWN = (int)((1L << 32) * 5 / 27); + + static final int THRESHOLD_ALLOC_UP = (int)((1L << 32) * 4 / 9); + static final int MAX_SHIFT = 29; + static final int MIN_SHIFT = 2; + static final int MAX_CAPACITY = THRESHOLD_ALLOC_UP >>> MIN_SHIFT; + + /** + * Calculates appropriate 'shift' for specified capacity. + */ + static int getShift(int capacity) { + int shift = MAX_SHIFT; + while ((THRESHOLD_ALLOC_UP >>> shift) < capacity && shift >= MIN_SHIFT) + shift--; + if (shift < MIN_SHIFT) + throw new IllegalArgumentException("Capacity is too large: " + capacity); + return shift; + } + + private static final int GOLDEN_RATIO = 0x9E3779B9; + private static final int MAGIC = 0xC96B5A35; + private static int magicSeed = (int)(System.currentTimeMillis() * Runtime.getRuntime().freeMemory()); + + /** + * Generates next MAGIC number with proper distribution and difference of bits. + */ + static int nextMagic(int prevMagic) { + // Generate next pseudo-random number with lowest bit set to '1'. + int magic = (magicSeed = magicSeed * MAGIC + 1) | 1; + // Enforce that any 4 bits are neither '0000' nor '1111'. + // Start earlier to enforce that highest 2 bits are neither '00' nor '11'. + for (int i = 31; --i >= 0;) { + int bits = (magic >> i) & 0x0F; + if (bits == 0 || bits == 0x0F) { + magic ^= 1 << i; + i -= 2; + } + } + // Recover cleared lowest bit. + if ((magic & 1) == 0) + magic ^= 3; // Convert '10' (the only possible case) into '01'. + // Enforce that any 8 bits have at least 1 difference from previous number. + for (int i = 25; --i >= 0;) { + if ((((magic ^ prevMagic) >> i) & 0xFF) == 0) { + // Reverse bit i+1 and enforce that bit i+2 differs from it. + // This may lead to 4-bit (but not longer) sequences of '0' or '1'. + magic ^= ((magic ^ (magic << 1)) & (4 << i)) ^ (2 << i); + i -= 6; + } + } + return magic; + } + + /** + * Generates next MAGIC number by selecting best one from several candidates. + * Number of checked candidates depends on specified capacity. + */ + static int nextMagic(int prevMagic, int capacity) { + int magic = nextMagic(prevMagic); + if (capacity < 32) + return magic; + double eval = evaluateContinuedFraction(magic); + int attempts = 30 - Integer.numberOfLeadingZeros(capacity); + for (int i = 0; i < attempts; i++) { + int m = nextMagic(prevMagic); + double e = evaluateContinuedFraction(m); + if (e > eval) { + magic = m; + eval = e; + } + } + return magic; + } + + /** + * Evaluates quality of specified MAGIC number as a minimal normalized distance + * to rational approximations generated by continued fraction. + * The larger distance - the better magic. + */ + static double evaluateContinuedFraction(int magic) { + // for explanation of continued fraction look at https://en.wikipedia.org/wiki/Continued_fraction + // 'x' is a fractional representation of magic scaled into a range (0, 1); both bounds exclusive + // 'rem' is a current remainder to compute next continued fraction coefficient; it's in a range [0, 1) + // 'a' is a current continued fraction coefficient - aka a[i]; it's always a natural number + // 'p/q' is a current rational approximation of 'x' with an error less than 1/q^2 + // (p1,q1) and (p2,q2) are previous (p,q) approximations - aka (p[i-1],q[i-1]) and (p[i-2],q[i-2]) + // 'grade' is a minimal (worst) distance from 'x' to it's approximations normalized by q^2 + double x = (double)(magic & 0xFFFFFFFFL) / (1L << 32); + double rem = x; + long p2 = 1; + long q2 = 0; + long p1 = 0; + long q1 = 1; + double grade = x; + for (int i = 1; i <= 20; i++) { + rem = 1 / rem; + long a = (long)rem; + rem -= a; + long p = a * p1 + p2; + long q = a * q1 + q2; + p2 = p1; + q2 = q1; + p1 = p; + q1 = q; + grade = Math.min(grade, Math.abs(x * q - p) * q); + if (grade < 1e-6 || rem < 1e-6 || q > (1 << 20)) + break; + } + return grade; + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSetStats.java b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSetStats.java new file mode 100644 index 0000000000..801e091875 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IndexedSetStats.java @@ -0,0 +1,69 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; +import java.util.Locale; + +/** + * Provides access to statistics of the {@link IndexedSet} static structure. + * Statistics are tracked only during modification operations. + * It has self-explanatory {@link #toString()} method that can be used to periodically dump + * information about important caches that are based on the {@code IndexedSet}. + */ +public class IndexedSetStats implements Serializable { + private static final long serialVersionUID = 0; + + private final int payload_size; + private final int allocated_size; + private final long payload_distance; + private final long amortized_cost; + private final long mod_count; + + IndexedSetStats(int payload_size, int allocated_size, long payload_distance, long amortized_cost, long mod_count) { + this.payload_size = payload_size; + this.allocated_size = allocated_size; + this.payload_distance = payload_distance; + this.amortized_cost = amortized_cost; + this.mod_count = mod_count; + } + + public int getSize() { + return payload_size; + } + + public int getAllocatedSize() { + return allocated_size; + } + + public double getFillFactor() { + return (double)payload_size / allocated_size; + } + + public double getAverageDistance() { + return payload_distance == 0 ? 0 : (double)payload_distance / payload_size; + } + + public double getAmortizedCost() { + return amortized_cost == 0 ? 0 : (double)amortized_cost / payload_size; + } + + public long getModCount() { + return mod_count; + } + + @Override + public String toString() { + return String.format(Locale.US, "size %d, filled %.1f%%, avgdist %.3f, amortized %.3f, mods %d", + getSize(), getFillFactor() * 100, getAverageDistance(), getAmortizedCost(), getModCount()); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/Indexer.java b/java_console/logging-api/src/main/java/com/devexperts/util/Indexer.java new file mode 100644 index 0000000000..ab792a3578 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/Indexer.java @@ -0,0 +1,110 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; + +/** + * A strategy that distinguishes and identifies elements in an {@link IndexedSet} and {@link IndexedMap}. + * + *

The Indexer is {@link Serializable}, so that all concrete subclasses + * shall be serializable in order to support serialization of indexed set and map.. + * + * @deprecated Use a functional interface {@link IndexerFunction} instead. + */ +@Deprecated +public abstract class Indexer implements IndexerFunction { + private static final long serialVersionUID = 0L; + + /** + * Default strategy that treats values as their own keys (key == value) and delegates to + * {@link Object#hashCode() Object.hashCode()} and {@link Object#equals(Object) Object.equals(Object)} + * methods as appropriate. This strategy does not support primitive keys. + * + *

This strategy basically turns {@link IndexedSet} into plain hash set of objects and {@link IndexedMap} + * into a self-reference mapping. + */ + @SuppressWarnings("rawtypes") + public static final Indexer DEFAULT = new DefaultIndexer(); + + // ========== Standard Subclasses ========== + + /** + * Default strategy that treats values as their own keys (key == value). + */ + @SuppressWarnings("rawtypes") + static final class DefaultIndexer extends Indexer { + private static final long serialVersionUID = 0; + + DefaultIndexer() {} + + @Override + public Object getObjectKey(Object value) { + return value; + } + + @SuppressWarnings("ReadResolveAndWriteReplaceProtected") + public Object readResolve() { + return Indexer.DEFAULT; + } + } + + static class DelegateIndexer extends Indexer { + private static final long serialVersionUID = 0L; + + private final IndexerFunction indexer; + + DelegateIndexer(IndexerFunction indexer) { + this.indexer = indexer; + } + + @Override + public K getObjectKey(V value) { + return indexer.getObjectKey(value); + } + + @Override + public int hashCodeByKey(K key) { + return indexer.hashCodeByKey(key); + } + + @Override + public boolean matchesByKey(K key, V value) { + return indexer.matchesByKey(key, value); + } + + @Override + public int hashCodeByValue(V value) { + return indexer.hashCodeByValue(value); + } + + @Override + public boolean matchesByValue(V newValue, V oldValue) { + return indexer.matchesByValue(newValue, oldValue); + } + + @Override + public long getNumberKey(V value) { + return indexer.getNumberKey(value); + } + + @Override + public int hashCodeByKey(long key) { + return indexer.hashCodeByKey(key); + } + + @Override + public boolean matchesByKey(long key, V value) { + return indexer.matchesByKey(key, value); + } + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IndexerFunction.java b/java_console/logging-api/src/main/java/com/devexperts/util/IndexerFunction.java new file mode 100644 index 0000000000..fcf886619e --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IndexerFunction.java @@ -0,0 +1,354 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; + +/** + * A strategy that distinguishes and identifies elements in an {@link IndexedSet} and {@link IndexedMap}. + * The IndexerFunction defines 3 equivalent ways to identify elements: + *

    + *
  • by value - mandatory and primary method to identify element by itself + *
  • by object key - optional method that identifies elements using object key + *
  • by number key - optional method that identifies elements using number key + *
+ * + *

The IndexerFunction is not restricted to use explicit key concept for identification. + * Identity of an element may be defined by a number of attributes, specified in a value itself, + * in a template object, in a formal key object, or encoded in a number key. The IndexerFunction + * may use all these ways interchangeable to distinguish and identify elements. + * + *

Being a strategy, the IndexerFunction is required to be stateless, concurrent and thread-safe. + * + *

The IndexerFunction is a functional interface with a sole abstract method that shall be implemented + * in order to use identification using explicit object key - no other methods are required to be + * overridden in such simple cases. + * There are two other functional interfaces {@link IndexerFunction.IntKey} and {@link IndexerFunction.LongKey} + * which are similarly designed with sole abstract methods to simplify identification using explicit number keys. + * There is also a functional interface {@link IndexerFunction.IdentityKey} which is similarly designed + * with sole abstract method for cases when explicit object keys must be compared by reference rather than + * using their {@link Object#equals(Object) equals} method. + * + *

The IndexerFunction is {@link Serializable}, so that all concrete subclasses + * shall be serializable in order to support serialization of indexed set and map. + */ +@FunctionalInterface +public interface IndexerFunction extends Serializable { + + /** + * Default strategy that treats values as their own keys (key == value) and delegates to + * {@link Object#hashCode() Object.hashCode()} and {@link Object#equals(Object) Object.equals(Object)} + * methods as appropriate. This strategy does not support primitive keys. + * + *

This strategy basically turns {@link IndexedSet} into plain hash set of objects and {@link IndexedMap} + * into a self-reference mapping. + */ + @SuppressWarnings("rawtypes") + public static final IndexerFunction DEFAULT = new DefaultIndexerFunction(); + + // ========== Object Key Operations ========== + + /** + * Returns object key for specified value to be used for hashing and identification; + * called when explicit object key is needed or when other methods delegate operations as specified. + */ + public K getObjectKey(V value); + + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == null ? 0 : key.{@link Object#hashCode() hashCode}()) expression. + */ + public default int hashCodeByKey(K key) { + return key == null ? 0 : key.hashCode(); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == null ? {@link #getObjectKey(Object) getObjectKey}(value) == null : key.{@link Object#equals(Object) equals}({@link #getObjectKey(Object) getObjectKey}(value))) expression. + */ + public default boolean matchesByKey(K key, V value) { + return key == null ? getObjectKey(value) == null : key.equals(getObjectKey(value)); + } + + // ========== Value Operations ========== + + /** + * Returns hash code for specified value; called when performing value-based operations, including rehash. + * + *

This implementation delegates to + * {@link #hashCodeByKey(Object) hashCodeByKey}({@link #getObjectKey(Object) getObjectKey}(value)) expression. + */ + public default int hashCodeByValue(V value) { + return hashCodeByKey(getObjectKey(value)); + } + + /** + * Determines if specified new value matches specified old value; called when performing value-based operations. + * + *

This implementation delegates to + * {@link #matchesByKey(Object, Object) matchesByKey}({@link #getObjectKey(Object) getObjectKey}(newValue), oldValue) expression. + */ + public default boolean matchesByValue(V newValue, V oldValue) { + return matchesByKey(getObjectKey(newValue), oldValue); + } + + // ========== Number Key Operations (Optional) ========== + + /** + * Returns number key for specified value to be used for hashing and identification; + * called when explicit number key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}(((Number){@link #getObjectKey(Object) getObjectKey}(value)).{@link Number#longValue() longValue}()) expression. + */ + public default long getNumberKey(V value) { + return hashCodeByKey(((Number)getObjectKey(value)).longValue()); + } + + /** + * Returns hash code for specified number key; called when performing operations using long keys. + * + *

This implementation delegates to + * Long.{@link Long#hashCode(long) hashCode}(key) expression. + */ + public default int hashCodeByKey(long key) { + return Long.hashCode(key); + } + + /** + * Determines if specified number key matches specified value; called when performing operations using number keys. + * + *

This implementation delegates to + * (key == {@link #getNumberKey(Object) getNumberKey}(value)) expression. + */ + public default boolean matchesByKey(long key, V value) { + return key == getNumberKey(value); + } + + /** + * An {@link IndexerFunction} that distinguishes and identifies elements using int keys. + * + *

It assumes that elements are fully identifiable by plain numeric identifier and treats object keys as a mere wrappers. + * The hash function is computed by taking int key value. + */ + @FunctionalInterface + public interface IntKey extends IndexerFunction { + /** + * Returns number key for specified value to be used for hashing and identification. + */ + public int getIntKey(V value); + + /** + * Returns number key for specified value to be used for hashing and identification; + * called when explicit number key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #getIntKey(Object) getIntKey}(value) expression. + */ + @Override + public default long getNumberKey(V value) { + return getIntKey(value); + } + + /** + * Returns hash code for specified value; called when performing value-based operations, including rehash. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}({@link #getIntKey(Object) getIntKey}(value)) expression. + */ + @Override + public default int hashCodeByValue(V value) { + return hashCodeByKey(getIntKey(value)); + } + + /** + * Determines if specified new value matches specified old value; called when performing value-based operations. + * + *

This implementation delegates to + * ({@link #getIntKey(Object) getIntKey}(newValue) == {@link #getIntKey(Object) getIntKey}(oldValue)) expression. + */ + @Override + public default boolean matchesByValue(V newValue, V oldValue) { + return getIntKey(newValue) == getIntKey(oldValue); + } + + /** + * Returns object key for specified value to be used for hashing and identification; + * called when explicit object key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #getIntKey(Object) getIntKey}(value) expression. + */ + @Override + public default Integer getObjectKey(V value) { + return getIntKey(value); + } + + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}(key.{@link Integer#intValue() intValue}()) expression. + */ + @Override + public default int hashCodeByKey(Integer key) { + return hashCodeByKey(key.intValue()); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == {@link #getIntKey(Object) getIntKey}(value)) expression. + */ + @Override + public default boolean matchesByKey(Integer key, V value) { + return key == getIntKey(value); + } + } + + /** + * An {@link IndexerFunction} that distinguishes and identifies elements using long keys. + * + *

It assumes that elements are fully identifiable by plain numeric identifier and treats object keys as a mere wrappers. + * The hash function is computed using {@link Long#hashCode(long) Long.hashCode}(key) expression. + */ + @FunctionalInterface + public interface LongKey extends IndexerFunction { + /** + * Returns number key for specified value to be used for hashing and identification; + * called when explicit number key is needed or when other methods delegate operations as specified. + */ + @Override + public long getNumberKey(V value); + + /** + * Returns hash code for specified value; called when performing value-based operations, including rehash. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}({@link #getNumberKey(Object) getNumberKey}(value)) expression. + */ + @Override + public default int hashCodeByValue(V value) { + return hashCodeByKey(getNumberKey(value)); + } + + /** + * Determines if specified new value matches specified old value; called when performing value-based operations. + * + *

This implementation delegates to + * ({@link #getNumberKey(Object) getNumberKey}(newValue) == {@link #getNumberKey(Object) getNumberKey}(oldValue)) expression. + */ + @Override + public default boolean matchesByValue(V newValue, V oldValue) { + return getNumberKey(newValue) == getNumberKey(oldValue); + } + + /** + * Returns object key for specified value to be used for hashing and identification; + * called when explicit object key is needed or when other methods delegate operations as specified. + * + *

This implementation delegates to + * {@link #getNumberKey(Object) getNumberKey}(value) expression. + */ + @Override + public default Long getObjectKey(V value) { + return getNumberKey(value); + } + + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * {@link #hashCodeByKey(long) hashCodeByKey}(key.{@link Long#longValue() longValue}()) expression. + */ + @Override + public default int hashCodeByKey(Long key) { + return hashCodeByKey(key.longValue()); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == {@link #getNumberKey(Object) getNumberKey}(value)) expression. + */ + @Override + public default boolean matchesByKey(Long key, V value) { + return key == getNumberKey(value); + } + } + + /** + * A specialized {@link IndexerFunction} that distinguishes and identifies elements using identity comparison of object keys. + * + *

It uses {@link System#identityHashCode(Object) System.identityHashCode(Object)} method instead of + * {@link Object#hashCode() Object.hashCode()} method to compute hashcode and reference comparison + * instead of {@link Object#equals(Object) Object.equals(Object)} method to determine identity. + * + *

In order to use this functional interface, cast a lambda expression to it when creating {@link IndexedSet}. For example,
+ * IndexedSet<Key, Value> set = IndexedSet.{@link IndexedSet#create(IndexerFunction) create}((IndexerFunction.IdentityKey<Key, Value>)Value::getKey); + */ + @FunctionalInterface + public interface IdentityKey extends IndexerFunction { + /** + * Returns hash code for specified object key; called when performing operations using object keys. + * + *

This implementation delegates to + * System.{@link System#identityHashCode(Object) identityHashCode}(key) expression. + */ + @Override + public default int hashCodeByKey(K key) { + return System.identityHashCode(key); + } + + /** + * Determines if specified object key matches specified value; called when performing operations using object keys. + * + *

This implementation delegates to + * (key == {@link #getObjectKey(Object) getObjectKey}(value)) expression. + */ + @Override + public default boolean matchesByKey(K key, V value) { + return key == getObjectKey(value); + } + } + + /** + * Default strategy that treats values as their own keys (key == value). + */ + @SuppressWarnings("rawtypes") + static final class DefaultIndexerFunction implements IndexerFunction { + private static final long serialVersionUID = 0; + + DefaultIndexerFunction() {} + + @Override + public Object getObjectKey(Object value) { + return value; + } + + // Substitute DefaultIndexer implementation for backward compatibility + private Object writeReplace() { + return Indexer.DEFAULT; + } + + private Object readResolve() { + return IndexerFunction.DEFAULT; + } + } + +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/IntComparator.java b/java_console/logging-api/src/main/java/com/devexperts/util/IntComparator.java new file mode 100644 index 0000000000..e473ba8cd9 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/IntComparator.java @@ -0,0 +1,233 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; +import java.util.Comparator; +import java.util.Objects; +import java.util.function.IntFunction; +import java.util.function.IntToDoubleFunction; +import java.util.function.IntToLongFunction; +import java.util.function.IntUnaryOperator; + +/** + * A comparison function, which imposes a total ordering on some collection of ints. + * Comparators can be passed to a sort method (such as {@link QuickSort#sort(int[], IntComparator) QuickSort.sort}) + * to allow precise control over the sort order. + * + *

The purpose of this function is to allow non-trivial ordering of ints which depend on some external data. + * For example when ints are some identifiers (pseudo-references) of actual data. + */ +@SuppressWarnings("UnusedDeclaration") +public interface IntComparator { + /** + * Compares its two arguments for order. Returns a negative integer, zero, or a positive integer + * as the first argument is less than, equal to, or greater than the second. + * + * @param i1 the first int to be compared. + * @param i2 the second int to be compared. + * @return a negative integer, zero, or a positive integer as the first argument is + * less than, equal to, or greater than the second. + */ + public int compare(int i1, int i2); + + /** + * Returns a comparator that imposes the reverse ordering of this comparator. + * + * @return a comparator that imposes the reverse ordering of this comparator. + */ + public default IntComparator reversed() { + return (IntComparator & Serializable) (i1, i2) -> compare(i2, i1); + } + + /** + * Returns a lexicographic-order comparator with another comparator. + * If this comparator considers two elements equal, i.e. {@code compare(i1, i2) == 0}, + * then other comparator is used to determine the order. + * + *

The returned comparator is serializable if the specified comparator is also serializable. + * + * @param other the other comparator to be used when this comparator compares two ints that are equal. + * @return a lexicographic-order comparator composed of this comparator and then the other comparator. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparing(IntComparator other) { + Objects.requireNonNull(other); + return (IntComparator & Serializable) (i1, i2) -> { + int res = compare(i1, i2); + return res != 0 ? res : other.compare(i1, i2); + }; + } + + /** + * Returns a lexicographic-order comparator with a function that extracts + * a sort key to be compared with the given sort key comparator. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparing(IntFunction, Comparator) comparing}(keyExtractor, keyComparator)) expression. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public default IntComparator thenComparing(IntFunction keyExtractor, Comparator keyComparator) { + return thenComparing(comparing(keyExtractor, keyComparator)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a comparable sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparing(IntFunction) comparing}(keyExtractor)) expression. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public default > IntComparator thenComparing(IntFunction keyExtractor) { + return thenComparing(comparing(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts an int sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparingInt(IntUnaryOperator) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparingInt(IntUnaryOperator keyExtractor) { + return thenComparing(comparingInt(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a long sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparingLong(IntToLongFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparingLong(IntToLongFunction keyExtractor) { + return thenComparing(comparingLong(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a double sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(IntComparator) thenComparing}({@link #comparingDouble(IntToDoubleFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing and extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public default IntComparator thenComparingDouble(IntToDoubleFunction keyExtractor) { + return thenComparing(comparingDouble(keyExtractor)); + } + + /** + * Accepts a function that extracts a sort key and a sort key comparator, and returns + * a comparator that compares by an extracted sort key using the specified sort key comparator. + * + *

The returned comparator is serializable if the specified function and comparator are both serializable. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a comparator that compares by an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public static IntComparator comparing(IntFunction keyExtractor, Comparator keyComparator) { + Objects.requireNonNull(keyExtractor); + Objects.requireNonNull(keyComparator); + return (IntComparator & Serializable) + (i1, i2) -> keyComparator.compare(keyExtractor.apply(i1), keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts a comparable sort, and returns + * a comparator that compares by an extracted comparable sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a comparator that compares by an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public static > IntComparator comparing(IntFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> keyExtractor.apply(i1).compareTo(keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts an int sort key, and returns + * a comparator that compares by an extracted int sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a comparator that compares by an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public static IntComparator comparingInt(IntUnaryOperator keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> Integer.compare(keyExtractor.applyAsInt(i1), keyExtractor.applyAsInt(i2)); + } + + /** + * Accepts a function that extracts a long sort key, and returns + * a comparator that compares by an extracted long sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a comparator that compares by an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public static IntComparator comparingLong(IntToLongFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> Long.compare(keyExtractor.applyAsLong(i1), keyExtractor.applyAsLong(i2)); + } + + /** + * Accepts a function that extracts a double sort key, and returns + * a comparator that compares by an extracted double sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a comparator that compares by an extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public static IntComparator comparingDouble(IntToDoubleFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (IntComparator & Serializable) + (i1, i2) -> Double.compare(keyExtractor.applyAsDouble(i1), keyExtractor.applyAsDouble(i2)); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/LongComparator.java b/java_console/logging-api/src/main/java/com/devexperts/util/LongComparator.java new file mode 100644 index 0000000000..1323f8e643 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/LongComparator.java @@ -0,0 +1,233 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.Serializable; +import java.util.Comparator; +import java.util.Objects; +import java.util.function.LongFunction; +import java.util.function.LongToDoubleFunction; +import java.util.function.LongToIntFunction; +import java.util.function.LongUnaryOperator; + +/** + * A comparison function, which imposes a total ordering on some collection of longs. + * Comparators can be passed to a sort method (such as {@link QuickSort#sort(long[], LongComparator) QuickSort.sort}) + * to allow precise control over the sort order. + * + *

The purpose of this function is to allow non-trivial ordering of longs which depend on some external data. + * For example when longs are some identifiers (pseudo-references) of actual data. + */ +@SuppressWarnings("UnusedDeclaration") +public interface LongComparator { + /** + * Compares its two arguments for order. Returns a negative integer, zero, or a positive integer + * as the first argument is less than, equal to, or greater than the second. + * + * @param i1 the first long to be compared. + * @param i2 the second long to be compared. + * @return a negative integer, zero, or a positive integer as the first argument is + * less than, equal to, or greater than the second. + */ + public int compare(long i1, long i2); + + /** + * Returns a comparator that imposes the reverse ordering of this comparator. + * + * @return a comparator that imposes the reverse ordering of this comparator. + */ + public default LongComparator reversed() { + return (LongComparator & Serializable) (i1, i2) -> compare(i2, i1); + } + + /** + * Returns a lexicographic-order comparator with another comparator. + * If this comparator considers two elements equal, i.e. {@code compare(i1, i2) == 0}, + * then other comparator is used to determine the order. + * + *

The returned comparator is serializable if the specified comparator is also serializable. + * + * @param other the other comparator to be used when this comparator compares two longs that are equal. + * @return a lexicographic-order comparator composed of this comparator and then the other comparator. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparing(LongComparator other) { + Objects.requireNonNull(other); + return (LongComparator & Serializable) (i1, i2) -> { + int res = compare(i1, i2); + return res != 0 ? res : other.compare(i1, i2); + }; + } + + /** + * Returns a lexicographic-order comparator with a function that extracts + * a sort key to be compared with the given sort key comparator. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparing(LongFunction, Comparator) comparing}(keyExtractor, keyComparator)) expression. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public default LongComparator thenComparing(LongFunction keyExtractor, Comparator keyComparator) { + return thenComparing(comparing(keyExtractor, keyComparator)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a comparable sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparing(LongFunction) comparing}(keyExtractor)) expression. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public default > LongComparator thenComparing(LongFunction keyExtractor) { + return thenComparing(comparing(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts an int sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparingInt(LongToIntFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparingInt(LongToIntFunction keyExtractor) { + return thenComparing(comparingInt(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a long sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparingLong(LongUnaryOperator) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparingLong(LongUnaryOperator keyExtractor) { + return thenComparing(comparingLong(keyExtractor)); + } + + /** + * Returns a lexicographic-order comparator with a function that extracts a double sort key. + * + *

This default implementation delegates to + * {@link #thenComparing(LongComparator) thenComparing}({@link #comparingDouble(LongToDoubleFunction) comparing}(keyExtractor)) expression. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a lexicographic-order comparator composed of this comparator + * and then comparing and extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public default LongComparator thenComparingDouble(LongToDoubleFunction keyExtractor) { + return thenComparing(comparingDouble(keyExtractor)); + } + + /** + * Accepts a function that extracts a sort key and a sort key comparator, and returns + * a comparator that compares by an extracted sort key using the specified sort key comparator. + * + *

The returned comparator is serializable if the specified function and comparator are both serializable. + * + * @param the type of the sort key. + * @param keyExtractor the function used to extract the sort key. + * @param keyComparator the comparator used to compare the sort key. + * @return a comparator that compares by an extracted sort key using the specified sort key comparator. + * @throws NullPointerException if either argument is null. + */ + public static LongComparator comparing(LongFunction keyExtractor, Comparator keyComparator) { + Objects.requireNonNull(keyExtractor); + Objects.requireNonNull(keyComparator); + return (LongComparator & Serializable) + (i1, i2) -> keyComparator.compare(keyExtractor.apply(i1), keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts a comparable sort, and returns + * a comparator that compares by an extracted comparable sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param the type of the comparable sort key. + * @param keyExtractor the function used to extract the comparable sort key. + * @return a comparator that compares by an extracted comparable sort key. + * @throws NullPointerException if the argument is null. + */ + public static > LongComparator comparing(LongFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> keyExtractor.apply(i1).compareTo(keyExtractor.apply(i2)); + } + + /** + * Accepts a function that extracts an int sort key, and returns + * a comparator that compares by an extracted int sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the int sort key. + * @return a comparator that compares by an extracted int sort key. + * @throws NullPointerException if the argument is null. + */ + public static LongComparator comparingInt(LongToIntFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> Integer.compare(keyExtractor.applyAsInt(i1), keyExtractor.applyAsInt(i2)); + } + + /** + * Accepts a function that extracts a long sort key, and returns + * a comparator that compares by an extracted long sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the long sort key. + * @return a comparator that compares by an extracted long sort key. + * @throws NullPointerException if the argument is null. + */ + public static LongComparator comparingLong(LongUnaryOperator keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> Long.compare(keyExtractor.applyAsLong(i1), keyExtractor.applyAsLong(i2)); + } + + /** + * Accepts a function that extracts a double sort key, and returns + * a comparator that compares by an extracted double sort key. + * + *

The returned comparator is serializable if the specified function is also serializable. + * + * @param keyExtractor the function used to extract the double sort key. + * @return a comparator that compares by an extracted double sort key. + * @throws NullPointerException if the argument is null. + */ + public static LongComparator comparingDouble(LongToDoubleFunction keyExtractor) { + Objects.requireNonNull(keyExtractor); + return (LongComparator & Serializable) + (i1, i2) -> Double.compare(keyExtractor.applyAsDouble(i1), keyExtractor.applyAsDouble(i2)); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/QuickSort.java b/java_console/logging-api/src/main/java/com/devexperts/util/QuickSort.java new file mode 100644 index 0000000000..6532cd1df0 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/QuickSort.java @@ -0,0 +1,690 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.util.Comparator; +import java.util.List; + +/** + * This class implements modified version of Quick Sort algorithm. + * This implementation offers O(n*log(n)) performance on many data sets + * that cause other quick sort algorithms to degrade to quadratic performance. + * + *

The notable differences of this Quick Sort from other sorting algorithms are: + *

    + *
  • it is unstable - it can re-arrange equal elements in any order; + *
  • it is robust - it can withstand unstable ordering of elements, + * for example if ordering changes during sorting; + *
  • it is garbage-free - it does not allocate any temporary objects. + *
+ * + *

In the case of unstable ordering the result of this algorithm is not necessarily fully sorted, + * but it is guaranteed to complete in a finite amount of time and without exceptions. + * The result in this case would be partially sorted to the best of algorithm's ability. + */ +public class QuickSort { + + /** + * Sorts the specified list into ascending order according + * to the {@linkplain Comparable natural ordering} of its elements. + * All elements in the list must implement the {@link Comparable} interface. + * Furthermore, all elements in the list must be mutually comparable. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @throws ClassCastException if the list contains elements that are not mutually comparable. + */ + public static > void sort(List list) { + quickSort(list, 0, list.size() - 1, null); + } + + /** + * Sorts the specified range of the specified list into ascending order according to the natural ordering of its elements. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in this range must implement the {@link Comparable} interface. + * Furthermore, all elements in this range must be mutually comparable. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the list contains elements that are not mutually comparable. + */ + public static > void sort(List list, int fromIndex, int toIndex) { + rangeCheck(list.size(), fromIndex, toIndex); + quickSort(list, fromIndex, toIndex - 1, null); + } + + /** + * Sorts the specified list according to the order induced by the specified comparator. + * All elements in the list must be mutually comparable using the specified comparator. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @param c the comparator to determine the order of the list. A {@code null} value indicates + * that the elements' natural ordering should be used. + * @throws ClassCastException if the list contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(List list, Comparator c) { + quickSort(list, 0, list.size() - 1, c); + } + + /** + * Sorts the specified range of the specified list according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param the class of the objects in the list. + * @param list the list to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the list. A {@code null} value indicates + * that the elements' natural ordering should be used. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the list contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(List list, int fromIndex, int toIndex, Comparator c) { + rangeCheck(list.size(), fromIndex, toIndex); + quickSort(list, fromIndex, toIndex - 1, c); + } + + /** + * Sorts the specified array of objects into ascending order according + * to the {@linkplain Comparable natural ordering} of its elements. + * All elements in the array must implement the {@link Comparable} interface. + * Furthermore, all elements in the array must be mutually comparable. + * + * @param a the array to be sorted. + * @throws ClassCastException if the array contains elements that are not mutually comparable. + */ + public static void sort(Object[] a) { + quickSort(a, 0, a.length - 1, null); + } + + /** + * Sorts the specified range of the specified array of objects into ascending order + * according to the {@linkplain Comparable natural ordering} of its elements. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in this range must implement the {@link Comparable} interface. + * Furthermore, all elements in this range must be mutually comparable. + * + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the array contains elements that are not mutually comparable. + */ + public static void sort(Object[] a, int fromIndex, int toIndex) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, null); + } + + /** + * Sorts the specified array of objects according to the order induced by the specified comparator. + * All elements in the array must be mutually comparable by the specified comparator. + * + * @param the class of the objects to be sorted. + * @param a the array to be sorted. + * @param c the comparator to determine the order of the array. A {@code null} value indicates + * that the elements' {@linkplain Comparable natural ordering} should be used. + * @throws ClassCastException if the array contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(T[] a, Comparator c) { + quickSort(a, 0, a.length - 1, c); + } + + /** + * Sorts the specified range of the specified array of objects according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param the class of the objects to be sorted. + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the array. A {@code null} value indicates + * that the elements' {@linkplain Comparable natural ordering} should be used. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + * @throws ClassCastException if the array contains elements that are not mutually comparable + * using the specified comparator. + */ + public static void sort(T[] a, int fromIndex, int toIndex, Comparator c) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, c); + } + + /** + * Sorts the specified array of ints according to the order induced by the specified comparator. + * All elements in the array must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param c the comparator to determine the order of the array. + */ + public static void sort(int[] a, IntComparator c) { + quickSort(a, 0, a.length - 1, c); + } + + /** + * Sorts the specified range of the specified array of ints according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the array. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + */ + public static void sort(int[] a, int fromIndex, int toIndex, IntComparator c) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, c); + } + + /** + * Sorts the specified array of longs according to the order induced by the specified comparator. + * All elements in the array must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param c the comparator to determine the order of the array. + */ + public static void sort(long[] a, LongComparator c) { + quickSort(a, 0, a.length - 1, c); + } + + /** + * Sorts the specified range of the specified array of longs according to the order induced by the specified comparator. + * The range to be sorted extends from index {@code fromIndex}, inclusive, to index {@code toIndex}, exclusive. + * All elements in the range must be mutually comparable by the specified comparator. + * + * @param a the array to be sorted. + * @param fromIndex the index of the first element (inclusive) to be sorted. + * @param toIndex the index of the last element (exclusive) to be sorted. + * @param c the comparator to determine the order of the array. + * @throws IllegalArgumentException if {@code fromIndex > toIndex}. + * @throws IndexOutOfBoundsException if {@code fromIndex < 0} or {@code toIndex > a.length}. + */ + public static void sort(long[] a, int fromIndex, int toIndex, LongComparator c) { + rangeCheck(a.length, fromIndex, toIndex); + quickSort(a, fromIndex, toIndex - 1, c); + } + + // ========== Quick Sort of x[lo..hi] (inclusive) ========== + + private static final int BINARY_INSERT_LIST = 20; + private static final int BINARY_INSERT_ARRAY = 40; + private static final int MOM_START = 400; + private static final int MOM_BASE = 15; + static { + //noinspection ConstantConditions,PointlessBooleanExpression + if (BINARY_INSERT_LIST < 4 || BINARY_INSERT_ARRAY < 4 || MOM_START < 25 || MOM_BASE < 5) + throw new AssertionError("invalid sort constants"); + } + + private static void quickSort(List x, int lo, int hi, Comparator comparator) { + // Quick sort large ranges in a loop to retain stack depth at log(n). + while (hi - lo > BINARY_INSERT_LIST) { + T pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + // Range is large - perform median-of-medians search of good pivot. + pivot = x.get(medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)); + loScan = lo; + hiScan = hi; + } else { + // Range is small - perform median-of-five search of good pivot. + pivot = x.get(medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)); + // Median-of-five rearranges elements around pivot - skip comparisons of 4 outer elements. + loScan = lo + 2; + hiScan = hi - 2; + } + // Excessive checks (loScan <= hiScan) protect from IndexOutOfBoundsException due to unstable ordering. + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x.get(loScan), pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x.get(hiScan), pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + T tmp = x.get(loScan); + x.set(loScan, x.get(hiScan)); + x.set(hiScan, tmp); + loScan++; + hiScan--; + } + // Do recursion into smaller range, then do larger range ourselves. + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + // Protect from degenerate partition when (loScan == lo) due to unstable ordering. + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + // Protect from degenerate partition when (hiScan == hi) due to unstable ordering. + hi = Math.min(hiScan, hi - 1); + } + } + // Binary insertion sort the remaining small range. + binaryInsertionSort(x, lo, hi, comparator); + } + + private static void quickSort(T[] x, int lo, int hi, Comparator comparator) { + while (hi - lo > BINARY_INSERT_ARRAY) { + T pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + pivot = x[medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)]; + loScan = lo; + hiScan = hi; + } else { + pivot = x[medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)]; + loScan = lo + 2; + hiScan = hi - 2; + } + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x[loScan], pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x[hiScan], pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + T tmp = x[loScan]; + x[loScan] = x[hiScan]; + x[hiScan] = tmp; + loScan++; + hiScan--; + } + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + hi = Math.min(hiScan, hi - 1); + } + } + binaryInsertionSort(x, lo, hi, comparator); + } + + private static void quickSort(int[] x, int lo, int hi, IntComparator comparator) { + while (hi - lo > BINARY_INSERT_ARRAY) { + int pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + pivot = x[medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)]; + loScan = lo; + hiScan = hi; + } else { + pivot = x[medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)]; + loScan = lo + 2; + hiScan = hi - 2; + } + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x[loScan], pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x[hiScan], pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + int tmp = x[loScan]; + x[loScan] = x[hiScan]; + x[hiScan] = tmp; + loScan++; + hiScan--; + } + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + hi = Math.min(hiScan, hi - 1); + } + } + binaryInsertionSort(x, lo, hi, comparator); + } + + private static void quickSort(long[] x, int lo, int hi, LongComparator comparator) { + while (hi - lo > BINARY_INSERT_ARRAY) { + long pivot; + int loScan; + int hiScan; + if (hi - lo > MOM_START) { + pivot = x[medianOfMedians(comparator, x, momStep(lo, hi), lo, hi)]; + loScan = lo; + hiScan = hi; + } else { + pivot = x[medianOfFive(comparator, x, lo, lo + 1, (lo + hi) >>> 1, hi - 1, hi)]; + loScan = lo + 2; + hiScan = hi - 2; + } + while (loScan <= hiScan) { + while (loScan <= hiScan && compare(x[loScan], pivot, comparator) < 0) + loScan++; + while (loScan <= hiScan && compare(x[hiScan], pivot, comparator) > 0) + hiScan--; + if (loScan > hiScan) + break; + long tmp = x[loScan]; + x[loScan] = x[hiScan]; + x[hiScan] = tmp; + loScan++; + hiScan--; + } + if (hiScan - lo < hi - loScan) { + quickSort(x, lo, hiScan, comparator); + lo = Math.max(loScan, lo + 1); + } else { + quickSort(x, loScan, hi, comparator); + hi = Math.min(hiScan, hi - 1); + } + } + binaryInsertionSort(x, lo, hi, comparator); + } + + // ========== Binary Insertion Sort of x[lo..hi] (inclusive) ========== + + private static void binaryInsertionSort(List x, int lo, int hi, Comparator comparator) { + for (int i = lo; ++i <= hi;) { + T pivot = x.get(i); + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x.get(mid), comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + for (int k = i; k > left; k--) + x.set(k, x.get(k - 1)); + x.set(left, pivot); + } + } + } + + private static void binaryInsertionSort(T[] x, int lo, int hi, Comparator comparator) { + for (int i = lo; ++i <= hi;) { + T pivot = x[i]; + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x[mid], comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + System.arraycopy(x, left, x, left + 1, i - left); + x[left] = pivot; + } + } + } + + private static void binaryInsertionSort(int[] x, int lo, int hi, IntComparator comparator) { + for (int i = lo; ++i <= hi;) { + int pivot = x[i]; + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x[mid], comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + System.arraycopy(x, left, x, left + 1, i - left); + x[left] = pivot; + } + } + } + + private static void binaryInsertionSort(long[] x, int lo, int hi, LongComparator comparator) { + for (int i = lo; ++i <= hi;) { + long pivot = x[i]; + int left = lo; + for (int right = i; left < right;) { + int mid = (left + right) >>> 1; + if (compare(pivot, x[mid], comparator) < 0) + right = mid; + else + left = mid + 1; + } + if (left < i) { + System.arraycopy(x, left, x, left + 1, i - left); + x[left] = pivot; + } + } + } + + // ========== Median Of Medians ========== + // Finds median of medians using quinary tree and median of five in each node. + // Expected number of used elements is pow(5, 1 + ceil(log(1 + size / MOM_START, MOM_BASE))). + // All used elements are spaced evenly (as much as possible) using "step" step. + + private static int momStep(int lo, int hi) { + int mult = 5; + for (int k = (int)((hi - lo + 1L) / MOM_START); k > 0; k /= MOM_BASE) + mult *= 5; + while (hi - lo < mult - 1 && mult > 5) + mult /= 5; + return (hi - lo) / (mult - 1); + } + + private static int medianOfMedians(Comparator comparator, List x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + private static int medianOfMedians(Comparator comparator, T[] x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + private static int medianOfMedians(IntComparator comparator, int[] x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + private static int medianOfMedians(LongComparator comparator, long[] x, int step, int lo, int hi) { + int ns = (hi - lo - step * 4) / 5; + if (ns < step * 4) + return medianOfFive(comparator, x, lo, lo + step, (lo + hi) >>> 1, hi - step, hi); + int bs = ns + step; + return medianOfFive(comparator, x, + medianOfMedians(comparator, x, step, lo, lo + ns), + medianOfMedians(comparator, x, step, lo + bs, lo + bs + ns), + medianOfMedians(comparator, x, step, lo + bs + bs, hi - bs - bs), + medianOfMedians(comparator, x, step, hi - bs - ns, hi - bs), + medianOfMedians(comparator, x, step, hi - ns, hi) + ); + } + + // ========== Median Of Five ========== + // Finds median of 5 elements using 6 comparisons. See first method for algorithm explanation. + // All methods do reorder their input around median, thus performing partial sorting. + // This side effect is used by quick sort algorithms to skip comparisons of 4 outer elements. + // This side effect is useless for median of medians algorithms, but by using same methods we save on bytecode. + + private static int medianOfFive(Comparator comparator, List x, int ai, int bi, int ci, int di, int ei) { + T a = x.get(ai); + T b = x.get(bi); + T c = x.get(ci); + T d = x.get(di); + T e = x.get(ei); + T t; + // (a, b, c, d, e) - sort (a, b) + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + // (a < b, c, d, e) - sort (d, e) + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + // (a < b, c, d < e) - sort pairs (a < b, d < e) by lowest of (a, d) + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + // (a < b, c, a < d < e) - now [a] < [b, d, e], put it aside + // [a] < [b, d, e] (b, c, d < e) - sort (b, c) + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + // [a] < [c, d, e] (b < c, d < e) - sort pairs (b < c, d < e) by lowest of (b, d) + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + // [a] < [c, d, e] (b < c, b < d < e) - now [b] < [c, d, e], put it aside + // [a, b] < [c, d, e] (c, d < e) - sort (c, d) + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + // [a, b] < [c, d, e] (c < d, c < e) - now [c] < [d, e], rewrite + // [a, b] < [c] < [d, e] - [c] is a median + x.set(ai, a); + x.set(bi, b); + x.set(ci, c); + x.set(di, d); + x.set(ei, e); + return ci; + } + + private static int medianOfFive(Comparator comparator, T[] x, int ai, int bi, int ci, int di, int ei) { + T a = x[ai]; + T b = x[bi]; + T c = x[ci]; + T d = x[di]; + T e = x[ei]; + T t; + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + x[ai] = a; + x[bi] = b; + x[ci] = c; + x[di] = d; + x[ei] = e; + return ci; + } + + private static int medianOfFive(IntComparator comparator, int[] x, int ai, int bi, int ci, int di, int ei) { + int a = x[ai]; + int b = x[bi]; + int c = x[ci]; + int d = x[di]; + int e = x[ei]; + int t; + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + x[ai] = a; + x[bi] = b; + x[ci] = c; + x[di] = d; + x[ei] = e; + return ci; + } + + private static int medianOfFive(LongComparator comparator, long[] x, int ai, int bi, int ci, int di, int ei) { + long a = x[ai]; + long b = x[bi]; + long c = x[ci]; + long d = x[di]; + long e = x[ei]; + long t; + if (compare(a, b, comparator) > 0) { t = a; a = b; b = t; } + if (compare(d, e, comparator) > 0) { t = d; d = e; e = t; } + if (compare(a, d, comparator) > 0) { t = a; a = d; d = t; t = b; b = e; e = t; } + if (compare(b, c, comparator) > 0) { t = b; b = c; c = t; } + if (compare(b, d, comparator) > 0) { t = b; b = d; d = t; t = c; c = e; e = t; } + if (compare(c, d, comparator) > 0) { t = c; c = d; d = t; } + x[ai] = a; + x[bi] = b; + x[ci] = c; + x[di] = d; + x[ei] = e; + return ci; + } + + // ========== Utility Code ========== + + /** + * Compares specified objects using either specified comparator or their natural ordering. + */ + @SuppressWarnings("unchecked") + private static int compare(Object o1, Object o2, Comparator c) { + // Boost performance and protect from degenerate partition due to unstable ordering. + if (o1 == o2) + return 0; + return c != null ? c.compare(o1, o2) : ((Comparable)o1).compareTo(o2); + } + + private static int compare(int i1, int i2, IntComparator c) { + // Boost performance and protect from degenerate partition due to unstable ordering. + if (i1 == i2) + return 0; + return c.compare(i1, i2); + } + + private static int compare(long i1, long i2, LongComparator c) { + // Boost performance and protect from degenerate partition due to unstable ordering. + if (i1 == i2) + return 0; + return c.compare(i1, i2); + } + + /** + * Checks that fromIndex and toIndex are in range and throws appropriate exception if they aren't. + */ + private static void rangeCheck(int length, int fromIndex, int toIndex) { + if (fromIndex > toIndex) + throw new IllegalArgumentException("fromIndex " + fromIndex + " > toIndex " + toIndex); + if (fromIndex < 0) + throw new IndexOutOfBoundsException("fromIndex " + fromIndex + " < 0"); + if (toIndex > length) + throw new IndexOutOfBoundsException("toIndex " + toIndex + " > length " + length); + } + + /** + * Private constructor to prevent instantiation. + */ + private QuickSort() {} +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/SynchronizedIndexedSet.java b/java_console/logging-api/src/main/java/com/devexperts/util/SynchronizedIndexedSet.java new file mode 100644 index 0000000000..992b488f7a --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/SynchronizedIndexedSet.java @@ -0,0 +1,452 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +import java.io.IOException; +import java.io.ObjectOutputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collector; + +/** + * A synchronized thread-safe version of {@link IndexedSet} class. + * It provides following benefits over standard {@link IndexedSet}: + * + *

    + *
  • concurrent asynchronous read access + *
  • synchronized thread-safe write access + *
  • all iterators are concurrent + *
+ * + *

Note that SynchronizedIndexedSet can be wrapped by {@link IndexedMap} + * to create what can be considered a SynchronizedIndexedMap. + */ +public class SynchronizedIndexedSet extends IndexedSet { + private static final long serialVersionUID = 0; + + // ========== static factory methods =========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public static SynchronizedIndexedSet create() { + return new SynchronizedIndexedSet<>(); + } + + /** + * Creates new empty set with default identity indexer. + */ + public static SynchronizedIndexedSet createIdentity() { + return new SynchronizedIndexedSet<>((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Creates new empty set with specified indexer. + */ + public static SynchronizedIndexedSet create(IndexerFunction indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified identity indexer. + */ + public static SynchronizedIndexedSet createIdentity(IndexerFunction.IdentityKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified int indexer. + */ + public static SynchronizedIndexedSet createInt(IndexerFunction.IntKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified long indexer. + */ + public static SynchronizedIndexedSet createLong(IndexerFunction.LongKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.IntKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.LongKey indexer) { + return new SynchronizedIndexedSet<>(indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction indexer, int initialCapacity) { + return new SynchronizedIndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.IntKey indexer, int initialCapacity) { + return new SynchronizedIndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #createLong(IndexerFunction.LongKey) createLong(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.LongKey indexer, int initialCapacity) { + return new SynchronizedIndexedSet<>(indexer, initialCapacity); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction indexer, Collection c) { + return new SynchronizedIndexedSet<>(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #createInt(IndexerFunction.IntKey) createInt(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public static SynchronizedIndexedSet create(IndexerFunction.IntKey indexer, Collection c) { + return new SynchronizedIndexedSet<>(indexer, c); + } + + /** + * Creates a new set with default indexer containing specified elements. + */ + @SafeVarargs + public static SynchronizedIndexedSet of(V... objs) { + return new SynchronizedIndexedSet<>(Arrays.asList(objs)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with default indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + @SuppressWarnings("unchecked") + public static Collector> collector() { + return collector((IndexerFunction)IndexerFunction.DEFAULT); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with default identity indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity() { + return collector((IndexerFunction.IdentityKey)(v -> v)); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collector(IndexerFunction indexer) { + return Collector.of(() -> create(indexer), IndexedSet::add, + (left, right) -> { left.addAll(right); return left; }, + Collector.Characteristics.CONCURRENT, Collector.Characteristics.UNORDERED, Collector.Characteristics.IDENTITY_FINISH); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified identity indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorIdentity(IndexerFunction.IdentityKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified int indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorInt(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified long indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + */ + public static Collector> collectorLong(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorInt(IndexerFunction.IntKey) collectorInt(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.IntKey indexer) { + return collector((IndexerFunction)indexer); + } + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code SynchronizedIndexedSet} with specified indexer. + * This is an {@link Collector.Characteristics#CONCURRENT concurrent} and {@link Collector.Characteristics#UNORDERED unordered} Collector. + * + * @deprecated Use {@link #collectorLong(IndexerFunction.LongKey) collectorLong(indexer)} + */ + @Deprecated + public static Collector> collector(IndexerFunction.LongKey indexer) { + return collector((IndexerFunction)indexer); + } + + // ========== Construction and Sizing Operations ========== + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT}. + */ + public SynchronizedIndexedSet() { + super(); + } + + /** + * Creates new empty set with default indexer {@link IndexerFunction#DEFAULT} and specified initial capacity. + */ + public SynchronizedIndexedSet(int initialCapacity) { + super(initialCapacity); + } + + /** + * Creates new empty set with specified indexer. + */ + protected SynchronizedIndexedSet(IndexerFunction indexer) { + super(indexer); + } + + /** + * Creates new empty set with specified indexer. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)} + */ + @Deprecated + public SynchronizedIndexedSet(Indexer indexer) { + super(indexer); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + */ + protected SynchronizedIndexedSet(IndexerFunction indexer, int initialCapacity) { + super(indexer, initialCapacity); + } + + /** + * Creates new empty set with specified indexer and specified initial capacity. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withCapacity(int) withCapacity(initialCapacity)} + */ + @Deprecated + public SynchronizedIndexedSet(Indexer indexer, int initialCapacity) { + super(indexer, initialCapacity); + } + + /** + * Creates a new set containing the elements in the specified collection. + * If specified collection is an {@link IndexedSet}, then new indexed set uses same indexer, + * otherwise it uses default indexer {@link IndexerFunction#DEFAULT}. + */ + public SynchronizedIndexedSet(Collection c) { + super(c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + */ + protected SynchronizedIndexedSet(IndexerFunction indexer, Collection c) { + super(indexer, c); + } + + /** + * Creates a new set with specified indexer containing the elements in the specified collection. + * + * @deprecated Use {@link #create(IndexerFunction) create(indexer)}.{@link #withElements(Collection) withElements(c)} + */ + @Deprecated + public SynchronizedIndexedSet(Indexer indexer, Collection c) { + super(indexer, c); + } + + /** + * Returns a shallow copy of this set - the values themselves are not cloned. + */ + @Override + public synchronized SynchronizedIndexedSet clone() { + return (SynchronizedIndexedSet)super.clone(); + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + *

+ * Returns this set instance for convenience. + */ + @Override + public synchronized SynchronizedIndexedSet withCapacity(int capacity) { + return (SynchronizedIndexedSet)super.withCapacity(capacity); + } + + /** + * Adds all of the elements in the specified collection into this set. + *

+ * Returns this set instance for convenience. + */ + @Override + public synchronized SynchronizedIndexedSet withElements(Collection c) { + return (SynchronizedIndexedSet)super.withElements(c); + } + + /** + * Increases the capacity of this set instance, if necessary, to ensure that it + * can hold at least the number of elements specified by the capacity argument. + */ + @Override + public synchronized void ensureCapacity(int capacity) { + super.ensureCapacity(capacity); + } + + /** + * Trims the capacity of this set instance to be the set's current size. + * An application can use this operation to minimize the storage of this set instance. + */ + @Override + public synchronized void trimToSize() { + super.trimToSize(); + } + + /** + * Removes all elements from this set. + */ + @Override + public synchronized void clear() { + super.clear(); + } + + // ========== Query Operations ========== + + /** + * Returns static structure statistics of this set. + */ + @Override + public synchronized IndexedSetStats getStats() { + // This method is synchronized to provide consistent view of several cross-linked variables. + // It should not pose any contention risk anyway. + return super.getStats(); + } + + // ========== Modification Operations ========== + + /** + * Puts specified element into this set and returns previous element that matches specified one. + */ + @Override + public synchronized V put(V value) { + return super.put(value); + } + + /** + * Puts specified element into this set if it is absent and + * returns current element in the set that matches specified one. + * This is equivalent to + *

+	 *   if (set.containsValue(value)) {
+	 *     return set.getByValue(value);
+	 *   } else {
+	 *     set.put(value);
+	 *     return value;
+	 *   }
+	 * 
+ * except that the action is performed atomically if it is properly synchronized. + *

+ * Note, that unlike {@link ConcurrentMap#putIfAbsent}, + * this method returns specified value (not null) if the value was absent. + */ + @Override + public synchronized V putIfAbsentAndGet(V value) { + return super.putIfAbsentAndGet(value); + } + + /** + * Removes the element from this set which matches specified value if it is present + * and returns removed element or null if none were found. + */ + @Override + public synchronized V removeValue(V value) { + return super.removeValue(value); + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + @Override + public synchronized V removeKey(K key) { + return super.removeKey(key); + } + + /** + * Removes the element from this set which matches specified key if it is present + * and returns removed element or null if none were found. + */ + @Override + public synchronized V removeKey(long key) { + return super.removeKey(key); + } + + // ========== Internal Implementation - Helper Instance Methods ========== + + @Override + void checkModification(Object checkCore, long checkModCount) { + // Do nothing - all iterators are concurrent. + } + + @Override + synchronized void removeIterated(Object checkCore, long checkModCount, boolean concurrent, V lastValue, int lastIndex) { + super.removeIterated(checkCore, checkModCount, true, lastValue, lastIndex); + } + + @Override + synchronized void writeCore(ObjectOutputStream out) throws IOException { + // This method is synchronized to provide consistent serialization. + // It should not pose any contention risk anyway. + super.writeCore(out); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/util/TimeUtil.java b/java_console/logging-api/src/main/java/com/devexperts/util/TimeUtil.java new file mode 100644 index 0000000000..d293117499 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/util/TimeUtil.java @@ -0,0 +1,65 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.util; + +/** + * A collection of static utility methods for manipulation of Java long time. + * @see System#currentTimeMillis() + */ +public class TimeUtil { + private TimeUtil() {} // do not create this class + + /** + * Number of milliseconds in a second. + */ + public static final long SECOND = 1000; + + /** + * Number of milliseconds in a minute. + */ + public static final long MINUTE = 60 * SECOND; + + /** + * Number of milliseconds in an hour. + */ + public static final long HOUR = 60 * MINUTE; + + /** + * Number of milliseconds in an day. + */ + public static final long DAY = 24 * HOUR; + + /** + * Returns correct number of seconds with proper handling negative values and overflows. + * Idea is that number of milliseconds shall be within [0..999] interval + * so that the following equation always holds + * {@code getSecondsFromTime(timeMillis) * 1000L + getMillisFromTime(timeMillis) == timeMillis} + * as as long the time in seconds fits into int. + * @see #getMillisFromTime(long) + */ + public static int getSecondsFromTime(long timeMillis) { + return timeMillis >= 0 ? (int)Math.min(timeMillis / SECOND, Integer.MAX_VALUE) : + (int)Math.max((timeMillis + 1) / SECOND - 1, Integer.MIN_VALUE); + } + + /** + * Returns correct number of milliseconds with proper handling negative values. + * Idea is that number of milliseconds shall be within [0..999] interval + * so that the following equation always holds + * {@code getSecondsFromTime(timeMillis) * 1000L + getMillisFromTime(timeMillis) == timeMillis} + * as as long the time in seconds fits into int. + * @see #getSecondsFromTime(long) + */ + public static int getMillisFromTime(long timeMillis) { + return (int)Math.floorMod(timeMillis, SECOND); + } +} From dc844982d0fe2a7e62279ec9a3ce6b54620b8eee Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 11:41:27 -0400 Subject: [PATCH 026/182] getting on the needle --- java_console/build.xml | 2 +- java_console/lib/jsr305-2.0.1.jar | Bin 0 -> 31866 bytes java_console/lib/log4j-api-2.13.3.jar | Bin 0 -> 292301 bytes java_console/lib/log4j-core-2.13.3.jar | Bin 0 -> 1714164 bytes 4 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 java_console/lib/jsr305-2.0.1.jar create mode 100644 java_console/lib/log4j-api-2.13.3.jar create mode 100644 java_console/lib/log4j-core-2.13.3.jar diff --git a/java_console/build.xml b/java_console/build.xml index 8bfd646026..282a5b78bf 100644 --- a/java_console/build.xml +++ b/java_console/build.xml @@ -2,7 +2,7 @@ - + diff --git a/java_console/lib/jsr305-2.0.1.jar b/java_console/lib/jsr305-2.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..43807b02f35db48dc302b4ade0c72b2141d65cbb GIT binary patch literal 31866 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 F^*>duxeWjS literal 0 HcmV?d00001 diff --git a/java_console/lib/log4j-api-2.13.3.jar b/java_console/lib/log4j-api-2.13.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..f604e80e69299d76d7bcf9c545b84c1e0def181f GIT binary patch literal 292301 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

W*$In1Iu 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%0DpQ8f#V|IL}wJdPF55j(L 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 HJj?$96K}3D literal 0 HcmV?d00001 diff --git a/java_console/lib/log4j-core-2.13.3.jar b/java_console/lib/log4j-core-2.13.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..997e3438f5024a73b31605ff481062b1599abd85 GIT binary patch literal 1714164 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

`4b%N%} zDyKQ?P`W6Tiiuu)Ym9qbH%B_RXQ=j?v?wmd%Uf z^(h4_kr`$!c6_q2iQDMR61z_y(&mO#Gkkqr9|Hv|Au7zi;&Hq4B=N>@FaB45%p zoFYB9H%8|RRci=JCb0}l9*MPrui+Mm6l(~21QGfYI3?ztix30!jZ1J_Dl zDy`<*6!n2CExf83gxVEG<(xM{9E%SG>#$6WOI&A@fRq7Aztwt9`YefBJDs_x-XoWY z+&l0e%Kz{1{x|UdD4`2={Rw@)9I%AGXn%_T3jBZgCjSH02?}Epfb>Y*Gpib!7Mf?8 zE;Jf)b?^a=A+UwbXt>k-aHt4FbTa6q#KsU#SF$Z%R1De8vtX%48yA|KsKR=`(qyrJ=dU-7aGpMq1(nskT*`IL5x@hteat=Q;5G?K zYs#t9k!dD`JU@A>5-<2?*j2mHLQ(EJF+Ie$Qd9g zdYLXskOXt9<>WBk*2GztUb=Xm_+K}G-c+qbYcC_rK4~Au&g6GBC-Y~0oa-NncJ3R$ zD$U+!4Dntm7}g=Qg()qfIAWWlN*crJDK)*@)6+B1tOl+a%RlwvOwE*d%L-&~v+U7l z0SP9$=|t#dY66f*z~=79hGO_R2IxYm_}Ctz*!L0BMSSBKLu?m*FMjPDv~atn@mY7EFG278IO+EhhD3mey994^Ntr2g8z!wD zk5eXHp8!9ggaJp$X!J(AhvWn3um?z==er|(SID69l^Bu3?-hHzU8twpP8Jfd*(BivaIeud= zU7z=xK4>_8kHbC{A4zr}t(UwC4~?b}TeWjw6iyo zcWh4HbUNcZlI)t!fX0#USNujndvJkolBr|#TRrbftQGKVg3G$!!hA0={2U!|ifhXW z^GSR~`Mr4Uc$wi!3q+N98M=tf@s0f+P=+<7GCGLNF|@qJnDhwUO_(=4UrKXy_`9$L)P58j$9~kuP1F?AW~7OA5*TWH}LiC{yud*c7xOTJBw1V==|k zcR+Q(C-nDEZkl>QBN^waL&;v1{){OO;iR!tS)A~_pH66+zEp7jfs1Ioera9-lnS}( zRflW(J@QPjSXumiqt?5%Zny!4y9_vTnVHI|I@rn~?0~S+p1#aMkhD6yea|zc=@Jd= zr6#^>vv*BMr)eZOJCcaHI~J{;h+Es5h+Dp%7(CiiDZ_m%@;{~R39&1S_WyZ#8z9eD&?J6IK)&0L)JIJ1$Yo*YM9Yb0jg^GdX%dcyx1T7;eUtcO307Qz z8+h!dj`9qm>Qe|@@?ZqDJv*xe-Ca{bl%zEu!LWoQ9{#KswUQcUYMmyHuRyE;r8DQb zB&@4W)XRqJ7mq7({m}AuPneuh8qS=klAkvBNhq$lVm{fvc1?p%N2QWkzLPW{bXmhu zpYL-|2j~nUJH&(a>s&T#ru`}Ny}~EQ#OgK3hYQ~Uy7*@94BH6W!{86rHU70K_qnxs zkrGgl6B9$QtLfo#o4z(z***oD85rOj)?Ok|20>Xk4a{|ZSIi4pcy+h$23DX)IKPAL z;&#s3LKvhPpBk=m{dY{X&}y>>c>S!jw6cWLzT-*2yUy>^BIFcufJNH~AO z_uIxD8i>X2n639xkkmWP)n^K!R&JMWrkE|4hQYHHf%M}K#*FXrd;tTcism?6|&4LZS&ihqDS2f{2DjP{zy(jGSs zp@z#RK2{^&%nZ2KE(_1>2a)?dHXXFY)?ef0zZahWEJ-uwr{k$#m#n?7vc&dZd(FQ} zlA4v}S5tKR>|?@p(2cN^mb(V+vNT1DLU($-1k&}@#T?TYm`ic zbWv@vBm2tXA(QW?y#h>%8O_JAXIAO1{u;fmlUG>{UmNAQjbZ zbYDNJ)u=*Tvg`EjQQ#J3yW*Vg@OoA&xjFf5V&4UzG#KWw`t(7L#6m@29eB0RC2I{E z+KjOhw0a|@(uJ^!Z2OdJ9NCHAZDzmuuQon{b9P7vwi@qfsqJc~ z>Mg-g(~o+5zXQizJVP;_sr`=Od(hS3SPW}cd$&^RMUOl^GgT;Wm4d-iPFkfx60_ps z#X2|{hnWWbUD17d=b1%$>FChZwqGz9+f6H7cG_6SKd^FJDLu@?S}0oyy0>yPsC;9u z6xFfK)qPj}wCn*QcEbgnQpR7t}#s{N7ilp5^bq#0W@{cl&> zZdrZJj)Ny(>Yl7_722p^kJA+Lff`X^y`|->jorr4fqVG#ZXj>hZ@_B)u9*!&jyVY55K{9}WRr1BE>k zB@^T}e*QJy{X5G4jsHJmhknr`B*QQKZ+?w;|GV4hzwod4CzRGm`XAO}|397hPp+pt z+;5qdaw_5KpQuVm$fl6B`gA<;Kfp`{6bJHG`-kQ(?AV>!*3uo!F?<4fg>~^}`v1&z zCs(Ypb-?iKaGhy5?<-<`BVJ z2$-RZR=G5ytEK2!QbyJ9{3^MrCJc(Ix5{BE<-lT<@(^_#2N6Nex93ANyv=j*nrr2?%0JVC;QxB1 zZFc*#4$01J(6ouvc|fm_z~3(|I-@o(-aP`xZH1w;z*JgKr}Z%9_EB!NRUKJ8h*Bk! zBTkvEpLGnk)tO)7xnpye z03{lWz@y|!#h@^~A)imo@_@k5J)gjtu#ITS&{-GRaYL194<_t;ps3nKG8o53KvnJy z_LD3$uawoSmhB)VB|g#LbH1-Dw_GEdujnU}FK+kGZzgjZ2U|0m zFAqv*v#*@xFdpBB&ft2;$?e%&~*z#w=}hiAF=V`5y;MSru+W z?N8XBPhMMZn`s~8m|3nc-PZ0^VFd35uAVh9xIP8D*6$6)ACa!_R$x9&5I)g9ayQY> zq{yEUv?b3BItq5QzlD2LAzI$e!9Gj3x0C{I?7=>1MyooGCvXWbr1nNiE%!$dp|?mswkfu!zNq>7MW=N!+xCb@{9D@Y;H&Qqngir`KNaUQtSt*tTeQkQg znJaWiteFM7b|~g(=hkTEq$%Cc;RHTHeCVi{W(lw&);o_e#8%jGCom`k)T*pWtk~r# zHr>k;y2(YeJKM)rkCtIiV`s?CvZmNa++5br9T7o$ajnfIN*TMyC)T6mvcy6#!})!< z+t1r3%g7FO=R8*CX-{NW1VJRyb!fJIrei{87gg6%+Zo!L65 z>b}h^MjdwY6mrG>DlO}iiCR1Z=VmdUAG(;4FT@+&7&p50~z@6$&=<*rEWcuZ{9 zV7S@^v;s{7<#>&LWPQRhKOWp_}t?dxQiyaZ72@Uqw1zi*mqD?U7lHbz^R*q36m0YP0ESW zMB2Qo!HREK2;=T0>=lL6R;4H_79Q^r?cOa$6p04NB;{&mHe9~!_xlMy{JxNS2#Yl; znLJL|=4%u?(}5?K*=L4=oq0b{X2C}35IDAjhJm30K+vNX$9ypTG5RzD_S>e!rvj50 z29402Js|IPg zZYNZg*9ERi`+!(Pn*rJ5@-2T(xq9$@w3JH7IZ&ec7iR>WT1)ZIa5FV0Vj^Y_n6mGC z`NOh|{-EVb9KWjL+R5wH={=HLj2*=6@LxKZj$KL)4RS!6jAt^|Q<+Fv zcTH96r^|!@u`zdx(hF=P;3t|iWLj2I4Kju{+zDHiqokZ21}Y=_Bkg{s?L+es;vT-h zO$EDv7v*S1_+)xEQEY*;C&w}``Y*9L)LQF!3yozeD|4eTDwI%jHrZrZog+m0#og8j zayf?$(c}t#`VdSM?u;2V36fj`le&ZtN$=K(ay=p>cGR732SPCq?p}5PcqaJu`AZfo zdPYQsH^pknG3Ki}Vj%P6KCYY?j&DC0vFdQjUUTS41*9d`frbgziAE)$uACRQMAio&6OiV(u7Xty-)dAI#k9&jIF<*wl^T zw9BUFQbwcjYRX|G6umO3HqVVB>}0`qO42I7mP(7hllnq)Rsbt-Gj&U|PYko!t`XT< ztl8%kVlgl15@uW_;x%8jBcD#lR6+GIWBT)Q_L_~S9DhP6<$Yt9UJUP$Tgb(}v{4F$ zoi$M({c46Tj6QI)w@lJT`Pd2ryTAkdj3F(vdQ_`VS#0STZJ^(fhrMzn;tZZ7ZiNk& zMzPrqwb&0dOGOl@Pd;*xtWjZhB~6V#vMDSmuwe5aDP@qWDx zi4=?#$7H!aj)ll-z+(&p6an8B5UFLxS7JmjU#K@LS&fZ=T*{qpkBI(H<8XNt- zaNE}iJQnLhh3{X06(QL4&t-Q@5-9>|V0Kf$n^Xj$`qd$Vy@otwFQtQ%h|iIp*ike^ z=BSb90+)0(Pv>vKZZmVN-ODXI^AT`{DwC`+bZ;n;2YS2_Q0C4{OSQ)@un>DS^TOwZ z?9AQUd2rbups5lcG+xumLwi!@#`r?9bGNleWo3HokwAGcMj%9kcz(>|SX`ls1ym_k z;;(rd(O~uqKiwO1B%iG;{y?%TWn(gMz^My#{^=MdPtWL5VR5|0a^(I}ok?^`R2u8V zgxI3S>Zv)KczG(qlCkPpFu+O@>>UT*?tW6xNGwKPCZx)4gD{}8eJCCom-`ju?RAYK z+8Or#4x()jyg`x!VPbPQJ{bj&R-wb#;yK0^PsV2r968|vQW}!od9ZC!<&fJR`LyKx zX*`&{lBzZ4QZ&o*hh2s+&}RBuUfAejV18*amd0^|EJz3^*!$J~3{(kEaIKg%njhu~a(y5cj|}r-4b8 zK2&D1!)dhi%^?$2q)(i?0yMuqNsJOwPG#IqQty?b7z?BpAw^T5{hQv2`>SCzlhT~@ z(kXRxT>1!h2p!Cn$E7qKt}2|BzgEJlO9N?Llg9^vL906x>1SvhD$#HSZPNSt?!rsQ z+FXM%SfUC<2O@q9F3|F&i0oj)e=^N;_lW%*Q}&2YMU``f@4S;UFU(;MFqUId)9j!| zpn!ZWEs~cj6cTU@Jz|vZns+J7_lebvE59QTP(N&-df-U3N0f9U9BWK6LS$`!m4}`X{m4t_MAzs!>51Z=Kol`&L4R0{= zt-BmXu*nbBl1}NO!utjJ|2TWgs5rYWZ7@Kv!liI`ch}(V?gWQGaJS&@?(XjH?(SMR z!6CS0c>3+0etXTDHT}(>yXvm`yVu_5T>FycNyzH-3kA(2!Wd?|7*;#N@4G&6exBeu zb_C8(SP!6-*{BUdLQIV^g$IobPpV$7c%Xbb%p}<$!O|n^8~SD*0}&oRj6|M*_Q?%4$y`h zre~Vqq1vV${O-L`?{z5};%y%Pbo$EAKxmcuq`M3H=YXDJEdwEy_x7+wHN)>!R*wtqv0O{<+0(KV4Jpi~`HFjI*)muzKa`no6 zN%I!sTW7k?xZrWU@El0uZ*ku)$aQ^Dbc*cp*n< ztfhFJq2)5A0x`VHIbzT7&2{d}we?Lt%lVglE(W6fo~!347Y=`h*XDTL{>a-pU6Z)L zwz?pNhx)1n{N>}|WMc4a5bucrt2`78rbBHF%n)Rcg7Vu!f5;KDBvV{J$?2z$5&jqi z3UGOyKaZjhy_>=JqSHz11C0nY^v5)ghlzfT6MA6Psp>ED=hrwaB-f4w1rzKgM+ zRJlgo=w);~fZJoQey8z45ISnjHh*icWn8DJ0@ObUt#r2@4GRTvfH+O?yaGwvCob?t zKH%_7bzf6yJC_sGr>2iFCK~cTayps?_XjS9e7t02qL)fMQQ{ zz5(By)n0Y(fyP2LBg#AUWZd$HAa0gFda=nFQQw^8Cy)?opUmt6 zx1Op?Y9Geve*U!B2vKXruHcq^?qd4G?WLdWOT`&?&-W7Zq{kD)xErJLg!X0$@C_Cu z>^Cr!46a3nD$*wY)9}0laU=3XvaJ0!+67}9M1!{6BJ>v84I@G96J+r9{TnfUUWnbI z!IR!U+qZwm8U7~%K}pBG0`|!+4*5hNME>^(#J{q!{|kU1`=9D5Z8$ePHJ||J+Sb~Z zY&x4|!q1%|dbx#>W^#JD`A=wJ{%3~7>4T6;ldKEnX=BD#ZG(<>wm(TsekoDt9vWn# z1~nT!5t3MyKOh`HQ~C=WKthG&zWjIEnqzG%ZQ5kv>WrV&ai;69FX3^f=Vft>kJCLSec{2!5@F+=4o=^6`oW6q*@%U2YL*1zI zAYs(iCEb`J_`~H{q^|WmW*pY{)7+AubZ6LvE$`2m4!YWD^k~$a1sySYqNb|pq7fJ{ zT+B03-`AH6HtP3IE`LV6G#T9pE?QXYe3tC!uH9uEiBy`BAF7$^a9e-TJ>BQ zKKfHeS1T@RF{1aw=m~T3q*lCTAnt-eb+%@wf^;rVqe^&%gRps4X^oI-*t5$0huM2r z6SA_Jm)b+{floI!ZsFHu%5lkq4WbbpAU7(M{gg`teYoVS(O6)QjV7aF<*2!_4v7OH z2F}({bEHtKI+YUnTyJTu)g^{_^pPf(BOM5?+V+S7HhIWZ03)76r?9oZM_*T6bdwU2u3-V!_D?(xr;hR_aS;QvZMjEsN#jJ(6+_0sfzGIk|g; z&GwFG&Vu#wwr4Q#fi1!qa-%%W!R)_3C7X`23(DinY&zoYr);t5Tl{|Me;BGOo32R7Nh%+$Ia*Bqx1E>*b$-R5tL%Gv@7yr$3h73KiJU` z`MuPX#fQQ&LZFAn0vy>9BMy0F)cNRyY|PlS)!8|Fay1JPcj~*#x2hf3RrzE(IOnEffJU=v<)n@}TFu`UNhW-me_M-^zwWh9y{$f@a3 zf_KSCxK@aC=b60(ryt_#|E#n;R%Fc-!N0`&9qU+%J)LL96_O6Z`^|K$*pO-Lnbc+* z=|f+PkK}EU;n<}x_0VmiCNRzUg1vY&QZYr(I_lzb6)(cKn+Q)pcDi`51(b89Br&(B zMaakhZW&t%c4~;BITna|gXA(Aqrv;y*{8`u5U&Hw=1wx7{z+`WFD`SZjT1LbCS^E8 zf-8bRQbk4#XT#%8DwvyPXPTcn%UW&qc%+&AK{LMe;takiTq8#>kf z+O|45<(+{JXG%3a^9&h)-$mdFFTrdGXFrGnT|jyDM_5BtpdYCPJ{oZYFT4I-GU zxP90I@COWcs(pthXAaJ0dLuT{V>;n&d<2;ryWg_?-20oIWzHiG{5^Q)!S(-@Isz;Y%mQ69zdh7H+8)8tZ$M~ZBAq@Ny1iwA2LqDxMP3Bm^rMd~^hPTk){Fk_x(d+YF% zX5>dYlahxWGXtO@6y;B{PM&m)Ls$--hPMo}9tjB>Sz{*VZcw^J!rFVau`aO0va^k( zB`j>bxFcom)&vIL8)5ofj&63HWR5YvMo_?vI`9!hWCW(t^SrO8 zrqAwh4DPvAEC!gMKR-|uDGYOMBuNJT#nUW%w?>|Kt}vanP#l2xkz1pHNDHG`6^~lS zm)Ph?$VP*R;^QQ1acXg?yH#&5vCu3>&zsKC(!9rybz+4r1eFmNwu?2lZ+?_EUW`pQ zB>8FW){8Uxs4Fbl>}rUzMd^>gG^O8%9fDoI;2$J#^2iB?6qMEga2904N9 zvLlpiDeFZ+@6_qjmhf7EiJ{(k66yZSohRwe{9^xlhEB>7M_SF%Xt9y=V$n4Hs*zy( z`GW2$X;~Q)SuJ~HI()~28t3&c1a#vc`4nl>%6WQ8hY!)5skWtUxi(DJ}|sVT=7R9 z3>G!GVkN6`Wq?r^%7_QmdZb6A$lUkBlVAA@l67F=3sLB}c`!KC971(#l68>bRpQ}Q zikU(i4nRFcYtG+w_<+s35Nd%uT9;Y8&P*v(6He8RxmXZ))e93)m9Vg17`E?(zT`PARJ5_r-7?^sz=X1@Zzj%W!{b5h3JPz-UH%Te&$7_|%blAY-n_8%Pa zT%$n86VpiIu(>TToplIYCop%gEICi9+2(F=erMh8dyiLd3tz-;2GW@jHvL>jNS>N& zwg;4ZCckOS6MrVa>o1zG?bldu>-4jf_v+OAzab~rFN%+E6kdh5hTwlkM1!qX27HQO ze*uj&^JJ8}XG1ADH7GelAS@$XEt5158tlxYgLoG(KCtQR8FaNcHkUX+3swZ6mv_Mh6_W&8Ssb8lLl{nC+{>RCb_Q&LccugQ&9JUb#G8ZGt*6n~LNTqDai!%pBI`TLj+o0hGZ5$BER%t>61 z9Scig!svfaj>f_-#Yx%$>Ab_LKkR^3ukr1n9Cl56!t|}1d5sILensdZ7*?w{{#@O- z{)WQD*6-W~t=>7=qy_s*D+qSYlgM)?(7Nj|d+R4(gEU&bu_XN1C%wYK%oQs^j)}q; zF_v3yl!tEYl8xdnE!Mp;aV52KA^!Xq^O`7HJu?w4GcoU0{5gYhy%dGXArY>*Fh(O8 zuZ1kfTA(%fs27Dv2L0G22L&xVaRzvO8HI_?=WCvbxCsGTeZn`6g}_Rgj>L>Ogxt&8 zo5|wT*eNirB-k~Vi8TB?Mj^w=rrHE=YR_Ynxz`d4XO`=lPh<6Xks_VWPWu&RI_ zCdjuh{H6Sa`TBenc{O4k1hZZWbI}y*+DV*6jCOe3fBMx5xitaR2+g>c4MX z{}5SuVzkp5KZz9$NMF7f|L<>Ha;7$)(dKgh?12BVWHSA);H>|b-~TfT{a>r$CXG`S zbP4po>>cNH1G%C8)x_b$gNF|M$Ut}yGJ1V2O{l+l!v;gZ0DM{&PVpNEa#5RaIh-ij1G;GB_aprU1YgujxoATi*?KlK8+&m%cKSfq>jt&sf1_{r#c-DTN%({(;~ULh*gBnw-uhetl?kSEkp^n#_H* z9F-aQwA_3|=L7!-7Y;so*oQi{H3dCF>T@NjiclWt@q}#@;2YLv1h6p@29u z97QpPA98H`i60S;@|gzRMM3C7+Biz}g6T+)SX1micwf&j&_hA4)FK?8c>P?^d>Lx& zKT^1$B}n~KsZ+-6ltjv$>@?QJ9|^5%TNs<+ zpeh8YR!&pgW5t_9ACX8M?TroPL5~unf-Hcq>a)(OFVRnyonHMJe01*4eBgX$pTH}X z;r04xRHZ>@q|c5w&4I1K>Wnig-LxUSt~7U4taysr;Uaa$&KGf9>Nz>Z5{A2Ahrsy5 z4RVFOGyDvozi`d7t;kdjg4#A&ZB!LkYCTsPGZr3@>nsAv$AluQ+T|8 zA+dV}#uP;=U@e#J;CR&TI;5EPf2ar{h+K3OsvlhX1pd(Q_`m}H?V9CssU~; z+d=P8J*f}4K4s?_-}@JT$D|sV5uD4OQfy_~!G8E#6KK8~Teii-W~P(B=+Ekew+5kl zX|@{8-!Y~VSBX2(IS|-h%18kZf_aQhmSHZY#Ive=O-@O0aw1(!VvBtC8I6G}*^=ej zj6|J)=o`V;_;hU|)~GVfX#9;XC%MKx@D|QBZS$Q+!YKp!%>Ql%>2x$}qU8@a!y|To zByT{q0uOj&D5&|R6+);gT49R;WJLvf{85#jl0nagMZ83_rN4w?%l(kux?6V%)jE(2IW&=OkzD%#mprWYpgbl)fzo3|Hf{t zQgSbGs3`M-Y}z!^gr&|UqM_VEH(OvX-AbMYE+#tBr7#V(=Va4toL&sn2I!0EAB>V_ zsq!r5pc%cn(z@_k;~eL+YTr1|m5mJ7lDSKC^+R71=gxQ;+i>t5$IZU-48ZY!iQMJA!> z4T%~>v38mZaqf*6?UklS`!CRAH||f^A&L?&sPw#Ov>TIHT{%8h+YOqX(~G6tJFCIYqOPBmc0 z{rjl+?;-LJaft8;L@fQu(98K8B>&$sp#PgV%GGun`wl^U!EGbW3bFuoOn0-xExE{m3U6 z5Ie{|pmyHy1uRJBo_3M0C9tpHMRj_i0~jBtH`|W0d5BmXF*bb#o08&4+6~BUVBE_q=Msh5T4{ ze^dSNnN5N}qXKEc1w(`3o5YEDlKE@17+N}W7l;G@@bXW$&YFB8+Txn+%DzgN}c<^xciq3_?UYV@1=UPr{s{BUdRgjz}42Yo!y@ zrfk|KJ&0eJkV;m8kZtjoH2TI+=lQ0{@=zTL=k8Vh`rI{<9MznL8yM1o#SPc?nrR)-`6}Ie%CvqK#fm!g6CDX=k!(Q%%$Mp zk7vwZD2XOszwBYDvFWjp@{rJkbQ77wcu|W7?-~QKv56;L3=v&Lo-iz79|z?qLZ1;g zM_j>;g~Tx;Pzgqz8px7Ov3HEc`bA&`nHo!u&CQB2u!85CRU|FQ1~DF!EV*45c+d=*u^_4EweH)GQmIG znh95r_qc3e&UFh>c_wPnDnxJS@qgr7HrbI;u&vAnnTQ1D%WdwhYc%(6)l(}2sZgi} z+TK-}8)4mUug2>dSw>X^PdmwUoyhs}Eta>^mo4(j+dM-ZMbk5CNZ$x4)!#p*94>m{ zd9DUb!K_*e3oBQaMOFY_xXrt}988MX29Ttat(4%J2;ZS_b`{j%VyLq~i}==kH^|L{ zXt69wj;SnTY4}G}Xmi^fSv)(3bmB#N?giQ7M2ns7^t!3UaZ>u#+7^mNP^3RG*{K!f z8}-N>hZrLIALDPINu>(cqytYDDY9rfQ%}eU$Lr5HQM>z+F-mv$ zbFS#K;c)pmC+HXmmsf0D-#`V9aH^6{1pOn8KEjD3WOKrvzSeMb51+38Iu_nh->kVd zo1-3FWA#a&G8kXVkT7!Zd8(A0K#t1SkPIk?UXWjNKrFjCfezw=RxIsk>H<4e12Ezq?)uQv4k;XhO;|K0`vXMdc-c1${j{qp4q?Njym|GPhmIy-#-r&0cA zXVh?aQauFz?V7wb3r=CemNcR2C%R{XI5xy=Q5iW%etb(g@S-I5iSjm29EaAWKadTIy+qhm-o)$`IDZ7OviNZPngRJ> zCbD;Ut>WiSLI`Z`4G<7|m_E1z4HR$0fChkEFxQuBQ|um+9Ee+YreCLSqah)tZ&qIn z284hiUQg{vJF)K}L+7Nz{J;I)_dO;;Mx@!Icp{vILcTRv@b3-mvqX=Z%L?q@x(ol| zqZW?_+$SO_RJe&xJIM|;&}6IJ$U*j@42=J7yANiMXTLk+*#J^i02iCnp5y$p87o&D z#Rl%iaUG3ulRF>E!5@pGo4NqWu4&8PlnIwv1H@U(5#delAXpgI(O=T4?Jj?n^+wE~?yn1|d@a>CRYYhxrN=9L^m7KIN zMLg>sp6fDaGtCaDvZy#8`ClnXfDT(qO$iCd%hRlf8c2d>zM_^{2q*R zG@sMMnp6%m*K85z+Cryan>-!Nw^3|S9&XN$o57MXHjgohsuStU1VB`&H#2dWpx38G z<6|4IqQF@%*Wg>?OJQU4aG1{0X&-7CQe`kIcqN`K!=(vvuS*q``HS5x?x$2m_oDx# z!-x#ig5@(mV!+}B0L(Hk559Uzk|9)ROSa3^Q|G8O-zQIDU)j@Il!*@X zR7Y>%&i+ZwOZR;yRU|Sbjsr5i0aBc=8t^N#kUPOK9V}*8e^0Bf{yyWs+EjWJtU8yL0aiK%K9UQe_>I;xorn!i77bi8O4=Or#zrd+>3kZCka?2a`XHP!M(o z9uMyz5I8|*+}lXN%)h=Cmf@k-F{+*AAoe%SzD623|24cYvpW=FRJ1S6KQ#R~)>?y~ zw^O>A$p0veUZPR@(B$Nd9UtTP`03$P_aP$m44&Z#gvZns-8YHqr01s?wAzg&g=uPlEz3lwi_BiDX?bjrx<#uxhQGa`d7)LG4@h>8+Hx+`V^?(yK69qj=#Yi= z-)_5=%Q#MnG_$`u)HgNMd?b-spCj&YPfn z=e}9hJnx%Y-c>vR06#Q@|5C9lR=c2OZUxI?aTtYXQ`HrHfs;UNV3?ULcp7^Mo(G*^ zXwq&AYumXpp8Jf<5&oE9KdyR2pQGRME2$}j`plI}sda)%UBIvNK|U`mX5A1nQ_OuR zs0Z=>dbo_$?Ur3L%~iQ+0;^}3p958HFoZ3Ac*E$^Gegj|afY@=sT?S>jE|MQhlO67 zZCDzy06X9QVC{k;TzhhX(Qjn#b9!RqV$^ViB!|Tp6?qBqe`m5K1X=J(_F%501I*X@ z*JxVh6_YfEeuWDG*KQf@z-5rRl0ZjD=s+C>Lk=rxFW#q4<1A4RzveDH9n=xf4WV?T z@dNp#_+usinuy%x*cZkF1FAhD{B#*%BT%xYVpa-r2-66dS8>$?VtG%(BLCN2eTS?4 zo|;!{WJsncUy;I1T{+}wKI-;8JOiqPSSk+o$={`QWi}j6;9=o7SEe+~@S_2J+;coM zH};iT_;a{h9t9eNBkmy+OQ5EEe#2MfmW!ozP=K7&la=*vzy@Ppcyo=BQHODU2wq$| z$A<5UPic(NHmE?6W13)~V<@&FAD(b;IfVGHOvwca#{NQP{I<~q&8;BE)lZ4Xp+$P( zk0+GY;{CVtJgI8Jve^SyfOcF-LcuNv4f4bt+6}~YD-uO^Ks_PBO5b3EVmqc{g#|{> z7E=EOkETm2dL3n|zXIx7iQBIdltE^;U9An1!oucFk)sB$>Vi3_;rq{SvkE=GtM2`` z&k4v$cdQd6)iYs#u55)-a<&(Z)HizH@ko&A)QL$Ot)U@6u%jcNvc4bqsF_(y_=}V6 zuN`dJ$*e=jDhK{e96Vp?A0dnJk;Xzs&+B_2EPr+Up951_%;P~cxF|b(6 zV~&mqwIN|Y7u<%B&Ckj1_P9xwN&THYwOIqdt&OBbS{;Y)6&bz);XLXJ)@6fs`@IyY zfm+{7@Qr1fPqtg*i5irWJYHL4dJ9p5cFUPcY0JXvBUkD>z;L6Z&)Z|X{x@5rkC5tB z!X>IjlgZai`XgxfZxa8h?YWe%xzsxZ^tA%sU=LQWZwg!_6F0Ivscp;FEvf8>j%1q! zNag$|KD-Rt2njXgUzhrgEoob_RMuUD%v=tREZohXK~*MFex+HN6YDhYAO4s2LtvOBs6%||XUGN|H=-&^J|9!Ol z$8({|&)&!m`pcJC;Fm9||K~?bQB$+;&el%Fsc~?L^#BQvKZgCHy6q+1SDZs-`TcRT>=1BG0hYFNOT>jk6DN+}}%;*eGPZXX~vs91%8X0Pr#E z@(e}5#`DB%mJ8iz5{Jtyc~cvSW5X;ahcf@uIAvM-A3Nql<1@sE9k(sRVNh7TKrK z_CID$5buN>?>Ez?{J_%W&>X011>5d9s7vOlR9Hu);*xbPoNB8c!(YI(1kUI-cuvw- z#8|gQ=h$^;l7zOK-~kKG3LZg=%FOB3hrcK5*Te8&}3)LCR)|11W{f}gL3h;7CX|nikf;YQp1YU4d`0hpn$Qe7Tx^{ z?*N(m?yOF+CfDAP3vp(Zrm$MNHF2H;wQ^R|_U406H${`zF z)=lcC_I1khiH)7{x?%CWyJC1G11D$)4Fi zTU!t$3C*l$#(uMK!CL{R31Br04<1(4>YxoY>L7U4oQ&Z%noS$ZXr8jeTduvAk1)5T zbP{LrfqJX?d(dt=eY`Y2p{|haYj%;HDGHe^l~S*&`4*W=Xw^29;qFsxo~Q-l+jjR- z1mu@0*Q7wfVFlGqT7>2#*O4>ZMW2TmK#}{hnvt-=0bUlS9qMJGnLW{WSpWQ)t%T8& zYPRw{{!Ye_obo4Z#L`s?xt5pWce`wMz`R)TV%hHTtw)by9b5-cSM^55i>THS@+u^p zpiuSWZj%K6ofa6dN^5uhaK!!U;0}Ou+Hyl=jAI=7CGnz?ZHBSH9dRzA9f#eH71}Y`6D-F?dF~#x|9!&$F#=aL{RW3XUU{ z-N#fpqY&CE!AqpZnBH1K!YL!Egx>4l?8|OHNywrR*E;sE658!YO^h&xA#< zDc<1a?`j^jY4R~88f0D(G4F1ge`>>aG#;--ez4}3#%%?k)!gFN#5uI<;)Wve*5zc#6_L;Rb`c?AR`;8ft!eX~ zT78LVex>qH!gA*?eg_g6UkNXats65_j5#w?#5gy>=NiNNn+Xd`E!LPO{5ws~7UGRoY55!y2Bwfzpp&A-0EDv!QS=BeM`c814QW?GkM;+LzW84JTlOP9 zOK=n3%xsYPTzE+x!AvgN3^Ud7$;qA5{GHoZMxv>jdwBhRV>jT49hkx%`@uDjY^TsE z=MBS7P=p(F&dpjvv^O}yBIXcs(KA9A54@vV0M|vdqGy$p&F+KV6VWbjusK9`Rw}|1 z1IyrsJ4W6m*8@oDx3r2CD-MrwOn60WMh@Rf>O2bMYmgxyA;!($T#-nsCn)FWy>GEt zED)xxMV#r3dNW}jf3Lg5o)umB2@&@ciQbUgOfRYQwg?N_&Xl#Jr<6}ty2F=Ib#jHP zrSFGq#}vt;4keF-Lfsk*NPD0m<~h;_DR2;vC5C@+4V6k|aP$AB8+YRiSx& zB5u_1!YaHmVXF9%{%dMB?xUZkWijfRZ2Lc|96J z^Jtm`Bm2aXR=z612ZVW&*}W~av4d+6w6Sjq!hg&C3l|e1yU}p6q7DU~U8&+J2MQYM zz{h;4otgmg+eAD&K^XppUGQP0uwpEJ)>!cm4rIb&Sr+B~gT5~5(9fc>>O^TH#SS@< zAw*?CmyTJ6XNh;{Hd0|Nx}c}Wk&PM7m5G#iT}^2 z|3umUjd<`cJn2FQ)=PD1N$}W=!j{Ed3ro^aQvytmB9N#)t=3c|0G3Fq_bZSxA;rXm z17yzH{oe|`!p0W-{QC5Dh6{*}cb)a`V$|BQ{*UyDzQbyz>;(u&pr z+%yV--?SQlJ9i`29|STUO^|!FsrF5vck*4#2S6j4?E>A3{596T_yC-0Gr{MtR#gm#>7_Zw}bj|LHX0FEb&6(FTltH)U zh%Klk?Iqg3X6^bjjy{I5=I-#7?hmeu7n*PHBGU6MY4dW7%~OKx$xx0%RnE=faoQ8c zM}Kh7PgVW3u#B=8lu}b6;@+Uf^JCg;)$7{5jNKf{8R`=tZ)qk)wxbV=Y*-=U6`O8 zXoSX*F$cuB3y9%Fg|`tKWh2G%AzYe=QL$tjY)@Cit-x7H=3K1QA2O|i zS^mvlL8~Cb)&0OXW2PY0i%Dl$fGEuuCpo%;`stduX%JAOQlL-weFw4-QCAA$9?}aX zXJp0}*`cGf8v{@Y3)!X3g$GZZNO&5$LRPn{6x1ZIpaHEWVRs5HPAVYC4C7Xi7mE>^ zxHw{^cwZ?gA$ixBUaaMYg+f-N?ekO8S~AnY^7^9C(5jZ=*3#cLTwpR$QMf2eU&7+fN_Kb4^Oh@4Tiz*9Duu^$mM5AnA zP!Ct*`THmxtwl0XV(7h@XG)7;KGzUgLIX*$B6|2yPGY305bbuGubHWJO7(GsOLNy~j(`dIh4N4YaPEVtx zYSI2c>U^AQVPqkr^c?LG6PhgiAwC6K1in4EA5lN38H!&Izpds)S@b5tG>UG(B;K>! znz}T2@lmnem%X4|OLTt0a_fyofqPU9_8Im=xn9#LC$%6tUu`uC^W5vJe5D={1Ut zjEN?D^tZYklPLo58m$jeNMdxtI02OUuEOllW*$Ych>&j;Bosu|e`}OJ#Oz|;G#W_# zUPni=G+Exr#z6PmIP{CBa3S}xseR-X9T4ZIoPQl^f>Wl zCR(74;R|%~9Gj$o7{zhQHsE*_Fz|I)?jUe8JS;0uOUrXCp&yH>&l4pTgrBc!2 z*2G{8RpRvEcw6PyCDxJaaqud!YTzUPX@zY|JL|hPN0g)7j9ZtgE@%)xxpt28+}^BI|3>gb|u(FvVG(q7u(WiNPs-gw7?k;>YFYJnWTe7_);ZK!X; zLNh$mf3`VwLD<88@YL3Jsee1RMuuQO72n2J4GJyGJQ~!xY;`O_9oSee66&$m=`~HC z3HZ=P`3yfQ6)pE^QzxR)aqDfa6@Dde(;pxqUb36X)+uV1mjkQTNpvs`Cnk*Uva0TQ6BnasW z=aL7G3G-0I9xp0MA`!wMh(e8a{|b@k&17YFI7ndQVl5mildl5uyPMHM_)6h8i0i z6rKi}j=74Q#@pt4k%Z++5GJirHH|#RovNF{Bqb{$1?!(C%OssHA2}f0uJ^b%Dt=rz zU|qEi`GSULwk%vs_b@UTaSF(r>YDa3x`d4&q5Ijomh#*B_0m^Xjuy1_wz?%lXocw! zi%0-*Phbl`?@A2m(1EUsjK102NUBs4^hX9RA;DW-mah3{Vn0gl3yKGL>du(cp zvjLja@)~0FTGESo5m?Eu?+nlUq7qbCFyaFY@4N}M6$1@gj$&>x^u4h7#zmh?g|AgN zD@Dl6d=~H~78+cmW(p?w%RPlK9iL$xsa@JNCm_x>v9ow1EbOB#nNzRqpol``#6$mRWUS$ATtMiBZ#wC zx@>|W&8pA_HG9Oaf#=P&RdiaYufmwl+rPuV>bO;1NLz zz++}7j=Zc}O0_33O8RdqCz1(yzn;mof2pAXK}K7G5#Ult@=9+cPsLi3M&FbVZf7qNkL# z;!UXWLCUDrX*rR~Vr611zJO<_PoU5m!MV!_{cJyhiRVz$C1Ow=65BHZy7ZGKCY0@= z+EYKrG-;FJ0BRA*B*_d*aWQMs^=yQ;e07HzJji*dS0uOX%0ge>ZfARPnR{_%-~$Y0 z21Sywg7W}15ff_mkawN&-VREgMJxM{;_nnDAsoenrHNh(YMW117#0IP*RMj&GwkK9 z>bkB6)IzuIGQgDx1$^#|ygBzv7;bogR?!)2K6tw`?!=^q`iOBFO48frCLnsbYaU3K~PLxB9VAL$jA7t8p!PQ+Yr z9IEJucYXsw13zPs_y=&_@2q9~Hqo+tRShcQ&F)W9R6RVxiSd8V7(XEymEbu@DEVmX z>gcE#=(Tx#y3Gii3&~A^nnhH4s;{BDG9>BRLa~dd4MCdDW!ARUa((N1Ft^;YDnTBI5D_Ph@bnmWw79V`Q@`ow+F0=p`o+;uo~EFaZUf~r zrEdZ{{`?C0_RaocT$K1QMp~Rs$sH~S;7NLe-&6i6~<7-LC`}`?PGdXmQR}bfbSiP9Sr)9bW&^%l8cwyg7DKDmFZCcntkn<(DKDKC*WzznHbCAnKfW z$g{|Ow&<_4)DCf)M}TYxL8P4eA?d=Ww7R2;)%s}vLHadq2UxH1?F*1?JQ}J5zxYjF zA%ohv`}Ox~{c%A%rj*Qp2N+s^p<8w@hxRnzk%o2z;+|aYxB#Vq9xGh0r{W43B#-E8 zBD|9zZv5=)U2BdN%xb(prklH}Za-3&d&%^zMF+`?WpL9fwc7>l2t7Q~ElV<25%*;} zg^XlF%PdaJxA115HC!+Xt0y)wivveMzIH@{-6!X_fsMD{e()3i$cf)OHzp%TZ6c`Q zGZkv}aWdO3#REGvsIP&6I&>Rxd+)Q0$9@{fe|e%9Q1X`8jq89Qf1v=oZ-3HUPoTNa zf`?*+)gX{hyeubGzcd7iQ|n;mgeHET9eW4cjqut}LDq8TuJC8dQz>&?`EoH|?~`iGK?c-WgG@;h3v zMZ`bbM-=w3tSt=5q--*`7+kaosuw*dH)s2VhC#k<6~_#zOg1=gb=rRj(*h2M8WB6@ zm#7HwmgsN)Du)e1P@~c{F01@JYgw~mE$dN}x$;-Mu;_EJstu>8KJ>IHVgMBFK9$cK z^e2hPj`B++BySD@GCPV(Z@{+*u6#(Zv}{6YH=opO*M3q_ou^ru9YV<>?5UNPp2TP!r1G=@H;ja(U~A^4!+m_McFro=e8wV$F^(Q zHg{~>w(Vrcwz>1=-0r@8`uo-Qeb&41tbcRWteQ2e#u)izhc8f_{GZ(v?=Mt5JxMno zOgudaHy^BN0!Up@dL`%Vr3YqlLVkeSSNR%49x2{d-FuVv>)GkDtn^;+>c1K<10Q_l zUGHPvb~Eespmk;d$*qINoPU8G_qUWDP>mY$-q^gve7v?wjYlSUMpF=$UH3l|$SBq< zP|ze8eyWoWVJVUfwU5T3SPjsXT_dMTOLPI+1yGgY$4x)_`iXzk?}`amh}PKk#)kh1 zPZGudl(XmrIDPnYJkRvKIB3VaQ8){HoZYAML`=%Z)i-b{l;APuY42qA7*_N%6WGfJq!KlV%W~M+k!^kd>z-d zZ_mc`GRWVM@Fr6z7?WvuGZ@!RlWZzEqV{2!(rHYc+->B89=QzOcasv(xRomUd0F@Z zl?Iv2fUSx^Ar~wn4<5Y}2y2h$u8+KQBSikW1qIj&6kt#5+&5+K8xZd)P5hW9dd3*N zXoOWZ!lD>!QHZx7&Qtui7sN6J&+pJLhXllr7^0q;CmIBn^YBRV$<@6z2R(WPL;1aS zC@)psAGlOEUI-taaT;F?gOz?PlW%xqOd;dVh@E5A4Wr-93sO0(wDemNrc)CRM^6I} zM$A=2GMR)jnUpdW!_rz=`s*-kmoyfdtW6dzy(mmJgz2ty>8{^r#`I=Ly4>$ub9+S0 zXG5j~Qs*v|YX6BHuvQ#fQsM>+yF~8h^x`crzW_cdQoBS^v;;%q5{Zat>v$CGHL9{6 zgk-uhF<4@|#G~mrluRxqMQd9XMe8dXiMqB1(xIbe69cDXvNW$u7Pn@W=QRSjyFy~C zZse9{doaIHf5w1z3(;hOmzQ${?~iCnNPI&!NamPvPo@0ww(&@x1-}KeJKxuJcdq*^~Oa`#0GOi9Ry8-m3SUO`TxNTN;);tws5b}@ZB~UW$<=Zv#>DFgW50F_p zX-t6MfHT^n7leaOtjjE@UNBf1 zwPj(JznMpW-aq243WfjyU8m_9M_{AW< z6=q>hC@dS=W}aLcQ_!T4uM%(BB(M%*(gsOP5<2*MAA{jX;=v)Bk~2e;6ZR9?W){&; zp8oxvb(3`-Ex2n~!%woZ<4{Fb&r~HO8VMS5d3sE9c2CMYF130`dU&aCyxvVT|EWS& zpOR4{UutVT-~~)Lw_}k>hYXynMeFbQ zJwN)k$px#7nDH3SG-}Qb2bgq8@o@p=jKZKvWz(AxE>Sz(z1|S~b6ZawGU>MU0lc&y zSD{0uD8U zD;7qUp(9o1V#6_WG}4OL#R*Ncub*@8V#EROXv+swC)4MmIM_@X(Met8v0#gA`~fyX z1~X#-H{-8lPj$=E%N;_J6++jAd`spclZfh80Yme$jm(EQVd!52WbNaU%Jm&3;3 zjiYo-uICZ1_ORp{z*p0}fu{C&ZQ(i)sO#!fT)>TK;kB9jeTi2R8Z37i=)9(WKPJ#F zExB2UE>e#jpaO)JQf@`BQdE5gMQSQKq#|bs-YP0IOOcDO8uzECueL&luezy5_@tv` zvirNw>@0ZnM++JTczpOj5099~V_ z+yzm!I*^DvhO9c9tO_@l9P$Doz)K=R2jrq+mn=&n304iu4mF_%M~;9h+W{?*^i5)0 z$C2oz?x(SALA)(N+ZuRNT#yKphT-fq_=p(y2jj%;F9ujz)D*vfp#c1!Ui}wQP@raA z@af*~5D};2%17Xf4;(bbyXQ_4#7`GRWQhGUh2FX0_aa1Q67`&HWy0PbvUg^Cr*W}O z42b6kCptf%oeX7&vZvw~+>mmFlXmE)vW|R-OEmZ=**D?Row?3kYcEm+%J8SRWy`F< z-WPoA;Yu2PY8}9hm)mji5^7A?9n!^Z8`HSEV<6c>6|{xYIDj2%a|$g_A3gr|d4Lx>gUb$^lCj~Bl)&-U;lbZ$< zWvTCz&1c{%Uy$g4LnP}kz|D{^hEm!@^$JGyJ6;rfw1S@93Yrf`_C}_X32&+*6IL-L zi(wt7Gle4!`ekSF1i4!3kj?#Rc0O2+HGnCa37d9^!I>X2)HXaZ1YI&9F}e144adWK zelyyKNtnBhm=v zh5=#^ywk$kCW|5W88vzY(mUb0aZ=m6!99R8w78a`hJJQuc0C8>AzB2a#TaPODdf!b zgPFN`z@{A=Xt<_%K*Nr=Bf|5<=LApE#@(lfyTG;!gC6im{P-0K=oT=hJAGRNJyPy9 z@v#G6TNAiG5U;rG0byDUyb$13kj4vy$C?=B=tY2LhLMao9yETS(~ScM`m-Q7T(7A& zQ1#HKJvuMs^Ui`jA1^rk-u(^5oYxJ&MbR;!ColiQy>O2-OXdX&lN6i;V`@J?R+dnn z0cegSaR!{5Qf*oM+MX3zt8U^sOyR9><|adp7#Y&a!l7pn`2zj%>$$&G1QNt6=$Zf@;jj_ zLtZ->ysb~Nqh=pEVzAYzJH&&2mgK0Hq1YL3y9+Vc?>o#N3AR4=3jmvwuj3c(L0CMu zSTR~Bg8T2*f;OHm=duaRsZ5tnkiHW;)*f=|B9S8&7hZ&F4+A81@GHMTUGu zHFAAxdjMI~IbgBwV73S|>AX%z$~);O9UwSzH&!8HVI`rR?14d_(^HPoQ%--t#u2BP z64or@o)~GA;)vEbp=`Ousn8mCih(S=+~`E89|~`%Qw~&C@`ZZ>Xsrn?FNRbLZjE0< z0&plJHw+E6%FCi#O|>TbA*}*^;+pRnfP5%GEl1!A9Lm}j343T=ORQ~ZoE~fr}2tQ{;=ALR7cSdX-B{qFVeNvs@TL(RiUx=qSJ%+^&N<{2TD8 zH-|ot*Y$C-V4mfJ)EV<&Mkcj)~w?)?6V^>-vJ*^cARt5}#NTD3t_wEA+|)FaP}R92 zz@X5WYfr+ehUmaa*CNiW@j$b)ZmOv2&7b*b>5^>VC8m*w5Z@_uC1`Um<#-$zY(H-w zLc{vTR7qaB>|i`&?72+^-E^R8$-1Q2+IFQ;o6_7^k3)rUif!F=R^}Iou0BR{;Z6?3 z2aHhPEbx^>$aDHUo!`V17TlPCgn8$sKqM@|y^pQ3N|w#R^-(D6rBVGD+N2#6>dR`vx+i@_qjETS zfa`?J@!NaPcvqFZ1ObY-=?v!a<#w5>2@*C*0xAFnV)9iwdAU+QV+P4#Tnq40OIs8y z>@ik=gSgkkJx-2+;)veaa{ z#r|tD{D;X)0fRsRKtMnM{6)u*!e!WQ^xX>CfdT-)^WRT~e<|wyYdZX+9b!mL%N|7p zg{SMArl}(lM6f<03a^>5)5-34cgyjJU(W|tuV^Ro z5Jzi3xMrm=Tfi6vjP#H_ymTE?Rc{0#PzM_4CUy}jdBjAV+K#9~Xh0k%Lf<+C+#WAz z=-|7-EeF!TCkGWCeAq}JA~y+tEL2!1u{%kK*lk+C2r75pjs&P2BLzDOj8hgDjAf09 zL&?VCy+@82gw`92nfXQLJp74;QcL|Q;R<8rg=q+>=yE;owv%4SvGzc-c-Ey^DdVG% zYoCevX+yTP=FDljL=M}fb;{yks{>UwVVCo-B;wq4Lc#g10HKs-mBL2SQ$(hV2Lv~m zEf%o6)dmne_5Towr9E+*Q`PMo%Lq9q-}chv=E zn{WkKlGy_}Xxv4kZFjukz&X9%mxOVu2M#zc<-YGAmjpSycFY>l*<8!#&$M#U* z_+}j525rB1ZiAF2z@byDr0)@l?Pe`gP1dTf@T1)kYdHH4R#rh{o_zZ*M!!(eEIwC* zU2mJ295FXC80t^EVzT#Ryu@u)S&q9f^QUb%)IdVu|Fp#A#I`JHqi}^BAyp22sVuzG z4D7VMFPfQo!P!r2X%}*GpRR(FYRxph{K~6RBq{eL+15siBUFgkU$Yi#*xcgTfM0HD z`lTgSN_xrLli8H40{5n&7MvgH%E+`u?`4OamweJa=N)f$>R87!z=)XUxkA@GR@=3A zX+b}w*|)GL1gXkI67cMjsb(f^Ckf+}8qgcqd3=5iRO0h!3uN&h;^90zJm#G-=ztaf;zO0${m-MNl-Fz^mh zOwoxY%pQpxxkRay0XW+Z!FA}CO@BaZv^A1My^7m`fITLIFN18WubLs?yd6 zxr}YNd@L0fI=RXhpo_sAIr$|FwEMF~7|ZgyJrKx%AWMi`C~Ok@v>dznaR&-z8M^+B z)&NzOH@!T+nn4v3sknz=YKZW)rPdI8wz*C)>yiMg(`cwtxji==O$b^TqMe(ZVLYF0>UQ_Elhr|OM&6e!$$kKA#q7nuc5vqXB z4DsS0{l5r2q3U9RTT2T+DGgtw1lzE|@9jE?HuogA^P!$iJoV_ar841->g``tGUtvofrLw*N0Ko>KF2ch ziB$HEd^p&l9`cKl&zF$5M-l4}na|pp0eE*Ike;GHeOYg6(sg9oQFMFudiAD5K<2D%>7h^`AkRvz_|ew3l~W^fSqF3!7HF;Ff%MlD#LOfPtz*0ohinHqAstqift0DO~maxtFD$6=GFTseG>XLHp zJg?4Aug-hAr&>f{7$y zHwzDN-=s6he0ma^{lPjKnPq$@r2Q(tLV~;B`}#trR|-J9?-LxUqW6=~t=HWN=R0ObP`{dPwp|L7R&Vu-z3?&n7x- zdXH0Ju2C|p*xz|fOiy^MoGLFn$mAqRf9sQ%k?Tw_ZvpC6tK}LDj&FphImr0G%>iCj zI>->0tTM?yMe#E^t#eovQst=R(s5}y=qx;ya(fkj3zCmY?UtfE9X4;u(CNosG+R$> zP~Xf1&FCyQ6`CJWz@5K zt6M)aEX2B?G>Rr5(HtE`9Y}}TKgBT-ir4>gB2Yu0Couy1^SHrutN|x8Z%C52IAv^T zI(a*gf1;{Zhhj>=?Pi-{W2*4C)TiC&FH?f8#M6gq@`LR&WM0=VNo+mpL8c8t4SH4DVM<14`F7;GcXvWkD#@TWqYNgiNj--*n;iz zg_;6f7F%vKL0lJ=J+&?&Qh5f7^nC&18ZfV{qUssFHEbbwu*&a`x6RbQglt>-&cL z%rjCGZaK->MAB6;@qk|a>WP@6T;V)^o~xjyUlYKrR%!dttlgU?hZZ$#vy;85*=L{R~imPv2X#jv)TR_H&$87LGsYqYvVQ#DC18-l=n z@qRn0yhsehwW_$hj-bL$I@croJSEIdFDDbIUFE99Nht9hmj0Y;DC1iP$S+%%su^DR zS>3J@1&7taR`ASyWoU&TVF1N(_Sp1Q z_0jC`D2?!)T`3o1GqORSA%=wQqAkA^Tc{m@XEf8Jd)hwmBEW@ER``axA9x%#M1H*1cZ9?l`AD>w_|F8i=z zG;%V8U6C^5M_i>HeiQkHtG%+2LPa%)L0L z7ozQ83hFo^yS*AiZF+_?jDDo3wvcLdoSWT#lSw*>|5#k-3A{}86y)|S<$TaZ4L~Ek zg=*>=zi@}my!oN&(Byf%sM_`0)f+YBt^gN#vcOZ4g}9`<#shx?82>zAf+5|)arz7X zuWbJBQU2fY|F5kr)y~?1XlMWcm~V-2@&7)X{~NsFUkUwxf*FU@|A*85k6rzkHCrN^ z%o{=DyohCHVK8mc;ao_w#2bN4Mo=LNMZPRs;#A|ip(|Tal?uN{Sb(CgB3?v5*iW<~ z3#foxK~w~Jen3>^@1MK?Xt3w>OR=!XmV!fOBVdEktv#2Aoy3JNW0rT)oSl> z>K2b%lj_asAvNz-U^mIuiO`xoE8dHtt*8$d-*+(d=a*V|VBU)n0(9`!R<(Ygs0SJP ztK)5WhWVD4O95Z6ut+O*eI$ zC{d#jL-RUwL46l1X?W12R-_9h;9YeJVWF2ccPRpl1r@6NE=>vqc=9q*#1n>JG7_|# z1!vJRVC$~;uFY;23Zq?M0pSPoMCv#7L|BtY3`oDwo>UJ%{N;Ui1t zu|HR72!f6Js)EG#+-WL7TcBBv2pU5wJo#gT2R54(Rs;!?VHXVq5yS@ErR#oFiY}H4 z3`m)yNoWSl!)cMz%MHp4?JLwI=G6JBT-Osq{N6|op;q!Noti}wCNKFdx4`NzA)r&F zdpW0KDQplZ!-g)pM65|vT4o~UUeeV`N8iI{3q&4Ld>Kh*Y+E~%EDVXZ9LeyVEq0{H8kJq0AgG0ielO%zRejFTpKhJG zQOm7%NybRU8B@~!9E{YKE-2`ixO)sxQqVDJC&6yXfdJu>InGg`(pW8=LwVMZYKhQ# zN7^}#gQJ7Q#``Xk24I1r6!U4vM<&|2j0hMNwq=HyRGYlZkFxU1FVqc|0{TElo6Do{ zO23em6c>xUQbQ6KIQSq*Ur}TXQM2{KsP%YL$~Y+ItXvr$?_#`W6_aY1DgjirhAHjo z{>D7=BAD!mPZJXH;NGJTw^<7R^iM;ImuTPx!VFni8J4ORi_oM!^c7k4YarUq3?OsE z>V~#PAyb@p7%}zRFSddBj5Ov-*&2(Z;u>*@OPycU8ymjv43^j1`Cydu5%nR(MW9?t zDaVnEt5Xs}v*vPGw*f~Ej+ib>Zb4p|g*Z2MO_hLuA^RAQ}iKfcKaq+fB= z$b*a%ro~HzO#eC4pMak67wql0Te3fN`!pXy{d^uDT1eYRM}7_y zJ#B}$lF7rZ8>$L$cq~TVPu+>PbaHML@6K}9N(IIbFavW$g-7RVA402}Y0=lQB*={c z<-aAnPCqW<9l``Lmlpyc`(&5LubTZ=YN8`uo41_mDUgQhZ+4XZi}u}oHIl*dW$C66#ox zW%(*XC1ocZ7?kawii`p zv}yI9PmOBsXHqb=IU21K*H)WKDp0vp8(5UdH6uFp{=-~F!fx9PT=YSVc3pzApnp^z2Qmxf;uz0GTnaKDlQKBf-C`@D-D>|?elo;Nf$K`UC zi_#$$d(>=ve*~$AO74y9G|NoS)fji@A?+}E6YRh|VrRztN88dDMyaX>uk3*2c~6T6 zvLFJD4~2B@%qh@v^AA~%`Gr!wV%B7mnSm^62)V?Qze+Wjn&;=_A~$`uy|x} zM7}N4!HFZFOhXA}DAL1Cgvs|UD;ah|AT_j$HUqf79tdE@d^V?wslF{F1hmoi||D0%L zTX4vmie^GiyB3PrPiM{n?~o-&iyn7i^ziK94TNsUPB+}t3c{{%iKZRVaYM=dbK-`B zZUng%NKPqs#lDDQSS25&Lxi&$ExA=xdG`k+@Jb|rEyB4&!O7rb@c>P;cCTw1(p*S` zjM`H;nl}JG$+Kq$%PRs33i2}LiD;bZa13j<&J502jLG8}VT*E^E1dWBjyR!Zv0M$$ z<`-NB>4PK$ZvQPs{49BpO6Ux=>1+?k6pA%r`fD|$L)g;Th1S)!8WAuwll|Z}WAuY@ z4gD_a@62tQqT-vQsAxqd!-AwjcF9FVTT8ahDv$mlb55~-(5uOS4j#EyC!F1g`rWH> zWLdYM%uHA}w;X#&vDW?i-KRrHGY-0;&Wj?BICAZ8>Q^@Gt3TYkZ@9Z>^}BfE$hO!b z0Yu1G&Yq6$HKirB7`dzUF9I}}0ZoQq11t}S$e!&>YavJM=MPv!WwjE`fiu~-BpVWa zq?y)#cq8hkjboA4jOdJ)>rOr_oC&=GN4K2`8yvOR z>!l=~BqWh>M$2_Zw~6XobVe(+*P<_&5_GPthdtNU-n#v>(z zMuID8$=A%X#?G`yJB3w`1ebY#XqXV2oT)|GUjgF$y4;+&cf2yhc4x0<`K2}o^HU_K z4g|Uu(!}}G6D*V4WHpj&^3C^0&M768`ftgaQWT}Oe{h@peWCxKDL`a}$C=Szw4&eC zdHnx<3h+-(6A?#8J4bN?TVrdJf0Bu2tLP|Ut6=!bx+co>&%06(5CzL?!AR*>2AB_+RJ2Pi`y4lH8o2~@A+vHwxQR>q~yTk2Wgm0xtjfA4R-o7 z-_S7+9NY#BTeBK)sr9yWTet_b=@%rWrfD+{MHU)fxz&?CWjgv9T;T*|e*T$#o2*Rv zj5==HCSF*hfG#(PoWWdAXrpynS)3rVp?|?MLCh+=lnh6HnGpjkQh(%@Qm)#`9GWSa z%Kn+LOt2P?YP8_gvl9>GuMp52qKA2eP5MKNevP<6s!|plMyn&>(Zft>W^h)y{=<0- zQnUVRPd6+Eb;2LJkR&t~eY0Gxk<41REC#HEX)wIvWGF1+JDM|;7~+AV+T}@!u-kdY z>9@Xr!Rv}(ucKm6C7c{j#RY((M!NUge+5`rVL6F0K1vOwE47oNPN*x~C=Zdl7w;)m zGHG-2CZ<2qR*0A6X2ZHAJn}uEcbC5`vn{PK;;z)T&?@M)FYp|9;=uTzb8!bWNWoPt z7O8*?LkWFXS{|NWmY_V6-B^1u)=JpAT~a)-F36yDkjuZR{>TDk?a!U7J^Z6Y&>enc z>M<}q06iT{!yKkAyWJ}@C=!vEyp^0(qIk|?Y9b1dyMcD4WxE68Ha?L>3$dIZOd}iB z7o2nqbq2r3y+I5;?fq!7Td;;ThyZABOx4eD{u%cKHIHXZZHr4#35!E;7dYw|xbAx6 z7l2~?Kqx9|JwlKNyIcH1b~l^qHs~jk+FO7g*ulpCp5Z#acpellYyR%s0eO~bH#FY!@@J}Ziy$BY2?Jdioh&qEK@~_n4SPJ9C*& zs7KBWzmRtBIM48-m66E~NX$`$SrEo-5?c*J4v~hDw4p}%-0;20CDch!s2A}OT15gS zl5g}Xt%A6=)I~AEy)D5Jd_;u2U0fPsn+~to^iF)1>#Lq8n8eHuBu`-U19x6MZG3u4 z_>xkmSgaV@jC^nTEHh1n<>DiT3lG>(H$99Igb9+!G=#}rUH!RZWo&-vtw63cx@$k; z%=LM7RM?OUU>P1LNSuPVxM`V93P^ZGjr}QTzE|sJ1T|m&A*gY6M7Xj;AEf}L-R!sx zpu@4-GNg7<(kaRZ?TM^;B@Ek2%A{DU-ZXGS z;(Y+{NoKh|5>Y@Pxu<)0Fw>89cJ*`uVHhRl$5w$1fNVgzV(cjy$#58*;N!?*=5Hov z7^q`Z)TBNuzH1R;8;S-i<)=g0t$!p&^-t1ZR6`w8(;W#;vDj&=U}`nJw;qjq$dEhP zNL_kRdgw?F%^VWB=Lud_E>U5a*=^2K`}D_E=R+?%{eG8l*Ny~_H~5*hd-rP+^W{3b z8w%Q~r+uhIYe82{(!he*gh#C@}@zry{W`a`})U&zkd#m4q8#g1?0jDOaWR5#p^ zO%T3pY%>ct8iN#J*dqy=E!LAdR)OXrAV4B)DA^TSPLZ06I~*DS&%S*U#UI9>#r6j{ zK07!(BVyN{G4Q-EJAvP)y}*%lyVOPvw1~rC?#an%_8z;V%?8L5g;D5<*8&WQi3FWjc(Uh z29Oo^#VV8KCQbID6DgC13hWV+>@ueJ4@DZE#@dP{Q{}XTPHy`F78YxW8$>d?>d3N` zr_H8iMT||#OC%)s--^bpT8fYd>IpKV@+Ianrmp;%DG1aRXk*P`^@gfdK(wJ3r%ZJs zPOb={`LKq>o^$e-uqmiPT4y5S%S2wtbx`I$op$q8s)N>;1VLD zR$DS07g?MFa9VfmdAQ}W(N@c)KXi#?EL$yC-;&sh)tnVCm|zxEZMIk_KHEHS(53eq zbthA#R5Z(s;i0eIHVe?K7c$6J3^q{0HCH^$csoA6Q=m-HZV;(sge?wY;P$)?E)wm# zwPCS)KDs~MPxrdUD;U4;Ftg_yZStOl%xvtqsk^YAJ5%u^jPAS+5{Dx)vfU!f-L}C` zDJ#&x*p*eaO0I_{jNQeP)Hag`2NX{BZ>-}TXozjI84Z<_*7rha?a;N}vo%Ww^P5jw zN%buAa#g6T-rwFxD%)0e&tQ+1g&a8VIa|H-)amJ1?Ym>gJjt-rtc~l#$4tqzNVvnG zCGYt24pePw6M2TSy*3K&q2<^BJYVgR*ysxn<0_6qrbb-^nwp4M3Fh8fSJ;v%!=Gkf z3RPuFc62&Ra*^dIRs*V_+SSiY>(OGV z)khRFB*1u(QarEQw?8+qHeIp~>Kb(V-d}z~5iaabW?m{ArN^`lM6yU07x1Q^C`~)x zNF%LE0iDB0XeP)~uEq*r;#0jqq>@_e=(CYDPU8)ZvAB$Y_T+ACsMvHRq533{pWn>R zn)|TLXq?&I_;$2rTHix>)H+&;;kL9e0N;Uu4pew-q z^8lb;oFIg^lH3E>;z!s$y(ed0_3WAEd+=bwaD=}vYZT*vkfQEZpr{FNc@Ka_-&+DpJlv!Rw| zvt)y<#0!<;u{5iZh$uQM3(SAoA@sM9_=JkQ;9b4|PTUfkT$0~CGiSe}BMvphkbm=) zXEm!05<`YJpdcU}vr>>uTZ@ZlP1MG5L?T+({0e8)nCI}=5@^qMU!Rgm;n)aT_$7Et zcC^A74%tB{u^KFZZ{L9akx9>S3?1Xy*Yh6m>lSpRYlqLfufwMglKw?b?*>oLJ`w#R zmEN6x%W?RV|-`Ei>k~4fT!6s&N@D54L*0gOa z9+`&T^j_EvPe_3+O>Dcu1bgisGDx*2&{se+4;c^_-P<_Qd=7z*87TR!H)zRCKV+x4 zO!$WCPuIXv$+(Oi%fUauf4Tm@JNSRQ{=bR|8@^qD{og_N9T)&W{GU{xT>q9VtO36m|5ORvdp z=W{1TW!rx@by+XqJpn%z6yvra3ZmY~)2to;dFA50`|a2B1z^4x42})2L*uSKm=G$# z?f4CP8P>lhV;XzLKwIWQ|Dc9fq}$(NSqYEQ8o|~9tEeLCW7v==e3|`nqUo6<4aLIaUE}vj{B-DaK^cj!g~^qE9WS-in7)P$(s)# zN);3p1h*k&PL3GpuZF)p)1nQ5q7>U>zApI|v~V%4E~~PGIh_y&-JQioQJ}h&RnZIG z(=nu&j@4(ECS-k44JjKBn++fJqPpANfgI3YPK~B1;od@EQbr`@a6j9}q~gsnN;de) z;o(#_a(ALf0Cx$AWskPs1ozuw8qjOMRKPUNkH>T$+#h%M15Vu_cRs#p9y$MMV79po zuRDicXRr)n15SrgEWQyCj3nW9Zxa0p^3FSYbJ9o&%+be^{fFO8VmiT?qCjzxy=;B3 zbLwo6KFPQDjV<8j6e~cDAW0tAc*-EBkX4^e$Sa+QP4#BSJmO{khyCs9X#G3>Uq=LkofP7#@5cs!J1yyPRYSq*udGq(7@?`6~6vyIN!1?a>xQG zJPXToNuX3j5x+`RB(*ezrK1p#DoF_`U*r$hPF?G1=o(Di)<-jY`h~xO!_6Q1UM{}7 zsx{D1BIZ%p*0>s;w>gh}r~Z6AUUL29+4)}y)=t-3Q6p;EhK;4XXfH@YQjVGlZdjoFtJt8vOqxdacOks-t;sx8E~^;*u* z+jz=ZVGpi4!ko7pfOTSqImG*>!W%m0Myb$t6a&Gs?MtrKGstZZsNBXaLM$FmSE@1E*%!E1fvQZ05S#F#{-6p?>&$AEgP%;JsQq**e#U^tX@ z`o%W&-TH<)VBFn4wy}A~!MLc*FMOYkm92Kyv^po@j4>vR>0vR8V_4zyX_)#Yk`B-u*yS3$K(;pHn~wic@8 zfE`8}n}NY_P`CgxCQKSeKQM3u8J=Mbp;yw(AgOk78*d;Op5X5aSfTEXJqDWWA7GX$ z6pQuLonSIW9H)*dJ|**LcYe4RM_{D)n!H!2fdCXI$YSq55s)7S&VdgjgxM;*U}hy@ zOMV+CY!kvHvPyNNiVJ7#3Ob-y%CC#$-++$A#_xM1SU7@g8w4F-a3)fJtF$0ovXJOV zu4l&o?v6f952w^cOeki6{uM`&(oK{+i2orS^qM31f#4v0@rq}khB1;1u`#H!PWs0% zva4Qd(3RFyD|`(MdI+CGE&rK$ex#%UoC!lI+QnS4RhG#gyA`tvxfRvIZXZsxU>0+U z)6@5VoaEoF`akWRY`TqG|Jy-|eRo~`ANr?l>}=>IZJhq4V#oLo=lIuN3$g?XPj-+r z4p_j?%JypPWO4C;eQ-&H6rHeA{Q%XWda6Su<_EaIL`+N5y_M@a$t@lHN==s~&BrzT zrlyum6cAjR$WUpw-`ze}Z7tW|o9@?J-~frG`21+aA6ZNBeQml~BcQN}SahcL5(7z% zs?HDknqv5L=i)}91C_GmzH4Ih{`&6 zApt21??$YivPZ+TQr4m{MxY||&YZZm!hi;o&KkDWwh+{cNtlS7o5^#IU3D+=0UX_8 zVPjr<@r7TgSVHhR+FBRe7XZu;tVFh31$U*|W#rvEiw;r8&bhm*c(Ln%c{Rg0>ka&u zqYhJ`C1+j+9i#zk*OdJ@bxYX3T(yHLV!BeUC8cJC>>6l16OTea^w8(pdy042f$!BB z7=jFd!5PhW5X!NtG1Lbg&VIjmGG%Q-_8heLA6Xh&A3?;VzYwAFcY zq(pvXmA7c>Odpmhfpt#~^{Qwy+v7@sr8o#BlwUe-PzCt^A{i_5dBPOh^`if|yVo5c z|62hNINpM_TT<9Pd z<%%24Y6D@Q!@I>L@y`~#W|n@5k+3JbD53+wkR9~Lljja!+&D20q1cQK*dl~D49uu4 zsCnUXkr=l`j}S)Q7QVTvh@eLO&^-0G!Wt^l5W9Fci4sugX(pLiEjfqaJz{-4b<7?{ zt|?N2F3OrNZZG<5Tz;M62X?sPE3Kjgw}{6f&-|2t%sYCzspB3iWOq6hYX;AuD6@=I z*Dbs!`F8Kii{h{l{o5%YNf`zXxp1x7iHTp{FCMX!Pk*Bexil8pI`jyQctcZ#-kGF! z>5}@Xx&UO3G6rgnV1;o4IVad~RM-+|;Co@8N+F+wnDGJ6x(7&~!VZj*Eq+}N$vzvmuf@5KYzOTPR*WV}Xe@^A$dcnht@Ab~ccli20a76w!l`Tyi z?Q9(ACBH8+4*%bzE>fJ3-QY*z5yByJn4*@as7Vn+n-$3xcSg+>K@`sgQI1fr&Ey~+ ziDyoX!VP*;+iDC0#qSj(tj>lA8-$Z$9(nfh_QAuuz5=|^Ul2ueVl%y+8|Fsi;B}yJ zq+yJ@2BQjl#$?jkNQF^VVJ96>rj@^I{B0rbM2JP`0mXV5exsO1P!}poZ3~JR=v0}+ zvLr7YPtu^dFzhCx=1zMWvi=NwNZz{O%40(!(yqu_SdqMZbtRRXWjHl!-F|$KeR4dXsK6)%U{@2K@SH zkRe;zSxBJBEV}u@F#loi$2B#p`b4bTbp8xl4tYVTI$bh`yGn)n_H1KO)unTbADD>R zqu!7~Wq(~C!;syn&A%;E1J{om&B7c$10yKo-#yN`B+0|4Or0I+j3qc^ZOFfuoxx3)7g``*;} z>&jwDZ)E3aLT~Y{A4f0a^1XDiHj%b76LB@Mb^hlTlP09QvdG<+N_DEVZodz)F4DCs8i%b=25<0O?D zTFo+07IatwV-U{7DNQ9Ar6SgtPD`yTOB5~eXcrj;lOb8fO4|f+sg>L0Q3Y|y7rFDO zf-~qVaOss**i;sP^3cXtL>DOhACKcPZZM$OIwrwYs zifyA}+qUgrY}-!i+HdAJ)Ql%t~ zu0=({TG-2XZPd$y>o+NY8JQ)g@}nBE?6-4f&z3WX%!EGWQO;}7abf?I@|t$cOPE$Y z>9kQlhw~y#mmd3#FUEO(D0MggusM&iMi3hWmkzI?9lT5g_QvU0s^$QF+n zn}Wow2!lm}s!S1tn^+DRlEDj0w{8Ql!f9ozgel>okk5+pd-Pk=2pFr zfM>>3b>NF+AH8c*dlOOTC0xg>r9|DRt@9Rr&&c?^J$)nH-Gu`uj(XDgjvF17pDZBT zyU$co@y-C#OQdKNgFzZ5%~7dB2tThes!BZ^gM`o)(o@sdqX6^lw6+q)uTi@KWUy{R ztDt0k$>!m0umI)+=F%D;dX_MQ>!Snip!y=c_|*=KYH-KT2WSz(QBQHo_?7RgY3UrVfTP z0l=C^??73L4D^NME~477NL$N|TfQ*g4Btc7q^03OuC%dYPBAjLBE`WCRU@;7sg+Tb z6s24dp>%N{AY_-lDY6zq_TmkfPwJ+yF>IIO(NRtE^!&^St)eSYj8xH#vLu{1a4>N0 z&klt6pjsup6#V zfeQu^N4oSPKn#5-P=jz|elRyHmi2W7!n0FMMtV;I`Tnq=Uy;=)(uCS~Huid-xZ{JhG7;#dLN0s_W}~;9OE2Bt||#atjsuAfzz&Wjhdf&|0i$uw$t zvsHbxP&3~b37vShFOc!HcbOHwKtk>E{+%qpzWE48Z)z>`D2L%j2TA&mNBelphO<)3 zt=tU%zNNXH4aQ`lmDUWgS!$zHbM5e?lUPS$F&Ca5v(qp_iH2$NYzm%ST+aji*QN62mkyq+>VdM!a(QPQ8q`gE{B z9=ARncv^zoYre2Xer5VRj1)4l7P)aXWH*f?_oB8b8RZ=vVS3rEXXW`NIRY++LG`m= zx2Ld;#J{qDNSe=)36Pxq!%PY<*~H&r}vUaC0aRjWHfOshI# z(W^UxRjXJM zX38IM`D$kIlb_~cpu0-vrGNX8up_|>%z~;8Rd~n_g}#Kbn4;O|W;+AF_bJ>$@vGJ$ z=$CTh^eCN}Ci_YE>_3nR>gCVV(2`yi5>bEZMW}0nJz#fL&*D&bN!ph^uz%*QU$WC@ z3`;WIQa{8<`47m7(O@xnCAc+vO=y)*k!}+EfayDTA#v?lEkyNQ>Q_ zEsDj*n_q5z5z^}VwO%$~@{lg|XMsPt{sbo3=~O!T?t~^e#5utH#2PJjfrC0H)d=HL zcqp}RHG?K|VK@qipw2zDtCj$gV%`8hjFy&lW4(&=ajLbNUEoII_5GT2SEyYTBvjo457Y1EMDm~Z@smBTu~ ztBpewd{XxkYN>Vt@Iy~gX|JWQ`$;~F#EH;yPGkoPo)MRT(wv)D!tGM>=B6U!*_e;q zd3^i!r}h@^L-le^zmK*13}A|T)jRuhjeg(T$pB;U`suD7U7x+uGcbR3kZF>){G$4C zU6RoRv-#}trR(;6+@$1q&8~XrH0vPjUMg#V?B;0fx;Wd}`4f9cjexltH>e&Y4ZGuT zG3}nmZ?p_Ri+kLWJ%YEm-sJ|=a$G|pBtT~W6AxINLL`nV^BsF#hw*$p5=CVcUKM(|>sJep-qyZU=x&90lDUZS?e zoj-DMs@Kf0oPU#ro_<*5!<$h<_uzqd*=jdz>iHvDt5Qu(|B{z4T=mlVxkH!U_Ai{r zH*)8#saDY%`=LvnKUCLrIs{{>jXaJRsqW6!*wTZ~?37?4Rk`AiP|pshd)S=tSZSej zGG)Vz8_kn%C7qh;)(2pjj~P)AF7vDlPK6$jUgnVB*$HLx#xF;DSn zK!%}QOBMEmGYA(&@-~D_(-zzb^-F)`K?hSOs3M?{m7F=vm=}Pm-Q-l8fO#__SL}pf zC@aLSTKpti-XUdmwEq>&J$ke@Ioy&mMLk%IVx}sd<_eRuM?%<+V{<~$jMZ^V*2V{ecf814e>XCSM1+E1@(gQc?+3nn@!f53Jov zBiWl#tK1EjzI-C(Ym!bOx_b=t6myIYz%FAspi*4_e8X5>3PqC4VKs-?XoRWXInWS{I&rQ^pq}f5FRNMR5bA+i&hb_NPaT-&b(MjH%2_nJ)Hp zgzQm#a$<5H!M5|+ZGR(1r^9jU&>}0=xP+@MNj&n7<$&>UE%v;N_n3bI-E^>-QurCV z{szTk9#}%3CoU8>;KB&U0caiof1sGtKnINIs9b+z$7_41WsuPi1U~Q2@E&HHMxN4J zRaLh+zQp%4$#reqr2}jWC~|l;^U&#-#bX)D+@EKf0_(UMlyis=X8IV{-7Z(xaE6om z!t*#A#{!~0^!P#+=)lPN_~`~R5a5I|3JK0^SyN2~&@-_eaCssG(=Gy3x29@3_Lv^k zXc)xQQqrT8fy64_{Ql*K#E=f-Yxwq*(O<%}FQ$TeH5_$D?DinuxGyn~IEC7xtfN4B zY|T*r-kvj9Nrx-nx*D@e^}*DUTZ$(>Ry$9(L1{BE=hMD_?C_($)h8Rc8`zT#KdNPA zyC=Hf1_J))^$pi23Hts_9cQi+u3vgE65rC`gG%7G;|6QiENkKAh)Lm@-7#2jFgx!o z&AVuhM~z^2{?4<2L2f^+{*ZO?0Y1EBenDM`-Mga!Pq7`&xE7OmKIV5G5|jE_Yw`O% z?v5_{0UvDt`{)1!x^3*GO>toB{bQP?ER#E{GN+hh~Q@G$TVLNDX?tT#|00zSj zljcR?wjl=H(`ih4KxXuzJU1&x=A=I6kiK!KRCgE7`xD0%%8I7ME0pE~h&{l&eeY{p zcKpb;wb zn(`u*spf#`()jmo^4-g*%5wOIZ5o5w7&LD;nkw>Y2RCKLAdYSn6YFaIc+j-C8LYeC zVJ*`-(@Hnf0$!b8w0&0Rt-*WoqzT%z)J`<^OC0oG(Z(5Y(dAr?5;^f>(!wuiR#S_C@Kryx#Uy#Ksqf{IH60cLj6yM$Tu~0?TbNp0XoXBQ|mc80jWW8w_rc|5Y7u`)v zLmVpGGs@Q>f#8Mi!L6apAf<~YCUj(o$VEEIq_Zsk8W+44{Bkt|>Y7110EsF@*e#A# zkRdSU_U(6Xm3O4|4cR|+rY-g@Enuik=oaDg4F>X!Mt=jxIn|D2=NM{i3y(NqRM=+b z9pushWO-J7vMZe!n5SpGx$?qB1FB?Nq7`)iO3-NG54gmK(#k}vAj1PL4Vmo%2gg)C zGG^xOnd>S4ROkPYJ5P1;g=79t+upwp6#skF_|HqbGB|k_%lFhd;9F=V_`e%9N|{)H zOREG;3?05hslGQ5evc!+zyI$myUK*!!uQNMk<<0Oos~)f|4=r7mq`dLK!;itNkSAD zy=**WY7mP|4sZRgK*=8jYS7*Vq)6JuZp_th!oc`4&$Wk+|W4dcN?G9GvpmJ8T`(Zu7>xyuUD9Q(CL z5N*?sP;VYyr$aATE6MF>tVz0U48?_gM_P;5N;DC^$k2^bmAgA#w^2 zEZ@1Q`!gB>M+dKr$f6wac;4fga3-ze2$Es{P3s2s4WFH77Ni*0lchvPYmO*vb0u*P z%~R2#aT{zf-&Ik4zXp-`c>R$iame9V#`D0ot3ZZ~?u?OhAmsO*c;;9V8)>A2Dq@0? zRQu*Z{*5C$zyX;DhWOc!o9K3tM0Kl~qy_86ksDQ!JXSfGjK`uekkx4rMjd}(d@S{( zdqev8b;G@rFeOdmO;BBYX%H6{g>4Zl!k>nbR;HC%u^&0`lOWYo$aGOMMCwRwo=T2R zPCzg%VJ%VS`Ma3*gLqN7Fiy@3CzQl$iC1`LXrf{b2|dEB0LwZtT4pKkc+<{W#2`C> zi$=&aC)6Jt@yA=DMvGN_p|$aD;Zp*S87RQt1Qha9r<_qbPZFD(JIXQPaLPAiWzg;a zxa{#Lq>h&k(ovgMi^weWGqu?y7aP+oUxtsbSpaYbJz)j=Co5v(%nm1ghZGE*x8}`e zveHu+8`SXysQG z@noMjIxR-7QV?#ZeILZ|nrNxe)PtR7tjSjhCvsQJLDv55b7;?fVJB_7LS=- zZ{hXTkd{PGw>BSP+_svnoIy7gsegtGLfe*kDDZSr=D2Ym@Irr-cj9X+2{G$C1yPJt zhmunlUM=Mwr*}(P<8^(UC*BqK`138vupO^6Ur`$l4VuW6IW80J(L{)`XO~*A4KFCuBuV0?)Q>iJ+~GCAY9xlggbDP+!>(8EQ}4Ot}0)D(Nxy~QH? zTv=-g^5rd_VSeWZ-~>~DBWq+HMkUBdi}$M34eDr@p2**{ol5M|M3JYfG@I3`WGvQG zp=R{&gR)ZwL0BID}Vw2@PF;wy#8En|AHRL(is1*&{;sghZ#qztjvwyJibBObkW*d^BblXhnW zwuP7*9vvPyjt$l?JJFCaLqc9JQc{>w^LgwxO8I0Fmy4r0d&Ee(#XU^rY%wOk8hIqj z(}l48O$7MXn42x%?)NbMT(VXK0`#2%WFJ^p77N7I?Meg|Q`CI{><5G{V(FW2gUyR0 zrcU?;?Dl#Wtiojl8=X|#Saaxo>Ds-{spiP>t@84ro2!Evr{Sel(^tfD5<7+Ski=AJ z%ZsfjI*_%6Z}}ZNu0TNBTsY6)0xe{XOl;L(p`dQVOMg$#9@dlO{Jedi9TUQvEXKPCDX)EXtrB59Fva3Fq z(WLX*FHfSt1~io|xXl~b?66!(_XXa@pfA+zbBk)`7tl|oaj1EbBXo;)s8fCiHt!pX z$^c%9F;j{$Qrga1e)e8hp0Y#tfE|(|mM0Ju(4GC(8EBmGv=y9baeu0(KX7ce=DzzV zj-CV5Ob3Idqaj>{W7cW#`5y|1e$fe-3E2pe z-rP|)gM@&ZTUSJ1#fA=Y$fX)}igLV@!z!b$JZ8Z8TDM}844{#&;H0|J!CX;H4gl;7 zYb#w?KScZN!$k3sfoIVw7(fxMyTm9~@OxhymVxEa^eYOdskc75{t%+=ZNn*AbH?fS zYcGlq8Gw-pi-At~(8~=x|Dz&di+Dhy;04sF7QQ~O@T}9-Op(e%BVtcL zBEjjd--^ZMtL>JdJTp_EDRA3jVC;Q}JUdwfi~d=O7?bq6UFg_N`%NjK zx0U#FgDY&X?=^4sy?}d;-7=jh6(T-@4sk~1cu3-eRP6EKLdFe?m;}472ADTa#`+0PvQ!aHs6{0JZ#G6Q0XEbz ztMg#5=3&u_bi|uMPb=^aTJ~bfTLiyaXsW#HoK>`$YN;`Xa)8EVEPnU~X=>F%N>&tr zs4cG37YGpODO}_LEez?Cmr^hVVlqX9GKG{h#rzy++fWd5P#y~@yc4PWbH^pPr6_3_ zn1k!Ot0LiyIuu=n!NQaiEBeha-*DW_D0e_aCMGUr*`3pI;DyK;H20 z^XvGX8=?LGkFJWf zowi;vDRN*6YFMI;F6bu^7g4j(2nH8>im~`hfL0Cpc*at-mAh+Fcoc`yrwbNSd*R={}6_=luJzY@pq2H5(oQx;0xauOirQYHsXm(7gD^CW z0|$Gs^*j=D9apYU1kA4D7beAiL__+%`z*=fgz$F_=DMhB*~(l~BQyk=O2cfR;5VY( zK5a>i$$7s6T3b8E9mEvmu*iYTq-_=GMktiP3z0PJ4`ig2#BQ*l)k2{^j9d=Ckf!ky zabFV1)7RlelxW~r;nfkeLDH(1!M8))F} zy@ImOw9EOi*A+3LUOL3Bt7(isb9c_Bc&~W!l6mu1;^R@;KUd&<`cJKF3p^i4J(dR& z)o%*y@L4OjWH{t4FbgQ1y!Ica8Cp^Qa`HLbr)i^0Py3GQc>Q=&M(CONt64;wP6^^g zB;QMwWjw})NN`PG{3CO!)~?SZM1?2YGsK0*_i;R|4#ary1tz^@6x*UH+TY`+^*RsY zdFmfxagQ$?r^AnH$}6`8z#j)y%g?@}d2FF@GAUt91~}s!Q_UX!N4J{X(q&Bkxf^uG z82Ki9n9}^>Wv6pw`hi|FyT4(J(i=izJLSD>z|uP`0WW`wj$LgMb>}eSI{`A~aK}Y_v-sEME)j^qkhXM?l#BzF2O7>m|ruIo% zU^yeYR+i#9U8y8qB=%NkJUWd$+Ohwf=ayqRWVKwqWbl(VU!g)D&7*s^(s+bE&$*~g zN@E88Y@cYCVm?IZ+RI^fQlxyZnYZ){qUCxj{SA>SJkt2`GCX|FXeX zWU#G|l5%Q)`pO%qYs{)Ual!a5wkPOURtJb8&0GkF+|DqKN6CdriS$ zl+2cRgc}F+)_(NJl^i1i!_eyz8@{6l`duiVncu5{gcrM9@K_3B3O%tHOY;Q(!02DW z^6xO}pKJa6_=Zuzw;NgQ|3_gFa<#N^k+dU~v~w{vH+A~<7r2=^eb<)%l2@s$+kJzI zFL8oibDrI{HAOpM_K3KSS4F5)6-ne9RC5t3zV6Lt=N87|nX;hQVb=i|KY71*u%H@c zRT7d)NE9J#vEa{e<=n2ke~tj`ftu%T;zn!{+-rAT*2v*~nGpNR9!O9^q(aeKy!{M}PAP^(g#B}WpoomyXZY!# zpkykLZ5A@uv<*OkE*@8cixinMUoh-R6dAib<+Gsd+ouq_6=&pyO znYtlZdm+}*aZseo4{<`WrbL0C>EP?U_F1Ao3;Mh-%er|GU?ETPr+BHz4q6H(IgDg) zV}+=Jik)etVSj-;>a&j}Fi(MK`DG5)>?3A02@nY6ua6J-?k2gr+*?Q89I<;_$0eFg zsa~OshpXAT3GWSKKKz8bnc*bHmfM3Sa_3o6>a5j{kP4!m&Z6ZC_C|yO!Lb{DZ%LMcIGj?;iml@{el};cx62 zLjP}a-v1XgChB2q>hO<)^uLg&ruglQNByF&m0YnSq7Oi~IWMOqf`V&YK`*5&tbzmA zDk>7wdaQ4Qi_F|??NHPr$Wr{1rRX1O?<$sOEH3_j66?h4-XQcH?mueswBg;uckFYV z<$b;S@d{w*0ZtpHpbohyj`&_(yb~26in`Z2FTJA*r5CwRhX$pit~i(w(W00zaR{oW zve7#Qx)p!!j-nyElM=D6k@$iKwH3b4ciM$J@(wGh?}6R|2s+lTcJA;94xnSgWoV5d zaG=oGcN3;8W5}WZ-2JOyz-iXrgzZjEHh~1oLI$Wf^32Z6B)0EZDnI;=ed$W((3L*` z0W^L3Y%=REG~WgLE^vjcm`>FF_6$jW$m>dKektL#cb?aW<7Ljo(KkM!YDI&t)-SJQ zwZiG|7~-%IdPuNVs?K6Ab_IO`%}kNMwsVRFh!A#GtQVI;sK9|&opAQktZY1kohHHK zoLF=?m;ZF1su|B+OE6%JttY1&kk)NFFXRZQfwV4)>YWCoC3|9-o;3&iv;0!w{AnF04nL z;VRnh7y!pH4VxO#aRZ<*R16NIje1pyG%|v1W5aw9HN#G2QgGGAEPZF7z=X}V3kr?^ z3t(X%^o17BKc5$jj&PsBG*%dfogk8r0mpEq8r__qyG)iLnsE4>#n04`mX~N24m_QX zw)m>8gjuxj{6#+{kl4BpP6M}Y*19CRoD0Qau=Vig@Jz6mr#=G!|%wiCoVx z8Y3ajw>ggTTV%l>D8B~kd(B@{JDr+^H>T3x`t=SHCcPS%(5oep60c^#IU=%w0C-76 zsY=6v7W{~DW;|&aW~ zq&_LNNtaPFcge83YlRHMqZi;i$#FC>qBxePMRTf7ie^#Mi)T^mA#in2s-0fKMa^*v zU5AX$RGbtEml|Xbi((7(j&A=$VE;x_|CY@!=2F*t^IbsQzDewV_EP-4==#&EP&IHl-Qmme`2 zVc6V1>2`WKLu{Lx!Fgt~%lRt(dqc&@OwBeBYn{Fj(sLx`P5>4@x&r+!QnQUs=BqId z8x9Y94x@&+kStb~8)`VGf)6_iONdYIk`FQyYRrs?Px%9v@RbgH0uqRIqP`di64?R3 z|6?;ICY1lrodc;)QK&E$T(oV>r@~0Te4`qRKeaF(^(llG^X^Q%2<($qBx_f;`Qy}V7& zVVt((^?ScWzF@EBTVrr{_(Ko7f6n=aqqT%byhA^a9_!v1fMouRknu|)E+9-KE+CR_ zO>k1%joU2FCcD@JpBz!_m#y~{qOs>V5nd%bn);6cz`ug&zw6{b0SgaZ#G1h0_WoW{ zARylV@t$U9>cZgcY{Q`Zy}I7s&dk!>^?Szue{15DhNq7T!1b%zOw68@_vg1VAJGB` zN4j9jEy|c31s0MA{Rasa1TNs4AH)L1?hiQZ5er?j8znQy9TSRIr5d-=c1yhKm@#dHJ~@adC@0F^o-bWusH3hQC!1m>^J}BmU(G5 zbHchd3+8Bkb^M z<;WPL*Q*QegpKiaA1xsiZaCl~N9+ zkn4G}sQL445+9PmvOAfk68)&eD>=4D&S6Bd)b5$p@zuCT0a@l-rA+hAeD-70lPnGG zReQM?fKF`-e=D`3HjJX$0(D?RRr-$Jdyv|Mk9x)WkX9|xXoq+p_|`FoFV$e-Nu7oM z8S6LQ;T-I=>6RSYMwENLdoLDkp_seL0=$6uh%{uq8cn68fX_?9oINHE1GTPplVgZ* z{Wi^|zJ60r2!)n#t;mboCSL_KT}Pv{>*KW3t`n>ClL;3sPPqXUG=7V-o~Krm8J@Mr zQ&<%h3E*a=7X%#tplTR#Y&xT_!)rL8B6@Nyo&6k^E_Rm%dMdv(r0m?hv<$5_hMLU% zNQdXJ)=5H=M7XVB5ECi=N zGZrGeeis9c11UxtpF<4V#n2kUBzQxn@+3A65#m1vWTHOlAPG3(iq7Ik}1j(7#wiTJaV!a-UAgH^3lgOQFr2-}B6 zN)BWaB_nGVMnLZ}umkLKv0da(`|#``sqSEL8iS0DL)_7-klf;Lflz zvvWz<+qt;WSnl8phrO`uTI80EvEIw{lB|S3O=RiRw0<^e`UoYplI^NzcUeLHOca$H zyhzGOs`k{vqOzUvH5@8|Wkyy3;oH5|u%;PSd0HmrL*eiT<=KHXY$UhDQC4 zUA&i7b4{>vCdlcxP=BH4ypTy^DjGNh3`>|vu&{YPZw^+KrB}>nN?43}l$}(eC5Ok& z^vtZs$ow@Cq(#fJ+{4z(|EvQeLWvQnk6Kv^6-Vr|@d68@fom^}o_EEh=ElgVVHXaD zokz{M$O{+EvWx#6e(tZ7Te`pnMCckfP3z9VG@;h0x0>b1;+^XfGRM~!Ld46!KFwFU zbx>?7D|+9(N{-;6+a^{gO1o2TczA*-Ltp2HC%)+NXUHxUX2^c;dSzQ;ZpwO=cofyD zJJ9EV)~?P~pt9-6&o7&0UT+9*9^ce_71Jk|ZoQ*r|hNxQi-u`0l%8zjDI4 zq-F+pxcN{Lg}undLL9^HF>gQ3>QhGMXXulD^H3sHfh_JZLW%6GJpTad>eRep)rfxn z>EH9%M@`8R@?pS8dHN$1D3kHdGvi>5ht5K==cN-|3=~9a^wAYqAq=`FH?KF&=Wa-~ z)a1|&9SSwRIoadg$R+usE~z(~P&P-64`)eGSD)39j+s@@awUbtMKS5j0WaAiX48rg zXSew_pMnBJ9=Xvi{mHoP$v8Z1J0C;MA;1n29cE60b$e#iFvHOKlak7kHcxQEq8~d7 zO*Y0r&|neyDwCZHDXlY#FiD18vE>gre`v6gV|L>>+l5ZqlonfP_ANAz?ppluo1+qR z;{hg{e1e;i8qb3B8kbsQA_E$p*bcW98cdW4r3-x3QuyOfO(U#;6DZj#lG+5KXAIG3 zg`_k@`H&{c%L6O!G9QX_Dno8eM{b}GY<0hEsCOyuSL!NDEHV+xcIlPmEp=|SMhk?# z<+p*th$kPo%RC3g_YA4aTjpOeM%_S|xHRV}KTnytz|AI!DcWNJM90}j)d&N~As3fX1T)Kc{mK_cH)$D)xa={DU*76Gg+#ginPTmc-V50;p9cqJ365^_Zr4K z$>4fJ_p=`HwV@iWN!>y*c#Jn^<)p{j)DjI8NOK+!V|cf$8KABACtRr4e4*B0KmT5} zPRsv3=K-s;8+S9Jp_p{xAWJYk_P}+32vXy^?Nij9W+7d z$kT>9>Ego3a9u~2IM-IazmA?W;_^8iuL{Ok28Yaq065yJj?iaFJ_HS?2ZnvKKZQT(Oah zhY1OF#8Nphjw-D8(vOvK+DJ)mNbj(v`)m&kxY*hzFAj4*u9e6W(YCbT(7E(dlb^BN zMNfaDwozw}?SIKp|2*C`ISxgH`eSyE3zaP=XUHQz^n@@jetcYKSrePST9i3wcC}L| z9r&D|m?3OT@$hEp<(mrbIKs+zwotI}V37)bpJM4XS`u1(nnw?JCMS!K>fpLsCP+tA z?1)(o1*5`(UVdnyNT*SzmM>e?555#(*M!|w4!5rIV||JHq3m(+i~2$tXT?Q7&|4Kk zOa*zr93|##7^EBmq1^h`$`ub^39ui12Hq)cJLtU#Ghy`TQ0F2r>3>ZUWlOtzeVjp1 z!HJHEbkD_#bUpOtzi|(&$N9y#fx|kEBv||AU_)hXMm$9SF5FpW#vEFn-U2ZBa;O8L zG>=hZxvm`hK=Nq>clKqw&&il1*e~KvY}<7~yT4>hE9i_YArP|7_>MGSy6{4cB$%t0 zZmNpx=g$-MQv%eORp%HM;*aesd$7*Hd|VjHe4_p{(fHSf^50v{t;yt%ek33u8>at_ zr~02(^BWV&_QuwxF8}4K|IY!&lm?WC&XOy?d13l9t5YP< zRx{}(+iOve1)jS+8!Vb+?(^jDuiDnzjz7M45=?h7^gKV>BhF!eIRPin{~bH#W8fdT zF%(MHDQDX5f(xOxym=NWa-Z#oN_Z}M|!+vMwACora z6+c#@nmAxl=ckw$sk!B4pxb$6?$T+cn|(pemQVHyo`&gajQf^^NbE0|tybQ?Dm8~WV4V2mrE0G-$TVAQ zkjor zByR>K4gh9Z#)Tx$uiKOfW^ba3gUnsF1TRRVl9hqsU}NLZSzPn|&N4Oj*49=wc9-^E zKg`U~!ttWto}XV^n;#malM#)cli)=PBW(unmt={hZ2N&+NbcU~?p9EBfJR=`mRHx& z)eu_N#D5!C}Pck)ofX8QpC1;GLk|eA3tRc4Lb}Jc`R-0 z;oFwr^$F{-G-L7^rCYiU6nr$Sgo6|z#-6_0dqtP$z!_9U8)a%Y=gFc;Yn)h@L{ZJ1 zE~Qlise`7VTzPv!ThF~7DhglO?Sy^qYAOee;65o6R_4g?5*!jT*{wim$POW7Sj^Q- zx|v7Bk|9%=^iYW)DijVU)1s;+6bzzKLW4Bm^r$9HskNRX151Ho!3HAyXdEQZ(YUiP z3&3F6zkRE_(9+WKDw!>3tHtSGYN1^pPuj-33`|CA2_ZJqcCzTeI)}GGC>R1@!-4l} zgVe<>UJic@=AJZ|k-G)0#`nhU@rqfHtE2i%43GR!LzX(ffSnln0R!7_or@VWtl-fv zC11Qy5(<&%?p@!r9pxJQlvXc=4%88>f(yqnK@~=!Z%qQ zdrCtSOoCLQ1G~ZFp#lUs)5aQcM8%L7u)r)FAIPF4Hc%rC|J_CxM?Zz zHwR|^(mA4o-O&xUm|g)&L2P2*a)dD>*8SFjO`eHBe@RB%=*&w^kUQ$s#|VY_z%T_w zxM$Z@%}JfC&SA$yXc?a(g7%_hc;d7 z2JL0}gCS;Z(y*!tU9&Y7>E8-GhGt~PI5g%)pj>T#v@iK@TF@m7HMG+&4XU1!GIiM< zb52Zf4-=UTpk>;79SK5HZbhiW(s-1i(FWKX7$h>O&425W$9lcL6mqg>F%C@D?wV{= zlr+t>ak&Q!gq;?S-|nP`B4wlKGCzncG7EslEnZwaEZ{(b*QrOUS85QY@S*sVmdrI- zi)H|%c3sy@-kS4^e@V$|HW3?tolTBomo-jZ#L4)~$vEm~wk@WoC%Y=G^0NFKUM)sl zZwRtI53j}ZmXx^V*Y>baN4mb%oEUSs)JlgMr!JP3GYE#285S;Mv=!8_FfoJ4&gJkW z*r+QA;f9j4RaKMKZ0qL7Y_1uFwEnfejwU<&+ss*lUZ<$-Jc}p}3-{14u)5e9cB_vm za6gOjMC+|oP<>7=@M#u4u(|}|cDGQ_yT}XAcRp8s^qA*CH?StZ1?~;gcO&=nA#Iok zZfmG@l|hOpEX8337cvOP2xN>XNP{AdgposK)V4wBsu3;ELv(T@9(HJwU(*g@p?qH) z;akhQFl<7(VLmJp+u~SrX?Ib|@?zC3#t#^W81I&|XSC(46URn+GY0q15-_}>FfDVY zIL5%lXD30dZ0;l1s$#-=Nn#x`n$rk25j!cB5TSwXmJ^|?sHn}i2D6JrQ{Y5R8Jx>C zKXvqYc1&Oov@78eS??O%I)iP8(H?`2Zyx@&Aqd=!CI3sBl0VHT2Og~cX$i2rtF9lQ z$V4VT+@LIKggDZP@Cm;C)84|TpzqIKCZaMe+TQG}nxSN8J^`IHqOw`ZbGh$3nn4gx zUf-XiOt1;Z&iftzq z+qRt(+qP}HV%w_NNyU{;J@>wSpWCCm-#fnk#yG!&KhNH4ue~tWoT`ER#9%Kx-t#-_ z0yh`8Z9*uI?4k*~e8IV6SW21^aIUxC{rI!ev+%>2*@a3aX^`^+$o zXc2Lip6~*%4qp+>UiAjPS%Tj!?2k&*P!GWV2*_b|!{5#U)o2OW*a3fX1oMvZ={>Ma z%#^vdQ=WbLwhC#cl(|oAzsvSS=(DmjeTNS7Liiq5Mx_=Butx6W$_{kuCYuMIk(W2D zf%b3#G$SLhoG|eru6swP?xHWoR+jL?q-iCrjaCY8YSQe#L&0iB-Qpf$IFWCbm){x~ zOX%}z=AGHJgNK{R1aC;OmAg{X{D$B!4}ug;K!n+&pM}c|A5W!o`?v)r5l~{bT)~qY zWZ)YKl-Xr3md0v`92{L8ju(&^`9w`V#R&j+5X;f#)c@r;36q^u>}H+5k?M)@)js-5c9UC6)&>}nA zx+(Eljng(G*!R20u*+Z;oK+spLGE^>15rBkn(CDH9CM3-1V`%oc24`*#FKm1$S@pd z!|Vi&RvNbdiv9qCzh?N$+CSU?wOFZy!zea?dLuh%xz)oeMu+*4_}(>C7&Cy3R)2H0IlwTfyALA^GgvWC&c`m`8UEy z?xqu;OTS z3IK_93k#Lqk<452SMfS&x0X)g$ga^*G|rz|d?o^8^W`FAguNu-eHqa&Q&J`%(Ow1f zG)FSVK#j4Il)}O~xAP1a1jQH@bbxstNuz~?(tVSl7dn+~8NN0WN~{(NmA#jsIr0=D zmA&f1v9oiB8mt}!p6U{8iX0o^3kuXY|2bWi?+qI{SFR}@l1++TjlEa2vGi%Zw~>F+^?K6s>ShETP4 zRe6%$iVNRQDb8k^dPmic27hI`NbwJfMPYjA0xyNI>(~ZT6E)A0jXBh>^ zXMU;T7RP%lI|X_1b|;9MPdVPwkH%5ebHWGs9fDUt0&L3;<;o?Ag{b=G*EpxKaFA^7_fYeuZDvW!>~REB`>blPnk>88?f0s8Wpy>bIo<1xZvw7_ z&htZ!C?zj=U)mFY`)?KI6m-UR!Ql6boF~k&J!2&8zqSZGysq5i=l*(h!s?QoyvO2r z$LRC{xA_p~y+_8%UEW>T{&M6CcBLEeDz^*1T_|>}dpxbcC&OPrtbRuN@`RAKyB09RF%T(mI_YAgk}VD&%&ZXffIxSP)A;0Gg3rD=0Mtc~zP zmk=y^zFP!UI?GE$3t^a)PWCyoJ9=t`UO?548pqeol?p_z1{PoZ6Q4(jDyflrCgWRM z{ik)7h^@SYR03ROft+iENLATPSp1{ROMF#Xy=`65y!sY5lz-$=DobLl*mM?leOjK zIo?uS^}c=8>&R4{!=f>yR0nSg`+o3~hlwLc)_{G|5I$>+i}ok5=CF?D6j;^4Y9km~ zOR}i~F}f1+D++`Pf-UVYF*ZIq>r~KC?7lNlipUBs=^HHw3A&=|(Zol(RQv+YL~>cY zOWlhVtH?LDx1=H$T1lWe*xfGhL~wg;?(==Jk=@pdL-nn$^NTL10Ek}^F*6}}J1&o;$-(TqC`sE=h6n zRva3W@4i^Rbqj4bp{_zzGxeN9us(+6tZry#@e3Y}9|1SDQyV^X9UPvOrP}6ldKnI% zmL=>DS@;H$z-iEU$LQ2OSl2$#mV;>y1+3_|Ux(w&*i7lE9i&S??l!}#>p5mgox5{gI|>5FJ6l)<=PY?lrGBt+H!UQ4txRS7c-z4M^c zWUqUHF{8BLJkuvwR7}Tz*zwaCa~A$YY%EMCa2(sxe~44B-D0?@7k^+NI_rEYtJ7m+ zlpk~XR};>wk6i?nQ&*ME~gItzPIsotZNPU=a2i_ZjOqxr};!D>)yOJO#!#Jms^Zif)Wgg|` zpu-=Ra<}3Wd?yDc3!J_>eq_t>SU)jWS?mfWn;SML0!{;1Sta_6PXy=mY zMzPQmWZGBVp1(!wzVx|hI-N?FG=TC zLy|K*9;y#W!Vql57lH4Nw11McQ9F!Ps4d>{=h04itvS4wLBV#z7$ECTTE9BDcw`i= zBMrqzF@tJGH3Ch{*C{h||E|Z-Rlz%(O&XD|AdXdBrB!T0o)VSceGVuDk=_-H z;M_}@lJBKRE1Pxpzt*M{Yn*D-Kc!yWYqqH}UkA+|oG+?WRbQqNy6hUL?J`sbsV73=U{9mf@TiX-wOXV&aEb^@1Xyb3vWLYI>(Of#<@fTYIMnAN zavN%~#9?{sb`ZX&3FN@r?P{pfuUAiA6OZV1&f-0rwPlL1_)GcU=-i?)S7WfQF*hfB zcUC54#WF5Rw+d96)aDb6@V;v=jt3uEl48~UQd5}DlnornkkL@KOA^IxtyExhnlBC( z<0-#b&Q3|=a{lDDx2(=>I}R2?-37Hej+H(2l@{o5PMr+iuVNNwEdpTINjrP0O|R8U z|5C$s-~6S4(#pZKCTu$R^MPrWRm+q~wnkMZWBE*UNN>tSy1~d&wi@Kc`y0m$p`ei# z*GOwJYeoL_dCKTyZ@o2LoO}DeSb}>xRKI04(~6M}jrPT>><>4bNep+Th6=QSB33Az zg#B`v0v!`uT#U2(OHAN{!zp}id!f*_gVy*Iofu?3jV^n$X!E0lHfSPwF zDAFXj_KvpDzI^A;ngDX(uOko1z4G$Pon}t~%S=Q)h@m}ruZN_zvQbue&a8`rUmXi? zbCF5rDM%Z*>j|xryG?$wP_rLhu42Z4TSjQHgG?1-2k{anZ&&t$tQ7V1ge9ViSD z5W@q$sdbVo{^CI~7Wbr*1h^uQDA-(BbO{xt?9#Xlf*bukQHFr=x8N|a#)3oK7Zj3Y zl*lGT3=jkqG^;Cbe5g!Pb$ahGPQFHWzQ#Bz9)SJGG&T!^2!Qg^mOBwldlM^8N6|Ih zDgI3*Mx1((dl0q#;K&X(#{(xDNo4OaDq#SS>IS6ZfRVAXpPxNQ(|06c;Gfo`6ak%N zN%A6oPX_yA5#=PPboOw@oHKV`Nse3vdKBzXP*(i6!J;@(Pp&sSuIKT6oqfbl=+lx> zt06U(-*y`g{fwt(;ZKBtEsT>w<_sqbs0b40d1oqBG;$oFXK?kWP;NhRIFEBYnV2(! zz2dt7{C>ob9<7sKT2tS=+@`jZgtJ_pu>o%3%`IUzwa)GEJg)xDUILqy?fNAlK%jX` z+%)a!HPC}c>_ea6BN`Php0_38C)mA*9SwXpaHS*goJUieJj;;mZR=|ug4jTy>=wPz zxb_j@G0v#7t*=awxH$wbf5GHk~b>+EFyi3R(c zqE42wwIi}I3a?!KN%2XuIdPSrffC55ls;-iBW$iZMRTFKc_QZFJliIjR?7DctIXNi zS^D3QzJ56`-%Kl=GUNPfep8Ix@pQmSOh61cwNG!pI!tvv@?`XUJl{e3fi5to_Jd<; z5A9LZtH&?ZH&V^DlU1FWZ~WL1@+#an0mJml90o*dVMgvZN2_4A7wjXuS3{b4Mq5Hl zD?e7%(9YjXs&uP?#Ao%MwDWSa@UQC>a9_N@QagFc5ugugk6WfcFxYjH?GrEKOhej2 zXwxgd=bCHAREmzXeeYQ{3gAKiH5r1x;^pQkJFl%EMlPT0+=I+=E_uWEs(ItOs@8n! z=2CTMHv-4kknPUXV4ULHqTFX$WE<6!nU!?1c&#bEe;kPq!# z9{%cJeb1>n9XreSjRo84IsAeO>^2mW{@RYN1TMypd~~ z8S*TK;p{jmq|pw_lJf@ZH5?s=8!R~tiaZNL6y{gbMA**ggpG(!fA^BCN3QCM0t>yb ztnHr5`g+L5{f;mD6Z?^Flwd!NMQ@7e{rn?V_8h=X+3eugEjTQipUTk#9|eJ^`yo=- zb0A6skylu^E6NbjLVw)oQbr5}jow0SY?!~=kTd&y79Lx{^AP9(C++LLA8_LiQ7f zSWP0m%5vnOEt^AqPUppPIU+T;(U-L;P%+q9@FWPa!}o83q*mHXMRd0v2(R zH}pmmigFe>^m}ISIfWW76is)qsP)OyWE^)gX{?8!2sbf@@ReC{H1Jl*h@E7Q=Oc!} zJ@>K{gipq72fN=J8h2YifFR+?zv8{l^u%$qXu58|Rf2tz?e?DZ8m|ir$s>Jh+>PJH zIGk_QMD-O~DTkcY^&O%u&_CSgG>u|C%j}!+_hem03N6j z|02fOW|@Nd9O{CK_`y1`pn0p7WP@b^BHFW@ZAyChZO0&C!&%&yHUZ8iQ}T#kj(}m^ z4<87aS4Zm&JAYbY#bm^~8ieEuw)IjU+_Q53(kfCP#05m3!o+5u5LTb@zSm-6b- z>YU8pLpOyoHPWd1qRv(QCZVa4Ju?GDF;4jWZyo80nobeg_gq#m+nnnh{ z08xa|P%;4yC|w>Yv)C#lL|_dB%3t=pig)NnwBwBG zT9NPu{3V16Pd*q$l0=oyN*CuM9`Xp$px3>e77Eo`_TmZ(QVdvW`agvs{xQjG^)`QtOZ}ofXq#Cqk&gY8NJI^-N zXk(Jq;>~&5j*bmP5T<4g1aG|$p)N1kdJM)hy%>$szjzKCs#!3rjn=}L8C@l`(O{E0 zOFwgFw=fluHbUTos_>vo(bR}@v`&GLxe8eh03`Jcy-->S89o?K zypeb!P@PG7;qPlhsVkM93qkkDWlBM;b#*im`e}*A_JLSZRnTSiDI!IpHr(h!3QzZu z>bAeW>)ruwiC8_#tKzveSp6N!5C=6Q<5QEU1h-`u2LK&WB(m$r-)j6hu}v9lcW|+x zQ(JE6wwP$TAcu@elRhW|KNoMZ@8B@hB*t|u9lBljow+P=#m56^AJVk!7# zibMX|YJRynoJo}=F~m}kA*vOkY|;`ZNz?YaCqE_ZSF9bJ&xHGW6`>E&%T&=*Z5=6hf1`S3UeH2zj|VFQB2(4GNUBj;qveS>%6G8UhnN%<+~Q&Z~BV(7#KB=#=T`QVjo0Qs=MXn)4%g8y&ci}fE4t0;c*k2*#0^q>UH@EhqHs$v;5S}$;e zIJ+ML63VDzY3!T{|4Jb9j$8f>NO;Rhb%srQ`GN?(A1cySVC%j*YAs3fu;X+Zch1$u z&HMbe@0Ycw4JX`(azq%sKG zi9Gt5I0(AjHj|M9k71#vSjhMlx~$h9aJYy&aI*xm5@@$x9}=v`kqIJ#v$}s0HpRcr z%G1tyG*FMPqZZ{vGF6B=x%}!<^GsVZhhMoe*lbE)+U3y$>?PTQ6*DR! zoL)0pE;EKc$KQ1wyjBG_;oD{9ls5asx#-N`L9dnAZ~3OjfYP9`;KS~z&J?zW09+?1 zoXaT8(*U)`HFN6)vlQcCgt!juJG_4d5P#qBf0@FcG;L;_ABp&rGwzQ%+kel<^;eoE z>uhBu=j>$X?DTnQ8S7jB!veAtEiLEeKPzNcljV*rr$3!+WM#my^r?O9AU0JA5wtYu z36Mq8vz$!}B_!k)at=2_{R8-W@kzUnSX_h_;Gu&afALIv?!G-eKXCieDg(s#^Zap^ z?%a&zYpa=J?%ew2Yq6_bs_L{%OS$wHS~l{|vh2p;U%e6UlQy}UIvMshrIn`ZxUcLn5)+9auqrnndqysXIq)8iX0_Wlk%F=JDsLZ7X(VcS`LGHX@n-GV>y{gvA zm+?H84JF~&`v!u_Th<%1&K?nsYLcF=qf(Zuhr-R}i@%B17wQj#+*Dj7YU=$wm0xQH zUwtJ@M=#HUKdDha^c+e`uwW;=gkCm5nU3_F)*X$e$&PTht)eO=(o{B`F8)d){%&vo zZi&cO+T(yvXO#2#F#TsvNmk#+R>I)NKrr+Ra+6^b$j|iy zMq@}mT*1KBfE-X@_##Aj9-_99by@KE+`aXMYXT%lK*}r-=EmSEok61tKIoYVZ zVO0~yvHebAvssppR3AA(|2ejN`MiLUEww+(5H;baeQov!c7J{4%J>G?_bgQ*Ap&Iz zF=wCfb_!``RWqMI?)UHi=U@NyPr8(HC|vgOSr!?A|4(=t|2lIbZcfHFj-T^!()u>0 z&Y#ukPnO1i3E~#1x;rVWVSaQ?xG=l-?uUQ~LdqA$f`$djAc?010U?orFcC6nFzwG&LKXb=xjlpr*7##{gSXqPSLRHeG5ywqLDt{$70XW>5J-n7z-ri*tF^ z(erxo=x5v_6zg|!@d}MJ5ZIsr*juB8W zOnPV%P(I>ojV*6kf}tmOe?otH2(LI-T_ka49}PYA9co~?>&psY%;6eHBhc=ty#!!l z;BCE|3}7*k?x8&;U`~HqXs=M$ZPXvoUNJ*g&?q22y?gMW0APNDn-SmwV7Z1TWd8zS ze$*$-D<3+B;U{Q+dw<>fCu)B~;OW{YOaFb~9{rmZU{{DY*`3GESD`PyEb?=RthKE1 zlcZSZh}?X~EQJl>!b}Nz+Bp_srjD{gb+OXyK_gJIWH}QiL@s0sjmWYkyi9_CNw5Ii zye;|0st#}47@+B?tyG|osmp3QG@h#2?_iQz19`l&-*?4>gl^r%Doxdv@wm2Ug|zL& zTsbx{Pq%O{$%40Jzvi>!oLE?1>7(a;?J$RREYHqnbE%6E)&+0d-;ci5`MMQ--4{j# zFN!5m(2>-7`Ci4yx7O2T3A`pjyoLq{`cX+c_br@LZH$S4n9_5>MqJ4oc2>|PpDk|b z5DS9l3RdJ-D5cYQ9;V9#zeP!e>{f4c`dZq{ZL{$!Wd~=R(eSDg&ZVORuZwQ_oyxa% zFqrd-wz|eO%#frws}0%5wKfv5dBQGC&(z)?(liM)O&As#`@@YvDF96A@?^udwpv z;3>s&HJKE-b$yXCQPKEk;BA%k89(QJiNl8r9Q?MqxoXOGEfXhO+DV`{N0~!eU+8SC?v!fF{1E1$-Ly~$(S{-Ijn%jV8n=cRBgFWg+BuPg{ z3HSLo+780FJ;TEId%_LwI`i)nZb$|DZ;e0eS7+^!;T(SlZNXARb-xkFNaq-u-UiBY zSrhrUhJWLumZ-D0=wwKpOciI!QDplX%p!vQgLA4j3){hgEaZuyDpEA`1W7E*i7lH( zK2e`(?wk7J=(Ntq`qEBkOoSCr@Wc8@jfd)WHDn9@Tt)o;Bo{XS9A!$47xQGr+qSV~x- zEXAyFmJ?j274}Pq3$R95qAhufZ(4`BF$mrBQMN|SXbSS+d7%MzR@rJmC?V&SXh+o}b+63hm$qa?cOE-a ztUsJzE{CdFI8Ljai&&<_uPHgU?ZtMUf(^=ys<|WtDK74KNq6#ItMg}vE| zMX}93U)n63Y*MU{Bz{O~_RuUx&k}a_b~a3C8IxLF$P&8dd#dOxk#&m%&+#1Ifxtt} zQ`E2#;AAs^WSf<-&b47F3rjj^!EwAs1N_J;pLcy%ec{K>HdVm#8(~0u3-wCevv%va zd>0Yq*S`Zz9GV)4l-J3splfnt^PuirB(L*Q32vzyRXZ%uBv)iUtMH1^Q-y@fyjBd5 zTXqc4N!k%SEDz=@)vCi-rwB(_itEH&C#Sb$q*9L8mb@Db6@NLqhU-kwbjq>W0=c7$ zZ}kJc<`H{5f!^5!+NgmdG}Rs(JnRm=-;Mw$)6~9g9RntP)bV2{Gxa>cG0z&=V2%Y) zJdU}im&ywl$xWp|qbL-G1^c)skfBlLa}l7AlLFMs!!m-k^TUk+pVP7_;-JQc4(@iOHVb-p6?>ynqd zJTv3ah6!zK=mFsnj_L$-71cA*v%%1Y4Q;1*=16ela3>vAK4VTqx!J^(fdUJfT^$P+ zGF`HWA({d;L|6qOfdlHdvItg?`$|@%#5Q#~z4jGhhH(+(J}Y!B$e*nci0X9B$P>m<-9-baMS#M5~E{N-h5i3Y(9+Z>DKnJB0$#XjJZOv5q-X zHa~0sA|_^fpR$i{N)@%^IJGI`atCxANy7Qad(^3W^w}Th4SlTso()oqMc=mjO?ku* z8#Jt4pWtU7!7qt1s=-)ndlD!{npM2nxP`cQEpuFAyhOd8Oq`jU(l@;OT%4FTdu+Uv z0c0+?(W?}a{S?xNLL9j9U1~h#-3qSgA6LsxUf+A0*wA8%)Rm$O89AqEEKdB@C3EYT<09FDLxgsL8b&3B3+mjIebnID zf{`T}%t>$?(wp&d*j!`HkV_-ePvFMeM_{z_3NcqPn5!TbX=<);U@qWUH3$K=wSr~J zT7g~pC{DwQ=1|PzY))EPcTxO zQfr>slKbi<1Dc>cNZKMi=kl(*t7mEz%lEOlqM=Y82J>&^JxC;&aUG}VFDBsnqN*_J zl*On>ovEhP7N-Yj<(8UfJO+e-gGc=n>*;sM+Gw2wY#IM{^~C)E?F!vrzKAxIrkj=>5ndjX|d z{z^_YGUIW|CC0?X%$Ld}bu=X!?wM@fRwU>Uit&c0$7!!Wz;U4!Dd1{{>{2ghHxcR2 zGuotRPt83@H`k3*P$DU1U$=*urN43})E)N*RDxv>F#=nW!DzjJx%2#b)QB4H zb#%+deL@@S?Sl{gQ0{I6QO8Favu1j7ec@%GFF>r$IUlsi^vz~;UErrb$zzydT~av;*A(B`?0Qm z((|Q?nq&3SY_@Z4j&T8`OVhD}dB;&Fpy5lG7z?A%yX}DkFN4qfdv8VJa^j}(3}^Gq zXos02>@uGe{8BEawb{^7BE7SnT^9uG^*pg=an3jA+C{TL-22Ax1}bOZwiW{qThhmL z&Wa$mU_so9>OA2Q3qn4@s%Y-T6Rpy;V9U^w9RxKNfrS_9dq|XDU{rvE5&YIKj})0} zt57lgQZK%6hA8mQ+d;Fa@=g+dPOh~#z<_CoA|n*3Hbn=>BH+y^zz_smyciP*eXbQs z#Hbn{Kyr%ehn5dy1PGZtWs_2O)|wR4+F3vwK(Z)XKy;a-vzhng8zgV4pPEJPPdHyy zOVLS#L!*Lv8*yFg!Z!PbmFz@t(+&j@KB_V(>D-sf{d1>FStQ(EG7~%IoV`cpukg8G z--FiBE^Q5)JyO#yBClml8qjf9WG+M78bTLz*t+NqQup=m_bKu_@xZQm46GsoF$VZD z2N1r8?L#5CK~r{yvhejn@C^dJA;#?0aD@5p*lQ0V=Of4g6mig4Ir16i<%C-hOORyX zG--&_*Th-lbjF*2H8q62Mw_S)EJwH$M^4T>6hRksljGj~#7_xy{e?j<$v{P{35<#5 z_U4lr>!NIRLL@grTbd}6%=XXI3`OtYZp~ZC+f#as^9Ais3YO zZK)FYb>F=;0l4<{4BLxFinvr|7ZitXiOD(n>?2RQHT%-1kTiYs8@?fwzR_Y{{zH!O zp?pL4^&oEV7rP$#w)B{9)`{H-w1y2(QrJND{9;+Og-Hk}$|5-W6w775Q9j>qCJuw7 z(A(Wlv2Lvh4|5k~++vw!f@|UE9$7Wow4SMpX`1*W^9 z=|7Y2obAc4C1orsufWzVIlt&_6M88XB-c^02K`*og(j_IT5CYjUG?!Hp6|1m9r(c}<(;u2mV z3cqeQ23d$6*|bIv-A8)jEeOIbnAA7A=v9g6LZ$on6ykUKeHfhq_up?|=-1%dM!Pv9 zId+)%`_8+A*n%U*3X#i$M4go7*U+;;ErVEZijDC)F}mTKZesVl-w_FU!*r=*bV$ft zZpv3>g_CFU{c!;nN99&ZHk#v?K0IBX*&SULEm%qbwS9@-qijo6bfY~DVC}p4;CMwM zCDt+VGo--b58unJ)zg}HQ54t&!=2fAHwtQHgBqe#bWKO>&Q>byx>VjTCy}&3Z4b|` zN42a7!8|pXUibp;uy`zfcFvO@=6- zrGM1?)k6xL4@O-|Gp+X!*(d&M^Vo~{f3oT!g;UfL4zuy0;#EDoBaMpj6^SBSYdUI9!9<-7--GnS*vUWiJ^miA z{VS6DQ>(oRj-!wLEZg^g)@lX*vq(mHmeRQ7 zfII^4yc&xtw$}D^`FAr=!<#yJdnMGMeCVRrb+@vX;f?slA^00H?XaDG`0IkfHU;zm zY#}`z&Lbm})K1^dZlD#BAyKfq0V^~sqdGJFRl&4aT!l^wt7PXa zPAe{-I?*k256&G`0nIlZxXbf-POrR&9S`#0CGeZ_qH%M5g!3`VxgH}y?++kvQDlTl z%j_Epd3nI@vpu$>*P4x9)hO6&$UaIzV+Y$qk>)833oMS>qj-eAcpyxbuS5Wn9?lnE z>?Hg;A!zEL4w3|tCkt9U{)bv?>8RQi@jyM@6QAQzX5(K}Qjo|7S>6`Z~MGRIZLJhay&X1H^9+BLpiY-=Yz*Ee{bm|sKo?}gd+yNxh9I%MyK zj{JNvdlO5=sjbME7FW@Y^#L#%S~*63yF>(yhRs&6lQ*EP?LTPghb))}`@ZP~^gc=F zOW3_)&oZQmA~v5I?wJ~u=15Ub?~vGsG`uQ@5x{&8`6rJ5`yT)M?$=i&cPf0goD)A| zdFKCi_YMCd)uNYou(kVSIsIo_IZH)L4OtE4w=7aBgY*|AAce@;fDi=8W_5Z3>s-I) zUBzAsbt&=zMi@Be6Qkj#_7|y_wUqArJ}DqAwbzyEMSPWx=`^4=kc!Hr%&uv^*Ov?L zskghUD_>xY{&s+DBrBo6eVrHHNDx3mI(*U^)OGJka43ZW@a}}eJefL_8Bn9VHchQA zKMP>2qX8UNBcy=1%3*A%)dd-Y!egY97ayUes6yS{1(SyKfs2e(9XyoVRNizRDpM7I zM|3jdwdJ5I8S*hwy>+ZsI;?(tXAm;9cd@WA$liUMEf!g`Pf0Xv?(V~kA98*V&u(#= zQ@_?$ENloNZ$F&Z&nRThtXTp?->uXz)fxks4c3a;$LuH_S6*rhYlLTqvs4^bG+C_q z_H7f}I!aS$F}E3=DhfM_S3>(!TTGTPZm*&Q4EpAyM&>-HvX=YhLrPIz+{;j%Use zlQRyEwq&L#H(wu?tP9vy`YX<_a2HPzd)`fyJ4chNE)3oIP0-(2)7F9T5tdGZ*%Bnc zu15CWH6jF6o(ZQLn~ooM3$vEP-ta@+BB6;)?|(g`gO{ z5E-%bo?>12385IbyH>4htv<+zRyWA&rJvOGt9h10SfmsYu|wU zfd*s6kiljJ!|!*9@8el;IR-_vfl0`b^y87sgkuT2;p3JCRlel}(7gACdD9YgB8r3+ z*}}iXLElXVN~poE>LR*JN(=v-rwC>@@}iZ8*k@+k%DX`@k6=!UEEs)~V!^$aU)le* z`M^LhfCsbvG!C@S?c5J-SB*f>|3uh_O6WoL%8oRhN0#9mh}K6!_OI-e9gw1Fm1CRe9(6H;9IKdFXeP7>ZpA#R)XvFBywf3dw3F^+;>tg9RY8$ zzVo;lfF|7>jY(JsWf%PTXJOee==7v|7fsai2_=WN;QB8J=->U)zdY8TKF3!g@j&s< z`zr3UzxdySlm6+k?5vzk&21d%<^THp-*5wFDagnHGa_W=w+84wB^~!Y+3ys0+1(Mv zkrD!tj-L)GmF;UPYSueRJXzws0sW@fM^QGY51%E=N^{xj?Cf;+^mPaI!#W4AMeeov z;t4axn^A<6AxRtVz>4S zqdHik^~vTsBxw~PYG6bPjQlwj0++CqNZg*tNtCL*N1#KMnzP8CpuHnpD=W57;kP)= z90)Gq^zCb&C_O`VbgV#;4R5(?KS!jvR0C==HVl?^#@r9_AEpOuWCyZ)j@G?JGI0Sd zfEbhRsOJs-tGEX9>A1jDx1!l?Gcv~j`fmK!Cld0x3SaTpZ$r8DwTI380w)+aM_f%S zu1P?Fz?-DkC11uH)PqpRj_#o-Y7~2dBN=urFV3(f$+C(EnxcK7an<)~5ecNBZ2sfADPolfAu4?b&rf8Ra+LcP6D` zlrcq(ARxpw+3_!XqSR}$QnV-(n_m!FvWn*uVG%(#;njBZaTKn@0>n^x$mCaZ7DJJeIg3}LO`wIjWRx0^ zL()ghFhOIK=4`Rm&?wyc6OQ>t6M$8^qN_3}bFL}t<2AHghdZn- zrSbEN!cR;=Ok679wq|^2FX35^XaJdF5T15=7w4L=g~`R=A9aqd&eSx9l2yC z%`vg+o1}-??~t6WSZEgIo{iJjO0m=B?g71(&6QPL?T1ItR0T68#^7Hqb&*RYR+3kJ z7%s4&FWs_!bqc&1*~U5=2sbgO=L}^4FIG1WH80xdyj68-%WwhVZy zf~mHO`c%i6SQh0jc>PzaJjyvdu8zpo8VkF1S-pM; zxzS|~2AVL%ShIi@e^?OWpi*3|EzQnu5!W`3*DKkxR*{J{w(1utZtU%~&$^+DrBA*e zPPUhEV}nRqoPmKzA}_@bhq;~)t z&-yTw6>SRroQm_-n3IRc-P@&R>ZNxO$5w3+rEBej(VoSZl{Ko65hN*f&|z4~oCNPI zjx}_wtf?{o+TtWxyOFu9vU*lJ>aDfVXsXf&-uZTHT9eJBLT;HbBH+0FvZrp<8d7-( zDHqQ@mKN0b8r2M%&!*gp3G7JR~hL6A{y99>0&*M`ne#vS72GjLXX)crnW($AvuU_6)e> z^D>fKsLO||@(5I!{T<02_komeXrt)B48<3|Ln3=qPCd~fU?|9{#-%`?lVBAMmoOL< z2O+yZ4>7gF44NZ$4cd(&F5apFyx?$ywnF#q<~HENvjruqnNYXrQfZZ1$oQKK(G0PO zWo{|r3bDwEvPzsl4$OP7aZ+IeYUw!12@Hx$yaQS#4Czo~EeFyHrI@w7H5DaH-=3;s zH}GPeKo3lo$YE0vA%a5}!G@ogFAj7+Nj-F(Zw@64>Ghq10nKhQY0q*wwBG+l>L;)vPYv+jVO%i-4o zxbnKuv*UvfRn7H>#D*yUpthSDK}PUeyM*R;J)t$jIG0ZY3sLoI2<7`xon1YqrroXs zL%)&xv-iW|)Hq2;MlG01Dx@CPPeWoZ0=pXa(?Q@C^gT~XW2>U4jWLBxiZJ7cBf{>x zWSjkl4diMO_MEs4U@I|r#tEB>n2L=_Ux)9Q_LHE}5m`c`OD|Fo>}=WsC#%CR5fm9A z4QEn4p^CWWF{~5xU14^d4)e+yG9l2VxeLs#7*GV!ge1|#M6$V>nS;RgP!WUXgM*kc zKe({8g4&KpzPQfPxXcK-*>cy77qo#r>a(8&%ZI+!fs?LCo$yFHRN(EDZ)^l+D)BxR zzeibs2I4}+W84bn=Ji|C-P!m^b&w7YuaG8&H`Hw_*rOQNH9XX9%f~r7Mw}hqtG{y! zW6|Z;!}L4XQSIz8VTC+l742asI(En3R3q`vP3F|fXBK1}@v;}NG{^4RZ#tQ?dqnqo zI%XkfOSM(9e13N%35vg+DTX8$rI@WD@d$6hlc&=ghL_(^jtEzd&~4RUSZ{`J2=|S9 zqT!OC44NjKBAp^$La@EYfp!!@4G&36pxO}Emev-GL`p$QL9`{JBj1wN{-!NaNxFo1 z7S3q!wJxp|fI(hOR!vwEhXkNofNwEu&eM3d6`r*P(HX3b%5 zsF+^ZD1R9|_Y*iZ^wv*Pg$hwTi3lK`_!za?j-BazASL_(rSs*c7yMcwY;}RkIv@z) zu+P)Q^k-&T){W1{%>%X{EssO&NP3`W>s4=mdlW2o2Af4tfAk#HD(Qj6174p+uq~;6 zT~(u365K1(DZr;U*@F9Ccm_F+>1e`?RE&x&@zI&c8?#A}H(7y*SkPS8k`06?npEt5 zP5+?7fTZ&i<&<|teSy7!)vALbp>v;iyQvUcPtGPreBcrzcB{;ylOx+8Q`;clZ&JmJ zV7LnwP{b`Uh}nE*Dvg=OiIQ^M*@8k=E&T$4=)=^|7nIYxdnwMl`2mYZ`FXXv;{fOd&iuP zT4Q0RF#v zbbq(Mf45AC`+RNqPs<$sv`qE?pDa_<%2wa$e@0*bXysKYX~`jf`z!$1N-YC}q6~3E ztwgl*?F9PA>Jf)a5C^e&=Tr|cO}aF%N)dlZ>MlI(z+cmwFEC35HhMD*^PNBc+UR!t zIgx40-{S>Z8%54`tKM?+1>X9gR$qU-pBNfdP+!d)^$M{*$s#n?66B9rmNk0)57yo( zNR*&q(>!h4wr$(CZQD3)+qP}nwr$%!-P_;HPR##rY{bsRUe$F)y_s2=RnPk*K6Nr$ zN7l@y9GmVz_7Vx2JjFAh8m;%_OP zzxkh1Tw`qAaM;32qJ9W_%=F2vAz>`Tb6hw2ci~5~jznI;S1I5dG%j3)=i7Vt4^^`p ze`jBiC}m7wAg2dP2P3w83)-(;ORUnb)$X)A!dLQ(p;r9*R6I0?B*qry7a^F~-)@#T zUZnA=@ga0P@}^j-qU0{hCGe|o$T(I1t}DbJY;LS_hKX!&?7#Q2xF!*%PFu{M2D~>R z3}jImo`dXT82D6$B2rIjlqJiLDngi0Yq(3Z=ltWsPa^yM{{Q~t;$GqFPDh)~W^};% zh5;L#J2r?UXaqVs$Vq38+m+VUt|5v`JV|H;OT=(umCKL!Mh28=LcsFfhmunK_&-7! zh)2?^KZUOMkBRY?EWx*Uyz&&F(D<=63Ps){*P^Cjc8=SKSs_^SA5lXh_bwfa0{Xr7 zA>C+-O3Lcu8+^@L!|%-$OZRnpi~s z8%oMwf?DnWr%=ipIGg`JGpW4(KPAJ{(GC{o`SLHtN!0Rcgkhmck|cl-6aj)2U3bh3 zN@j#+*wNV$-zZ&w1Owpq3gO+bk;FBL;XTrsoKl_CJ~v-y^#GRYO$z-oQEk`NM{Te? ztkuc2%GApkkz0xr?qP*mw9n~}GWN0h>y{EEx$$5+1aBX0`4f&+&+hXEo0)Hw(;~eX z4b`^}9cnQugz}B@F|y1gA-192ks%aYwenwdc#m}D+62x%72iQG|E@wc=LzA6@8WGC+?>%lw#SfmQ;H7V5^Ps18=SKA@i#3NS zQM9k~BNVb|iAKHQYzvhEGpn=iH*x29eNKbq$^jlc{DBj)`5xw4Ps?2>hfoM??8&Q( zMq)jG)}ym_g6-~y`8a{flMDF<(-6dj&Sve_78FgZ^#S&hONEx5w}|S$us^$rf~gBb zBw$h^qB{HvqZd-IGU>&CgjjcD0)|5hSgu!))VHN#m-=vWo<*ohaSea+mh4DQK&@zo z8=Gd_`JpKmoM7M2e-t$A4T*%%9WWU{Jg=F%v<$Lpv+bxCR?IB&*y^`H_Wkppwf(?8fLnv*iENK+w$t;jX;Ad`g?h zmfm#*3>^vWH5O7Os6L1bZU7PBw;3lrz|V+eMoO(Hf4NYx+(BizZFLbNMOxIRU!B*Y z*{W%^{o0{rqXPVp>$IE6CPgX@e*N=)f6~*LIr>LG>#MKd@_ie# zcN8FNH+w>M|JCw~7i=vm_4B+w5f{$LT>)zHUSdC(d9g=xqLEuhX3?*+(vR z8`F0Pz~f87(?j|&mTM2aCsa3Q?hOxnZWjH6nCH9fz7(5&u57*X{x2;0RBlPC8S{4) zPzVN%@4{Oyj(lHkVe0Ai7ai<3ps&Iq-Tdbyrtk2~PX_4Eey!z~9j5Q}%+HMte2Z_T zUrYsuPSL*me(zsW(Z0p^wbx%*mLF&`uhk>HjgP)c_k0$23_rZlG)H_z_jvCHWTQ2X$TYh|P${tz$<$gZA63xodVk<6WQIP!!G=kfm1i0K() zj{MzYu3^~mmEpRu>U0lf#ca_RLd8a9ZaqRzDF4ppcWFW8r|X#~`7e&0@vj7wF|E;r z&fLhOu|#9{pEv>2i9)Oj`T#cHw}%dH9RP-Z=Nd(1%K~zk83x@5g}fpAPV#wS3K(pW z+tKx5^9(EKXpBtKk??z027vsqLmb0`G+`T)C(d=+68YS6SB7Yx(#>J$3=hf%`6R0= zEjtZ1~M4ie%r7S?ankYrK#3PNKZX|G^p!>ggzQVPt-XhO32K# zh)9}>g*}V9Aiy{3~ohp+0OMVS_mW;CEW|zgn7}M(2A zFtF&SJ4Aato?j}``C@-n*iRG`;?Z=#tx(6hAZ1#aDeJ?QU~9H6vN~vXwrrNQVy7mY zNx^hjL)oc?)Tbug3HuJh7ul_pJymn2G4k>H04?K<tVmGT#x%a9g8QH(3c1i`gi*PZDel-(DNG3UL$S7LOV|xo;7?gprjE;+@?W>3qej zK2QX-rXK0z-QQRsqifULN4c*Mdk7oCp4~IXKS5dw->ZeXt9-#Mr?|@?`Ics^I{ZZX!r!rlrQ0nW(sa6KuDs$@_^i_I z6!P98CGySv&g%%VAeZekJ1OE*vs>ddtSrG2a&l(uh?Dd;dhRN)s?VSPghH z^7Q17_A=jB2WAIx>Up2S|DgW#quulH_|!GxWV|ULePXPc<&0|&1jU#3F%|Xz|3%%LsXjvRqMt=K;N(cecss<>{}M#8&Er3h<1q7*2O+C zli%U_MOp!Xz7ovg!I@@}%5+z;tDbEhW?tV}r|vseSlg`P4=d|w^joN3nLGYY_lx9! z9$~i7@M{CI_{b^E4VY*nYDe7^RuqcuKf$V9i?;HeLBK~X5Yu! z`w92UT0MMb*blehkJRVI2Gs<04kI|Tv8ohEvk@H~Cg88v%IEotRsk@yzk=iw-M8u1uMadK3Gqs&39@Bwu7y(2|7%ZvA5H9NwU>ykkKt0 zYgL`0dAduWjfkw`}^3~ zMV#c*QX7U!+Xt>YGnuh1CQ6oVS(?LEptq6~orz6R(^2>-UwE}M5aLdZ8&VW^T6SEt zP3mCE7dGJP$RGMvc|BQ;A0CG0g1~&80SE@m#oJq_wb>k1ur`L}87aXr56UPPQ{ zoyB+~gbZtkmhwc0SY#-S+rUb#*S_m2}d3JY6J#^QM19h~DqTKS= zRBB6Fw;+3oQE_13Aud0i;RZ-o6whpCeJADHkSLK^8Ins{EBN#MXT%PZFYmrqAzUOy zIK0v^A831veR3-WNPud^2}DbvAWl+hI*ZZ9BBs&8Rse#XZt;qBsdh`rd) z&#UH~BC?xSHwEcBecx*#R+3?x2>Nd5Ap_|6Tq_}I1Qgbnt=e^pWq|0s^%HNEYobRs zj@F{gEg>!I!jM2v_Y6wdf(}4&9KB}>`fc7NZ&4o9X?DN`l6^3#k{J)@fRM?Fz&;eF z0vjWNxvL31Jp^@DS4aSJ=H#uLjRC!*%xk-;l4n|gd82JgZF<020}=FFfuNd9RzbK> z200@(-f+o-co0u}-sTy}U0hIQK7h#ZEi5w|e#T7>5EozsI=0XXn}Z=RnhyX(J(oBG znFo2}whQeLEC|C|6b>lf3~I$1I@#XMw0Q!MWmtufJPY}(fSZSMLs3ay=?2fdt`1Wp z6Z3I}SF+TeJxIN+jZ+-p+F43&gVQs#Q zLKb!G^f`3Qg|2}yFi%91`6TXQx&K#K$U_FE8$SH@xa#5_=OHxmblFVf93XJrv}}-C zx$ykd+X=;Zl%#e+#EU>E>57G6;C|OMB-rcG37NikL6u5JG6H=aWqLywwSadn_}0U* zF{^fSv%+JHI5BT_UpzSY?#45F*Z3_g6zq)dhKx~xws3%9rN*fRzsy!85>xVNg6d^t zfNkaD8^tprCdGUFf z91B7j{(bm8TOh+Ww3G}?Ks_e}F0DVF!Nv)CuV?UTnOBJH+f<3WSL=L*Kcf?l7vE&MmVG7ESC`RFk3*GN?KgzKB|KI#mp# znZZa*P1RO`C$pYWnAM?MD%A(>IksNE}OGO!34FWtdCa2TAnG4 zvSQ$B6{Y=1!gQF$V>+>(6RR=;G4ll5 z(xk*`aSJ9*@yJbMkTlo2H4U4Lc~M!d`6XDKQ-7i|*6dedC{CG~7X^_Ad+_ty-+BW} z0AvZ$70m)qY0iHJvlXi!9~g_3m!TV@`zvK z94B?0vp1Nkt4_!yA&~%c62g)*-s1YV3d!ccp(qYC4hoRbE(ViGRRoQ?`=e*XHRsrz zq~>&Ni8~&ks9SpmHkYJj(>IsdJ&2Eq+Q<-RE zio@+#a%v>}$28i5{78%UOH@T>0us4&vtU?rL8SSmCVo@r81#A9UabFvEp=&m3PoG8IyuOht=3s#NON^~QFmMs#Tv|!?IcWFi((zVSTX9Q{(UFZ zc}e_-fqmHo`&k#uWJ;2))q3vuN3Uqy$b}=0%jG;NFo9OMz{n>drQdv+kX^;I%h|** zW>?O^)iyv#2Nb1I``5mK-amKE?1xn1e^Nr4%Xg-IS>wP0wk6x4d7xcq9n-jSDmp)C zu#cOgUrrl3mfwL*8cH-AIxC(ZFW=jN-G4K0;*VWEDX38t4%9(yntRb8oKleJ#QdF3 zD>i<}JfHt4sTn%&7)3gI;h2Rzt3L;Eu~EWw7D?)L$!ccPSh3Y1lZfQ((ZwyBie&Lb ztWn}L^K!u3Cdf}LnRWpgvz+KKPmR-G|IkR*`tuu21 zjgwHwDMO;~8wGMdU@s05dVIG&QPD1%b%r1pmuSkLtXFNAgAzGSQ<^E+|o@R z3CzW#K>K&Y=EVV_Q&X_>ZyIPy7KsauPS^u;w~(iHayjV2%n@efX<0x|2`RqCMazOh z@=HRT&uu)B#Up}Nt~gpNrjg)>+XZ(BXfpeexeU*Ns6Bu*W#;#79dye;mh;Ejag}gs z@kmmp!?|5`We*tr6I@Gv+*`?-G0|>`YgulH*F3 zZuR_%%#|N0^uW)EVB!+%%qCfKDa5T zR8I9|?xeI%PT)-ow^|OGkw5a~mh4~@$9YI{;aAH%1}p5#=gLQOnTfEtMGx4;=#nRghaT*YRWvv8H6atbL{yg zmQN^Scg=?8l9enHOHr*X2a33E^nT?$sYta6rzHY9x*E_pOwAbzB2dOsnNnW=xZMyF z`bIW)J8dl?MyIB3;8$Zqtwf9W6+=C3Z8Dd$2TtkW)>@YPYeC-`11Deh_WCw{htf$_ z(S;|dMIeoCK3q2EnlSR@$6i=fIjNIQT^0j7W^8{(mq2Q7JR4&fcYkO9<>rwKrUxq- zW_G`Jyo+Rt)4U_Vc5-h|l(HnVTr zQVMdXRb=)w0H#F_cq%6qpybTp_Ta(p8H7CFld#>uTbLXfk_%%%F?Cm?fQzfGBZwh> zrMEV+{b`oTBq|-1!suu{5Kq60Yy&T^vIXrVS*OMhV&b2A*i9D?DvHld^Ys|6h0i}7 zUD;Kub{wKzZeys~wF$jKyETb|Foy>8xk=gK)#t7X%`>&6qSBlRUsBq4R&14KXAiPZ zR>wLIw%K%hP%Pp8)7=j~QRAV@w%L5WRlkKZ@Z{AsH9IHTOw?^Lv|HI%*s6>>`ls|j z?bSwP)=nwxp)8;mp&l&lN~v&TU@q@*-s-8>#0kJC-Q-pJjmJ*tVZ=iGhu?+#1<+7RYAdyU&c#W-lJ%9lYI%b{2Mf!fywwfz8bw{Q)ds2zqEaFXnzE6 z7ND%z6z7u#ih_x#J_s+czomQtK5F7?L`T-b1592DWmJV;1((uN#pP`iOrSkUCekmy z41FLzsvC!4Zr&mL+YRCK;&dPJeLFl9;7D9mm_-Kvx8I~7tc zA8wlrbW?xkjR(kJLn091wGW74+?z|$&G=WR}3A&eXCVt}$Ot2NL6{098 z$W%V5)m2cb?<(kOFmw@F<_0ZHz|AHj4(^f2hVP<7X zd(E)1C5r8-(^B*AEDp67S)|@(Fl%v8T40Zyf@Fe`0bHId=V8sMt75E(Mx;<@T5tQ< zK2Jo|$m_XH-yo{SeJ2-*9U=NC#Dm+u*?#F=Q`hm~#6CN^l|0 zT_?W`))G#?ofymQmtU1{@u90Fr6v~@B!kbrAg)wsmHuQ@y3Cv%{WVYYp2B&5Ja>ZwOV%~M zVOEWGNWf-*YZh<9|5rH!C%bW&f!HmhK`!!g>`7VpQm+xLfVn)hLwTF>75F3$Eo!HZ zOy6|#oQXcyW4Jg^UnamG;$kjNWGqrLoucjp%>lz1doR{f+Ui9!T=(!GI#_UZJ^=wi z^SlV@j%9o}6`1HOB6?y-eYL#4bKOKL3u@~aO$efPpXhe#aNR-7)q(jdz5j)%BX@1E zGErw6r^(hy?5~#zl{%A>hK7rO<4DrF^JF{&Z@cEoqg8{B@6nY#NJZxA3VP4bT!8G2 z7-1+e%(CkcdXXr^TAZwa?f`z-4$e=s@+tw`KbG_peG#0IPD)x5-06m!v3N2=d$SRR zuk=5OXze-t940j=KdEoqBSGDWzjYNlc(JV`wGAmN^`M-U(M_jwkYe;xkt&p^DjFd# zHS!QE8a4cCcqLV=H_stFz1mv?`?pi6?La*t(IdO!> zuyhirXlEIY?12pRnZ7K9H`YS$J~{mA_!99*OLxKl;>Ytu^@hbj%aB6W_!j4vC5DWJ zzN2oN9|}eIDBBc#mkDn?aYRIF{Nm9tQsjT!zG+o$9p5S9D|s1}%8SXOb@|(0uE+N?kf#`#YK0-}6;)G+vJTGp9 zYK-nrz(o%rUNcz)cHmWV`)T6WMm;=(udlXI)k`A%abgbtBO~kCXS%IV4;Mg)*Mn_U zv^@B#HvQ4g>#NQvE0yucXfOT|s?fpTKUJ5Gbf?^L+WQJGB9@Tqd?7fq?^ZVZquu6!W=i-u@n}M*2 ze+Fyi`exaIKBGg(H%=CQ%5{-aMT(bYg^ z#D_59B2t>n=>>vsAUl>Ts(5>7dsgrzD)`)PukfAIzaCK{5Y|z44;FhGzKL7Iu;I*a zGEJiMbd-NQd9s{SZ4Q?_4Y#N(aOg z$7_`0>`Si>6PAWenQPXPy&v>~gLy@Q(G4~QcA!<56F6vPa`d9kOeO?i^-AhA^ynae z^XZ%#IrXb>|FCO;CD`&CwWIxw@OzG~*onODDSIWoa^rk7(pVsaxM)qcQSQxLGhH@= z;u892t8&M_?V{AXxt@OUO6}SLa(nuAn^pGebieDN@R$w9@zm`9{4M3(>!%ZTjQs)2 zzx=x|RJiSpxp1TC(Ho&vdseHXTE11evRrnB=~Vr9qrY1Iak&n&(ze^DTy!MrinOu? z?MH(M+=5MM4W!zJ^;W?OUyWaHK4>UOWggssaur-&9T$-dTP1A;(jC_<$k}7I=VeM| zEE2IE+=*X`;z-2OU6z>4o`trrDUcmz9g*k9eb zWdNTVw&Xi-LtmTyl{)Zl&+`R%69AQmvYX>awdc`> z_)8V;F|}cS1FiN6to7RtYh;0*uG?I>{!!`3`G;DZD%sS6y?O?_VpxSdGozddQ%<>U zL6B8I>09{cLKF-M->BEf&9L^ZU-N5Eiwlmm_?Q;hk*$*qAWrw5U$X<)kq)puc01QE zYW$x6MnZf<_Qj9G9rGbb>2{z%H4R&XCA4B2g4La0;LPT!fjzU}g;sV7*BFk3-&l~F z5ROdv$N>2RI7~WB%ovSuVF!e;NE6VjKLeY5^5_4dWH$VEyxggYLSLHk=d& z^H57r6_V?^tbW+E$Y3P&D}NLdM!gVy6L48(U$yIiWhyOw`SfU0O{3-wL3>4T*_qbn zK?+v$b8{hJIS~*q%mIJKm*1u(EhwVenl1s9A&wzJ1p>WWh3D*TY-f zH^7{rT75ik7~cT9J-RzOca$Cx@ZIv_^bl>jK;{?VPaxWb>p46rxdTmY;KOyib)_;4 z2N`J(b(mgbuVnt!LDiO6o@m6UD2f-+AG7-2`4=+l!eCq=3N7ZB(B_A}J50@u9ud$C@0z@S^;lNQfl zL3uHnF9UDe^1T&pFe}Lt72y7-?whvizYicq=cT2&KZG$l}6DIf%uoJBvHoO-|@ zn#Me+js0&!9u7sL85}Bi|%kp6rrdg(bSP?>B*Iy*ZHN7&c$as4Pg9b z1Yx#AH!CzS9-_JCbRhak1zj4;@dWFJ)km0Wz(N%^BE0U+xRy4P;H@`dHWfOvG{S4w zukBOH|Dd8|Lgx9_m;d=tNe&H!OhhM}*X583Mjv&-G9wJD91zP9;By9{rpN%rW ztqP2*3LRYqoS{J>xlG;`g9FCaIB$=I1;n+kZfyDdTWgit$OkKzy^nCTh@=@LMhagMezexny1Onbngf0uP-&6|!HS}>hB zuXiRDv`>nmkHZE{dj&RC$|;5loi@BdOHK4S;@W86fC#AY?o5gVDK_aV$)CJbE#EKU ze5yUeo;i#^sHR=^`T{@{%?R&Esnv>TyF~slCOO3!3uNd}fxQ%`=8%2**`#H_dnu1? z&iVSxhj613Vk){!y8fU9eBsHH$*}U+inOJ$+}Jvf(W~blM4JiN(aGj(9}SR0?-r$l z-EU?3P7GsI))$h0H&1{LGZ-QLrxyJug7lF$*H=nNuMusKCyBgUTHX*a&F)KDRkr?Y zqaNJxdkgnxnya%Bf_k~9g8Q@TF#6KMbWPZHJ0{oa&iq1s=${{2y%P(Ait>Y*LFy)v zfNXFT;-~xs2|-IAOYj@Z^S8OaZ(1R{?e0PO@h0Baxew@qg>L1AS4y#~o^JGreJqsC zeIF7JE{IexXdI&3`lKnbGl4%^es)j}d@2P@EubY0iTb=;7^n?Od%~`mZD~+8ZZuy3 z?G6%`dlXS6xr6E-AW`1C`dE8JQO3Qdyl*)y4E{AXoFfy%)(SQVuTY|Vcl*;`om>e%A-(<$`3zrQ8RksV?hmdP zf3drA;7!sVB(AA=19XP0Hdws}Uy*)Wxia-;Z4bEBZL;4u`p|U-w$|_7m#$@hk+`z? zCT|b!n!HkW+tc2Bmz&G>@^|Y8miE;!3qwNn@fUwzLE}IyTblj&Yg|bcEzi&i_oiMb zO0Wb?Bc=2RK29m0TfM+ovZMWQe4>qfBU;!Q?Ka%nZ?U`beX=={1^*59S@wm`K~*g^ z-F#gW^|XLE!tq0p^o8XBXTkgwNX`cO#0wb4)UK_^t3UXYWN!WABQCJ*^5>(RHW03$ z+N4nN-KP$xZ<^l)=mS;+=L?BTf5iGVgSBBT>J$wne@sq@t;Bc!PtqNjLP13R5-eQ4 z1eaPKwXbs5VnTe+k-yQCi5Xl0fhYI}V-hbl8ez79Q35OwaXQH(S}y2{fQ$tRU@{^V-t zKNy|C)j8WAoQYqy#_Ah@YAw?q(QDH&xG^uGw7{oc055G22VF@X*}Z{8gY1!+P;EIF zXD_imrYB#%7`hp0aG^y1PTHx~6?0DTul$4^sFZF^W<|fMSo`RioZ{T8Uxtrh zO-gqk7#jXn!LJQiLMQ#v89b+)Qh56F3fDcu(V%2x_$Ib#Fqge);4cmRQr*ie3c_nn z>Kq`4=rq)R1{nP7{@KZFC|~97GJ52=xOo4LQ1(493882_YQ(Q%&G6kB{paJUb@MD}(dR@k=sy8=i zN<~}DTiec4>HtI5d@tM!nP`rkwIioA2v z8sg{#$Fq~}F#_6EzYm54YKcZw&S*IKfa)YbK2(3$BUz_V8df*;4!{W5S1EEI2M_cY zB+M2dh4L0>DCZ6U&1BGe8)U-;w1N_HWqmuu;7I#zJ=LAaVOoTHv}&fUyDuZ(QSZmozwTO?`193i{vvhmq9u z?E6^A*zgU{bvqLf()`;J%CP)8Y)MXO;~*0qFct2QSz|2h$)$ocZu~qqQP12ktoAsx zL)!?jgB5wL2_O(a`nY%zT(W(j=;jn@k<_L-MK4Cg*z}^XLfqo0A3_rV_T)$^AzYV# zjtc3&{%lAu@c_kF4-Rroxzf%=v?xCn!Z0C7u&v#d+`p{Asv9TiqF&#zdZZi0LvY*% z?QP@GllGK1)P)7_@ffh@QVk|j}o zlgTWkA}$Ogzqj<4vhzzLC{05wIff?kUG>{Pm{rApK@-PqUiha^sQEb&UNNtb@!&Hq_nxL1a1#A5o=nvPQ{E7<}1u?Vh0eZwaE z;sxfr^3x3#MK~QfjitFOV6g7RRJDxxkZ6A)V4s6rcZ5uay$Oa^aj8QA9V@4)8$@># zkG>R==R#hJffw3N-2}{h{52<7F2oE7vYKrmJ>GuB+tGq!w44qjXT#a57|>b2ZiNy2Mp}uy1H!dh|;B z=KZ+D6<#bQYA1_MOsoo4 zr7GH)>Ic$tELfF(aC<(%*7MR>YB;SkRIm}qmgEB&ZQBIfQ13EkSJ6!kUuQ?#n!_3w zJm8Lc?Z3~PR9o`c2hD`I5bpmdt+(TR``*1%#gj+LlZlm2X zy0YX(&AcExSCtkR@kH|sl{SjKLBF8qj^~^-L|=FU2KfY2R6 zy-Vwkr|#cM>JFCOE60`7^f-7_<~y!M9K9hW3~m*zot4AA|Bh z@Kk0StnW%o&5LctQ&FSnC}hVx-jY9Y4v+8&edPPw)k>UnP@ z4E>c{7*1y-%#_ItJXR1)ppZ5AN4+(9`j8U_GHU1=eHEUrilTHW=HIzan#8l$lLmw) zk@4GNoTf;Wq~fHb(kl=zA4#Y@T=4pM1UUy<-%s1A_Na2hr5=;;jZ&12X5=^j0m8MYx z)`6^YM13jy5)E(Ghka&tP?0xj> z+-+OjT#m-&gz+oiEEB=3CHDZIw>Hpwg08dqX7*l09?8{`% zPnH#}xP!w58(HYaFWSSbtN|rm*a_hbI50A2WQ~O-HZf&Bqb6z1&4EN>JdVQ5e84^% z1kc5L6BOnf?s`lme!R;M`h&)~u{&V@jT5#16H@-=r9R>7r}8DHZ2CE0@&jC2$gnmA zr?J1Kh~B?V`8SwYBgjr*Q>&D{eOTEB&gI?Eo&^R85 zNraXfwL4GqsNZsa)UeMT-IPH;df1Nz6=>xSrV9W=KM;i!$XOkG_)oUsj{xX9Qv8=_ z6Eo=hZRQc(b;j2>0c$zPi1660UBZq`feN88v`9fH!TezS8G`teI64iaK>>LHM*%ve zFa$M1A$5RQVN?)=t|da(5}`ZAYkaT&buwzdQwM$!y1igAvKR5#h}hGzt* zB3RL3$T4^-0-gV}VM5 z-+mxTO%WXB6D_c0BNcZ&?0{EI&K2$nW!+n`b+JM(3?z)B;*s;n2Cp^HN*s%Q`F6wcWgr7E7B zd}0($qbac{sCPHZJXVrEwHJU#Ew4m~PMh#RU&O$IzkOl|ysTTsi#`aGohIMYn4h+A z==0psGFum?@TbHIs2)fvtXuj(+pP_hODF70MHsSO8!J>qY^)h>N=eLbQwT3pgVmp9 zhd7`-0YFdMu1WLD_0Y3FQELSv+;KRbL65@O@?+hhp7*`XFM0hK?+K(4@baramm)Mj z@M%YEGAUFcBDquFgJ98p?!CETb0v zQ({&l4`xz;IYkbr&`Enj2=8Gs27L43?y8FsBJs2J###(4&_kX@V-OMKn-*14??vbE zTv~!yz6cljRM)?;4+ZCa$mzpBP!L@hdWVQFaE3YZ($I8kinLYYIlFC*s8CUcj{pti zwQ2AEF={bDj7qv-97UHIF%1Iy#AY6WjiK-fmaoN1eIrQ=W$VzwYGxX8dj<;Uz_hBQ z#0TOlOFvlC!vM8_5>uhY9Hu@@7SO7dv--3zy9Qg3H~QlR^f()j)ha8)v6c5g{^-~Y z|0^X}zR*;#CYh8?d*SW>!Z@ku6#<3UO+>;7rS*Ym^kSeg@XcxfVrFrxVGc z8Cpq_nBXr!N>0dafKwa~_%%`R6r+k$DTr;TU$rq7sFvgl3=%@8U`G`D9To?jFMvLp zKvE}QRtcXzE2l#?F92K?!^$w?05Sr#OjxhcI#K7ID=W{e&dt->meyaWFMtl$tvNHt zgsy*Sa^eb}8YNF0qqmk4hT;+ni*6Dp79I}Ph=EnH8hXB@+It>@MLYw%1a=1wh!@81 zaER7$y}6V`ZTllF44__{lI@Rhv@?2vavO??DJ5~E8kW{%OxOiH6(IV{o>B0FMMpr>nK+DVnpbe8UtDlczd+>z4f>KL8FjnAmvjS90l|B8peX;6 zNhfhKJ&F_)?(Bk7{GY9E|CLYs@8p^zDQ-){FJ?*l+qUxmt&;k`$u%cu17{Z}I;H<{ z`EU3dv8suqp`DY(|LXjzR<`*?e&KyuR$n#_A)5d-huDN|1j?5Ww5SM+Ml6HR1dy0V ztY-_caovtQN$yMEpuQ;M!sgAtu3{NyYGi2Y?<2dVOl@6HPCQIqU46g4zF_zP9vy-h z3ilan%Fq?!7vuU=2p%wN_B-s+g3=-lOcyN~xobRqh(_Jo+AWT;Yv=2>L*|03v(Dd9A>0OSk1_z@G^eu&mJ_tC-nr{| z+$s_~$MRMtW>M9m82`#F->9ulfC@c}=n)ijZdpK_Or~4=GKHpgt)dRfFS}MBuefeM zsCjJXqo@ehSkre+D7U`R&T?e=MfH(&8Mf3CE2_*M$wq&+^w}bTcY1Fk_Vo6ZKd2my!9L2B40L~_^sO#Cn=W|6(H zpsX;clT%Ur0$n)4;LiMgiFNT_`+zfH+_l-XxW^d>nH;b~lp!?q=y(P( z4XzE|6_Ma>zBhhkORTZ-M+9>2h&xx0U!3-`;{Lf@n75evP-x6hE^+x!%mA>g1fLCr zL_7gpur7agPCC1=^DSO)B|BBwVOCT+G2tnfFm3`WgG51okB~QB{cG3_5$zkf4#cDm zL}FTkH|^L_{!l?gWY~U!b>P@X*alh7IvsdzDf2Nr5LlR$5S$bd>bqo$ApeMG8h$x`>!L|9i&cm@J3MC!mD6jT$xmEmsUd5+lxkf_+6+wTWZBh)Yx6oL~T zx^s1X)r;Wwsz8Dj%YQ23h4t&7YQlJN>d6|qmMdf~LQ>;*6?)IGGV7BkB`(-^ujj_# z&7Q5qHB*q;do{`4aiuoT)(_~{Q-_cQPS%8fj;qG@+PiQ zsz?Hyij0`3MjM&9H_t^}V{hciAyHEmfQXgmHeKV|4ELEZXucMwx-m|&N}Sw2G_A}g zti6(uhymt~=qd{!T`6a9y73HwLrZZEQR66%=IiRiS|LW;z(q9mTr zsyLj{8zrMeck$eprbj-%HhM~yA0g2$Sw?_ND||P#Ivi)KQ*FL`qKbO0zSxS0_oHi4 z;}0I8gvL}0FOR8gi^VeEll(|2IhAPnQ)G^?Iwl%W(I)GP*d$yQSAaur{s&54TT2*y`^{+DZ(je8r}qDq zRRenqIstoo6Wd=2`Tu)Ls};Fqff(Tb$_h#kwB{AdVQv*c2?7!m4?#xo_`A8$>vFtI zJP0V5V zA5-$xQv{H#(L?pptUAlIpIc|!CDQU_|1Vja9y%L_B&=-S}PsNl{)FaR2z4VMPl|HPtc5rQGFjV2v@m?K0Yy$P4xch)&6r5G^=B29 zwbWiODLGxxgNJS=&~W7I_)!V=xXy-*a|Y^gV96$~Au@49w*90f+>%)#G#wsjV_1V~ zJZ`Y1GFjdz&=&^G*n7NSo1)6VXZz6Pw1(%mdI*?jHq0faOYy}Ce!@$|ZK9<;w&3S9 z8JCDE5|+$J!)aW*yD8g}ybOg`{ku)N`|O za-{tNlKAr8)>3+o2B!be)fc$wU!0kP79NNuh;1!Q@rB??{D^BIVry{xGzIhl`BJOF z*`gHzy1P`5B$JhDRpbD6@L+JrT|Zq`lemyV3WLRiNhxlAx$?!^45sxv5y-x6r!XFk zyG*`Jve$jyW$E~Qx5ZIG5Y^8`zHn8djw2~V2-fGPo-rb3?2u z>%$~D1R7sSRnTto0#x;* zD2FxKi4rIvw&J?GA#awuwSjZ4J-q~pK*G3dF@aFEfF+0GXNk89{YC})ZD)XeB3$)- zeO`3lUj8q?8H!S+sOWV9KOw*zxo@rO?Gf_cmx6()#dd95*4$-4tUZb z`u3YCHK;xq30xjCh8k{-E~ZO$z_20ialu(qdl*IhKp%VVI1sac^W-jFE+8%oaWQv5 zD!k;ihb071}-Dr~WR#B(7(q-xN`b8Ci z6y|=NCw9h;9s@}3u^>F`uWqi*VS>5~oV_`NF*|1OZZ~(If)sJnZUHqtnU+4H$`(M!0A@=Ud~27YvyZbm#O20IAY%XX zn*@Q#{qZ=04@0>es3fEDM}+kveu^Z*T`W$5+{QM}Ca=Us3xx!i@&Qql&JZP=u!0}S zLsS<3*DEy=5Ayt`IqbYr?*iS zbD2{{>$oK{NE?B}(+f65=Lbov`N2<)4hAO~8yk&Ks2HPT=}XuWD+!h{R{Qn|-1uY4 zSAf0fT-9-5Yfk9ID|Q!cj)@#nV)3c-X7ercerT)f17@4eTU?K{a1lR@Hnur)kjc8Z zIfWmqNpW48Zy*Dy(Lh+cGaglIz!Cx-jUrSG44s~ILxN(Iys(AXAw_IG0rp8z(QvvQ zf)ZRqNQv*P*to1Vo(1#MGxqHM7pdDtJG@YJ$j{avub-_Pb)A^P#$S4ifbGqSTd zyUid$5V+0pv$MLrQ=s;t*sAWivRCV)Gn4h={f(@ef4+XjRAS>~cKHP~sMx*G%8r@F zkOSC)W<15jNv*LXvxet~!odS#ruBMTu8LQ+Xh~>QG3c!5>PWL6bY@3@*w3SdhVRvn zL5v`nw}L-g{N}LB1}Y_0%taNk_2@9$Y&z8IxE!=4Qz}O;->AnP9YZK*R#37PW>VbP zgU~0-<=3h!*z4k}l+88m?)E;tR9U&!)C`|nW3LnUG0(1*s(lOj)^6F(_w^I-tPg&U zEr@|i(A}^9?sg7Y6?RT0a2qTRXd@=TnO8bkQd35LBE`(0lSsT=z+z#lV`+ag(VE)H z2UslwP`Y|7-#6;5WDi1PDF{|i4H+AuK~8^$J1*F!_R2J4WiBGdiCsWQxtW4yH&<8e z_sj?pBzBZk5%WVmpCX$QC;kpC4MNlWY~r9l;n<+B#iU+C!ZfwmUOO#WMuk<_zcVb&cK}a<_-E7-Z|}7uDxe=eR9$}^?r>B zGOq0BQCE^nbiF+miC7AyMMTdGM4IZ+{E)X62iH{Wj{uyCJ-!WAa=>0?8QeRYnD;i! zLn66XhusqZFVfOTgEX3KJ_+&V>46R6y*t)cIs<_kPJAw4(h@^&Mfv3{o$6JT9XN?w zeGylDDGVLm9T*f1CAPZv9lJ13_)B}j1I}*lz?w4!{!q{Ffo>#eLP0qouiFzzJ)k-G^~b?W}|4^TE0U_%RTmvoREpuHP9Na*+7Zh!rc^E-emU9-Q0EHh4^IT z72J8w8;x-gz2o?ChDR7Q9ds9tS@?w4@$1ARX0wm$k#?I?^A?|d@@j+1dJm2xWxyzi z#_?^M8$vJkw|jEh)fb(a8x~2oh-pXUyhiFCMPw;k;cjy%A_ahos~GH^eN0zVzqZw5 zv4_wWgGznp_~wXmYJ%%|fZ|*n4^hLJSjK9A%wGQ1??&B*O$(xPCv5kbA$CKUi6?yZ zs%YXCjm+nLT9a0P#?RNH_kv@O#HT6GEQfxYV}Zl?&Ki^D)%B1Wyh>Fq&F_NT!582L zc`J#B)8YcAOkf-HQ#ZeQWx*RQd1l1Gtt}!qx8O3sAW6kuXL()%*^L}ciciO?s=Zq8 zfSqMMGvZgPmc;>3^1rRMdIIn~m|6E(*9YaU3bg(ZBLeS1ncWJ?)8v+XgAYAa%?RL* zpQH;U-g|mw@THBTBCtWv7WH;(c}D%%MaoJy1WNkw$npKjjSrv#c2FEfAKvzirJ^ON zdkezaZJk9FsAW_G8S@XItG`F8e~)2}qI2vmU)l2NR}A~lP=Wu2z z=${;#NZv@#P{!KQP143h$oZ=UqGGT2Rd3q=BfwQ8OetUqAq{nPz_CCgiqZuUnIj;E zzl)+F!$A{406E&d;I|={BZN1-LHEn%I<8MJOs)^@EwQksf(pKCh zCQeLnRSQvxcU1~mig(otVU6DwFDKI@k5S<#t0@)a3t=XeDL(e4R?$$FM zQ=>(%LQ@IGJ2ZkEG#PGUXA<((n5u%3c91I7=|l~YndOpkfjv*1l_cJ4LN{AU`7ZVg z)E94H9iWoUbB$8M!IL9gp^TaD?d?J5DK*Qyy)r@cSfMH}bFek>!@ z<&jD7RtQ_J;H2ZZer@b+Tt7)ci!-r(Ek1kGA!4Kcw3dac7^qPZ-usEvm=RkGqO}zh zlt==`LQ|iuT~`Nx2KO?%c0N_1DbLskv=Twm<99)EK~p6Z0x(zK@v3tZ`S7nPoU_pr zmR6bCnw??`%ftPoV1GTPXeG@_w=Z+vWr5lZZUn)wyU`Yb%j6Pqht>oGl9q=vxQbGT3I*k?`gI320}c-zMw_a= zGkOlXFBE68{oP#|qNch<4(!-|26n#I82M4)>9^7uSuWq`hSUk}u~N7C&{SsO#th$4 zyNnyVqT6ONma#_KTREP?=Ccw70?GJgGmVYIx>aMkYzDn;EYI&Ic3Hl^W(=}Xy+A7U zyMKlZK|$#cchljp(&c7mcE^EK>dkkfRbn>#7C~`E*nLMly~tN@3nBkL=Q`M3CyJTe z;{d`SZfM61PLVP2yURz8-#N<3+ek}QF)9gmsXG>Lqo=L;bZ2KaM62!1_0hq8YOwi- z&emM^6y^u#g58WOuUCeKspro@8jPtOt`SJ4G+{sQ9~N6Gx?UeT1a`lS!MQ|hv8BFw zKu(-nz0yGjOW-^ChOpR4YJU9$`}$*b+3Y`2xm*HlPSn% zXW>%!0-l%xK4p&}D&&+-z1R^*JE|T6#noj@LlAkU5kLeapz+a3J&TE_jb;%e2f=a8 zzzHKfMF+sM%)uQa9s(BGb{wdE-G63IqmX)55X*iqK|p8#^52Q$=yg#Cbi(a`9opr2 z&nEr?ze8Nz3&3p%2oW}!fhT=0CzfOx?YnWs@t#2_-aGYT>$$eW-ch0UU2VvmMvvNM z{rayRnYJ?N*KLVEa3Q#N47oyi>jNYSdpqoUv($U34k-e5WV048=g~iv=IGQK^ccns z@YnBO{Na6Ae^4pItq3FAQE0>eHr*A)LmfrEhKtC!p9corxc`KYzc!UP<^9tg`n!|- zclTMrApu_hmHK0Rb%^->+Y&(1$l1v9pB)DUBTFL#M;m)0`hOMzQf&}`d{F7n9NfTF z4RzIzaF+e@NI*h6ow{0mCpG7zn-tF$DBeGDi4UtA81T_!QzW&oh7h}vHo)WpVDKl` z7c8_hpbBp#9v^tx9k<9!={{QI5D7ZOT+L-*kLTXTT^TcvO z{w-a(vLU(Zr~$|gUQnMVH7j+&XU4zEB$YP5!DKu)xJV(%5;qaQvT`wQ39C3y(6kEx z3}HV~fVYfND;A-$_7)|YFX_9PY7yK5et&8t4pYd-Cb z-Mk%TT$sH^`SnOnPc}bJHxE=B-u@z&vF2a+PYnB=^6OEscN3tVu5hsQIlo@+;c<8f z_VRcXcjXR0(FAw~`}P{eBg3 zqZz|wMc;^l-wxJW-T3vM3TDJ5l9|vU+ut=2=OrgD=EX z*f~LzV%H%^?%^j2PB%+Tbo7an*uc~gTZlM+Drf|)q zuwZlNTufVKpfRTy&&pwQo5gOW%JdN>GQHiqk{RWn^uss>uN?4O+r^@I6y)=HYQs%5)|o>N-1Zyw20bYiE;&! zQ*6-X7M$BB(b?FCkV)r8Vzd$D76y>TvoK`F+>oP_lFMfpDiZQRe~gx=Ll@Oav7y_n z6s6>!3f^dx-=qYXDa6Pw$6aDd^>dlGsKz6vT9w%$e5kD!cXXtKAfSLWO1p=AY#-Rx zVl&6&0L^tCJ<9 zw|kmeu`JFbwmVfAtWbk+kOXO2Vr&W?o6;ASJ7Wtkp|DSCqA`U-eTX!BMia}fP8n``Q zmvE6%^_M#^bhF|hDzYcIj`H;IcGY%S{3JwYP}SITkYCb`6#AC@wUy^D-z}wUh|Z!P zLQw&bqzh8{pqz00;;p1E7Ne$AJze#FNiAvPKm7`%VV(V;$-1W7raz(RZm^UmmH(J3ry zArl$k21-+`$;swhyz(?YW!)gK*G)AX*9O^+MJC!BsA%L9uPz{+6rUfjFT$H{pj?>S zgw`u6A$-jy3WRz?86WA(kd>S5?HXUbY zI2z(}1_gy;svQCCNb^VEhujQ4f!-YospS;NC-U!A;Y>3jY)*# zYj4lXQ1Ww9ahrvJ9k`G-tvL%v9i0f4m>Uq*OBn?)=x+%{hzqhpUBaCli&!llfa1)=e+mKzZ3j^93b@Hd1$XVH_ zGa9ISc`q@Nn5$7!V%A83v}_7=lxpycLrsKpe)Osv?&fwYOP3M*UN4vO*l{J=h!6s9{R=gK|}KSvfWAnK+Mm&JB3r{`(@x z5ejrJ8C&>n#%JtaH0TccPgXXdt#9J~3*Tk^AVFkN%Dn(;@4@z0@yF4+#|<2tWNkHp zQU)!8$JXS01yqAAYS5PS&?|=qngQT%x)6IHFP2I2btoN^`b+)mY2nIPqdNoj7edIy z)`ZRy$Xp{NRj3Tw!m(q+tNGkVf5Q*VWNz!0vn#6S5I=i^l(vlESNwVT>V16mNIbu$B;Lne)R zfPUMJS54>wTrsFFYb%UB*Hdx=>PWT7M33ms%*e$t>ytz@MQi?&3tbyFY%&19`~fCX z4dN1ueo4^YHUjk&jq}7m^dY(naNg%{xc@6q%wMfSSjrvDrq_D51x#gU!WA;5KJMH( zg^nCkp0B4XXRJ9LiYX0CP%8%$qAB)lncIoz>E-soBGg>W`HGIhC6hN8l0kL+bUsrd zz9;a&=_w~Z(K3v<1+EzG2{#ZlN)G^sbcvU*6>B1{&RTJjqko!GQ-^e)DqjP@^wqHp2T=(8JK5jnSQ7582xifTn;6UtoVaqI)% zC57>mOCKPesBuc4rQtm68l7s$AwF&j(wDNfT+^2u$(Q3XnoZ>k6^^DqTZv@|AwG+w zg)}WoOE3djIY_RFk*%xH8ICd%qFvLuGu;GjpaQUcmjf>Z*@WL$)s6&-fS69$-mPlb z8M5)L8;;1XD!I>{t4;-&kvJ?`skA-hw$F}s37(~n0$kbTy7i{1?9MtVJe5c)Cb`4Q zmo10jK!-g*Nk;#(#x7wP|KtfW7c}7g4$M88scUvnHU_qoc#6^^-nVQ_mu5l$=sioH)tK|-6`Z3h&$$glg#NkxLF&}3Yt0CJK28a zxPRjSR|D5YT0sBQu3cHN3<{uv0|ThT0u;mZ4JCskWM|RStMj!4gszC_yChOeJ`Y-1 z`6jP!aiLe%QCxAaXkl?SLtqXz>t5f`xVZUP-O%(n+xXbHXx_!zmgaBCFPj$aHuV1V z_W8SmmFvBi`w38$5~Z~US!CUnw=y9Lw)vWmwX#nRm1n>A*Io3hU7H;Z4*@Q&(~d#x z_1+7X=2b5=a5H??@Q~DV{{CCM=lXeXkAEwVRXPY2EV(cp(`cOb2} ze`o&on00wfCs%M)^9@{Q>9z$87u8AEWiKH_=gy!zmfcPoMCXApbtKaE+Osr3XV?|F z>wJXNb0;LP?6m+Z#tk7WPG6MPa|qIB^ZjEH&AVhHugWzfzyfaAiE&;IF@igPH@c~X z*-gXO8EpT=CWh4y$fpx#;r1q0jI)G`Rc>a0NJodf?s8|J>VllQmX)Q=jZ;|XU+-<6 zfW5SIdGt6Es_NsbIp|{CNjY7bx|e9TBsvaWCfS4&wYKAFx*9GLd(BUVS>V144>^^( z1}>xB)+<})wXgb<7>iWkr@)C3a6z%iQ?Eq79(lWzbv z>R~_{yw}3P4FLn;J47Tf@@9e1x%Cv5sJx0$8bpV+ulRiL>WWLi0`@+bg}a=yNn+`1 zjHxi0_b(SlxckJ(O(QUZ?mdKuXL~&~8UQ%4AiT+|Y07Ztrnkkz(M~2EIYGgQgt^n1 z*sP1ngA8S&tb=ls=#d<1U--E=5FXF4KE9a^MnA&@JOEH)M2!Te6oIEDNFE=uC>#Zp zh^%7nQz0sEV^zv`Xm%-*goCY=4-f=dLs03&EOg9)moV8>jdS_#(hIMQ47-TevkDgr zqMcUrrN-Xaa&Bc=@}Juc{8|_`btk%$4VhLDrwJzcVmF zP+{XbDJN%|UY%edy{m&Lgx0gWq^@@V)Qq+G%%V@#T@=-(&CnI+aQ~$}5}Z-s&7W3t zk3HQd7VCIlLninhpeDrO5lbbEgbPUu{+_H9mjiWjsLNDt6VFW6#5*$vwJ=u&lqeOI zw6HLbNF`bRy273shoC@Io^tASk^BJFpK|DgiOiL=Ery|l$ubMPjvY!mQN4-PF!s=F zu0j2xSG1=C)dC=KRym=P+$_rgt=Jc9kH ztfOJ_E41iF1i1pNcHJC-Qd$91!a>QNfGKaQ{btRXV}c7um>Gr+G1CDPThIU$OSNV7OSmPEje?*B>>~hG$WP|} zcCUsHC)$ju%V!Z!u4)GnrmAtDaF*(V#)=I;UW$dg^o~1Hd*V_HqMj$u5r{*R%R=39 z6|>FHA$~1iFz(UwFQTp`&Bwh?@^Ck5Ij6>f+?jWhDb(~$j)v@TBeH5!qnkvoE;V{Y z;WQ3P6-?TPs^V2&By7UF)hACb63em-coS9I%ePrZT9w%2E+8Txa*;Ve;$-Y`2ZH+5 z#dJg01``mu&(g{d8BWwAaONp*5&hEJ3=SPh#E4|jP7Y*QYrq?m%6o@G6|z>M+Gp@S zD^iYCf23l(MPPAYdVHi;-K<|-Tjdb0V7hd8E3#CR5;wD zMpJ6(r!k2m%mK6$mPTrTXXHof$VRm}hH_zwVQ`;&JZRHqws-d`%2rjH6*um!EB1Bf5zZE_W3#^+3@;UsB{{^s{X5Y7q%t%-3lcIiGH9O+>8t9 z*XAurY}*?#(9VN^oF55`&K1;$!9zsTvqDQfR7ybg9Mx*xZB9y1G~*|t|)}!ROltT^@oH_JtQnbvC4|< z>BaQ`{rYUAG%F!(k4mnJ;$$YT^P5xwhg`)Jf9`aZXa&_O-KvT$(G%3A8NR>@f!1BQ zUvz}7Sb>?jqe`UobG}MLa$G=DAR;9O0@{-tCT5#(#v9^#Hqkk5@3ljxE0-Rnud51{ z4eOw|Cnjwhc2BK{mP`9B?g!1COjC>=U=ESF>@L_HYyEa1+}cOcdka`o4MStM`^#fD zTppUc@p~y)Wsl1x__cD2WjaIia{+h#b zV%E9?x`8UsoLN*LfR(2 zL9&|JWA3AP+YQz$dy)jW48dS#pLXbgtWG`wsY+i@*E}y^Q84eRejqQfW&s<>Y#Eck z=jTeFD8#nSS4CA@77R#|3c=^E(`El$mPY^ zJPvm?8AE0`m9>+i@DX)_u`q|~sFaj3R-u0PUXasB$MjGzy|KwP21~(M2lDJhLYWFw zTHSGL4~gfSrZpH)VwTHUIy=0Vl&76$@kY=O+0Co0%wSc7i9 zrTFC?xJS5NRHgba|8fh{aIHR_Uz@` z$=ftgBU>9Xg>8m+7YE^+Lm6*=4^W8}!x>BvR?qb(l?ID^r z`74`ttxoJ+R4|4U5{hIc1ZX)zTCspk-v$7m4CdfYZEPNxfMjxN#^$PTfl@CCP4FM$ zBV6SHUvLFP*gd#SY`Ov0MTgg!VuKIJvTYbnP@;wXXokEUkhv2c8~{2xQso(W@{KFS z-nIeYRf4d9ujH?-F>UW}xCzsSlrejOPUt*ca%E{`7%5%GGM1^{J{5h!)|CUSE(vga!f?t25tbL5v68F&?!!MXwAhVoDv7rK(xeD6c7L6hD9eMYHqwqTyfV#Gj4U znEsvPn6K73&KCte_kV1k|D&AX`%_eW%@|Go?6LkK+WFtsx%?OZ{0}5<0|f&M&#o;9 z8pVDxG6L}&9tiz;p|CeIjzWdqaH5iJof1f3)IS~c%@8fcwFKYs40eafjwj8-yR(n) z-89O#!}=7z%*OZi^cDxxBiw>E2}=y+b%)Cug75N#;Ec$RKbl}DlJ43xrs1HMED6e`4a)!{A z2-a$o)qA`o1SnTuu8K)mfDg26(-gV-ehuoH2fxfB-qkXeiibRG9^wmIksTGo&(Jnh z95J;#G>JVn5_v}kBR`~jTZLaYHg27+G8 z3bQn(K8L1|8+Sf=Zs2}H2qzST*XJ*9VOLwC!_TsDX+0%SeS_y zevbO)Fj5K*9suwz_XCaK8az)M6zngV{QaB%yG+bSDXLJvHp-Ua{u_$xf4ql(tsDQ( z;9b#P&)UIK@2lee$4u!!MNI`s1nCna2tCQK~^o^aQG*LC`r>AN7>=x#%WtqYS-uI z2kbZOXZ+A#^f-aOlGx6@;rf7T>{6oz#4Y3_QWBGin$psd>9_W&F>_ArE%p?{BVqcS zq448_w%=I~CezccM^1>@JE(xQLt;IYq^pFkTk~xMZ8`l|30)-wDh?!5f|6XAu_TT* zEak_+3}z))Uo02xYh#@yi6h!ANZxKEO*Zc*!DaIO1Trx6bLo!I%tF)V?F^x@#o1Qs zYy&WI8+U^QC+DZrGZE?t%pfx{Z!~d=1ldT}%}TtVMo&Q#zybvjm!L%iBCIA;8-uhc zam6ISGlTcX`S}dZxNB-{@#3)VOYTS09Pe07%_Rb-^6X{8*W`b&zK2J+_9jPeV_)7Y zo!h3^W6fRE3FYXbFk$Jea4e(}Af|6>lmt4Pb3a&6OOIf5Dt7&J%DAiaSbj|R3f!Z?_)re$Q9FIu5ES9Vigz&E(3a}V)sz$#hp*F5{ z(W1jTw6?L+?{y3rxT}Lo?%@R102+SuOJGl3nqFw-%gFf75RRd6iy>{L2x(KHt4*64 zsaL8&4}6x>sq5a6tBY>XOM}3_dhy_cJNFhALQRr7#a8GucP`g;24s%(x=-WmqhstoRpAfraiIv@4G2)5+Ly(ZH zksN)!to_75O1NN!xYSQ5ONP)&O8iP^R91DLC^!qViscSEnzVM>>o&ix#SVQ30S=$QOq%}H2CeNBftPsCx>iPV(aW-Vn^i)4DB7y&jikKOm3G)+T3JBGPyfK z>5KM-L>P$3p^uOV?=cG3role?LLU>+anf6Y%st zYf;$&iEBz-f{^WF^6sfQ8tu+KC49mz4*J69w266;l)WF7U8N{r#6rz$bD(ab+^E>o zaC%C4z5D$rNj)+cv{~otu_yLnVzd7FAk@9t7Wez*nh^`yG%+LjH;mE<3*^g?^cXu) zT1Bo^Pb#&FoU@kDit7S9i=5C(7czIrewpEwa{PyqT%)Sciji1f{S>IL1FZ_WV%&Fx z5S?sdZy_b{1)?0c`FOa;7E$m99u*b-d(wikCTaR6nem2KQDXa%9Xsie1+^RM0MzUhN`yxTZ8*0oJYwW{89H?eqt? zGYo^l<5rSoc{Xo9$d0lxQG@xU>`+5;DF(E5JCrG{lRfYUBH+T9Loo{ut9NM-qu>W3 z;A0v>JyMs;6xJC9brkKUX1&9eGbv3}WV`Ac{Ex*+SHDj;fJR&B;Mk&QrF%GD4dXe8aZfVvfRwZ0)0X_d-@dgLYJ6ERjD2 zCQ*{_aU9ioIo!6wf?oRg{wF;DJ>dK+6#W_7Yx_5ya(~^t)P2!)3jDX>+1_5yjo;G7 zz~bu!<{x4Diw@Do{+}_rK=B`Rv4zwfazOC1g78)K!IzLEgNv!9(a}t~{Hf8;3|d1* zr(b-r8O$eLy+tIk&)?tW2J7amQfEs8c+S%^99||}zL<=4x_sV&s{Kjb@^8reC%6#E zjAcg&kuRDUT*sp;MTwmf@YSf8(d2E~r~LFfX%bvf8`FAuccqe;!knfKt^MB^R)-yYLnS0y z%|!d=^UTNJGA+$2%wLT9$WPmO#zZdI3Dg2DdJz5^&lnjWQbH}=*Ad!>?U-&F$P5QD z`>0~(jbLEpYLirpCoXX1Y{lJsHV&${m7F`#7s_L#)SM|43lUD&GegJ%tR0@om&U5T zp^AB9=^HC~ovgO~d`HjJX#`ND-iQXdoE3-z5eVAMArdPMTjaVhCqf@dslZuwF~}@n zwu;9jn^r&O)P+$Ios2R?5oOREAm}iKUk4Z<6+N7cX45{ycXNli?ex_=;T(vb*X>q$D1i1vY5vh$C=4N~qEG@6R$xYRqGk48Hr8Kzgw&50vqY^S0Xv{RY(Z^m)82v!_B|yiT^XFEchSV zZB0pqCg1w?(E^x*SRlo_Y0!KEStWVC1Cn}cikoIb=Y7(We7*=zxn@5%v#RH{@5W3H~J4^po$8jt)m%C_Ey$$4iA z@4ZLQnKr#d48^q5K`50*8hy`8JUnQS*n5f$Ybse{889um&j1Iw*1PO zLntC&!91l{!yP-591l6qwbKO|%NF+P;V&5aS;phr2u55$4!&q61YT!7O0>4CYyTOF zX%a%qDuAu}n{9hkHasB2Oc9DItvSqtwHU!g;cP4^6j_^Hrw)wqGHr5jY{R-}%>g`W zYRfWjW96j5!)jjcP^5b)Os5~on&lXKbFfdD}0-tndug+S<@W&jDRVBeEb48B zD(#WGlF{vj_o~Vdz(0=g?*{ZQ)A}>=s$5J}{c`}g_2mpD{-bGG+Sph)+5X>DuzW6h z_C}I_{lPz%V&$b|dVj!qK?aIbhZZ0AK$4IIhj5Gb@(J(dgS%O-EH}#4)%3~2D0-6iDc%W| zCg&VbV!L~e`{!H}AO|tPMA$^M|1jH;+R?sZJ&VtAB{4{GM7xdXygr?Q5MruJWJ&0^NZHo|`oWev(B%9tWZ9f9f;rp$wIV~y24#`XQ%ENEju z061ut0|?T9Js=DT>Vc-~7_;UF$sInu8aC}xEO5UZhIx3S9cqVB_rJG8xNU%q^-79K zqnw_)f1Gx{S$C)u==^?l1MLQrM5b<@pfBAu2rmgXXvaaMAhG+kR|yfhMsd004X2QN zm@Eh1Pc`%%Il{F#7bXOcr-v|-NF;QRUO;z!JZ+N5pB6#OP__^PePlYG>CV0~T|&Zx zFQ2-$o(M9i8YR%G^)8e?I&M-Ozi&EK6Lkx61L39IdQ3?IBQo>0a{zo!jZp&XDHfQs zEG(C9G2a@wRxK{w3`=b(!jJkPohm_4`IK=AJ7sEkyf>9vh$KdbdK{vUd>IpH;0X|6 zwIE@S|8*|c5Ch6GCC6?Pey}c{%sszjehqyRBj9q_94_ck)DgDsJULMsQuDI#sbsH1 zmpz6wl|9Af{?vSlnOZ0_=ZtM>e(r659|5V6ngxwRMcQ{9+eX>`=>V_iuHmg#ZhZ?g zZ_(-9^x-M6YOvm+mmc!v`E8#I8P!s67=3IHEi2r?b8=>ierlS|#`vz6d<{t*2kF)a zd@_3yb+i%RM2dCmk?`!WH7sujiyulwS~ksquMbsq-!*rKJQ2-L?Ie0|>aml?LbWG} znGJj_R!t9HNMw?W)o{jW>Lwwm>IRxTe@6qXw6c@{R>&+u(T=ZI`rJ9yIfTGLr&`2&OIYF%pgMVHU5oFYZ6((Bk@w8I}NtREW}fLRUwfqfk?@H zDCBEJKuf`J9(#cq2Sy3ZO56PRuxXfJ6gLwM&O-!8wC$l_dB02@g4J;}{4@h|&5K3cuT-bzjd^`YG zIa9D1L4QAkycwkiwM*dk8jw zDIH1kwL&@liSmi};;c~5K|8_=-jq2wFJmhDNI8mG%#+^;uZgj|;>W^DR~V3xk-UWp z832g?oAN#&K~~o_9M(F|j(ohymSmiD<{rev%k`GvhuUwR=kEX%+NBqneypY}g1=d< zV=qu9^pkUL;DtNpg||sHz8C@z-HIqm$VKt|$Y!kiwGgti$aJzBz7vH+2?7<2Q=nu} zS+80ZuMuZ7Cp|((;z#Pax3+W!w7!GFnbhJ@#4Ai2EOuBk}xv`P8kwQWFbqZxxJO;`3e${4ogqJw3 z&YY$!AJPhg;$zNacfHI(F+*t@3*078Eeacz7fKdsP-;a3I(BUnC2chP1admYgvXA+ zSHWJJmu}?CP~jfi!YTpl$W95P=x2Uy zv{|==#6^oO{dDv90e2p=GyHbj?!_gaLokk`O$!+EXVz_9!LEFfhV%Z~$L<=Pj_I5> z`f}oF!+NXzU<@RcV+QDmB(=lGuDbfb$cP|8Xv&`k;;(&E>sL(bnG(c%;0Yj}QH6Q% zg4d9VG#zm`zmA(+eM= zfq$D5OvV3R=eU7ILKl^$*g!zO-fQ(Er@WRZh6zzYbTwoTX2+;s8r+m)&}lyp7tN^X z{>GCT#fZo`sWPm64XMDj_x0y8Cv&4?vf@Cly`eC)mq@rZu3)4NQ4(nE6*LhkO>7cq zv_f)jhS0v)1MoC2;S0`d%`8t|)Es*rk%`Y=dDY+T_TMd9Z$4tb?aQJYzxth0|E)#; z!;+=+tiNKkJ<rYEpSG)lG)x~(> zg1FRTz!dWE`N#o8UKj)Mex%d+=^+G^fhS;@LeU0jo^9-)EwXO0Ll~vRW;t5JY)oliBap*ysE47#y zHV$4QrqpFKcu-;vQc_KpIqa=g^;#9DF)r)-(0X&2JHUNR>nc!n;Jn{Ppo3(4R!Po4 zMuW(eIoq7{mRviC^A!>&H89s%^4Hg(#Qf2N5>F#795ya?E1V=1mZ8kWX8FT7Bk?L? zVbe%x`AKA|P8zo>U9FPW0{FKHL-J7{Is}sY2<0OeqvkKul}j<&E*9a%dHm3Wv~+6j z_B0m5Ty<#)lc@T_dEr0`%$+Q?%F(oQr88v2e3YPef4s$AWlC~e zm#FXjXO5TGnW+>8Ajivw4SYxaS9>nljQmg=LzA+5Bd}eh3pSBj$EuI};u)P>)yH2# z7zF6>>zF^TlE`^AmjVScGIA7IKOPQsXq@uOk)=V>Cz&NQoR{HG-}?Oe+uxtb0<5CZ)GlA7kJ?Op{=kkTZ{rDKdH@Im zJc7U8I5M|st@CnC7P&C`$;sEE3R5bhI+i39he=q(J}B3z7nPg4q8b4H7N6(WL9CaV zk_V(slu6f(4o;m)I|?sD9;2|nGn_1qC)azaIzDMwMo1@;M~=5r?L4fH71CQhPmgCx z3Y}a2X$G5AE63gi|7boHit0QBrgaY%`Fjcv?UUO)CV^|o+F-ygAn^tI=QbP;hw*Dr z1Kj^(>>YzF>$augs_L@cW!tuG+qUiMvTfV8ZQHil)n&Z(9DL`wU)+du|EyTCSHzCk zBWC8#HAc>ysYrDopn?T*BYx8_n4=X9muL@JY$8Th*Z%j`ZNt32S<8edo&C8)J8a z%mF_z_fi-r>7TtlgU2|0PJ?#|tfdT`v2Y`aYvz8 zq@Gze2!#gw`**&PuZmB19+eS_-<;|?t;A| zx|1E41JCE~;NL(f_MUdLPQcgawOM_oaSR56CQ39KWBlyZyogtFq8e_iQS2(?NUL;z z_EN7><-fEVn`ZuC5gz|3B}Z2px;*^FoazESQ=b5I0d;#9Bf8;WE6&ZLDL%1Lz86y1 zAXSX4X^jehqLY&hm#t9A^d-uT%KWB{6&T58)!o6u_EQonF(AP6MQsGx{9 znUS1vORM_FP2|$7Bu;^Y{+Q`qY#_$l^(7vJ1oDM6wB5Xap37#qWbKA2vmm|?;h+^E z3RCOm4$G#6E54zzu@7pr0kS1g_O3K~;E*5`ANUv9UX zI}lhnK;B1dTINdz1?v&BUp@$3GWQ0Yryu9}@{uRB$0R+>%qD_SmTxzu@*WGryVbcg zzTR)rr+Ylk5X3bh?TsuM50(B++cwl6CCq7!+{FHE`i}PLMf>L0t#dTY*LX(Fj^Xnv zGA3KZit*yYHo797n^Mo)w7fQh3zhCD-29sL&Mfa5+`|&O>j`~b-Yn2I*D?YbhW1N2 zbdoD$kT}I(3Ok$wZ}*cUsAbxQ4xO^DyPEc5ZsnXNJq3 z6vU?F-7qsVc}16+LD8Oc0wgsNPNl$W|E9d?n%`EiTazx8-%}a}*$E?2{(`!Vbpv;`zt0^E-m? z{2X3T<%XfC*DWC_l`R>;0nz<4QXKvOu^=P*8LOfF0R3CW(UL3hb(+0M+_ClSttqx| zpYEC+>JVOn3S;`0bgn+=T77P6=bGm3b{grLI6^I}S%At<#ZQpy%aoqK@E8^`@0M8vR6VKd|--#PI7Mu#XDP>NIl-{x)H4Yveq_?C!;{}@n zR~HVk`)3T;U)?j&Su9jGrn>SoG znVwO{JvwkLOqEq%i)Vv3?#J&`QX-Qc9_WT+@O9N%{c=b*8n@UZIX@%8} zeHEDN(<|aYvJAnA8FT~S(i?trsZZN0dn;P68Hc_GOOln@b_UJ|Q<7owD<80pr=^d` z(U-6C^xhyU-F5(CsGn+;4U13>gVn}^I2OGAPB9oulKz!n2q_@15QZpR*P5>+U)e-9 zpfVqUU!5S`77WI0wJ=+*&-vweV&1qH&^>SP^ChH}g#qwt*Eo?wW?0EOqXtWn?C&;$#2RP*S85WRDhu&2W+MTse%h;H zAMdaRtl5Jh$Ua-$&g$8zIdZ#{%m;cBbEJie~1@k;BBCUhg zUKRb0?>;Gb*kP;6(-f2y&KOjd%h(23O8KEA8X?@&dO3fw^qf1$QhSrTmL3W5{FOTeY)K!mBwAE?XQnaf23r#GJoc@v48R+7WTW2N;|M)^{%a{H3;~vr9#OV z0$PQ>=5tG{$_wkI7xxX#)fxB8r!F;&XHcgL%m)=qB9lNx#SLdjoYWnty^q4& zH@hpTj!YnYXFn&H#@|bzW*w!*iiZTqkh$~I%sT{Fw^VzARGGjabFi~49yNrN6ot_0 zS5AR+qnT&BX84q8U%Xnx_li_Tpc=OdNu#^oPPo}Y4f$JDZAsTRtYrbfz(eB^#SR-GwZ{TO2G0k_ ziW%S}7Vd4atwCq_ZLK-Gumry5D$h0>c<&W7Ew|(0jM!2RAQ?L0uUeJcaw9U$y8u-lAUTfON&cz-(CT!#25b3cwmlesT3 z;&vpilNoyp#oD<_yGIVuV-#!Yq|HnbAi-2Ff?jw;PrX`=0bSj0rx%2w)XXSlQEFyp zWl?2rW?f!xWu-PZ*lU5#Kr!I4sN~cj3^BaOL;!Z=ngzV3C9kY)FR1N!aUOn5F<&K~ zN5eX>IQY2i5pSWgqtnES&r=du6ih(G>Gg|5BVO$oa9TRFXGOr2tTnqe@KlJL|k(`9THRQ~p z;u|OtGynLRpYE`zgdn{Km#3b;oN1}ZX|jQ4K$j)$xd`yq$t)}dtCdPKr&qZ#T=e@8 zujZp+)NDlAG*RZGTQs2NhdY)PTOKn&^pLnWVMKvQ2V;W>PT4tM!T++3O&+>OAphAs zi?~Eak$?&#I2KyA7l}4VmsVEnjik^nL|WBft5cKu2^;KAC?J$MCq|7?4{FMk7Vc}= zg@_P1uTQXN9>E6%C3u4e4Ee_74hY17JT>-qfnrF>innYcm-k4rkb8X(10fw{t*OL| zz|pUl#qSr5@9QQ%8yfp-!1YNk6kS1J4nQ~kCm$&%!jPN*(^&!-c)(tsBwxi9S6)%u z0J!Y|Bd>u0BN$}(Tz@7Sit z!ZI(kfm&=jtS%=`&r8e=gtQsEbBAy}E(49;+xH{v1veq}{@Yhg>hZhKjzszqP2TG} zz5K{J@~;@FNHA6?^a)>2J4PHUY6Gjgjijo(-5ZNxi=91NE_Ch5)nQk(u2w8seKV~4 z0iQu~r;b0t^oyjQdT?lnj|`)LOOn2aXT_)rnvJC*r4&xwRusjk%V$tc4&VcywcYAa&jfvF ze}ud%25YR_HST_o(B0d85qq1Xv$H}CUPKmH^3bB*<_G>P>LfcD5(uuJODzhsgdBnH zk)US!NI>+c*>9MvwPOnWU4o~*2dAA49MKs49$p4I7+_>!oZ7?av6zdIZ`*l%g`g8L z>%dS|HLS~<7U@xGpvG{nJPpG&5V6BBiL)=BP;r%Pk4IljZ={E7&BL zO|&5=M)-|atb&cS&?#)47acXm#gH)(*3wK^bCJoc&;xqc7PgmHFAd zH`d*Ue{q&CNCr`35Twb=&<5ii7W<&#a?nS1&xwKZ>IzyB3bZwMnehT^IA zWqJDJgttxKE=yofsS6Uq(focw(jVUHHgbi9 zir(S^A6-hcvZb`bB)t7%(}$w*&qWEbuPG6q66Fi*KWkJ8BfRF@gsGVq6~dJ)K;}L7 z)L1Xz721O|sFP$A096h?l*R>QM6>Mnc1Jp_cXy0>g?pm5FB`2+@C!XWO~?5Y=?4TxMJqvMoZ_yrNou#uy6;#x z&WapoX42c<;cLz1^sxY1rxhW99S(x!hWeEJI)+!kdY+ZeGhl0d}q{HKMmTV`ZGMv_EaW{=&(^SaQ!x-i=nVy1#R%Kmn;NG6`h zPd_7S&!j#!8+o7vI5;YKxYb}+;iou_pGim5u}l4tO!)C{peYl{1A@H0d1;~|C@tK2 z`z!p4?84S-@Vd0UXBDjP@RB&Dc!p@M(32_7;LA=hfc{d~khqD4Aci?4gmSyil zazgTDZ=eeq$%A;kqxmVKF`z%xEaz{dCxL~f9U$kNR8f+V>5{mFDfM`&1ohDPWUO2~#( zeBx&to;E2v55S8VR@2vp78&xu)U~Qw!4_ISJKD=euTc?S@6!?eE)fJ?$+iq*IAUdY7~%ba z`SvC|n|!M0C+@LuKv&sK41z$6j{!fPK|eiabeG}}>{JN8RZ)0iyI zF>@!(wIzx6cTm$@KATpF=i1z~Eu8#rr=ssMB}?)Eba#upZ%YYHNcqkWgO&;#QL_lx zjdS01`#}Sd!xJIUFPPKAQm(=Vg&S+ zjf4DBJ)4;^RKSnQ62GN&A04C_->p2ceDAwyLwIz-#)f~WCH)QwfFz+ zG>Gbf?B|0X?s=|hf^>0kv3rCU+7#~N$MW+39a(jBI`-#b56cSxS3=6!i4h-S?CEae zxAS)gHSZ^W_$)Dzr|X~K71N2pJ)URBG;3$NHZ7nx@jTmfI<=(X_VQ)6!)r8re5%Zu z#BQ^MhI*O_p{kQgxnXye5;(pOyb(nKU&Z9h6ctqz)xgHj{7Tf`Yq?s8z!%?JCt!ge zJ7y9B&8X`Pnx|qhMTmED)?x?$Xn6j;0RJh?Km08xjI{mVa~QVoIgH4ERpxg83`(XI zwlR`55%?=E`Cmas-+M7!j2*s1l>e#JtCW2IIw!(g60W){J6Bj37(_S^*EhT zR7ZQML3(pMKQM^XREhq6!5=ZVY9mMi1nSre(054&=GJ+wiKc2)tvW;d%r-ZW6ZVuS zWfXhqTMbq#NGefaez%E9szzI$NmQ7&|Ux@f58ruFGwtf<5Sq{@Q1ZL`l!J`R~6dGyE~ns`_zk?I!k=WXW$! zE47Y&7t1@E_}atKJZExq8!lUQlE9#A=1*o(HYK|8m0~$T8q`u`(pLLToWkis_WI4B zMRsWxEd-KQw1PjIPnky4H_TnO$=aM}P$w9y&g9-;rGm@?Uz@9e)KMq6g5}47!8%PJHPI0R?JB(nT4x{y_E9m9}p42<{6#bB!O2H8*#nzVXPr zu(T?Y$_O^Hp@XKIYRX43%A{D!D#H~TRzcD#0F2cVCDQ&_gWr>CJ&1J^gm*AgL)oM5 zX%QSTXD5;3V%EniGaMddz_nmBs^AD%BU_8smKnaA!* zH9(g-JCTL{W#cCu+|ANnq#G%EZh|IdYqCC`VMCoo!|;m;r8$ub23sGAY+iaB+Q0}f z><(Gd8H>P$PX^56)Or>>>TJi)4aJVlWAu#1Gjc15dFrc&AZzmZ$mARk-d9$&*=Y zsHrsd;?(k*TET^CGBxu#TqcV#x6Ldps#D_v#A*v!bi@%2>7jvkSnHOBWygg)C@MREB*cf&b8w9DQapAeIa>4#=8_H z%O~bv@3Yl^!^VG5^B1AOI@~O`e4~Znn^5@w-5%OLx|112iA?weEKg-i=bFfc89 z_%LfASjv=Y5s`s0D;Tp)1t!NF5U4(=p?G^^5NTJ%YHL^5{EWAId32w^et~ZRTmfVO z;P>&O@rX;p2MCkUDje3&8d$SaKQv1H?%H>Ib5_4*NLqDk#SgSpbjUw8uLl2sXy~ji zYzmJ^Bc}<^!c^uLuu_9^PacyG+cdjcU5aLiLsQv*7Z1w;7pU2mLHh!$Z14i=b6l|V z%{_*ZZlnO)DGS+!`KwBQuf_kY(mjcAyfiidK*_i9>c6`d{>?4_Dv+GMgX6#HWQha9 zO=)TAWHW6t<48K$4^Rh>f$vu=3PBVb6?0&2fE6(nVmO18PXDM8$+VPO1m#kDb5j*Y z6S936lnOtL5QTHue)kg1a&z-yvx;?<mI?Ydt> zT`;aAa%Gbs>~zxr1($XoO2i;j48ZGY2Y*uvKUWqM0KaZB2f-m{qsw z*sOadAT783RV=L-JthH^_8D0kC%@GqM`-joe%>Dt_-IYWNIutP;p(0cr`#VfY!9)v zI=7+J=-pCQxh0|0982pO4%t#XQ&akA_E}avV`qO>qx6h0bWKOE9Kg6(4Pdr8BjK)3 zZN7G+xYAYB|NbG;lc3q6X8&_w$6{!s(yhbal`h%E2YxV%Dy##!Gh^q8j7_L-OQmxq zoY!de4ei#4@>;+6QR5D9_!W;AXJ0e~yLgv}^7_QMM5AsY9B$(d;Bz!QX7vv5Q>{-F zK}nabQq)r5Q%x#{{29&Pu#OjFp}^VRSF7ZOy}SK86I!hJ{v z#rgi6UaL8We*+0(^w7uNvx9G`a!bFyMvL7XJ97l;GBtsi1w$>04(VZ&GxJi!_cyQ? zct8Lxr;7EB5UL&1a(p~!V4ySdB3hTVX$?GdT_EBmghi5Ddp=?C~wCtz`5I-(El$E9O^&7gz#A$)~Ywl3k` z#!eB+V=`ueet^s=AU1$MCiW|wO!^jBXM-0|AqbLVMqkOuB!VZ{$49_bk^;>OkvSVg)~ClO5{DS7Er)5@;1Cj&Qy z1KNeke%KUiRBtYPCNaX3)6MZCZQ*U4>tSyuz=*sc$0QgU@Nk&j0|%QC6VpX2gB|e) zw*(D(3}nkmjT0hS7M29qYviBL2hi@|hZ}iY1IaQll!J?#sKy{F2kv3IfMOM4TQ8JS>e>amSDOqm`f!Q>HlHCyMvxf>yjWOU8q-Q*MRpLd=c z6(L-md~?lSh9J1O%ARJEG4h5Dl%JZxi#`w`wG3)f0>^s>E6E}yTF~-V#vn#Y z$2IZ`9ub0j)gB@701|n)smC+S zScsP7LtISb zkODjU`3p6>{F%Y*>}~{KvH?f;XWp;W91)&!)?l)q)oOSrt<@5#7S2rPC7nK_d zp>K!8e0;jGs~J%WEhaK-YcdOY2}2ksE>m?pn3DFF*I@nZdHw~+UJ8A4kkRtDuz|AC zUs7KS&aZlzhY)4*e!S(hPa*y=P@aXdE>fcA&yue4zIC$sm5d$4ZDjUbgs-%T5NuUb zme9drgUL>u?R!we;|KKzhO4?HC1QXhi&&Nd(4SA}?=_SQUl6PlW7Cm*WcHZG6b3z( zH4%*>KVCO;J8jQVjK|X&AzKE1JoHMS_yBMsbbI+XaT9h54wc--hRYr>Qt(8~;6uyq zn7DOq+kqB=Imsz4mp^lL=k7*ObO+KZMpf)nK9`5{4z0kOWQv(r?a$nvP<#UUhS}ZQ zYju=9b9_n+vEHswe1iH`^ux>s!%J1&Rj#mllGtpq%ppa(zvGA7!enqyeI}!J^&!QK zra8!J6Jcy=ou?h_;wN@C{rs zW(2qN+4X%lB3q%H%y1mH{2Ad>r7uQ#)9*{}&i6J4@>6n1_7>c7x`e`I&y>O^daE1& z1BonkwIp#ntgSPExy7`>?Ek z2uaXwOwL0OJ-MPkibWzGdMgIl2zzB0zsfdj(BF!o^3woKz`kv(p&$1*+Rq#-9GJdh zz0Sntc*qw_F6p>dQog1FQ!0NnNs<>Dx%7mNT4vb6w)|B1!+kN4GrLbeKr>u#MOo!Y(+WwVq9ZQFZ1B_a)L%J& zfapn-=;e{I7vzoFv57_7sXBSE*2Kc&C&#$FTCVxgDB(Q#mbv3ZVkk%;5Ou=Hh=&*g zTbwmx03M|6xi@#uE)c~^U?UhLaAB;Ij1egfC|*(mm7f84l=hJDeoqWzDJMoi297mN zQQu94711wW;C#fZVn>EH(iA;{A9$D>i-^rn?o}`jP#Q1KWTg6qARfqj4 zFN|JoR%Qf6f4F}*5`{1PQSHx0F1c4g?A`^BzQah3`Fv3IeLy^^CG_R6YEE9-F!>MY zVi%^$pLXliW%bjznqseH2|^TH6yHp}b9v`C#FcD&#~ol_bVg!`KihNC~(Cp5B?#mr-f- z2#nq~ckvBrf%LCvIfLS=(B2a^RU{Sbix=yAA6ni>b**Cn7jIbpU?Cq?@6NA-TZ zLq^>o#4n4%4<-^}k(OcG8u9VX%sBMxPIULEftkB=!m;fIDV$1%9$ZQF_)_f4C)8yN zCu$y>(Yhmh|+^dlJN(37RP+)LhV&YV=7sa5t;P%sO7ufl7iz}8!hCE7`DZ{ z*l1%)s!i4sFrrq=tb(OXP_g7|n z(UPR)SRmvD3+VUgZVKuw6f%mCLJCVhk1Jn*C%=CX0R@K`HbR-_a}dFLSCUd9&JvYc zOQ$37l(>vNpzg)Pu#-bbKHv)}OoF8aFST7TMf7)i)kGLR_uK_-y>(HRi_!m z@Q(*m{pyTrmLn>)v_dWQE%l|jYEF_>48=I!O?Co~vXXD3dCCKfUu@2JILMe*ORg*0 zxv$@3M;Mb>Q|{3VdNPR#d+5lyQMtL9WLKO&8c|q+5LR<6&an17e z)sz~8jw7;8{)lG5eSM*<-YC4pDXgAi2=93;K|gey9Mo{ov0eUQqDe(%gV6 z3SXS&A2$L#UU1cte`-oTVP-|Hyjl@#B%*etK5k0>xc-Wug)Y0=w?AXHrSX-w?H+FiO$11QS za54$2E^MR7U`26N)t3^j&A0iUDb(u7XOBb3k z41cEu;DmhhLtg71J{9(tyYU&%=)H-#I&lbJpG$3$lRrq_4`k|!AC)>2fVEYdU@kTJ z>KuK3vk(;iE9L5(ePKjrGB(D9T#)QK873FMv}&{&c|qFJ)f-&-wxjgSZ+xU1I<&Cq z4(09KvC|L8OINV6=n~<}(miU&&CADKOgpkV^qPy?8z{Tj)ANs<{59eI{JZETnYARL zqu_JbIQb{?smJiIk23Uz9<8iydCCN9MpWxM}mZhlmy>^}ww{Aa0$>0wnVwyZPl*{c)=a zRx2RxGwcAd$6OSuHN}N*2vNLK7w_pkcm*k57%_YU7H?V#fAs`pAn1do?}3?>{5UGu zhL!QJ2n2%=h1K5zf=gUG)%cP5NmurLR3nIvf*zsx&-Ps-4c9>QF`&0OKtL19+j|5w&%i>H)G11$G1a~A zkiM)m2S8$ygt8xyH?nO25sht{V02$Ag)f+7z9jOWTz>bI+%|fNWq3cvIl=4zK_zTH zfPB*Mo;jN0LBA-)k6{8LSNTcfr4O{h^tjXqfNfRk^~G5d_rHG?IfzX|+Yb^82~y-b z=Zx=3{q<&Z!<3k0Pq60vJZT*QFX)hUtnNErYPLWAI|l%9U_&F)_^60^dnZh=WwdDC zW<|So`Z^%WPnETG{ZYWw&iIuMimA6 z%z20f;7YR_*cgid2%C*4x?qGoAGV}tCe(EZiYA2#gE0)$Z+l+JN!Pq^`zVe`JnGLl z$4mhi)}+hIXew(I^Bax&YBKdP)cpg3`3uWYAeUbJ{yU~Bx8%!RcQ*(fJoX;3cpr#Q zaM}UV#RH@bVc184`eWSz+fn@QGY1K66@04$xURLmlm`c_7(ePx$FMA0Zrue?;s z7Oo|-TvX2+J9cZitZnYvGR#?Vzc)KlE0F!{6x{3<#$bxC{fyIql=p`H1okb?Wk_oE z&A_vopN>$B^%dvuPVo0)1$n{Yua~9;v1CQ}7fhdD2sIj=A^y_Iorap6RRa0ssE>g8 zV@ufHTiN@zwJVdV%Zr9*YjJwHW4?pi8xr>G4fJYS;0C0iyncLiz4PTwpJNE#b@{sf z9X7SDKTCNYkkOUjJS+ofvGU{gh~+jB9XoqvlKbjP9T`ane^x1xI$7Wo^Urok)dyVL zhVT4ijGW4xFzgj$Drk=4@f^%=xzQh4#&m-D?J_vy{)>53zhcI+pw?c&^clvMdCQE8 zAGsWwSmVrc64@imptMq%gUoz^M4=CaWI&M9yX+1t{SDd*qJ|D3O^$4~Af`5?)#Qv> zRE^sjT=;|yeDX7E>RYKhhlewMkUBSC0Z%+u+W3DHO%k98>WR(8uLTp7P~2ZldPHsR zE$*&f~Y$asf&CkWl+PsQjwbAWsb25)aT7ithIm;|qee zed3>_g<5`1-ZPSu#|I`-k1mfes2(hz6ps3TX3-L-XJ6cEu};-SGS@mI9ONJjtb*V) zV*63G(0L1lP&P#h5_U?|_1X2NAaQ!t%1jSP*)Up84)V02O&3d*kVr#ik}o(FH};Bq z+$S#rk*1d#$2SC<->0T&sK=k^hbj9*Q@4F?6&?&zjb#t%%`o`8oD!K-Q`=8%!!c8` zWsLo~4A7|QAJ;YBf^zI)QA`TpEt?H0sl-!KIf;EE413q<<@t7v-(X6+`7-0wc zP#X_=@ch-TilCm4k7IP36y= z6Sq4?n`#_4R-pNsu~U%bUS#ahA`i}VLjkKo0C^V12h-}Uelv{DCyJo?F#ZZXyid&Z z2s0zM2X84U+Mgf;F^$r=*65=)8FEgJOLpy-piwzy5Obn)h{t+FRB6x5eUAVyzPO{! z9q^3bMm$kK1#?41k^XbI*#k*v$Lv1tIQmrSch`z4K@U)pD}zHXwtcG=st?Yh2i&~p zeybfRj}BjgsQ2TtpW2SqCWzDyGiV5Eufz?Z)9>fN%`KuECT&p9!O<;(`bCKwOmx4k zA-PV3&O7Y%;Kgjn$^k_u;LLCa-7i){!s|h{ZT}7XpHti6oVPBQgB`bc+flN++|SV4 zAu|U$UNE?W1FL>H`#f0d~%miExFAm*Z; z!eQZ}ZqiA~PBvXT(dad9mlH7r5lL;9yS7If+5=Lg)R+?~iy1*qx*G&Mke*Ts?Gndf zJt`uua#d(tm2`}3Lu<5g@RK3TqgOzev7F`SO^V2P@&lT$^i#>LBdFgak~=_J5DQDr=E zs#>m8x@+lkn#$DjVAz&`Yu?cWBSDasH{5 z%f2}+VcVR%1!(ysmv&|A@Sw0VJ?=30cBU-09nqFkcRZE`Gcer&EFMD(BGsL&<{&i26!Tr2E(n z@|t-p19oa}YR&;xjV4Q_q9bJs}XT>4)~ z=Ev%EOff#75ZC*kXl2~L{GS5gO~a%1A<@WL!X}=x#00)T7sQjW^$;o4gjiOEVUZ)W z$WUlf@q>G{=#kG$yA+^98iv5xbj|GY&_Gl}fm#JKfny@-ZX?maW+DWh6VTvr!ypnL zq=ibz`t=PEqmhT$R1)=y$c8xNgC~UWs}U9LqDluN2FKjOO8Y4X$=w>*P;Bu-+%i&S z%%`Efq$Y_-S)q0a!CvCnq8R2a^1?CXsg6Sv&bXx)!_W4e=p`p}5pX{;L^-vHlEZ33 zmkh!}!;2ahjv7~z_95#8w1}q>UBi^;Ke|N1T#2O;VaG(2Re>GJVP=M($XZ*;5ODot z`dHja5BoR7Iy<8q5p4>9KT=|;llh6;$;Dm6E6DPWJqctkuf;j!?cs=T=ELUEI)v~? zMC6(*;tewmGK?>3_k_y+v^(XK*pm{!@9bNtZ_1c|c^?Yps!;tUDj6j;G-~|#tSA4 zSqT+xW-AIHei`HGcoPCuQOY0PpOMv> zH@?@F`C%uYq)};{z}Ohu(AakMwrgNpo$LwTU2J?4BDu~MhTSyZGE?n})c?e5}febq}iC(IC#hy>cE&!jBu%``J-ipX%&+InHsvrN1nn_h1q;bccN^0|q zI3H#?G()ee72RO}tycLmP;!XcE~*v92C-#8a39u9sc`^lU&f7p6Ql<(z*F%u*mbDu zHtZQceMqM<0_>=c7gA7r-y> zWKq45Wnib?adK>m{O11T6a_x)!~~g5T}9o5`t;`LA0${8dy1tUvKy7mUB4a)(qxzf z@E@F&SfxQFdn>n|qte>u=t{Pd^4_Gvf3)*0_*{^PD6gRDTz{+qrIBh9N&N8Msg);u zVhE1Zx~#c`xHsPg&-^4`$_uuTC23&>p+r(uEimQ=$-NAr#QCM~Y2>%$Ske&)Ad{@8 z=ofBV4+N-s|Efi)1>?AzzHtBbkBI-jPiFr!v;E5tVv}J0aPsX33H$bg2>hQX+y4yY z{NG30MM~Cxc|m-VyHf}tLkTFpIRKAzJOU`5Zzxa=Qvf1tZ^41e_-@tmx|#VM#TUek zKpu(bwGY=gb4!IuK>&$I%f!XyIL*|=<@%(?mK1>Gjv?%h$icjDw-A0H0hnZ-D5v=V zog|7Ssh3I6p-4?bm+CkL9Tn0?&c!XLqoe=s-9f#)J}$vC`U0%K%&tl}Hxo!ZOs~mj z{H>e>X#N;&|F?p8SMO}b7S-h)hAWp0JTW%>{N^aAAk&R4RPeOFQoh>O4q_k2&i&}T z@~!r@^(|kz;{e)H2ZNE=GYYl0u!bv=TCfW-Pi3i`M)+l6Jy$#SZ0n3%Q2m+ zN;MM3NoHh~m*yQ+g!N8j;i`$0$eJo47!j`BA0lDEi^@|{_(2)b3+JZkeA7hDesLhW zW%of%n$U%~2d^yyL@eGkSZ7aVZzVJ&JEFR`HknF9D5AFO$j!-gk#f#kg)DekQo=Kf zCzzty2CeN}^#OlODLkwgwi;tdYam+}Ya6u*ln{G@&bQGlFR^$;jv{2O&zf63nk4Rz z*d;Y?x06<@V-+~(W!Nd4_Wc3f#vmw+v%Ln3Z%c>~^AdQtc~x%Py<)2TAS{x2~!|F%L1{ibED|_@?rizfHAG$Z5scTMF({gu^EiaEZAYHT<@=88hOaV3$NA(CoUzE${ zU=^9o2z^)?TQNQ1Rs+ZN=_rGly9beDM&~$8NJsJ=+k^E=y3uLs(u?Dabey|w6j02umFgj7QU0x}`y2w|4r80*Za1~>N>-fR04!QP`%DY8 z&hc?D9o9@exODbGM)287KiO|O5KP9mITtioyvuX?fa>mta~G3HN0I<<>o;fY`S1t4f6QO4Ev1dgu@l!_W|& zW-Zj~_41L~E#xc-5-fRz(=J~j``<(5GtzZ(9m$TlnUtNCuf>MZd#SWKDptC{^)>bP z(9~rQjQPHo%3g|8>-Bvn>B|;E4DsEfD6EZ=`Fdb1{HEF~Q0`rENMMIn9@p*G=*A@i ztbTWLS%ob7h`9W$M<${1Ci?E5mcgquPyCUbNVgYB#&;Ze!^;-dysKPm#f3#2WUrr{ z^N6a`KIBw>hPkzCzM0Grj#?vIz^JuilZ{hPh^;Zi=Q2QWwV8adl+Z13BMq);B2T_+ zG)dS8s$UH?t+Hv4myF_tBulL>QQ0Ir$$kS>08NXC`qq%>uL@^Bf;%e4f@c{Vn?#`p zJV#}28q^^WYZusq6Uv75+Dbds9)y>Q<&DtTrHp-i(dk5VZ(ZO~KC<}1qG#O`KYy6b zo{1zZ@MjabA1~VCWsBDrvb07e!%UvzHV!=#_;YA9+DwHWcPoEAibq|1$j?CkM zy%E3=u=*4DF9*}#!TBH9{^j%X4LNjlR93|9{jH2|F6< z+Zl`4I#}yF5i$MCDygV#yFiD`y}eEZA1%x6k?yQ_%f)DL1cpok~tih{U!IUpi>RcIJ-FhbHyW6GXS0&{pCFFU;L5w% zHJsh_ZpA%Cmfhp~2C7KjpdZJCfg4p3dOfLTaoD-}LMLDkATdr}YRKEipPJKk>7F<_ zot$~(ieg~(y%GOF^$idtW0i*(YdMpxXgxYt##Xl35NcRf|JH1Mpm0Jv1vOK4pnrz= zYZ?80vHZ_vWS} zY+0KRr$|yxEDe zFV_glUDMZ;5&9E1om#D3!;gsan<=Ew+y}A^?1K9%psS7cqNZmv8SY;N%uTghR2rQV zsH(~YR2Ws6C*VDnPU~5t2nKFn*i9cFIL;38O%wg{kbhM(X{cM<8|VD)Tk_Bmv!q=E5bJ5Tlw> z^MsKL(lK7Bt8LHJEwnT?I76_r- z`Zo)LEucb{eAdsbqT-Wh->gRIb3N3EdjAPSUu%lwo?0$jgb5gCt94R1`R#sgF~1lt zoK-E_S>5`B)L#y@hAc&7+vpT(sZ{z^>8yy^QgimA2BegYm;x+uIYO9PR61hG|5B-Q zvD}q;W4u_|Eu*B3W6stbB_*U&1jAG&#btobx^Le*Dnm!#n`Z2lJZlWEQ{+Ss2Tr3h zZl^x=1%sOVLNr>(13{zL4gpr{=g%CSbd@`}yd{W~=cd_fl=j+ z(==#UEn;`SO+QTFGZ0Z+4)FsNfNFWOS=XQK6@5JY)E_1JJ9`wOk9(0geM5Ett{ly9 zaORL(pM-8j58`J(-=uM8iMU~VC+fxGx{z?16P^DbXYUwX zX}h(Hrek(EW7{@6wr$&X(y?vZb~?6gb&?s|>U41OuJ7A>ul3`cz4xh_RnM$BtDax? z827kFT^P4nmKst=T*v$)TCvT)Hz%(~fP0mPsmut%0P%OQOMC$&Ss0ujD5U9xtjXt8 z6g4Nf9;TgMwk*G*=oO#W_xLZ)?!TAXe-g5Xm+ak33uW)mQFJilk zsfUY*p^KrQv#6bmljlEWDPsD?O|>+%vGn@#A^Pv^-kLAJP*f%)KDjo{M0!>p7IZ+U}YLVE#-yG2M%rG@f`#G)%+W?kmT z*%_Mt|LWwvyp@I!S*{}Oc>8kEo$#sxigwmI3D3 zZfCLk++o@yq9(5Jos_kucZh?WQaZit!U{`e3%kNEbU(w0xsr^G zTU20Ib6L}#du9A;-ZYs&>17RXg4&sk+d_p0!^=QbVA?O9&+=-9BSHC2>8JvJM!2kT zjLPai<2$ATbea_rVcay)B(XgYs4TIL4E?^m67`W*ftZM=bsBnAm~Nj{T<{EOqBHgE zJ$pMhOupM_!q?QVk31e-|!E3 z^>H}xts!g?;sD9*fL478@i!2D|8lPSkJBOz1`Z1X4Gj%~@--8*gk{28LwvbbVSs>q zg&Kp%imC|GNy>>ah=?kP%87`|2}_D9PiyEqZ?ePt&z9|KpKX$o$98T%9C44YOszLM zuey2{k!_^XCSXfWO7Xw{P+IC8lie`2^EHgM@`20Yns{5*TJz%p^s}{r$075$g_?Mykk1; zcX)nkA8q_GY5wVNo-vX^@(L5rWI2>1Zc~!Cn-wL!zA=rLr@w?cU6^S|)9!Ru9VG314z}QqXvb_@;-r>D$hj<9op0`qQcn zQ+;6=pctlFnXU0mKO`?BtkJ5IaK-?_uC+P zsc!hedLPgrGW1OX++toHWqvYqt_MJ#n7!W8Wj?uAQrH@PnyhcDQc zhTsNoy7@Vd{NTvoRU0!OQckjRh!SD#rW%ME1g-7I^j zhzf&-ZqtGJy$>n6 zrsnWNbuGIR)os0}jR?WLSmGB*T(8!y{veHLqpd& zHHwEEjY~}7&3!qTiPczknp|*g!NYU-o~oDA|F|Fb*gTrBw-K9AArlHb)u5@tEn^_R zV|G?Beic|6!<(C>e8s3Kv442KTAi%)GK@NB^CT&T^<%3K*)zoC4E0iq;Ft??hU}QL z?fX#{;8qN;)29oDCqd>I2UI-g&i`8>*+^2iha9?|M9cSNs>i8Kf?1f=8}sqq@qs#v z@?4etRAT#7LhMYUHjtiff`n5ZS}a$uxGT=AM^Q!zmwhpUAUx}xZD=Y08|BCVL6HTo zipZ#RpRK;GndS>r=q-nHNbJ%r`-s0?M_hxw-XgEw!lYTc{+fwog#^i=N|7;_G8ZwI zvQ#mbvi|yRt79IdLKR@0jN?6qU(>rit{{)2ic<<$4iiKn_VjKz{shXXgJ|J@T$D4z4cBE??%^w*Or@|5Yu+8lFD5=AM51 zmrR{i2`1y>q}s8otv1q~9k^NX8?lLFsiRTnel4T~Tlpmesv z0i`uy;7Ww0HPZX6sd$OpR0X9abaQ|AC<79eD7)*BP;#HM*4K4C0az4oFUGxpj(E18 zJ+IxLoEd!2aDPspxhnETDl@U}HDFrZ@-TbzhF)^w9ondcvNXD}2liv;_Laf&Qboy+ z-*h5pR}C+Eh|$002FT-htn`^1X+-bD0eSgx1_^c%4T_GXPhT4KBzuxQ&zcb=~u+}?vql@*SD)+99_8I#b4-_~&@fW?> zA>REIx#?wkBly_qgM;iTLz2@LZ-Njvd{&4*blqRb#b$zPRU3-J|f}UU(f!{ zQao#`8Xj9*%ABe^whoJj;cBT}824;sERNUN%gAMUjF$Qxui>iEi@Cx^zPEQum^^M4 zEgPA_Tze6Aa?6;PO{bN9=+3>^%+0JR7D*Y3YP3~_{P2P5!m`e9R9E&ZQwXrP<>d%U zaIsc~w3VBa-;N+$5#8O%$Y*veR@1<$o*CM>ujZAPB0b*OhUxOX><)Gl-N0aaYApkX zM?JtfEv2EfncAw+GeNoTso^bT1cg#8fA7qgSfQ2u10I9Sc`?E zuB8Ji#L7m7XGr1vPE+6>%qh(l~c&(uCQaABa^f*-w{Fs11z0 zDKefmzAVQJ@9Y{3nwfs}nnM>Z{g7G$*ixZ)&IGO}2eU9fTT_cjYkIjsN&Nxjto}4P zJX9L{%T23Y(-8R&&K5R-)<4UbS&euM04iMjx;^)j6kr3%Q+rc9#q0VEN#`QAd*iPn zZ47E6IFoS$v9gif;6sfRtc9Qw1DTF$G(GX^ig5`W$%d&i;B z>1$-x~Lo9p-8mn;SF1b-ad7}C0~k8I`M>qXNUOx zuYo6n&sx9rMm@N7xLLkyu&A$Dr z`v!W&;Rt$dieXlX-jdCi5dn4cQLY;~`<8b-jKDaRX<6`a3v1J(fYm)8A|(Ktd2O zmUkk5BC7CsTJo6!ATgvZc*Y*#WsOtjqe@qJc4aiCZES^SKiw{j#2WMY+hu~Zn}`43qqpl|fdDAs^6*W^oD`*4ANv08S{8vipFk8qOkyOW()86-5_ zZUAp_LDziHotw~CcJYajCbk!~6M6s(^h}5|1iE2T=;E>74UqNK0o#`|hCf>jF?MP@ zSer@;M#C7Qev`F+lMA+f)>-$(g;eDjD;Q;b5t^byZcqc8H&%j}YqEfB35_pmjisCq zK^X*!ZFkbpVQb`Ey(rZI1BgvK+@c}Z)V%0IM#Sy&pP%M{$&izq;CfE`0Iv+20mu>f zXqoWGxfhGv2t@QH52NokwtN z(EOz(p~7LxB))mcOIm~|BkqdyMCuiiiCgkJY#}gTN3LH(zer+RA_nwDZ|h3?3KRM0 z&GpHAC5*MA*2+?pi_8nNf99IeA6Qm{=1BoVA%^3qI^WnBT`7POU$V!Ldw#K2T zQHJ5yxL@-^6}KYm6RBA^v^KFbk>osvclgx6tSjp4q}UY$BY3(lzmK3E)ek-~w?v>=UM+6|I>cG_qeX6Z_fwdN{wI8(W6OXzfymE~K5Sm$~c zR))QyN>56s{r(4!$KIuecx%oJ76QGX+4+gkm&WiX1;gO%-fulKTF|SzLbdEl&Fo5q z0Hcd{+!Hy0Pf#lGL+^3aJw5qFYh5BEpK8t-n`78UHN$YD(}xAMiJy}#@;h-}U15q3 zdP05#YIjxU2m(n`W}4^yRt32`!sYbUn4pgy$g5gzpLUS45cosL+sd zGmfW-sh$cf3K^At{sDCXN9jx>SP!w^__B85$~x+Q=z+O3)uy;&&ixwZPEk*&=o5zE<>%1O9B^Y)Wt!sp?aZmYl6Wop#lGYtZ z$|;lb7V!_ei!Vkj8eL7<@@JVP`1ivEO{39y2NXL-YhGQ@2=-|6`!O`5z2>oz(VHyt zCV_Cx>ll-qB0k@d3A~1mk#0Gg#|gmj!;U@W8$bLil;|GdoYC^fq%ceA$7e~Ff#wkW;nN}5CTh#>xDMtBB{?5nRU`o=6@o{M}U zuuJTiMEK{HylbmGwoxs+Yn1h9e`Ssb>v7yjZ$FPI~E zTJ{=1?MQ?6W-~JDbkz=&H!^NuXVvYG?7Nh;Gqixo?LR7$_v}$PKJGWooPpE%%dg%m z4%8Dt)VmYpxH%9{|2xFl&HtuH;8%y(yBc&ISi3&lOab$3C~)cvDoFQR3`S4VA#q2~ z9n{)AWw56a)Xf~(HTeYnPr0joi4b%JV;MEF_Q0{uY!_8Ilfb&Ec#Nh_1C zEqP1ST8$0W7*3`Iw@Q^}r7FeLvA2Kq7?QjehfhRCxk@t<|Mt->CJpQyrMAs(ng0?h zQO?hbj<_<$XGL|q#`caPNBn}SE?|A{Pba&G@g0-RUrr+*op)%V{v@;#`OI$X+`bmJ zF5Nboc^5qI4z_@#{-ok&6iIe_QEQi`NTC*za&C(laJ6z$wMsjwt)SwKV7uig{1#;O zN*afhjSKCvFf}?Y^QbU3DV~&S<+$A_4Z*?kEX#CCb%6l=XVTMKDOri;J4)(I{AKmh z(0FkzAV>OyG&i6%RKwP~(M7k6j7_TQlCCKks6BB*OXk^pLVSIU6%nWA7z|YsO|bTO zYO+WB%9F}7TlEn5NsCZmzv`0iWJH%g3}Yh-j(9#gVW;SjTNXyAV{NZ zKd-KZ6y7Dn(|I{k+|MkE_)&x567jbf{jAOZUs2Wn4tM`^jYRsgGW+9eg_QEO^!NNf z2f|MFHa1^G00yQ1dj7v{mHxl~{*UOXX$?3H9dW=1RBCr;8XQ@0yqygWs|w){4oeB> zcq3>@+A$KCWa#A+Q>@f1+ULFBodKjVs#U7zG_7K?ORwlVvekE#Djt=4<LRHj$!P&u z^JTjT)C&gpgcE#Wg3v=4_Lu< zn9D}Pa6^RgGBF&tac^be@S*IPC&>al4->9b@ecJY+1UT-*&;ap2k!TX1q8$4m(U2gGHl9Mf)0EgH4n*i-S($x(z{G zkLr=0z4ByN)UEEvePN!1SX5Eich)msJIwa}2QpYXDbi#z%55qq2zHA5B1;+PV?QjX zu{UQ0*dE$Bt@g37o}S1-9#eyyzAI64x?OvwfzqoXo5tluXIHJ0*ocM>(*(M&l#dXUPH59D+VWHo^VCLQiD^%rjP07oyFYGt8cBL*)>EE=$B{X9T5AAg};2`%v%b?@X#4#aMT*CyRk-)cev(&_nX{>eUlr!Ua$4< zOTzvL7l3JI$Y`@#i=crhWEgm)iD%>Cg0}I|TPF%o-HM@HXK=ET-a1fNN^mKng&Vff z&Xl9km5qU93h$Vu=&)OE-#Mz&7x!Gzy1>nSv6FBztdnp$cG$>6J9k32-bsuUU9D}C z7Aq$C%>pdIWi0%Tmmr2HP&R+Y+<~x8roh~b#xxq#^mXkuQ)Oe)68EGxA9V&L*I zkShLY%`054(nv5agmf0luhIFnG*l$LKppGcHFrO~e@H%}%W&^E=eQBcmkCI>U_NVx z{j{Jg>0PDfgQOl$)2VMP8`cn4h-5d9>_)3-SgV^~jh44fRUUy^t&!!GEMv_Qxf(T% z%ti-!d5etrcZKh;GsmE{!sN8&nMWEkxE!>78CgaN63$bnQCy_WOH>KPNw}_GmWQ%# zfp_)~hTQw}ZX67@6W+01+O|QmV!w6OhM*lUImoVFKLs2! z+FTVjOw_352VwR)GQ6!0$ZO8^WPmsi!fI0)REC;?!8oX5xGsA)e-32f>&+P+(G&N| z)F?!x#Km=e-{GDLF>F?k-=GGEEE#leGt$4y1^p6h9w~4%pGvR|z1T5y3N3EFa;?_o zHhN6DF%9tcUmsMWsVEe*$2IRiY`E)#iy# zUR;vwR}0j`@Z_h6rrF?fpw11xqj#0}Q_A;~kheM9>kQ_lLXzP*HTDONu$Z@_+YuwZ0~fNZUmr(s zwbLhbs;N1~u~MfG8W%pe&#w=nYD|$CXs0H1^tinN6(JOQ#_&w3Lho@*dMkpF;q^3l zL)V|=ccC{6KmE}dj0YU6jb^MN6Lc$L2?hQx?EU19O!Fp`8+MhCT}?VKX-)2#Jb_zii|u)Q(3RT>1$-DLt5$wjT7s|7)u;>V|Dm8v#xqJYRRbFxbI5teW2m@>6bsNzrp#VPTsg94=onrej;h#%CFLWPcoLME~f6l z_tQ!d>|~F386BU*t~fRyO?SY)Vk^kNi}32K&uW%LW?KtFUtpG1DN1Sg$d8285#?iG z9wKi}_|BhLfLB*KE01!J52n6|Uq_VMneYdms+Q8DCeRmFuWa`bKMoXcZ0&5Ec6OsQ z{~jy3k0UIQoDkaN1II}7OzoE7qQsE0D%7XbnwW7yqF%*nxn-E_xZV>QP<9mYovqda zowB)uf>T8yiy2vq*wf;01cqEb!prbs&W9R4%}?NayDj);g=t*5$TzG0Pf3jU64geK z_eP)3f8`7P`!Msr#+-lH|B}GS^4u?y+CC}>h}8f6nDdp9X=!iAAZaFJ=3_SQ{jQJy zc7G){`*%Oj*n&XaB0|7uAYUjmhGfHcq9778>}x`Nhh_dA{)>iO6vCVdZ}`|zt{=le z&&G!-67D525NSsIMh9F!c9#a(N7crcF0hW~1+oWgxb4Ok0^=6%_D^l}F~F`DsXvOj zr)<}d=>4yekEDdBrh-8DE`aHSF_3`jg~_jQSG9|L-xUUs5s;f(i;99jy(Y(Aa>(X8 zAff5TZhh2f#LJm6;b6u|hca+F_2X3%X1w$Mtkt+UvevR>A+;tCSl~owEy3A3gG`sl z;ba_|B1_AWT8Dn**>DNF%y$vR6$taZ4y);l*z+{C~^_0#$w)K zi$Xtgtv)}kNad&`L}?p0@1o6OHgm!t7lZx9sj+e-OKotS=C0r>O^1piavwk=U(bKp zzKvFMh}$$iYPXD@C)Ezskri;(ne={vXMtovNMYM@1J1>I?0x8V1X;Y(bYYV`6uYV2 z?^7D1>olr;&sfhsLdTonZwV}LRgT^!Cl*|ECApUJAitU%%W$*WYKD(%JH%gMU3HzB zFSIV^ZVs$)cdqGfR!R~+Izr!e)vmvPEX`+pblqC7v-|TkuR3< zr8Vi&g~MQ%|QLv}Z0CE6V07Ch62;4k6YPB998+%L`HVdk*9v}OO+Q@T~;CEG^;2#hjV z-2a6$1bmtB#BT?4rrt^edI#!MFGjxsdi%4O{i=*0dy{Ux0segi8RgXUKsrE-MdB?5 zz<)#=Wnv?ic~sl;?~_Z1wL^PV(m_ORPc5q?K$2C$LdUA2;~pdPk3NS!-Pzf!emMq> zQL>}vFhD28QFeHW?F&+7#b(}0OdxHSQcAodCNQatG2thNp4uS zt7xyOos2(E8(GRxZ?D|o6|N>e{>aL41sS)y{u+)mG2 zj}M`lSc);PHY;Ay&dehQo%F!|?Ua)z9StgZLt+K#!l1o7?qxP5up>u+gOQ#HnLyLC zn4@8$@FWysUXP5ob)!Ia!{u>6DwCh(f$*{o;H;dRFl;;!wuP$i=L6^pMVz~#9M(FJ z*?IAn7B#z^8EsTKbG1>v@VoW)-CM};ns?N=0#|`4w(8fw()Q4KI;*JvjP=+t%8Rh2 zz8T}5wGXX7x8Sxn8C8eu&kS(VrztdTvtgCq6vgaC-pSs66Y!3Gv`Y*ePyz7M>Xf9?I>Keqf1ZnwRNLz>7BqH!YNo|4V3Y zUx-^6M3KZnNQPr%>P*=iH0K(e6!RIZ^g&N;me0<m2h6(C3NM4dxs?ac6Iy= z(u&F=I5enJagXc>9tVa`#v0Enb)pbTA;FP<;maHBgf-3lq7(ar_z(Z6sI)2mI9>Ce zMSkN?6a(PFCbT}e;*q5?kPiQrRlzs(2Uw5zjiXb(yf2fHYE?J;Qjiw_7Hi^s-S;gxLxz&_$Y^xKF>zmY&!|eBjnZeal=6)44SblFw ztE6F={!0WCvSXK70i}Hlb0NlXx%HJ^5CQ)=;($y33N)JQ+-M&a;JePVbSa$dykb@C z@K6+dM5@S6XP0sEE5Lvhx+x5kt3g<@s_CgJ%aK6e=QeeM%UP#3iOCc&S1)bZ*AWxjVT zxGx^CX#Tkdpta(Zet+4x9}BQ9dP2hFfA^6zbZGLP?N}gIX!>v}Z>*nRGfLoF6Jq@h z@AdcG?)~VtT_Wj~IM3bPew^Znc}nH=o}}Eoi)OS0FS;j}^-zawohtait~^HS4Xvd4 z+Hmetcp4v(y38sW=OR>&8!ANIf;Og8GDeci?@#%E`-cVa?|1)yP6bCHSwjt9tXTNh-&28ty|bl9YWtV7ey;cN`um?*0zXj3pD~bK!C6k2iGvQ{wwMun=wd}4P}dWNGJ_sybm`%R z_(=#7KsUb9!uFt3$gSaSXvl=r!Dw7&WD}+;U^jF|)?)l3my?;u}Lz3 z{y{k?wrYv9lXWFH?#jRnPLU02&Y6YIKAXIHx0Sap2>bp@T_493THK;XuTt@H5 z;;OVLHlmDknXVr23}13qBh-#BE@e_}HcJfC&p7z6Q(1WEkNW!L?*nv}9Pt^>Ek+^m z@I3N?!gvHg<3RCIiWikp;rNIMZ?{lXf2z984IZvj> z?LIO@RX|Gaj8bhwO2a6Wg^E*~8dNOiG8}?IuEoR9Pa|GqamE4X1)kLkU#1p&Cvx1h&-oKDao$A;>eB>_i1sLzT6V&wi zL#Z51+dt(oZ@{Z18su}U^^84d-7R%%lsI#8GNq=Obhxq^79WPl{L_t-YCM@@h86jv8F0}WeCRDt2O}%kF5Yfv1`qy^NxI33O z9WEL#y|`B+kH2Pd7R>i7;;2<37D4GwLfjOQ3pz?CET;<|W*nZ|acG+O8&?35&%{O# z6{})-Nv^W8iJ#vxPXYO6UQ}avuh)HK3Z|B>P~X5U?P8v70)|nwp@+QN6fi#V`$tI; z<3$N&Hu?zKg^Y2=B?#2#VaijQCr`w2WxN;87))4XnovK{18jrCU%lFp&0b*lo98fd z3;ZZ0I$ilTEual3muho2gd=Q40$;F?^9VPpug6*)$-^lud>*Ft1)k!=`G(hXDlE;p zpV6kB^h+qfdZcznnUAESEkYm|r_LPWAQDUsztRk=s`bcNej@Fmz2JZ=hW|Jf$LIhM z%FzjivC>n5;64xvQavqnAiMUG6aqKw)8A4|BoiSdtLiMHFCNu@V&;30?k0H5vNV(S z2%i^$2`(>lE8S`~iSE0W_y^IB|B>w~d4jxU*Hfjy1n9iK|4Z@t@2&BFHO+sdV-@>^ z#Is*=gQ>5^srrB4G=-h)?NppB&A)<<|51|J+gKWVlK$I||1BO|drqJPdYd<#3K zOcXit>|DJp9NyFd>xU9e$ilLBg2=@ovK}<5*vrD{K z9}iZYKc4M?RplH!I+ati{pZ^?My2_!V8B~SlfQOf`79%`c`x^<$4o9Dt)a;mmb*7_ zWy)ADAgR_-Kt*D;LG8h@D7@<{u{evC?iL5Y)Vl{-`0D@9HT>`A=6{{2f57>(@{}t$ z0tm<~E(i$U|M`g$Gqkj^{|aXi{BLgSf1R8X4NC)+Wx$7>nWsHDq68=y{CR!2Ng}3b z3>z&rqXi+j6bM}N+2jEkZ_d;Zhy70ry4Jk~>XsIIz`0n!t@ur+{;{kteUB@)==$ql9he` z71I)x%8@-!Nq7b>Mk__GRGZm{o6M>ldAr`^8KD9j>o>N`OSQsvC(1F`M8`-R2fLn!wOWNF*|g!d8QYy=f4eR;VF|!hwWp{K zbg{eF4`_#fCp9%WH`BXV>rrrTKHk;aaR1X)6#J`7h}FdwxUgk%Ai1nnix(%W4}$ceCvu`GfHhFejZs?5LlAFh{WE)+P0+W4bL{1Q$UL* z;nL(%SI}`{ER0SpIk+6bT@P4f61s=hftwcXAo!Nleg0>dJF+mL3#LmQEMKv&Ui`OSei%LZ7jhfo8l}k>t8zHzj&R zo>HNy2AS2f{)@|i6AMZa=Ott|!h86%KT@BF_*j=3wTp_Yai}8?r?$=Ic1;JD@TzmJ z6*}si=WA?k6K32?q$rZBQww8AaS2ZznIshxfV1wk=wFiJ%wrEdh3e_wsp7C7*Nyuf zp2{6zbd)z*On7aQ$@&;mYGSl)GkoA_uc#10$tub1vZ!dtU`i2RK;gnjYW)p?`q_Mx zfidIFs7)`DMZ)hSdz@H0pcIJa(pQBHGf9#7##Sxlrc{H2ijcAeDT30>EWH}1q+5rw z$J$Kl=mrCQ>mF&})(4l_VvXI#yhOgYU~2@#VQT~}L(T~01dwT1<>ODXcA4+`zOD8_ zz0CDdSFbqq^$CVjZ8HTULGa>-iQQChhARJ25CAgG{X7i4fz9h{AG|>f@^Tfz$3f=6 zN`Sx8O0XHm7$1+ulz{6EsB(-UXB9pn&X33^f(_|+B8GAxOjxAayzPD5A~A^|*CMB5TDE2_%d(KCqsn!s7l zE~=Ajx2-yS>QF{Mo~YL|{S~HslDM63hUsT_TA&Mx@%<0E!;9x*b%xc$n;^Ahx8fw z0d{4Q$09>7Q8bszInJ@!Mlywbo1TDgDV22zJJn8WdX$qyJ#0^jVO+*^y}2O--+HQw zOb>~RLmutIPw>&IFGI~Ky5{@jUJ3y`z_`$Eo&wRqkDR%pXA-14-R+QFIkfGvC(Y4g z7b`d`?eJfiQHzWTUgG7?v{t%uHS#6f=Un^y8F+s_!1J|^9Yo4kesRVvm{bM$eu?ee zyi_NPMe?j9v)(J0gE4IrYs@s3evDz08RvMgTK~qGhswW(j4Je+ePi}}aW@wEhTlIH z8tIEE93);-gH(tk%A>dyk?~w)f+&U>#6(s=ADsgCayHQZ8&m&h4MZTHRtv|)Z|%c- zl|RBC@%B(FVckTZ*;X~Q)rZCE=Z3xn?u)0BIOiQ`;!^7vh}8+dc7#VDL)b? z#T<&_B)~v&2}0R(QTpcY2WqPW6bxj6k2N(TTemWwr9FXCr~nET^he)=?fNE~`HC3au4 zn2a#Y#H#xq+X@)9R$`2~k;7BxF`7tSa`omn#RgGS=p&3BiHcVGd5bX@EyaN35aJ@D zhYLOr^roL?)EcoB!Io^YX-5#dd{1D}w^saaI>~LjTA_71{7IF7G*_TTia`!$CvAtc zD|#j~aAG3GikVC-AG)cDT28TCUq)15{6m_{2`2J%bbKuk>%~Q{+lc&qIGY63(oAnY zLsN8TkV{=x z{$yI%D3iZIV8)#?c|)601KU4Gpjs2cW|`kMu^C}R9%wHh!LZyj6EqvvwaFCm!EMJQ zG$o)vJgDR+X}Y!=vro_?pYYoWMPueFq#12Z>StYkR_zc|dn60LI7)lweJyaxHu`dQ zG2Ghn+%+1=zyw=YR>CnCz%f6R1z@L%*rLw#plX<>GQ?%lu4Vk4C~hf@PPRT_z?pK# zA2eA$=`yoEF?FL9aoi7;7d` z)-}lsKWrr2FBS&pbqlUBz7n_Nan7{c-!Z6XlTt?}lojo86sg%mPwU%%663I`pVU10 zRD0qX4t@t<0f=_8tpuouHPoCMvsKYkN!?n_Khy{`4_g`wr8^W{*?n2BwtY}=#qS{P zOnbJ)I_=9A+~YN_O`fg|)OJLNuF0FW1krdRPQDV^755Zlm>vXk3J>lZHLxcrRu@t& zdEtA0Y%y0T!p;h+^wrJ16e@TkZjX*K-6I;2@~(eN5nY{6!3X4E#QzAq*hK#wrHH3xQ_ z5Y7qSN9&uET;0N;-!=V`3dB>smo4iB4GrRH@hixwu_2;U2BvSa2CoB-_)b+pXOhdz{vu3Qgkp^eft^vdOU zKJvB-l7=5Gc4PQSn@b5Ns&t;=uPWzahe>}9-m@sQ$CMDcp#4Ny_ zg5Q2KgZ9br^&3luY`t&OLiq}k@Ff%Vy_<&Yv72VKFXC^TJn{-hBO&G4hwQmZ_Fq3Z zx;)YRJw&Fjx;&_BH3)OjlSQ7LG_X3CVdUXUBI?ug>-)|t!9Q^8-$B)X!mSa~wumr@bc{iWQUA7FqA(_=+1?Zu!21*H<7ZEswW`Ci>E`liE8?Z_7rCW#<0G;5 ziX{UHO`|^;YKGrD&$q|^+V|-q<7VG~#|Lf~oajR9ORA@aux!aj3!!c44v)=Seef?f zzX7!56o@oyH6inSZbtmDPDZ z{Ar#(6rZ@j)R>Dl#PsUJ>E3R6;7hO+OM_>pu^_vJ)W$c6>4+Ex~3A}W)7n~+g#vwAkfY122oogIVxCYELDVvSbgw7!k z=u}gIfHXGECyz>pK54RyqK(jLZ$!8*4{oSF=49%FU)6-(afYa|Z)!iVFV?@e;7qyE z-@#YpAl?5R>Nz)7);^%KgU8z2tOp*Ocn(n7pI;7|b=SyMCC8!@zC2Mkv3d~IDsGXZ z%E;WK+xY6N$9!=_n*oxnJqq+DMpjP2c%2KD zVI1=ur@fwRc)eFMSw)Qx$i;OuUPv)oLh>^38n24PXPF*x7of!;UP8@m=Pf4(kK>n{ z+rU|nSh~+?#N9Y{${AiB%WH=DdOn#ITf|vfggS~Dt5Rz=#3~w)MOC&-2QB^m_hdxj zSq!{4jaV|fk@l&s`J&F_ZTWGe#Y$?^yi#wp6Ab~K>twmDXx=S}myY(ahqSkhs;gVJ zMS})g5Znm_cPBW3g#>pA?hAK!clY4#?iOs}?(R--ck=l5KKt!&-`C!~=d}B4wNb6D zA9IcxRlUaS)yw0$ug9jQ@=X{MY|pjTDkgh-$C7Vm1xReNOKJ19$KzKyt;E}n&>L26 z!M#iVEv_?nCPc0sl&QAAG%fB_Azxv3ygN&!qc+3tmxn|@%`k@RR23|3y^|5ZOl8~* z8or@()=X^lH)0FtR;kRFhHe|0j%B8lzNZzTI81@6iIi0unUeSlK)0a=BGr_Z(Ep&I zZSqiGyTZQhm@O>&dT>@4ZhCud6RFX@$+KqFObQc@q>2}O>`gostcc%YyH*q46B|xF zuoaF}q_5S)abKgtpE7#^Z=gEgayu5-)Uvw}?{DT>=_Egq7NdS7^E4suhS-`NBzqK} zGal4!(=q=IXMFB^6!-?wL;wdl8x`<-P2w7S1EdowBPG)*?1a6|MYxn$w3b?y)QZo^*DueWP_>52EKdk<48Nm4So6QJ z3!zK`h1`9{2TXptMO@6Xd^uf7I>bw!l*sku0Z1;^L^Pgn8!k5oWJunipEGk8CWwCp zv?XZgP#2$xElRiYby&f>FR^IL<*+^GoD`Kpy!AT0hy(pu90lk4*LDE{yG{?`R9@e714 z<-5uy66%K!;{W~lZm7>_W~guQE(~MgXleBx?Tt-A{~6>PR5k1|L@?gC(+qoz?SN=# z-*5spjeY5Kg~>Igde+E=(fr`y?#4O9gO`39G5Cg1U2KLw6(;G*ANn&s`6;92s{Al| z-1nZox;e23S&Br2=eNi@nz(pdESroHWKWMWfU_Q$@?mwv zsT_bCr@1TE&r+;&o@G)Awgns{E(UV0_w{iyZ1FXK=jifa6#+l`&>fozD7ka=6#QqI z`X+U`?~J%mn^%*g#wO#PRzoo+?Cllu=|K8I%jjWuQUy{2m?eHLX1ZG?+CfpQzNaJU zIEk5~YPl1QgaWJAI8Rx~EY>jfI|V^Pt!jb|WA=V}j&5PH*9m>_`isu+p?6VqVuIep z73DV19zsLV9mMI~An?!qq|uS{M^Q~cK5Z>@@m|2eC46n0>m>6mAfo+P zYNUK{+BoyM!)E9pmE5$49xZ-7)>QAAbXQ{HpoJF-AEZY9tFDnPgN|fQ!n(_jg>8w^ z^60Z+2zjgMkRa5SlcM^vKGUF408bA!+OSd7P=)-NL_<`{+*^MBq)99`&JB7a{VGJb zd*%gATf)J0PoaN_1qFNJSW3btm6-6{Ms^``lv%^sge|#TbMlY?CG$&M$_rYMi68^J z(uEbb=4}u^0S$M%yxWoAh*%3|3=dwAr#@W1IS5cHfT$DlF!0vIK_0BemRmq^xB2;ah*b3fjbL62J#xL(Q@Ze9#@&<&DVrRbt(LHqQ=WS+2*J)!Qxy*F!%P0K3!e`o!z8UIFM-c&tH#YbqE=jMzc7qEJUm2R zO`J{6GeJ#(45s1c*Lpl^mus{iYqJT@G~P^up3JAS(yeoVBZtfH6m59~EI#A2KUXQr zO!+|EX^_?q>pEAm#Pgt|;%?rbtY8{}EzHS#2HG%(i>@%cPiaRJZXa>x1%ZiXK5X8x z9av_eR%Gf0+7TfO!ewK^I=Q!4C>o|qT%9Gz7RV?TwBS7K?0^O3pk%tOzR>AwksTTJ zUotFGw(-&3adXjfw+1eiJPGBw%)VwPz%XMsLA16D1o=XBONc-&H4%lb&qGf*E!aKcXox%M8=c&TNDe>1Kas7t3upnlb zF*QfJexkfflA)#vdrT|3W#Z9HE;j1KIunX%mhicnAMH%x?EZb|JU=47W4@|`ff7a< z`Eiw~h*bh%DtOOFJy2@?U=uKN*rqMQfVldvK*9VY@EP0q6cuv>f#=0q&fEYF7=$x$ zz!_a-1EDh`whpD)Yhd#dC3QGV)^ZGCG_2h&x;$tbtN3-B2O$(;iDPvDpRMf60aRqM z`7@$9Zur3Q%8I*5C-!sRC!#O7m{jl69#GZeQLy{Y5zG!JLKT)(K7}ilEcwb|Ht<6J zKx%wNRhQ_3giOTWPV%;WkJ(x2CrqE(;6p9GV4MNwz5-^*(eMRzHX zaLUD}_bpS(HIT5@WEY!%Nx_i`P@tsl#FREbnR4v47K3t9{P`@QYEQ@@uQKz`>f`S@ z=s&a5`Mf|^-h1@{d{}ep8fx;U7}!QU~Oe(WZ+=^U)9K%s+K*v zGLDx_obikUB6*;nhp0N4v}C-Ha<TbrAE z4v~->xKiw2%*q+%w#9fcot4u8il?A3Ds7}!tl?07`(`oMo- zfUiHM)a%K)E%phF7WFh0P$Ya1LWP#=DkU@>jUg(+OcAz|%ee&>moIw78JO{s+Dxc^ zh@hhAYo9?IhwG~2PruzE$VBft@RTDne36U2_1|d^NDrV6qL8jpE_Eg=N*s~MH#uks zF*`JyVr#Jy(-)O*+UbwT#Hbd8&0<%subb`el3{f@Eoq;_Gzy^vuwu(2gmL$grpAu! z-KH0REF4N7GR^P0rTa>{BxT5*CQk}avmI7ph!I|dp*3V1KkAOMd)w|AvSm_?3fo4B z!^=!Mf~!J#&Hb5Pd(_5WbI4>C{X1T1t~8agc0Fwd5$Y%4h`0>Rp=JXhUXUn9m9>yM zsn7Jn1xoX{lr+0}jbzKrd|71{k-A`$6Zi-+;YhYYdLva;(yqP^l96d1%N>MhX|GJ@ zmL_2=4H1NQg`Y`aTKT?0;W}8&F{|~F{vPcN5*!SWZ$quU;o-8^3JuH6(racG6>qPX zXH(`+$NsTi4OuGtoz#F*h{b6WHOP|I$7!xWT9-X&{No}gq?>#{c#$CwU5mv*&PT(1 z2xrRDDz(pVtZoiNg2@oWMm&hxqgHo>YMW&&JW-2SYI1k=3ra&fdtaU43Y@mLd_Pj9 zL^H(>w|308)8vcV2-SYE7wMQP`@srHbu!N{KlTzXTXhd3savfUZ|D6(ALQtY z=TitPUvDNQ;xA!gVK&n8#WIAuS;sH!Y=YQY`H?>sQ-9y4qA|3D<0pI)wBShrSt8P^5UhabWfU~vSacV3)RONV< zyxk)zoTqaOq%x(k>IZQvE*>x%SrJUAj(mx!<7uR*d8Fsm8j|;$^?2yhPF>sOfvqI@ z?>Da;K{kia2+PDyQ@NU2xgzS_tle=s zGVgL+NOV38G>2w|3Id6WoJ5dK0Wb>!OT7Q0!?++RQF+~18H;60+w!@QHDA}>cMXNaz+*OjKPjl58B zMdu$iV8^P42*;2NRqL$0)>rKdhj8Paoe`YKo8$aLthK5Xjp}=DKt{t$4lQAV!l-M> z_2yW2D4kTzU!4Pa_@fJWV^NOWR7g|xs|oZcGmDfalwet=HsKh#h+j%+<+52Znf!!w z%149E4d48dPw#Bf?IBc7V3Ot`w%XYyWI4EmsBc0>myqlmWzOe3dDLySjL8a&Pp^_o z?lL_c#@GO76$3(_5np%0ALiUo8B%{F(7nrM#x%4rpPAKaYyz0{EfjSXXXq_59l}#) z;)zJK;WehoEq=+fA3J7uF8o|o;#h)JANxp4u@m6LBXdjVH@3$9j1F?Djwt3NTSuPi zpyGLi&dkSU5R=C~P3H&cHH(8W3iy4X^o7!*-?j^EVDSI^gP8aCRPdikf*4X^tnxiM zK)>@${s)WzJ8MUWe|9Cllkn{S#lOpllztyUj})l$Ql`>P)E#L4F=rb>xH}Ne&CeFk zY=nuFbq?He@qtJ}>JpZMEc$|9dp+v_@mrLwA6a)uOy(;e&bo3E{7!u5R|4z?FOwdJ z93ZR<>ic$wi;vRMjpDhRwoF^G~X4DU(pUEdkoJBf+Odc z?Z^yI(Ty6I1|-J{Ny^`b$Bl^{F3Kv|c7NwEE`z__$x&bisT1RS{o}>_{qg_(V*a8^ z%uM|Xvwm0ovV5=a{s*<4m9@RC1*43$qOHaMnmqp{@~QM+a$iXdbhH)4$}hqd3d_TO z`uYJex&@));V8;z=+fy{l&ABjR!b;o>o1ZNxli*LDYLlaxi%F7pGQJ!CX@54b z`g;5PjPjw(g%<|qe%D5)j|{6Y7M$zXE|KKtm+SWtAqhvpeRX(Q#&W^!hczM?73Hu&05Rh)ssJ6X-WB>|Pj4n8T9Ba(12WRB5|GB&|w)ftm$l_sv$e3dN5M@D+r0 z1mU!Af+r)yGF`Y7hj!5VHrK_oPzbS(%{@wE7R&FoOKvF&*UdyabcgBD#Auv>yP#O} zaS^Ceq#N0Y86JO((?Zi*yqd|lVQl2Ct3IgS zD;?B77?2Y)DP+VKuyt(4a8h!bUF5`?;u2;+b#sz4o9LnAPvY&A6x2C;0;DQbUcfI= z{GE7q9pu;>fq2(^C$T|6T$+Fu_V;Q?=zi{tl3V<&m9W{~cj+-~Fa6vHn4ztj8=Tqi zl=eMwUD9|4%_2lYj~r(K^KFCM`XL4hyBClD=+^nWFaM{PLu^%aMZbIbSNIPf4F3BV z@qgpx@2)Q|^}o3Of3zRZDX+<(3u3$#(wCQqD=A@Ie8j9t81}=;qb3nd_^#k31qj9N zmudpn8ZHGc(aUdin{RaW^8A9x3%y(}x`1iFgopq&mg$>D)Eoz5^MDRsJPvrS?e}*U zn$96GY_-I&MI8=trfhx$2c_eQI_AeNFcpr%094r`%$abxiwGy+K{(SbQ_4Z3={o30 zd`1K4lDA`}G54->jU8^j~%y2R32Ul3ZgreCQDi62SA%PlA8u`TlxCB|Mp7}sBXJdCTr znyXD`vJI*XGjQiEmmGe%>QpN^dO^DEmQ!-9$GXpf3;zE7B<>gw0$V1fonj*%sq^3dsKQ%~Zb5 z!P%l1Qqm+d*D}-rZ+&b)P9K1&Ei#b6W+oVtjN z&+~!$C_XRs-pvNY`0zpOzkfa~tt}ZPEbad#`S|}SoBGsV-3gR2y+F?K;v9;pg*T)H zLK6OK7I9~V`3d7wdLCFh)?|;O zP-iFx*hG_;V@$twhc}yJ@?#PresB{Zkw(Ik;F81(5uwFd3L!V%5RfPeb&&UB#$j*6 zQ?qRb)Kh{v1FeH?@j$&n=WwoS3F&jTG6SSN_8kx#fF1XTjtlia4TK_z+di*O?s)MgmPp8LrhS`2tN=B`wJYEJg*x%?J*Qy!Ls+g2fyQ(%m)E8v; zs5iqglSKRFY;Y0R`Wx_zLS95)kR!p|Cp-s*q@df-2+K$eyPYKWUV;hrT2x9?;d7z<(G%r7i01H~XPJ$~?#(}Ts^D6v0+e>PF ztSWfq{;{=J+Wj1!f*PeM$STHzi|IRfG@S#E3W52xPeC;MTY+`Yn4FAR5^7k86HiF%Zj2n0qWA`(A_x6!D0(cur<5TOp1~V6JQdG3DKu+8y4z20e_;R`-orp$sSByHU3QDVG&R5%GiZhlAuzwN^_NC$m zIOME!O-vST^@n*QuVn7E22xK*Btm8H;6hDob3sk)z(8SN=K5yskVAELjUZL}s!oD7 zlOGa&RWDP07cPT*bqtoftS<_EH@4}aI>9TmioQl^=BPiU!lk@=BpO_0R(=KpUWm?r zr!Zf9e32h;hc#vfZK8$2o_)eR53fn1b-~9YqQx)Kb2shbut)Pjol7VJXksC9f0SNv zYBxKzOqf;?&yS;ieL;1CcVkyBA$ZL)ogd&nu?S)HCNK0TPOeh(0tjy8zb$n*? z@y}AfdEbGhe&OvAiM}|_8F~Rqx$pF2NJT{ViinmQV3s~OC{Qg;b%oL_gI(@fzPbXb zmqN!=R`W*ZHQ`fpYTEfgj-6xE!IhU1b!3%N_)kA=UpP5H^!SZX@J)yhJ*G(SzW+~$ z?%Ro0#D><=c~1rdcLLB{PIg7b#Ns)a(_XV1lZiHCdiVPbwp2bp&#AYi8Fp| z7(M(vi-bDn$4F|NqT6>m6RB~X?`2=|$BQBp3WzLz&ZrCzd}U;fjp|FAvAHj8Y)_4i z$}`zPbjQ|tC8-~rOZmk(e41hzt{LOIZ`|T@-9`k_5)A|sc}d%e#GH;zjsJkorSF!6 z6A}2fb~#BtJ0TPe3!3_Lnkuq`)B@R@=zwqZVd8@84_)d7S>qXZs+1B7x|rFIU+0{;vByYw!=FF+f=wtCHwuEgCjn0>Ro#TpMQq`cMNDV=fmXsl zhZCR!>{Q3ZnXb{9y$q9{Qp)ARnCXfQS3*nikBw=p3vmQbAJJ^LqIw&8dVhCYtH|ME zyI*kp6%D}SoOWsNe5>M@9bxvK6P-I^*mj#U1z^^c%$CvW*ZnpXvEaf2OgUHFdZ&ph zc8)hHcdGZ!C#mRB>8}u2rR3y5afV;BUGWkrTACg>>p>lrvHfAc(=M9W_{Q^@)K+ST zqeBe#f&%$c+zw^E$F@Tv&IO;VgGXkQFul9Yg@Dz?7u)M{-Y0B9WJ3esf|s>}V?ERC zGqHnMuZKUr^#K(`lyHdl(4<20P((NlKl@&=q2RW!S$ny+Yht@U7mp5*>QY& zfzO@xTLPuknmTC9NKdb{9Rc!q^bZSp8CuEN%EGf{+XNfT{fOO&QE6;`EKBR>d1z|6;`)INY7#}yY19EMciq>zs8vG)1~r=*e9Fte@TrF z+c(gD*IzUA(Dd*SV!IDB&N4Z>&PB+=7|bf|LOZ$N{&1FjX)5U26~4!L*ey&>Vf($` z-|r#D1UY1obNlWB0=U)|iS>=8KK*>a1vv#|nN9mw%oj{=2h`r>)-AJ~vlQh>T?##2+kTrL) zS5-A{w${imt7-rd&(>71PEVm8B@&B}jiOMZ2bGYGLXc;wNCpOyDMiu9vzA0VQyY{* zdk-KRC8I^qhN@LB%r*#@%lFh~I`qu;&q9n%2JM(p#ePo>D?ybKG8a>bhDl67TdRcK z8B&Xo?0qgL>^4zQT_O{0P-DWBweN*<(m3C*$NDUP8zYVkHdQ2#9!|(yEr?yL8X#9H zxOKT7S8J+_GILj|u#axKo z$KEFgkWlTAJZTO1Ju+jao)M&JNuj9jfOj}}r z0mUJIcg?O^HD6nd+k{3DIa{5$km=em1iaDKE?l3+cB+1ArgG1_N2 z2Wbybh|#_iNpAY38hi(w<0ROYhVtbqmlT6G;jwb;gF;8@k;j0dVmpXOy-u&{*xbqj z4PSt+gIrUtsrI|DpVDczy~FWPLTOs+WP5)UhN)usM|+3y1ga+ma~s(h9vqAF6U#Mp zWyKzMPR%ja7?tf)S9hL`yVZItR~#+!uQ=~&M=hL;#f}gd>!_;z@urGBrgh(()vlYj zd$^=En}!>slaTI8SC^Ze0vDCdf&2HV5)PoExLS@>+`vb%ev}jj9CN^&g)RICPshNi zmPPt8`)~a!bz>y_Dtm`NnFNIlpSS=EmVB^iqm(usz=#D**X3wmy2OM69{g7I-$6ZM zfZ;gdeiS3k(UkezLL4~L&e#*w+D29}>w5Z)j4YIB%A5guub|`if333{P8}ymCGP`9 z2RjhCW(7zU5ua~a5y?*IV#b|{U|Ej3rIv~4^q6erVV8@PRr&stohDpvwR~lV>gv5#%hFM*Ng^`9L zjB$NOG2^CWIU`(II*zYJ>NFNSQY|esGlkn9yr4T7ENN4MLc;buNt4PkW$|fDlx^gp z2IXC~h}?l_W_1%x(XCf!@+89Q6CS7_aJ_ZVJQu99xxnJJ1Gc{8fd^stEeCJxpzyz- zddJyFsIur5<$fzfBZ7~hxc!zXZ}_ql+_}jGe}Dl}{`?l!`FP>{0uDa7l+79Ibh*e- zYzV+?nZXVnm`gzet+ULXAl1BW@LTkK%1cA})9wAU6-2aav89xF1QR68sdf(ja{*Zb z@NIt{a0`!dMkm(O1L{5*`P3HxAO@a41e@6bUF9R728_7&$hoGI*`d=Bt)i6UoGH96 z%W_HTfJqmO>H+ff**TAc=vSary*R2bw{WJ3brF>D_V+oqcM z74X!OT6lZdEshI_}OCuS-wc6kZ`!eL-KSQ$Lp4;?HLXgkEvccWq^iEs zUk9rQvrcMDT59f=Y-4~6^9ri5+)_pOXL$LY6w95tsG;adja6GaP<5bOLgC@S<@*9= z>o~3>ZSek`Y|pGvt;_F0=dYyet4JNU-$iKd{Jy<6!!HzAw`Hzcu8sD}75qf9R=tTR z7&a+kstV!2F-X~Y9UYLFZNmRWat<*zMcMELm1>g5<6-HSR0Dlr@}O5} ztc?l%qfcf;;5g(jiIUIan#&DO;&hw=MsGWxd*R7r?mqWl2{NZmgqAI(_k#LL#i8$X zoaG8W$l?P`l;#%hvl8sM#u_C4*#jU#b>T_k* zkbaw>>3v1*ufbMTZ#2zqFt16a-L7BNHWLVfzBKiX_%&=xYRf?GjQf>Xgsz71;M2q| zg5DUO!pUP#>YZAuL0frEEq0AazZI_guuhjg?v6i8CGm1%GfiEdMzc2Y;B6W5bkuWQ z+EK%xbvE3BTF-LCZiH?w$lb(Ba_=OmV;t8@5aOjFpmQ9?E1ve{IAeP8#{=Xih#~Bm^ZW$>h#TxfUi8=&xo5F zk`F6do2Q#wNZy$8&@YL&F5Y~y$#iP~*Ewiy_P!Fj=$VY-el6GZmme}-cBvhJHzdlf z&Jj7ZSliPPL$#hJDb<<{>n%Oh&Jv$n70LSJjJ4d{Z`W-lk9-WNO|7kc02d9cj@d8= zyH|w%PRIw(fX)e+b>t42i?7_0=d?Zo-yWW|Hovw?{BZ(33`0J^_sF((S=$754&ko9 zKSRm|N?TV`OV397ZL8@8BI4#}$`^Eoi*p-a=c@vZ^jm7f2Mk>P)1K-L<Bu@aR4ce!&Q?G)_{4kH1jPo7O+;7JmHAr5(06`hq#@1<&dMvrg_)%11}t z86I1U@Dg{U)BXI9PSL-kqD_9>s{P>?;e3=>9SzFpNO1%F_+y3hc z?4PTDa@`#5^!^fg`X`^cLG@9UU;y9z;HM zB5W_n@ozbK^L9wmN+=c0B0iN8z+!35S*@dU5u&HhB${H0jXcoW+URM z;nKp;{plDPZlgfcWFMzXM$_YGKB-qH4_w)!m((Gf+7A@~QRqxe2D!v38+MVfK%k8D zlL)G{saZc(Z9{A@UQd1kLolTn`)p#E!5zzwy^K+*BesTewKUS0iBY)dEg`$h>K!`d z{2>_nY$bwWELOJ04yCWW@r8QQMx|2SL-b3gS2gWw>6s38GfTXHQj*~CC8ffcA}-N` zQ*s_{y8P+ODW#6;=vGPvd)zj;(W%M1aY;ayFT)nX<5AuwtBsu-SH?*f;sPdN)20 zzmyK-3&((<#MT*P=shs)37oOzI#0={Il`!ScgfMh+e753Yi@0R?QlB9<%tT=9+dcb zwNP{1FYiEgYB)V~u!63og?Dzo81s6XTUD&zV!rl6RyB08EjF`g{`ICNYX^Tfxbsn2 ztWDCnsYvON5%aEAt}NiJlBL9*)PO~En@WDau}JDSef-mK{+iKrCQC`D6wQipu0>kt z8H;$ik(ED(=PMs-uQglxm2=VRRak4^fLhJ!Sd8wW-l5T8H4W{ zBs!!!^c}(pdb7qRk?$*Hprz0v#h}ySpK2HGI`k!dhNIPZv?h}ue+UW6nWFSqA{I6q z^j3qR^dfeY^$7HE3~>7R^azYOdMr|wNP^sPwZ~f9egc@0Sdf@j`xFU#GxSbCjnR(o zxKUe8c&SyL>7Ow zvjMFv?|eJ?U4`VmL$xgUq6O}S^|-%5_#r^HGjqNDi^FC_2ijAU@I~a~t{OmPAhO}M z->z(&(oGs)_IJs_O65M;p$$a=@qsa+r!=kh{aOA^lbRf!F`SZ92 z68-Yw<%X;Pr+&y)vJBmD)-RJIJA!%$+PHhW)HAvHfmNp0v_c67wm$$^*Egg=Ct&*s7ED8?`uMd$}m3Bq7w}m^9t&Dqc!bNJ8To6amrG=r1rcZ1ztb~9(=KU{IR@j@50BRhsPi@JyD6o zkmp0o8Gdl-q}gYi`kKY$GLzDS|Dl^RG*vgfU!t2ccFxb12FlNt#oy1C+p(K7hoqac zK(Cv#1ht#9;?~brA0K*WmII-GC=$N^$Pz08ef0}YkxQL!`YyenZE6#If9N^`PLW%% zZu&_E25^#_t$<4c@8{ds*r+pRA(^)ir}6zJj*QuR4@UK(U#oP(UE%u?8bzDLi45LY zhSF53`IaeMcQ8+gvDT>jsGQd*T%pqHCABAB_Tm%Y0%;F5y3Y{5 zD0yIzZWC()8MSA>%o6DU%2X($Wq!#F&{2a!Ie*v=mT?6fEKtD1?YS>R9!ZT+84S#D z?oYU2*_-z-r`pbN>GV^^UNKp_McSC-@PQPZWyalD-vmrmSGPsYB0d z$~rKT-7)j-2k}Ohz2IiuzL3$ro<0h;_ko*xCX7C~Nwq7_#S^(n)GKBgS#6+}SpjDd@ByNEsNwAR^fhDsSO#e|e2saI2Sz5?d>Jnq2}0%--!yh*uuKrG6=9Zh z?HCa2MU4Jho-4sD_p~YbHeOgMXVbTfVVZ=$3_@CNd6s_DaOtF(#Ny9Js1HObeK!H$ zO%K(7nR4Gv(SMl?{xUWHWy*Os$%a9WohUxA!IVR0p`t#}@u@#Fs0cES=xjq*+>_MU zzjprBU-fq=@^6sx7yn*|%&-pmowx!8_2Gla{}H5^TH07JN?9BH1AGWN>)9FoYfSQg zexH`(kpX}ElmQ^25C>x(eiO2YABPi;Rf_s%$H4RhkmfkAZQkybP$qBlp)w#qjgnZw zhq^e$`0acwExD-(^dY5-(@zhY6vCh{AhQsFsoiz#8mH$!t)FA`dkKSEhQK_OycARX zxE{G-UY3PROdEY*qntoRt^zwEtT5^7+q7@89I!DjOHnz8f@|X$C3P8}7G3cXxZD@E z2AiC;9iDZWU=SBN!*f~Vqi5#e+hL5heI?+%{e(R>j2SID^3jRBW~2YBx7Qk#BRg#> zt|a6*TG1rF>Z)bTk-b^aFweSngA}AyTaL6gEHxn$q)ewwhmLXn%Qqh%qI!xa$f)ek zS35Dcx}S1Quru2K@p<&`ule5_@YirJa;Xu+;`h&^6=)wm2>tgqK*Z&JBDJBBp`ye4 zcw8krJp&^V3nNP-D~JDTZ&N+C*XYCiQ$f_R5cYzmQhZ&lmFh<~BriDwy-g;Kp03g@ zBXrWt`6AFDrQw4EY9VrrVu^21+sf8&L@hW-LZRUNiW@kr`{1Kls$5BgYohO z?cPzhxF`%TI`Wq7)JGlsg$`i|K@RQ3JLH6n$DH^*TJ~d9Vkv`lV62_Kx)C(Wsh4jDYjmS*jjmWno;I<(0u8Ibu&bFV zO$Y_)n=xNaJvkXamgX+812oRrz!|nBpEfYUq4b~HUe!Wc%v;LsYOKng7^wnZuTg*6 zXh=xB=`OGl@BAG+CN&Y+ncrvfHy^5}1Y*w4WZl z=;{@`+QY$3TO!TQu(=AMG$LZe<@z0}(%R^3GCI1bMJW7OkyG=i(wv52wUnnIpMjuU z#hjBnmWl=!oziI6Ra3?_zqJ=6Q)xBu&0C7bTmkVK{hmWV`DZIFm6a+Nr(^o9Qg1NL z46>{&7gJnO)0f7vbjI({zKt~ASjG||UA{}i$9bZ*v*L@J!X&gX3mBvN)ME0tKl%s9 zGnoh*3>m%)Ah?IFG%>9?CDd}AX;;}%Agyp9J}L>Uba|0S{I=<~smA%lfL z?k_x_I;B?)!Z({E>jbYJ9xX#AzV)JKbz#eTLH-#)c;SOVw2`tq$&b4&7DHHRnLg{f z@I3i|LEeWbA|A+JU|dwT?`ksnXc?&^s>>965&>)csXZdK+oZanP$Uh)`mp1{i4O#Vf0VXaXERlMKg+M+{~>(IB2C{tK*)Wg=1Pt?4ZuJ@;0JAdZ99*T zH!YWY_NAt|puKluE!TDN4r83<-=kS}Nbw*GOZMP#s#$oD&kc~?^ z@4Q!wx8?O@&Uq$`^*P$_|k?_WY$IRXWuPUULE$uJEZkV{eH31 z%lOP;*1b(FJ4ukD!Aerse19W*o=lF(TR0pSi!~=p+gX}MQQnwXW93iUu*6cC&$}li z3Y0&dQR+hZ6k<2iG;h5)n)R?CvwGMz$o9xwC?R!fgI-3h1&ex<9lA3f0v1)-DPM{~ zZ_~9VjtIPGs4#;Ak>L}yYv0jVwiUj8;qp%$8jK7bT=0rc`e2BIHe^~}dR8V|Gs722 z_2<&Mj}g;2i?Yz6sQ*#lni+t{Q+y!BPfGY)t5 z(AvT|sY%^%hq`ec?t0OatG)23iF%s$e^+P|zCMpup-hILB%0C^W}ByuYvg863uYJF z-2GGT^Y7XJ-?-o}@+{&`YEk?3nEv-kH0P+wGlWJ2vqA%>Tezr%};Qp+tHd05&KAAYod zLhm1mkRYtj)BwN4>H~N$1{Ew-3N<(z)v~vB@U{^>Hm&J9ifg>$26`x@A`=u zi9Yk4pW2rZBi5lPq4eo-MG`X%d#^=zutkt83jelL&PW?zN`5X89gJBCdD?^}UHOud z^9O}F=tkxf%n*Zr&7zVF1LXE{pJ@7EE3Kyvl^sgn_hS9Q9W^+pFlEY1+Q(Up)>a{QdBgXtZ z4)Py2q(8;_C4P`nZkBEi+32Qfx`Q!I;{2qebQ^wac{_!DA8G@bGWBp74WaHRQM3$A zk+l>h4Km~g6h@qxyb#-a*w($^@?(Gg$uiU@SpMDTaVn{*3$BQbh4DGl@ZxL@S&8Elaa+g z9pRU%rQ*BzftS^~Q(Yybe7&5hr=YkWj*H}Ef0LU;sIsP$(+*vW? zCH3{qU)XY?zFspNlKzl9_ylIW%+l)xF!4BH#$)LfiNg#c2>q_4W>{jDqA8#^j-8iK z^8|~cdfjG7jXH8^oz`s37s&ub2QnJ45qI5z5Cw$+Ma7A38I_lK4I__lW6i6?Q^kfEwPpAQ6z@%H zkz0DOO3Wd3G;ymjZOZMzD`;nMNY(_JB8=;*wgi+)9zH0_9s&L|fKEgGg-x`I;;cJORey9q$yRKRzvl+equ)V((d$ORoG;)=TsyOw>XL=6SS&znkQ& zGBSxo6p!_C>Rv;mEqAu^<1rR>k|r>Zwn@c9iqbK5MQ&a(e&-I>?EG{(jN8-OziFj- z^$&%cFf9gB+OqjX=WhrvK>qPb)<;tl#^m&{Qhv(0eFaN$&s7O^{EXmKXZv4CO8phJ z#+U>49D7#6w0OW@H-CEhpT1J^&h{(A#++OkttP`Kjh()X53)#P0S|q<^wdvDhXjUc zAkE?UfrqFS&jhzp+2xhvN@PE4eU z=*ckvO=3y9%MFErFiQ!+IG1NLQT9Z>y!d@Mk0>tk!uZrBRpResF$S%s53aLG$XzLb9vE6}YN$-MkcD2uP6Wqc(7OFV$ z%v)LN{rM9qQm8Z$L&Aux6gzRM@C0jDFFqwja1*`S$dv~72F8(CRRQfHWlb*ZC-lqh zeVHLmi?pvoWt%kIwX7uiBs}Pa8X(Y@vc)vdh^}G83F5;AJuJn{b}8sd*s-1)K(>8x zMhB-R_)~(wKe}1|9(MmTAlGrHf;<(e%^~d~2CT72;_-QT^hBpL5F(D>ixF&uG-(a z`?q>^uhq|Z{U_FRNHcb9CpTqVurxoH5E~_M^Sng@%{jtZVK4V!81s`=Z3lwyy#aOhv4{Sk^FL=#@uv_{{{mt$p46Z!g z+&aTH_LdsfhFU_fT81k{B$`-V0loI0zLy35mzYU%z~eQJhN@yvtR-NLT-1jovli{L zBMh05DfuIAh24#boiS^9IgSBZ?;hcSr5(sW7$k11vXMA;5&pvC7S_JqdPy>T7 z<_!CeyVKC>g}pMm>N&(V9pZEefI=TMKPc6I?wXM(CF2vvrg`}sSJ^TCSC8Z61`Z^;@4 z^8vT=1cG+~IXaR4DFBX70CHDIsZCZUh}F+h$Q-3LLL`>rQ8y*%8H6~1I>8XcqWR^6 z_RJ1QLC`hS`0)c}A1WeXK#kJDk2@7l@(r>PZTd56nQyavkt7a<@Q=`IqU^xSxru{j z_o`VbED^jq(*&+yB)qq;e#-+2@re>|0cc&rd_b0L{9^yH!|x!7-xyU7OCFYF_MxXt zp-g-O2y}7ICl8#K*CO7+w6b#_r95}=e{rRM&+~s(0F*CC#?H)h1pKA+`OAg>|90U2 zCnW#hAlYALRL&B%U-|!){f>XRmwXume|`Ed`tHBnq}kxpQyO4lUM`!d%vZ%r93ZTb4V zgX@Ff!ket$+rwMoNw!?>`h^G6;W2V(DN58&%3C+VVM^-wkYFTvDuyPIU*xPkVXNJPj1F! z+w<=Vudy@M+BK0C{T>;K7NL-R&+sSGFf8Xr?yKR;reOX93m{_HKknp&9at8xEWwP% zr1HU}vYkuOY-sVi`bkq%CO6HL(T@M=Xg5jgxJI_JWPuZcYw=wz-O$4_zs%lYRHQx( z?No&(f2ziJ)+o=(%*t)nbh$O<1ylFKYzXGQ8}b8_s(&nF$aKk;WlHnqEyK(xQr8&s z4(X&6&0>~7ygX(fnW@k5m3dhV3F_+jOg;Y*Bw39m>t_smOY}ujdp)YhZb4LJa zpGqBlj-SY~?<}yTa<$M)nbPw=EY1HOYyTdF)YB2yL|=-^zAwidt^dF8kg$oVfs3`X zyn&;EjmcLCD*i<*JN|blHma|E^$HlDxQ;8v^)w?gM)aELtDwCEP~yN8L=;#FNGKpp zt`cb4>)Puys^^2c=bfwJm6<02@Lf-2|vw*S}@OH22%Ie zyVovXr`)DizJGpr;`h*b(;E^;wc4-4(gTF8hauTf8R1VEXbeHgHeb#60l+2 zb$$^E_AvtGXK-EophY55jtGrmoC=@EGf&wb#00ABSOg;hD*!D3GsZ9$;^i*Iw9J!Z zoGJkq5-}F!ECzKUWyOm~10-R=GjpspB$&D~EWi2f!8}ws3z|@bn^WG87&|Jnf+s5I z91NVaDpX}+C=aMi(7TfQfRN1o?ebMmZy*9LSN%D9}s@}#M z2Z^pk45x6Ia@t=g2uJ8KX=Fks)vO2#qAI*{MEY^P^NEY|q6rBSWx!LhKQc=zL>F>A zH;pUSx-DJMSs>{9w&aJMS#80+SXAT!mjEI_>5C%{h!{IPBO|LR4g@|pqBpR_;u`e5 zW%Dfky}J%ok|irGxhB%InOuTG-l$*#c8G~?rW{iP&c2NPe!YxCnbX@kjCAH}CV02B z{Q}o}K^5bgAEq429m|B+E_46`9X`xSVgaWOpZ5SptA0}pdgg?qUnwlCycn}}IJc)F zwtr?LtT(G!rRHaq$+F`_ldjFFHNQE>a1|;jg=U{9F(t83uP7RN1UN#QAWAL*PeG^T zbs)>gVL3F4?NKGt8@6Ryk?(j|=S9|N^wqn|_JMU!?$F+eyJKHMv`~C;H1sTU1-*4EHEZv*dsGaI3T3n5ppEnVbh@AbUV=6hn~8zSEOA;`6S+vb|l(^ z%}8DStYPtnWB?<%0~UgF^rpqxS;$ol7_smgk0hv43YO(2G)9=$#VkXNm+(w-3KMi{ zP6p>HPEU-*>KLwMcRsh3Tc^(v;B#$i0sNB#~A0v+P^dRyMuZ1iZ0f$9>pFH*`6JPNpACkp~OJD7;d)wYmCHP_-a!yF$w zq|ao7<3ENk`$YmJ8)Tc60yfCOF}3%~EH=U@gOzG%M;gH`8qH=o#fr1|85ED}HtQt+ zgmfcCm#%VB+@;3sPTDJBGD@b@DlT?mG4h+2%epgT?wMakq_ zo3Fu)joxvqyJ4fwm%y}kUcB-PG;QUZuvH@z0wq%~Ifxp$Vuf ztN0Uo)vMDYUBjNI6eA=lLZFE>rjWOi)TP(^Y6NofhHz+z^An{iP4C?Yl2ki)xBgzF zQ5#<qLG=#LI;*|?E}UyN15 zQlPvP?pzNPZN)Tb1tY$(J$9t78Y9$B?tcn6q;=E4 z>lB2)vobGQ@9bP@V!-^J6gzaQn%urEnD1)J}? zwV2hS$^r$034`82au98o{QAjIW)_+=qaCW!%_J2!I9z<&4Fts6Lkzks#KJ2GnNA8b zmer9}uy_^rErm3L=d&IwusDDrOq1IxMjB}4002)#IK|)m^rbh{lzO+(+9=8Y*%|Na zeN71QkvkZS>(#km4$h*vwh~+~`@t$Y*lz#%{V%}u_Xp`;Pt{+;<>i$HBf_r@IL$BV zr_lfTRN0z1(>pm?(#p0Y6Sf*AZ~4*~_Mk)Nawtxts`ghh;Uuy} zBay>Z?G}(ZSQ-v*W299bG}4G|s;E-4gQp34B(W!;L0o}E?_xqoa}~ITnL%{NOkJ_N zKpg2-7Tgm@4*B6XylyN#W?rseW|hA``hI-Ce+#x3>PJqQ)z@!=q#Y?unMV-NH8Rre zM@3lL(sM@uHGK|up<0Nh?J%V{{$a10avZ#rvKkr~}&dIr7@8~KihHguhisp3P zoVcfkz@1L_Fcauq$eQdwqTx{G3U!{v?jK}l5JC_DiFI@JW(0X z!fdP@e2Xx6wA-;zlDiD_7Z^%oL^}8_opO+G|(x)CO#Gthq=51v*je3%y&+6sd?&MV8aUo~Uq*)0xc_*3=6F>ncj0 zAVc1*FTF42;g7*0Gd{a9@&_;Zo^@jHT(z;L5)a71caiP*sbYMxZA1Pl-KKa;{!NTN z$*_{idx#axCX1laX20WoArgZL{kF-34x>nkR$o=r<<41GSx}?*I+$Qw66eG)cOq8N zQ@LwHXwqKi?9oNJ`5vsF@!SQQrzR640IoEhjvG856#ZT>^(tKwpfSe%EYdI6sx+XH zfZEmYzUs3d>2d3;RuCOwQjIWsJ$YKbU7Dqfd9~_Ee^xvz6kji|b!!Ylt?Vr{$gYv) zd>nX<(}{YpOvZZys!&uT00m5>al_*%M}d8}~4G*AeUT;zjRJ$;#XP0kHpm zGUIqCeD8J`QK@*R&EU1J&92S3nxfKF4=C~8RDdVA&QUMfzH+5XVgxRti(5S1l!%O} z&oE9vk33%aVJlr6rvdu?iWYS%YMVPHEC<;kYjo&Te?UEFDe{FLr;8F#hpG#^_wmYS z%m^9v%#xywcHoe|Oov!r^pkN}o+EYO^Ct@^DNBd&+1S3 z!OuVtcokkWV3Fel#&V?vo<8LB)G-Kn)YCE9ERwaRF5zD2i9={GC<3z)N^Tr#=HfNS zlziS!rBv9m;~xo6Pt-*}-=(Gl*{qXrHYOA;qihfAa?=H#N^h!j^2~@a8=skZ1%VStrG?ZFj?MO7)-p-SaxUs}a z-&YDs2!r6~oxpjILx_TWi7oKHzdwOyS7tzwP|gMP>=F;H-JWbTLKZ=X^-B3C_7eikQdS9gBLUy_VHY1*)Dh9#-xKA$q=T?E}(Vv z2o?ZMh!S>$^&9<7UF{NvpvRz=TLDmh#{N)R_mQf ztPZ1xM|T_j9rLG~T+hIffdm!3{pL6JhU^7wLp#u62Y)mNDMdnB1-P&VaBWXB`?*3l zQ6$`$BmypqP+6kio9o_y`!_@uKCm-FyV~DppYwQ<<;GuT55T_kVWNO;CDJ~`BDs`l z!($}brC{*W!_hX6B3sw7N{`vfF6aotZ&slNc?B;QIe*Z!_$0K&$vk!9;!7sV5OWto zW{l_fELhvlDV@zZVAlz#s?0x_|>|J5I@T`L@3*fDSBUT zJAp?gNN+o|63I{RK+vOa%T4T0CxmtDqkoKnc!!7Ga51hTL(4tQMd*z|zPX`KOlk@3`aN5s9TqzIoageG~g-*23@~Arhsp z(V3%#v&TQlnMBpszous&Nj$E|Xc51~d=|w9NT^ED%Fs{{@?~H{CyB5Mqe&|a99Fi; zW`>=)-o3b{lxqiNGhN?WKgB=8WxJi~73D2W%q}>;PBXn`-e&T8?R>e(zJl}+_=Dy> zk%VGXoN(kDF@^S1gqMUIna1tTla$pUxx*_-toJ!1H9LrPup+vNtRpiL?=mB1V{=fE zcQe?p3urcVvDo(sbo<2{u7ERv*KwJ;{ANuN*>dxToVIPuNCK!E)X8^N?KqcWvfMnx z>14az=+@8LzXOhYgSQ`3(J0V z^Xk%~j}Js7Q{SPo2!|h7p^9qLYPSx)n|E>^na_m5$jU`0+oICInqAmb`#**Kp@k0c zCTpL}pM^~H6&t|RO4IIv0nIT5df74?Q+1;8t}S;CiIl`@Er zh;2h}@;4U0xcRcc^Yw5r<}TDW1r#i3!<|mCs%?Aewt<5#3|Ks4OsAxPWVSYou{pp! z%4CT33&Ryl!x-oWTNwi7li~Hu*P8cQlFVsmr2YjfQqGx!f^J1=Ypr7(#Y+4?&qxU*_HKoaV zNTuIaM7x|W@Y-@RrBxdCn{6PwhKs-zR#vaO`eZ4^kWD%Vn{pMTs*^=6!{Z7yqU_5^#plMg?P zN`aR|2Xo<`BIjPf-;c_h31*^3@?kO&H0psTHAR7f#{>f&EpYRb$XlUoV0GvbJfx-i zHO5+QBAGsL_#pPa&lbAI`^>Iahja=k@3ylI!Yig_QcOJrk4ET*!2}6B&u}Zk2wcX`@xb<4^g~!%p2%t{M=^9&z90(GBs%ZhP3KIS>EZ%=U;mm97 zawCd0TfRr}8C%7Tq_Qfmdl)brTP?3}+jB4}OlXu_N^BI;c!d?x_@3bMC7^aO^h)%h zC@kih<)z$nyAU2(Diax9FB?>?T`C(~fh;eoCs&f(Nz;$~RKAwL{QSo@!QZRfzv|v! z+a&DNADH4_btwH)<9;Ft?E@5s1cihx04ajF1(-xYi_2_TL7DO0$-c6B1uMzeyDtAAiyr1~FO^rP zApg#9d@+^z`m)Z=e!Ilq{SK#(Aq#W4s{n&*X)!DegTIFi8_(E4SZP274jY~4UUA%@ zX}bG_Qjf(X`NrJH6G|M;**Gyg69ERBP5ppAHjoF%xTz`FDFv9o>M^lIX*C_lG6cq# zngB);CZGY-8sliU3v+4qNl%)w9F-atH@i%3G>z4a#1{Y+gO=-*_KxidX=*)=3Rshv{~5*HR_MKag7rc7~R7|07F=ve9gIkUVl1(64zk4j};j9A>+t2 zB6r0Z)J-IE8lf7Ok`dw3gFg243W zXP_jZ(*SvG%(B5T7nhHv-HPK{RwAmK=P-)NQXE^Th_&vGqzjb-*SHsjw4US`N-R&< zQrwW>0u~zdWvi&tM+uvTm-kek=3<;Gom7nw(L7;Aqii#=tzD4Je3d zX#5$7hEYnEhsNc73NbkOOo@h}C4WscD5wIMv|zCmW8f|NG?#$2TExX><^E_Zq`u#} zUm|zvA+V-`VDIF1HJvW7Y8Oi4l17gO_!l9P z2z&Qje2Fr@#XjpfSg|<%8WJ+6ehq12`$JeX6>?6viRb~z3-j=XFi9OI)7^aRc0j6$ z@fO{T`7q0c#VNcdsV8Q<-GcF6b+MOuq|2i)FzU7({s6KHgsRybdNzmL90tUbzwgQr zsYA0%P9Lw~i7O^?gcjGp7OxA{2?}8%KQ8NYpSyLdA0N3E82kg?R?jF_pP4}%O9+oH zmmKTjEz%a&O^XaNc?YYcp9Gr>>+H|jC&(YKmWMYSW23H1GFat^3zAY@UNEN|3Y4+IEE zS%A^pP}V}0SoEU3Et3?F8ZH;CM1rvEK9hGi;MjRe*(r*ey?|s~ zVW>e7LBlWK3zm#mBB~y!^Fsy6hA@9l?GpluMLo_cZ_l!8|0vV38bye_gg#b^I(vc# z6;yRhylVB-fYP4etkSl%K{dIJ)u~WGo?ei0wOO#`vh*$a{Z_UIS>SYUN@~P@uBc*a zc`rHWKy8V;Hj!{DlWOrSOIvSkH#+Q{f)b)ypl6PnD5^g*X0y7rnwmB#1=c;<9zQxy zh2;d|{Z_%e!_eVxm)teF7TLoIlFd|9d80E{woXyv!lPlyit9@r zpPXf;w(o5(J!S7OoE%YQl-c|ur;%yH*;r?dw48g4O#TgejdbNIvu#{x19}FWk2%I* zM;)CkN8XNA%5hdf;+$`6qQ;QH0Str;%6$MrnrEmil+~Ng{&pSb`w6do*o8mP(b45x zPAIv%r6Df%*S2OdnXQ4)_6?^W1k8Ih71q<(z*0`TNP=_%VWPWfo`0FZC1xu^2(Fb{ zSbE+5r;y8bL{Cq*vPh48M^Gi8TWEc>E46%e(%*YC&Q?N}EE~#s!FqbS&7`&SCZf{F zBp&CNY_-ZA+~l3c%6Y2I;^5%~xRauxgXr|-loK|&AYdh6bGD-36t8oEVvX;lZ}Fu9 zt3JzUuHtMwOwu=5PcLpw%tBn2ufgG=V&#w*e{t4cumL+hUqk+vFSMlepH&v)ua#S83mX%9Q3EIEFN9}DryVP@g1VPfDYYGGn+{NEFP8@YLTl%E&JniM7-P+=4lIeU#tGxWq5 zOc->j0>*?pdpd5E$qB9&+;?KnK`Fmx2k^I}nX=YcL4f!T;vX`+Jg07Xj@CCnUf$oy zf2njZ&IV|J&`TR%%>_nvgmO+`tILP4;Ca$usWa6~%;>DFRNI^DN$o(f7p-=Zg!&v@Z}i+idPn)z)8>jM3R1)sxARZLm*=0`7EHPn=c@^EM*jXYhuPMHR;2HPngbGLUe=IxH1z zc=5e*2GOLn4Y!qX+62rj7axQrYYmB}qt6Q3D21iQaMq1+^lGQuHakdn9|OEF$hnoVIhnnp5dsftoiUX@Jqr8vZdsRfSkSZyPRhv;aH(9WJDB?{ zf`rsA;g5rp8M^Xbc`WWNzy6sj8)7yi<{HA2`O^$7RKA;4i~XN{!rx>3-=qH%Q0_7J z75&~{o5%n6!GnLitN)+TuVQO&VEiRhld-dPHvfD0D{09g|G?m#-*6qT6QC9G%gf72 zI8*Jl3WY3!Fd~laQ-^h7(K3xdPg7Yn zNqcaF8ArcCMV~C=Cfztd; z$BrutI1*H6+Q%|C=bpw5ec`kqRxPu$h05MJeRdGGWu0a&m@+b$Ioi_9!&=VLnrG;r z@%0P#M~S#_ESAM&yxFM5vOk+7s%EQ?nAVi77k?>Jd!((^m*R0L>rsl^6aZE$(Ke&S zbpI6$?#WoP6YDqZp0`u#hXan8^kJt5i*aly{x<$~42ZVkm%$E`V5FbBLh|StIr~O# z%%9Yt1JzjzC@O!H1?eAfLZ=<8O8MB#eKX0U(Yn9S)=8z~m25TgRI$JO+%O8pivw~q zH+3~g+L{$SOU(jFzD{TQlFil%)%a)%&&cR`n z1`cMME3@l|Rbotf0&b*^(ojAJW-6Zev6pxhJV_n)WfVf>_JY^I@b@kPGLb}i770-K zF5;p$f#@6L_pxf^-IFBuHqxvi+I6zhTzQ_k{Hz+pVf*qKAtqeU)owvApO7cBhCjhz z&uTTiT#n=upLAS8%!sF7N}6J&@8pcQ^Z(==|DHMj%BjD4?^qBd8Tl{&Ja)`)-{}9d z7e(66;D4?a7OK6v{dFT=mT5;eZk!r{1ax#8ByLoSA|wVPup~srKSqEy%#*oQf((Y) z;SdhNaJ9^b|4;j3bLG%?8xZvf!^QT6Q( zR$#qewf?6xzv|#?SVAA>2)ofIo0XR+Z@k25w}V^W*&CnKcL6?rm_0GUX9uvK{=@sX zO0`!p6L{$JawA8hP&`4!2e%P4*@@Fm25-{p+3{d5?>N)g?mrBEENyPI+ig_WG*Ktw zSvHDRF4t_NiNnGU#tSjoVp;sz9g}UQ41Do?9noB1HN>sgL`LKE%w)lAZLVQXoZwKM z<1{C&V?%8oj(0F?7qsx{{}JX|1TL<#jw-jxyORIz+BSVEx12|VT95R-(ph^Ek8vMn zm>DW^&?l^L&edu$l>9i8HK$XH#h5!2k~-dj5{mU67Dx_6%eacvY0G}K3H-R(D0?K? zx;&e9nJrje`_VszhMj^YlQ>~*y`*N2(($U{z|3`Z3PeNJE9uY6q0 z7gH@UR9D^F{%hs4tbOxE2i6(u(0x0XSQ+B16Pze=a1^!)ptX6eiFHELnUch&co>h` z^_rH%kn9H5Xu(%h?yThW1FQwSvy%0#!0)z$mE?vGCCEqjY*%@GQJ?*Q^j`;gn$@r! z0}RG1+({1S`MMZO=nM)YTQAR79unCN(U-GeRHm1>%Ia>Ivz_n6t`oWXD%MkAtXFk@ zYA_j0SI{8c%I3D0Yiw$+UWCX#KEGQtrkvr{YKb2NW{PQV1)6H&O?X=3$qP{?;IbY_ z-ljaf)YSvd9!~{-Zl%gbu3DH$_u||a*@Dv=B!vT_j8u7cR0~c8V{qmw+|);|hbizJ6k~hc9SIyCp9Xfs*@#K#v58)agx9%|Ftg1W8BBIrrfM?MmLuz-W_Klr z$Zz(w)Ptc==!3MlD$i$Xkgx6Z_c_J^xS{04x^I3r3rHtM^AR|WLqzX=angfzrPf7* z1LaSReNDR;po&^3ZEB3gO?G!D)ZQw`ILniL;Q?7MW5crHXz>%Y{VV96=^!-SJN6+#aC-~#R5Ft*~=zLYbB|BHLzQmvEj_+%lHQ5C$J?dX5 zMaUGs8SiK-WfBkap;2Q$X*fE6Y3i1h#Ty#PYfQ>z$jBWJc??dyZ(~;U8oqmf>nO>QJT>Zrmbhy>d2-6?v~Q-1aXjHWvF{fH`?!SC*9Po&PKcFbavn&XOt`%v~UwhcSTS+g;G>a z_27-jlTMduq`MWehRHsS1|`fVvjg7dPKveKf&80ciluOz)$zBWslu z`8LMSwe1;L6Gijugy~xE#5C$)ZixrXB@LOOO!7C2WHE<|<{&Wbob+M3_u)bscwiA? z+N4LkYJ1{o;B7a~ILAensD|4eFNP(O=p7E)9gAnUC|y%fT3WFI55Po*m5`S)jZ8rm zIn8paGJT^FV_`^j7RR1hZ4Gh|?q$pGepv+FZZ_7|ancZbwV}Lyb_!Dpl#8-4)0Va{ zotuNY(3;oP5iJi+KS)%N#O*n*onmG5nJYmr(4yx0#tqTHx5){MqkB;kd zHMA8!_(=f}y$sAuvR9%I6NtdcIRFLl*KZH?e>Q_)E)0%3(cu+OISPkXvhar>dGg>7 zT`^v+9=72$tsl+Yp6d~Oo*MY_ek$idZ@dVQ&Ggd*X8k#+@*_ap`z3*_2 z8ca?>1!NbY+vAz%O6ymKW}eK#$`?IGrXln54Ie3DhD5NiIPW7uvCwbrUCsZR-T%(5 z?-t(w8tC$b-$elNhE|xCFF&)G)+avKjN3=7Twi-YkgIKAxs=b?W^J@?LY`mB;<_O+ zUmSZ@evd^}`q^Z@()e?(Xx&jCff5}O#LWui@mR6IJ?g@wJGt!gR^^gZWFHOjm!w2u zIYv&}4Tv-C8@IketeruuS+0^6HKQ9=hkww71`o}Wc9>UQ0o#~ktD@ma97)BsW1>cj zrKA>&5>2v;%8RA9@Yrz4_90ZEw=b3ZSR5FU(wWEN$xCN2Ip1(5M&lLfMe8jEWnTMF ztj437w(x$ID!yP==YpzqYP5G&871D$if0>3CizL?DXDKRs9M6XNhK;Js^zt5dstCl z=-n#|Q$4)*%Yz`gv}~X!=C@(u?UJz+$HXbB*#Xz?b7s!g+wJ!AJ7B32OQ*Zt?2U|+ z=z=Y@U1?2lvw`f6O$4S*skr({lNX#TVRZn())+zy;!;(6vNp|3Ng%FdclC z3s*YyLezFRsZ)Wz!xFL@u8^za61K&+ z=%h8gZAW^id%rd`c%D~gR0j*f^P#{#HR%m_pkpjL*CrzFi#>t+2jm^qeBse~X4>y5N$=9*esT#(2OL9aC!WniUdps3Z9lQj3edo_RH&-Pr9OG+ zmS3n_^oKD)#>izrgBW^vA_u902``Sbg|v0J;7%uqtF{;OJx`WME`&Vk~6+H7@!m%aN(1A@^Gz z<>SH{S5iY*yq!l`2d`5%x6?=T-vEqyV6g90mIfslJvsilBp0P22I^hwYK;C0 z9ucEwEj(l>1uAg>e+e*nj0Uh_MBSmoE_!c3!NC)dn{+QjoJ(g%uUl&?Da_jB5iL3W z!Bvw%TNXo@p9wZ*vRBuLc=}|-pEPa@Kw41Z`sswE>4(RIgK20kVf&<>egEP9r@N6> z3J@kKRFaKWLM$y4#o&ev9>itEpVK7rr=o_;1{~@X!;qr3B@9DMxA?0C6I!tf6lm-| ztpn_)n5nAKKdcuTH@d1r{qK}B5_4jD(bfBupC2J0RM`Xp&7@$Y9LNJkF`7)KT^oV*2#r^Xr;cQP2s-P% zE(NP9PeBMd4VCA&{dc$0=EUvef^{481{*oaPAlq0DYCRhd)Ot^3G);Y(SDpXR&Bum zz<5g^gSLbt;N@0nAm$}oob+~PFS11n02(W&}f00kq7%6hJ}cM=Tmx!|B;F&p0u zK&1!jq>Z8-3}C)j)*Q4r>i8DWkkXhlS_G?`0G3Z{m&8iUN!>19_aiCE7zc4hvCcME zE9)Y{xcO&b$Oq&s2*W!@txG52&%gm7ly~BUWx_Z`yu4EoOfh?6>6o1QV8u;gR!vHC z`qkNBlotsQe-!YcN(5QdUQ1eXA0fm%lGn!^x)c7H#^BTY^X8k%3yjqlM9anGhujBm z-|&6M>Br6L7q6Q#5%RW?dT39Ie8M<5k`o+K5~Dj-Syki&W|;=^6Pqx5nQVfvSTn7V z5?&g~J9aLV=WgEOoLlrxX3i6n0`P+bn%#k{PVU?+h{P2omOaw6dkOzUD(+$lY6~jQ zv-*JW3z=Lm;**iUQxe8e`b_7Ba^)3YnKspF9 zqttZo^4#8;Gi6VlWYNS0x%69(jSn+!yN-CLUmZ4&tbcwUJ==W)Y?H+d3_ElH*3|r#S0gbE#EDciE;0kjaU&&X4{+iv=`s2X69*G4&3W|Pug=XiLH z%oX-UOi^bs>r2HXyMg4=giKx~?{Owkg~6 zO>ND3C_jOhZyel5j}EIPRKUq;?krEKm8A6i^)fyQBa=EgCp~eUJ;G7w=E&+xGFBTd zr*P}yDz%*W?#?W(IRKj{3F}6;jECPm5^KFPqI#_FoM&ESrJRCP3+v#(1k)yU@8AoI`-%x{;8fjwvDJJNkOzB-DINp0*c zQQM#tS-#sy<)23b_)~0dg6?+=Qfh(gbQ1-ar6wO2*)~Qr}`G5=_rf#hiHoT6*Nf9bysO{hBmvPrLhC z=BGuzPB3NX7}4E=X2LgrBn*aA4f6&9`^gywD(D`b@_vY_5ENT5i;EHe7PD}W{xhN& z3FsZ|YaqN~N8+k_3xe6h?svy9aVd*^Q67FQDue8ZhGg~qRsI`VyFZw48B|VcnsEhP zC)#xeN%9quu?WRbZqV{5&!}wPm>|Aolc1*RrNcZa>f2wg7I9jH;6Y#T;`U1w!1jOEH=}>tb*KOD6B3FhrvHQ%jVd-uC}Idd4|QA6 z7k{C%Fs9k-8%7=2&+6y-lc0nB&M+hpQQ0jvz?~xXYFDdwQa<3{A2ug4(Ji}SRe4q@ zb)Kdr@&wjZ;X8MpmUiQxmwTM}xV^;p1xgXBk1)`t&J8)^nYgX#>5n8r3%(}pqRLSy zdR{VFAE*RQ0tKX%Q&US>0V7YUH}kB-ei$7DIh3Oc(BgH%PD2|vt|FDNG#^CW z2}*#UiN@pF90)b$3;LZB8Z7%u2RHf8P|(`%Og8zcS~5l?xY@ zSJ6|(#zBzQWHDvDc2$|5Excjt9Fa=`O-xaf==C6BVbuWcy9aGr%Xdoqxg|-g`#DCi zpC6ygc!3SbXQD6soAH?q-^>=ac7}k#KTgV%d!HxzI2W1g*vd^}EKgq>W7qJ^ z9r#ts)+azlMW`=U6vBLm#EH=#5#YwKtB*pCt9(@j@|_&?)Qh}4E_06RMn%!a4Oxlw z8*xAh)uS7fx@(R98gRYcTB3KL64<(fJ^B{H;OkOha%0aEVl|bE-y9d2N7=N^9?{|! z24Sx1IhpaeAw3R1nAgj>f!q)LOAqb5?tX?us$lpOi8(6in#6(HL}BJpV5STnP}zB! z0*$X-omZT`%uSJ@%1ffNsdJ*oghgie=%M+Mc@B{zI?0rx5tlI5fJcjkKhJwGg#DHg z)D=S`nB|PFNvhMk+F|Fh#^oKaFsbD9Ie_!s3fMn)Fmp4&_`CUhQ!8qjM=xB_`K!a6 zk7c(DT~o-z+z*j_Q>4fue6R^>Xs7cI}`eCC_NBww;0H>FMEAR*JD=^r=l*PW(s zvYjrk_VTxQ1%&GpDCusT6zFV@4AG-^XBBV78AZct6(gK-G3Xm1WwR*iJLs|o;x~AL z%%RV<(p+|KN~kQ*U9)>K^5tbm)rmmEVA~`$q9! z?%r~2AA;K^Kd8~l=vWwC6J|o^dL|;*JI~wk4rOpGMM>s-cGU0;LQyO0&^e&zc&0*U zH9!(}Y(!ZSXIvRwf;zyJ?V1{0YPSH|B3Nyion&{A4olzg4!3tHkGG3|_#@lZKdR?^ zo!Oy;u}nIDiA3uwF@UD@YhB(5xmXbabrkS=9- z5bDmL+(p!g_uKI-fObcK2NA5cOzvxe?!6>) z_>#{_B1?iD5q2OTmSMi4w^kvu3(DAfM;sY$2Y>yPOB&7fUdEGSY9Cu4wV+$w)G*XY zmjNeYI=BT~ljYZy)Z(ub%YYOARekkpsRq{LSrtD3f+v&}airf&ng9!hP5C^U9qbTa zWEL8ke=b>nSQzt30KQeUNcM$to+9V+)nu=`l}nK!JA9mTk*O45yFtXKrIdLe5069) z&K%jut_TeL!lgw1NU?^t`W$Ern)7R-5`P7u<`^z(a_v1Hey4+1PR;7b^_d~35~ z(R%`DWDCO}k=V&#tFYAq%Ay3|%H`htF?t8zl`nd#((lY`Fgp&O2KH~U@;wQv=%vH1 zVf64}aKs}!NzTlf;Yx0nfL%m1+5kbu^J;CI(UONY5j$-sia&JdV66M#m; zMLwpR7;>_wQ0AKE&$%0rR)Z;ok{P#~q&n~r>WsBMxGW6wct5q{Lwcl2><&HGI!Zm_4h}KhG40Kiv;_%FY*RoHwTS~HS z2$U7UhS8+=M+SA&I+!!mlG&(MaRq)v@Y?@l?5(2e2--GLoZ#*j+}+*XVFSS-xVyt9 zxCM82cMtCF8+UiN;4t~-%zx&eb93gdS9RT0ueVk|DuRj``Kl6!QT`q$cU}1qAcsN* zajt7b6YVsQR*^8uGQxc$M5#STj&oaUm+Tc>Ul%bP%^80p*M&434yWNXX(Kae#$izy z^Q(9e-|-0S)g;09FD^A1@#xg_Mf$SGM7N;x@HJTbWEu^ex*Pokb48fei0h9~b&$(F z=x6K@1!!BxwtB!Pm~LPQ~94CE`AX0K>cdU3;5t=o}(9zU%p=8iM+2+KkP z3=Yu4Zwi}shS?MMwc5Ew*XVH{4qzI|+zDU1K_S5@RkVGHE=PN^{k&!FB=PzK-{Vdwy8WaBpQuP2e^dUC%=8DQ zHtzh`V!TAz7=rG7M)~h$30{YyRr=4}uA86CcUrZ?p!K+? zCs>M~pqG^=Mh(4~J65McY^nR)bH_VR0&8^7h)+o7watU_YpT>W$mfPP8s!EN5_Hy08;Gn%utOU2U3@UM{p(B|gF94~B2)x-o@!wVc3o!?C=y zcpsMd;o3U~)JKj_#-5Vf>l2}9!($7MSN0FdeeUO{UTc!x%E`)Gl4nIEMe~YxDCg$y zII0@^tr9d2Ht)z^s)xc>?-s-6{)atQ?;dCa!bNYn_+L?9)wdn*Im2JOU)Jx!K*N2M z=kRe7>wn!wRkx~FQsL(RG`RP$iliZ&lDo?XbQFP4N|NE}XLccW+UXg~qdi^fq@~Qj+Spr3gAyxn~k<2AgKn54ICem^bxd zt8q`WKtfwGM>JGQZxrdy%dv$K0tckQF1rAplOb>Ldm)WJS}NK^C#;X8T3D4;FqA|Y za_?e6JY!=G8;*umUnBfXBo?*R?ABPTv>yrP1TX2d5P^=$BcMM;q0YydJR(#f3=F!j zGaT*0SB?WSGEr$qei^B3gi!I5w$#umw`_?D!e(nf)f>(GGhTir%0XyMvQw{QK7>L| zzHn@_vbUPbEj&?uU-lNn$KuU-gtIa&J%fr}43I!nh#BXR92ap!wGc>f9Yqpv@o@(d znhVX!1D1jro z)^Om6(i{!H*abv;D|h#EaIP=;p=TtqX6EptFIK3~loub^tR(?!2Tp6*tOeAtqG3>R z{km5 z(hkiCeA2Ui3!s1kFXdPVjaI;37+s5nx;%rXw6@*glrH&xt5|u0|jwPdfL3 z*z|!8rtqfz{E2;}>ofMhSuQ^$gu#hN$Y+iGRnBpI8l-jz!z;B+dCYZKlN?496mZKD zmsEMvQu{xF5~Eh}1Bee08}};szpGjO(bD+JOcnOPmKf}9VjV7_-#>&np1^uc(H^Z( z7A039U@0zO)`nBZO&;#d*`c-RG#P7tn#V|iF=R2*Y$-HT=rGD^g1;>3_@(YlEW;is(M87V1tC}8tZ$C2E1N`P~`Qb|#=Ubb)jn3Xt2l4LRp7;ANsZ$!&z`A9N67gm5S{`3RvTo)KC`0$-f>S$}yVB8#^6rthbTTySBAYzuH5EiI* z(9HP9Nx6YekQ+o(i6@Eo>rP^;vDWreUfQY>hclt55M#iu`*>{uqRA{^FH7oZ`jPir zF||{1GcPPk1vENv__CR^ae>N_nUI;mIPDz^rE|D8S*&dBdNc}i<=^u3c>W1 z(Apu`nZ#!_Sh6aO2bX`nHnS`dsZ6^y!NPpaKjYn0Qr{JVwZ$H+d@uK`i?cb}mi%`fvR?K_ zE=#Pxp40z@PgFa~QD@ghmH60ZyY2z`tZ)=*v*?hvfpn{qL&PiU=eoXB4$tvT^Hs)_S;2F8JfSV`5 zP=Z__ySG_my^{3k{9?U6-+20;=8nNaR9$-mGpKJo;*ir}n=gB_j8CSabIsnY)*9Gu z1iGTe%|M8R`v)UdM{RE>N$pwiy1P|!KH4}_Qs##@JndzHRyf>pcE~2L4{~m6O-g)^ zO!yXzch{x!eB}*}Op!_%%iz%2F=sllYqIzB*~G^{zCyO;{VG>4Jy^O8UM!t>&4VpP z94|e|waIY-g~jJ$wm0FQ8Hf<7bl!Wn!TC7 zOgjCu$LXMLN%<+IdW84#`Sufb_X>s^OhT$w=|>-UzSF8pd`#EkIsk$@VAMprczyq@ zfR9k?-tx%l6rvn&M4#z>tcG6TiiwXOmQP?^)A)Xc-|A5RpkCtpl-<sz|Y5VJmTn zs0e;#(e72zVu(#bB7b}BIZyjU!s%dqAA?AzOR3w^fW3{Uv^Du8cWQi-7W4BPV#0gtr`p|#Ir|+aUcg9TKl7~e3(fcRMANyC(;sfRfDzX!7$O(%8AIgHT^2}^33-z@6$;bo4 zv^!~R;qi&rI5f&KNV&HhAxqC*#Yr9Mk7oc7=2vhOMG&4fRTUprN$z}6Nn!5f(!$JEV4Oo<7OJ>5k5m&Eo@UcBJS{CGyHaR7>xbi0(wn zR|Sd1SFw1z{DF@^2&Y|)F`N&T~9`L%4Mt2S~u-YadCRaH0yYMNPg1`dzhuJ_9h1v(4 z*bDo|Q2&d~cfEj{M7dm;_T1Leg&WA~C1G1{YG@@A5AO0$WapQW)#>x1P{DG{>J_j% zEs+y=) zi0>F}&TR2^j@n>{c1^q?L0xFxAu030P0KuX%DAb;yAeimZOH5CL3vJ1-*JFKOC3R; zzCUm6$d9UIsIl&g(f{L2iRB{X$poR~z<>y6-CkAZUK28J4=0hX`ctl!#uy5nT!P0I zD<7flcxJa;^xPs`*EWg`ff|E=LxxMb4w`p=c#^(;%4cBrR>~`E2Bi)-Y zB6f+9_ZOW82>lVZH0K|m{)y6d^ft;DyA$|GI=TPt3Y&z~>lJr7sqh>0W)m#eBTw9} zm*xp&%iM%*>2m#FJCRpIT!Vi5R}ve6_rmKks75T@>5*xAB$gRSLs7^{&YW1ib*Ou{9rf=U5%(Ops5uB% z%LF$10`W?H=>{-q%6q&!S0sCKzBF)0W$D^=i5-aFw7|xF>OcLA2EGBm8Sg=k+A|1) z!3lf|OY42Y2fJn=ti&{-@~Ab+9-FTWH6=j&G1FY;_sx3G-9e?hsFRAq-}L+T2py3| zx$gHCPRM#6l+qh-LaSA(hmbR*n+yAjh8@9mSBwG0Bq3R_PLk=ExDSCSUe1Z%6b>XH zu{F}K-9d=U+JFMc?ZmbgSMAk+7a6iB+kKDug9ftoNx6;@dmhj35nvp)t7=-gdk0d@ zb4Cwr&&W6M91(a9?MZ`CfAr)$gK6p_mQGxE22Eq`7B$or=*e-UN|tN-LfTS-Ub~ra zOAM%I%$F|$st&zq4Y7Ty`FOJCU$O3?`Fbg0y-e*Qd6eS-?kVTL&GQU~u^MX%VL2L0 z`w=!1@cVat<4}p0#N+hz8x%xD91T^DjoL2B>AgRw=8PxSVyQVB5uQ(+WV!5Hu-%Htn~VKT9kw!nYzJ#14t(s zitJcIh&sdVMY!7M$G0jhX~7gtTcShj%}w1KtvHY87^U!?Oys<^NGp9<#l25_SH z#{RM@a-rvO3zhKFp#(i}?Ogi>J5Zx2Z`xAhi)PAfDr*VJwe@on=<)v!;GIoJYi^5^ z#@&wpe{!|{JB0qf!S(+r%84Py3`75Q1HAlmYW)9ul>R^9y1TKh)j!Y1zxGJxe{cSy z9r$Nfa$(l|&$5hz%l|47%2rcUCSXPNLnfK<2mnFAO6>eP$=^iaRzlMT6ctHMpd)8Z zvaRwsUszs7C-n^H3+D;LyCK^3ld4f7pX1H=+?ziv_2lLP!FdLN!82&?4I#fz!rcs5p%&;R}(FpnX0kxZ&m4YcQrYO0!WR;IiG*V@O?gev-N?QG=bi-o=8 z(beNwOv&a$(MmKxi>=o040XAh!&!$n{b2tJp#%kG{XTVzfprgY|6^yJ zZ2O3iEHs6u+8B?Xu!pU4+$oy&JQ&Hh*IedWmE6{tpOB;;LylMI<9{Yn|M$cGKR<*1 z(Xqgme`G4uKQdMC|CUVsFOKEk+5ZbRab*U0IsPYS?LW_E&Mp*UUan@M&d$bO|L@v= zQLcts1d^CvNH2|J4d0>ru<2WLSmIJ7i^~|vR#7S7F){^9Q%bO0&u z*!cAk$BsyoyekL_b~VD0V*1uCg>`uxZSg$onNLIWaOPhw+&+Pn7Rv)wMeSrk z>z!xtha0s{t^JVFm;C*I1RTXc+KjZ$qP@D97eAoXpb(|z?j_a+ND3Xe5k>2^*7;dL3%pAV5cJ%x$BWC2^dpdAXI$^4?pQcG#>CtlvoDxPvV(S(o!a-{s&O)fT+&OxP9GZY zDE_wo!LBl>h2L#n_AXo~mI%6f5`;WoVX2FNg=x8o4owJPqp}n_%D`_y@{NK+!h%Gp zH`(F8!1t6c4>P#J40_ylDIU&xxkMgsv%Fj_fXJ$I1f*7;sEJ`zNxVS;zR-(JP z@4<4n?lNC1#pxO2u!Ni>m+`_yy)OMTms@WYOK-+iu6r;`PI*;K=aSok?0zQnfoGSh z>o_Qn8^;fK1hrN$vLK@xSNCe>mFU(BCCR|5Ah*|2gQn|8M8Vzqw#;W$~Z> z;r~jk@A?lbyX+=paTL8}c@%(+%2GAJWZqN3j4ryKC7S7iV8n}>yoA~xvgQgI<0e@W(-HnbJ(?;T4fa}>f1gFKXu_vg~ta= z`Mx}-d2Dw)<=p3fY#enM^9r!BzTG6?2Gspi>^ZWHfVbaqqHFa}kCL>kwjv*no{oV7h6gO!F z7XIR?v2XufAV>aPZ`|xoz2+WDcykQHtp*H`L&2QrmP6J7(coVZ%XPy+Vz+RUB7MK^89X%6hU)^OCZ`=b4Q?K5W@!B1~2$`zT_D)UNzdlInaI_W!G z6`fK4cP#}#hHm3vL}%UZbAJ@gpKi`QgmKwyUb?zwyePGQd6|}ad}q?E=-G(=#Cf<<+WZ3Pys-Qf8YQjE%z!_!qQ zbnQ`jjN;2(Yd~!}$M}N?YN+$|`Jx4V*LinMSQ{BR?U@~$#^tN4{}?5*3GzUlv``+=`-;c~ccErl9)~Wg8IA2D?>a z&BVNd9^A&S%*c{^)$Kw>HxyRg$hSokJB~nl%1qDZuY1X12n*2xoyp{NVajg(`j~Ik zRo?wiD*t}DbFAt11{V1%QMRh2?S^qtTBz;cMaen@(OlXnI;w-ik-khkt~Qh%n0T>R z^0Hz3tCqsi)%CchXhb?=3L)x!K~m;9I?&MsG6O4C@-dsLq%^#)P$@U9mMtx571HbV zEA4^Sd0-r)uxZFgkZtB1ucKUIp`-?YrQGs+bSmZ*&Q-OmHc6Kw75q6|)WLA`OWc-o z!UQCp=y5$a8umBa@u`YEpX6p1%529gosw!3%@Rgsa?9$OVhvQR>{K?picX{?36yw< z{-V4U!C#OmL`D4jw@v$#M8i%nVxY{66S?LgWimWw;<0(>LUFU-OPGA~K2ohtx+&hI z$~IbJ1s(2M2f@t*u-J!L-tZ2$Oc8B%VCl|BY39*&c&r^#F@n*S6KX`Dl+6MYlrjz` zShVYmr84mm3leZH$s#BE2?H(iAFc-Gv!n*o0IeTE4zqr)ai=UL?rE$T8SqpL9K@`Z zjF!WJ@juwihIOiq-Yst~UUtS}WNf7C80{&8>OJXbB<6yL)zT{Au3}_;@DzrEAf zOfLJ7+3{>+M|!vAD9EG>N`t5|ZhySl23_w+1;wagMivafT$Vz@Y>#>5H%_~h7`J<9 zg(cSoQj5+Yx>N1Nol39(Da^#^Zt$QOR+5uy%aQ5R<_(}O8%=Mz8;?=oo*MaTIX#JL zrOQmUc+!0^V>HcfV74r8sJ60TN;Yim$c%GR%%}61Z?UrsU|}EIYh*Byz)DUF`gDg( zBzxAqn)?(BE{I^b?>Aw#$(fsBwkP;QPE87eu}kz{2B&aY7WFz3&sBZL!3VrT{*`477{${lc<%#KH#G3b_!FH-{PPuJwLxja z$2s?DDKRa88r|94e$L}X7b96OdVR(I&Omn zasY&GnO4)YzOYw!k-IRA(~8;awl)Ms^-bcUXt6O<(xL4r^fyxGJ^}gh!as<6kQxrV z9O+fsmEQ~Yoff{u#=`Adw!I9=SC=hT$n}nXT_w3LE%8x+dP3MAZA{k0*8_d&GpxEs1nON+{n*7!ZW4IX}La%Hj)_I zPo)MbYyRjQw9t6q=i)nCcj)X#n~r}LWgVWngZa2NHB426x6xB7TCqMR==u=#{3}fA zzr@y|Ac={N0605PEE;RQ2%0w`@H*;gSr8!G5c%omtM36xz+ zdMhXjlOOCrN1f?yaRepp5KOAb;ZK<4%cbkljD=)u6!@h4HJfc_PBJL#9!TV=DGEcy zZIzwL=W!MJ{2fW@XL4dxUPY`}78j)8?0SZt_g64FVm_86Xl<4iSqrQgbljMpFr(D4 zoDn2kSBAsB%nPDv;WZzSR9K;+%6u0pGi}ER`nyPUY@8n)Q$_!6$a& zIZX1Isp7y5O*20#L2qwJDKWeY^9vJwd9X>mShs;{rYUniawKZ`94lXp7b&LOx2`}U z{2TA^{mR-nv=GibzT#>^%nQ65Iv6$RzF%E5thDpAcjoJU0;JFQ&a2vL_@qS2^2x+Er%n zMcQKZR3#Mjb62%7=ka(mjI?j64m5hu)k(-pk;T1Gmz=ITUcY`rK~&D+`MS_%SlDH} z^I77jb*L@Mo8edqJbch4YdwL2Co~Q*e9HF71j}I(&p2zI^a{t`AlK-%tmOPuMJkse zU+LWpJoKF;okE_}U0L$9Fqx~Lpaqt#ra9p+dgRn09gD0E=Wj7?9%m5+d@Rkmy%u$u zrz)Oc1!`5jdbh><&JWaQyp{84cCHIonbzLAe_maExzZ5QK$P*OlJarU`ifN3o}L>s z6i^^07dX?{<3DiW=;(qGF@#Ji#{EUiE|fkI5EQ*Gj@`e+^G<6&O-&v~79+PXI&n#R zGI7HYgc5ua+4uY52d;;0^f>T*1m4B;N_jz#o^9spOIf&29}{CnVeTFjdinHs`pKje zw>#wF4hWy9TxzIFHF6!qCs+VO()&yF5{9ww4d%T|RNeK}NH{qz#{+V1#@K-MBJ7TT zBDin*Zjg~@!fQmE*v%4%ME6&wmptvP`ImW^x|N8yKuG1Lh75rV^Rf-P>b;l-cy;WN z4~UgBx&$S%d>f+L0#!b@cY{6cgQEM33pCUSuTAdgjcSLkj&D9(nFa#1%NACTme=)U;5RQv~hC75)rW^BrEb*P#HK-uGVCczBbeO+! zJv?{s{@@IoMMq5_y7TYwwwf~%^G~3KZ1@;>K+}MT0ZHEAf1ti$?UfP@G8^TdcorA#)9w-u_8M~IHmJScIbt7#7^Op|%ggMm-8th;?Z7p~ zQA658hj^hc-X<|{&bTcQx_?J#POjiH3&@Q}_~bs}&W;o!;Gp;*^mqb|6KM!GRq$d; z_37!C_RXB9zm|ytmv)-Y;5=VXkVDJQOczEU=r$w9V@j@>@M=T;U8|rXctxS=RAquV z5-x+X`S!P3ElV6(*dRq_wRTMUp1qfYUFd`T5WsY@QCoP6OE|I%R=S>|bX#c5?VbX5 zRjF4QbS{AMk%#VAwqDG9>B&6mSWq4?B_~MGcjXrEIfDTBhlKBo=tjXpG;`P@dyg-% z3Fu3s)^_dkjSdO};?%2P(IIgHK`u2e*-qCZpaJUCHM||qed~^ctR$1;iD{ehmoc@df1>PnsycLSUU?^5WsF>mzi58$RUUH?9CZ1FmHQ^8$3KBdik@2p)4CZf z9Vkhj1Urf|V84RsYFH&Dor9KhT!G&7AWar;h6_XC$myc7+8{UJN>&>9!!N(S>xSIReNs=Dx7C~EU7u`byA_0YE-~*>)wDBUJx+aS z)04!tj^vIc56(Bv{FXFh;>iNfH76l;f#x!%kkav8QFvo-wb!WZ?~cPqMG_HX%( zv+ul?pZSDS2u9;4nRBn2G-)kIAA{GkdWYY6k_tp$AYm6^1SF?_0`Q48bYXbpxu}4M z+Rsj=yVQ+3@jtULa$Vk0KBBZ#-^IiBL@lLsBAoJ05T+`w^7T`jC* zwYkg&)o&eIR^*GKbj2J$C+}lO)*815u2xoTz~DBQONZ?rimYdzc4ZorLreGR{~y=k ze}{YiPavp}UE&IX7z`{~^8co5_#blo4*_EKw6kUYVQ2fl@t}Wr# ztxk1sP9eZWiKd7bkcARLVTs~Mh<(FF1cwtv#Y#P()Lyw5-b8}av8&dsT+*zr{@GQn zXlH}a6fAMJs3TzAT&-n;;ot5< zZ|_+Cr4Yt{awhe51gTr^S#S4H`QSd;S3}4@p*AJM=D@ky^*O0;`Nb+haHsU}lwHlQ zOJFl@hWpOq{)OsOPsl&VA!ULQ#$lp#|5-EWpX0h!cGq2ayU)Y>6c)&rbDdD*;qyY= zwtarc?ENBS{7K3D^!hU4+k@G?cUUX;w%qytE2-yd-{Hpnw0mHN|0VO~opI~%5Ff8# zMt`I>*8Z`>y|@8zWg_<5W}&l}!XMzs&Ncq~pT2E&&)Qr~$BhZ) z(GS@+0m^pIwVms?7rf7a+}y)s#LxUx|AW%zcaxypr#l27Fy1g>V#44vBG-SsR)#$3 zgZ;BD)qnTU@byLGGr6zluR8tL@I((*Ne>2`!TtU93ySkgA*NyK1cBOnqTW{0L~hqR zPWfkL>eta>kNl!A;%6z~V`Ad#@4f$X57~w;+huFWJ-^t!FmsR1jSo!E^`W1Eq`{D- z`godnZ%AcGDOw#z)fwNHgUYv8aROMr#8Dt#NV`de4atF>F3{phWN6A& zTWeOVL~SiK`6b;}PM4vSZZ?^k_GPv9Kh^+UO)0c0J+z&adRRy!YZdtF5i(VF#Ok7o z0x1e1Cgq&FmN@OoxJ!PjZYGzZB^qwg3L!SuT8ugYKNbDlOiUQ9hpT6XKw3RNPcO^} zmbjQgXJw^N$TAz~u_81Vr4wlLZGJZm&1Ur0RfciS)W%Y;RrF`?9=TW2;XBws+O*AV z0Tv0BfBYHLA-B^IB$}&eCYr<7Kl>LS8SiPEQC;eVz#;)8BUWCNsz#U(eUcYCT3boH;PZxho+tu2kGgxwT=Y z?ED@l%jAA0xmo^KqI123d0MA+@zi?urmkfz$GlRVLOj!^u{oL6A%)5z#Wn=ngW^w!WaD@pfC6hv}H<2nnvv5XFN zq=E`gD|q7+1rBz_X)*=M{(4gzfjQOWxr#Y_dl=p&M;-f^=rz)m6@YiOEA)I4!*g-^)<_WI$$&Fv)m_sX5L^yf$7(-H$BridSj_wf0 z;;ZBuUSl>E_?pv-SKEf!=jWX37e1T~HOi&n84#Lf^=RrOzZgu3WkEoEihIEd#s{ex zOx92&jgN?BLInXy0}0WrOj1M&Ofs~Bb>XM@B0P+$JeW9Y^iR#Fygomb30Zjrl>GZoI$`PO!`8J){C=XJ%$f?OdgqgwR#KX+B|jP}8`*PYv>EC77}qaC z2Vv;JFH_7P!7@FislWB9Lk4EJ19b6`^9HI2LA47{q$Syc!wU>oiv;nwtR07%6@pto z*`aT^7Vz->yTeA|&D`9?8r0J1Ot7&1ZUz~x)~(%j@(Os1*^vhfhj1>v#YyjAGN6ws z+B4KGB=XiIT=*djrux|02mXM!c^W9)e4n4Tu@58t4jOtu?@-4NW5gvopSHx&NoZlN zU4VweKtJbPhe3iIM-f$$`6WWQBtt5{x9Cp6q0-`oZ0FwYEOC^-jzk}w8Tgj|HxHqs zP{d|HHH^hYBu8t8%y>wGmCrqvZ7e1)?ZpgzREb~UPZ@O^SiK3nkuaA^sE&CVJCcS& z*+{S5BZH;$kmH%RDkbjCge=xnW1d z!p|{t1Lf#>ARW98#rW*AZUom2=B{MV9qzWBqg1HtKC=*c=kGf2@^sVCz`&5gsVzwU zfsKnS2n3);->v?MVY#QS_zEr27s zh^_W+9U5#5w@G@wva<3Uaw&s*<>+COvOJpT%It6fKab7^HECKXHn3v`<=V-^5A@3u zTtCx!T}twG6wJys4}8>{%iR-!62e>>!KoP=lizGg{Y4aPLGurO>UL_GidY&%C6VPk zaUtb=iy@(MX>{dky|^W3YPt%G)!v~D7BGbA)|DJsNZfep`bA7!i_(DDd?wb#;8c2Idi)zMeG)>XEa50>RG~xm8T zEswM_B_S-I$N0Z!R!GR3!Yoq)96VsxxTH6bqn11>WVVBy3T~j&;mAwCOT3Z=wc zh%5^@if*~D3HjcNk7jN?`}6}(%(9nZ8ZG=Kel2ANp=C{NGZ(Tg;ZZ>7Q>(avwZq3# zaukX6guj3ac7Vp>=B8ldTTwdMLqwx__IJQvE|~CTfT4yV`y%AodH9KVX>}OAEMHP{ z$!q8uvZZYWku~*Bl_DazZtx#opA^b8iLsrMh*O$O9(~R%;*$-)c9Oplruw53)Tp+3(>mb8y7vH2&-_lIjj)oKW082F+@TWO zmW^;x#7c+xrzvuZqGlgOwFCoUwQb|iaIQJI;9?m%2>%`D8lw#UifI*cXEONot6oJV z<#l)S5=DV|UhG(;vu{*b_T`f|Hvi0JzK?N@J1q%k%xwu;te;$ORv9ZvaCQxKH{DAm2G}9=i@=q#Ih+e_~ET7BC*&BQWJep89s4lrx7a) z8rAVRHPhqKyG0tS$#L2Km!y?sA;_nXsF86khVp`AO=kmXt2@XuIqO;CnVFVd2-qQD z8>q}qf$J&`Sn6QJKSpI-l*>!&>|7=5kXf5Y8k;$}=1l9?+t>qhfRdYF(F87bZ$xBVK8Z>dOsOl{3#Q z&W^wF@Pg%y9pAo`yoS6M=NoV?)-KcrWJpKTQqq0F@ahsCw9jK78>vAyIwJmbF{*pmQ$@FZL)rI;?JZ=I_V- zC@udi+~QdDF9!7(R6?u?DWb3HuE1u8$+(`pVe)dukhyW^_hRB>1vUAjXuFjpN-cV6 zm>1gS(k~KrXPb42(+CI8bC#$hKd~UiF}yu65Hur_*_9NcctZtENz{ltlmwEBpm#L& zIqS=*G)PQDkdwr+5xLxut5V~~iUdyrcU*KzKyx{)tcoO?t0?mkVcj$XO=(+$kmpF7 zwkY>3Zyd&-u&WFFDqPD_t6M4SN2*C%tjNTzF{1mZCcJD><|p)_?*M_uL=*UwBZ^GY z(iT`aQ=R7wOTEJTKyxq4V2*kKrZ2Sx$&7|a@m_{Xk3qT~XoRR-Bk&=jf>Cvpb=2T>KX4MfO z27gW;>|VB#{J!F56og0K$?z~vFL?~5*fMW(;g^5Umtv)86_Z*}D9|gg6IDzWKW~lX zA*pU9<2V_hBz0cRs0l#!ml$`AJ%Y@7Um+4gRPA~_G%AFajA5J-q7z%}BvsX(_asmM zAprd5#V0kk`?8_&A_s zkRn~6y2`_{1`ngpkkIcPQ_nsscl>aer!u6(v72OzdWhsW6?r&O$<47;Q)Qsh!AbW}6!2mxbWJrl+-L~oR4fa-69|! z6m1k@tFztFaNhwWC6ltc?ivLtedo%Xi+#MUlWOTBMPsV8+B*3qmodX5yFM+=xH!h4 zr{ig4)fh$qrcLNOo%+H(v1XG z%D@6tIQ>S{AY66B_n7vthykT$8wDOpf+1+0+uhBbs?IOfh}RhEplNuxv*lbXDP~XO zHBV=lkChy*P^L%2BlQetZX`N1(e$`T$$1)%01@?YEoa)Xs#p{Gw56s&r#d*~QC_Z{ zc(>Xkf4U<<0VH#|0{JtUV~-x6Sn#swoM+_EhhHDK6zA>_0cAo{D|TnGWoMSm{9<=1J*6&yLrtI$uEmkmLeXjK}c5}8CJ_T6cuIP3xDljU|rX5d`n_s7DH z+;~=_uo!N;O`|ZGW8YP1@kP9ea*d*P{-?dC_(0?$K}waS^^Zxw8>yF`FU2UIfVD5p ze#EQZ=;45hoA=rA%IQCGGRz2)@eX)S**;p1jM}tP++sp{^})gJXUa$Rw}q5CzCGQC zClf}uwOr?GA{U-C!){Bs)>Ym)69r2@42inIEVPR$FleefmYBte( z^se9M%Hf^S2cpW()wJ}rD~ft8VGHe>2Wyg7kwW7(J8>I=`JF}v!g!>u8=V$UptQIV zAfh+%s(81X&u9e zfTX39ALkZ?=-^)TUG75W=M*4a5!FW#Gay|V=DBK;O05t%NpR@CVI$7EdI2%5`KN=|gt#xbQZ2p(!>u}6>d@8EojXf$h( z2!!yB3f|dU@`?c=;?G*w1(IE^-g#6}jyQ~0#gQV_>Kfl&<&O^jkypK-Cfx6p-`XK9 z9#r+O-)54NH878#=Kd-BW2Y}dy6@^_d@P|Ky4V~wNva#PJTyo+VeVlpo1?zp7T9Hl zt?zX`0B5^Ww^EKp)JdvOOB=<#82&b-wm;3Tx%G8|@nmDLK^*^`_abE;pz0JYjGab# z@wT!ZWu~epJz35Q>h1y%Jv`1q|6~IRPAv5MHPxraz#YoR9vO9CkutbSMyZoRa{rUe zosJqAkZ5iXJu2M!5^9>B$)(v-{<63dkZVQYw#FRXYj=)LS@f`)ilRzl*;X5~#}(2Ux?6F3 z#@S+5h2drX;p->jc#nE*C3m?-$Ra(H^OcaNeZ5VA4SaL^Xfm@|GsrE_hU>ZGv{a%q zQqyG8+w%o|fwA;cuGp-^+%$2KbY0rv?LI8(N>iePBANxF|_FvvK z3R(%0-1&da*Cd{1&HqJ@d8hHA*8U7vb$Vr|*)Bm?ErNVcPXMRRjJK8uxo(1tu}=Tb%5_qw7!Cg0SBC`~tsZweEae zlkY%_bh$OE`zJb_0YXT2esYTW=L=R3c+CklTE^|7&7f#H*<1~rImI*d*Ut8Y7ST-Z zN}E$`H}=g6`$Fb2pHufmjEz2%@$ViwBp%3j#LfY*&GgK%gwp(w?eIu7`}IYbxZy zW^jvjcCzDvKmZGr>xKT2Vo(T?G43#beTtGK{h0Pba_UyK=nV|t$`g(kG(Pzcv>PFBT~ndV^tnQJO}opgx2wH%DcaT(N6j) zY!A0>+qP}nwr$(Cr)_K6wrv~JHm2P@Z_hpV<~%p~C-=PB$^NiE?fg=!s#akYZs6Q& zqPb?ePpgG@ujd?*jL9X&{e*fJ0YG1XFvSP3&RN;?@1twJ@79L$=#Z_+9v<~g(TiI> zIiy+u3!aWUvCHqlDg2PVU9mZ@h^R9}M=o2b{DVW5e8-{>IC*k3<)Gl(&X7=!TxnNq z;z@7oQ;?8BhE$al!x84k%4@ zWBrC5Q?PbSeJ4w?Rm}lbCJ-6tky(y@xd`Tpy5j+if+TXo4TsPUT+L zG(;yHVIxRlBP6R8CD9Gn*a$n3jY!QxXRF6@-V1dG$2XWQyRC>L{XTCx-q8Yi zEeeL%?CS*Jnc!y9zi;i}3_sT_D3wFy*Js*%0hgaU^ zmbg}Y>OEO}y{PzPt{){1Uk|_ex8$<##Bh>y0M4@_sFqJi@YTqS|^tnMI z^6wW4mj3|~xTcX0OuuDIsJ@A;0zViEU95OhPnLTna26H?*a7N|!XC8Of`C+0wuU^k zu>GCheG0nQn*$hxf~50_wb~X@2aOcDXpcqH&f9hH{u&h8B^-O1L2$U!{if_a`Tp$N zxD)iy$I#=ff`5>kC?H7u;hzNCw!NuAgOByNfPnoFm(~yfFAdBY6>ZGmbzA99tJWm- zH)OkkA5FVYC?Jj@qgtTFBMF}Ei|&ZVJ_+qhE~k42LTdWf)jitWcZopSM)=+;F9F_9 zty>q@oOrDe?clehdYmf0-r#WaOkIuUSR4~b4$**!a3ZrgL(3FE@kN~zujNjVw1QMt z077dIjVoX^N#joQf~a+;MiY{h?lk{xUdJIs=MqVa;Cd|+=z3%nVcBNY*s&87r((jizgq|4inmgd0 z9xtGKV&*}PQWT7~;Qv0W4_xy~96s7Ne6Q5=2B~hyy$jP=$@ZO#X(hvv!h!fV92cSXU8H7D_1&*H^5n4UgWNQriq881zS5vsB zCYc+3QN2ZAQokvfeIFeOJmn)wcY+fvZ+N$EL{A8-hnKih z)=f{^gEl9+C00X!eu4^u3)@h^#gKr1X1U{50KKY-?%o6o6IR2rXe8No2@D|BVj^^` zC5`r%GWHcT#R6;Ji(O5<xb(Uuxa|JDz@-1Zz$EyeE+BXsem9;qzrX$;o#&EoVMuIM6hAwp1_ZQnmGa*u zK`mGihSI|uY>%MC2IpZaixt88TtAMI>@qLS*wDk{4)vYt@C{Nhd$|tnovLTIi(ypK z0j{TZel(tBe}8hFpMU!M{Q>Udsl@CGwS?w`X2v8*oFxcc2jpn8Q**{NaUc$!Ww76O zZfv&%!}4M5dsXANgFk?SLPG;tfcD$F@CN!_jV;D1-ctN5!x>wr_7I$zadHudE;ivv zsiepV)3mV?iZ`K$Ve`gXh9R$=xa5bSGFUUF99lsRRAJOs03xQtuTZ5u?TX5qb^$9T zwmp{|OU`sZ-9s&NX6~oGcYVg7KV~+ldFTMrMZmDcksT=TB?Ae)h8rM<1>`;>56JwJ zQdjdQwfqm$suChVa_%E9!^QO!+nPe#V}&0(4{jJ7*h-VG{A&(y*mI)>#a*?|Va~}< z=I{}A3s-hRkj=CV$16wi3wOe0Dw-QlDi^Gts?!b;xOtJGoiwy)DFUU*iw*X2->N@d zvsmtIVvdRg?qMGw$8sw>Fh!+H+sS$~os$cThK~c^6JmqD(9vu?14*%_)oU+Uq+&LQ zgi=7Ee-uU8dIG5(?l9tPQtG9?qL?6rc;^jpty$|OwaEP5)`f;gh<&`Z9y`V#3B!p` zfm&y@oq)!xExUA{LWrWTV2yrAw^W4Qtda08;g6Ts6jn`2owvc%1gGjk0ky~rw`@jj zb9bF~q~7GAQ6JqeoF7s__o$PI>o$Uc!==72=0x_Mt7*o#aQ)x%h#;@0-)YuhwotC6MI8k-xB|815e5O)H~9}3Vme; zP>O5ijYO=D8%-DFUVJL9RsVEaBsp(K^bZ}_)>hsrGWYvfwIWmcW^ngm&(Q5@gyPs| z7_`W4q-+?*7D5W5_`g7?;qEWPZP@|rGEDi79Sk& z^cygb)Ef*Wf8(`*W_2>J=tzf`l)iP2LCWt%XiY1VUz6ZJ{($~P`9HDzzfrz;O`GZe zt!KUUJz*mCpQ7C8U%HRB(uGZGtHrCNKYic&S2P02DXL?m?UNhfaSQ1PUz@D(1?cdqXv%K%PxjrWa;s7+r);?>cL^y?ed_;;$Sgpnq=RKOG3tgLQd~ zMHB1!#3te&A0yiJ%uE+;@r+Efw|Qn~*}v7H?Haww-}dhw&%3w1*22plcy~Sdg7O>8 z;ZwaN!UH~f-Wgx}44HwoGYZWl{ z<=D_I6m2qy*E0(1?1YSZH{FyD+Ao)b9ZX%55HW>d$6KZ$#vw{VF5ItE#l4OV5%wBG zqQJ+Vj%zb?J68l^kxE(yj6&Xb2wZil|xAJ4a zYaHnQ{U*1KBSwJsy}C{9N}24@XtCrbDN<&<2sx*07Xniyv==vkyw#|;QM>@RN}cDZbUK}%n&(O#}V%TRA)$dQ$ci4B;f$AKMDABPijonD~kc5nDG^jI#Sj5U}1 zgAV_|AZxs}0&731LxIE&(NOn-R4qqL1HWZcrIEW_90@F`hLp2Wvmn4UZzXfCtBiPO zdDw@$MU}EG35dBOVCZ`n2~s7wO^&xmmgtNv%TdUdtaHA@wIi233CC>S&02oz9Oeef z79yOUto4kE^}xq!LM&^(D*R9_*f5g@SAAbBO~sGqvt>T8#GeI7#R)j}%oG<`lBzj|wD+Zz)29Qy6Qz*76$+~yp*bl3T zGL-HSM>x-#M`fnO2(;AwDhr*{+JqJ99}nw=b)V%2#U-OJN#!YP7>k#VrzzkZcwNPN zuuNU|`56)de4FG}uyJh4V&GfDm&Q~r2mCnWltGmo@Y*0N*@e;!l2+&Q`3JIHB?q=2 z>ciX|rG<#HRG3BirzKF~4oU*5q0()t`-o7XSIMoQsvd~yqG7j?6g6%KYNDn2hbY{# z3Fsy&a4V2aTGl_nNy?5*R0Z~nxk@k;9O-t73PZmKem2_Hr)0U=r(Y0|Lzw&So&v-d{%{ z<~9dcHs#%%@n}@tM_*K7#B~&%QW(ZuD=}(KuZYr&pa^O?F^Hx*j`ED6P#E^97eF)t6p%K5{89U|@15K* z)#N+zt{_Gqt(2pO*D^Mt7rPwg#3xQvI^=E^4$KPc5Ypf6DpbOd2Ob!I1Y`8OC&tG* zaB1WaSPzM$6e~M}Ne?X%EnAb+7~I!=3SJOklzdM&OAQt^xKo$WaboH@vANo;2CE&c zsTkiPxy66Z5x7)}@w~;gnT?1o6+-%y-W-`1=_;7q<0gr=P@CyYm^8^r9m{PPVYyni z?*Va^^b|92k6o1yFfT%>>k5_FvsCI5?a|9Xw>W5{I_m8<`T5F5_hq}!=dsxOC9TOT zdrcNow~Nz~7V=dMLBWr-X_9kPADsaV$^cIQB_>_(KNy|OY{Cm#%}y@MvPA^eDM z29W=wGQF=fJ1655;mjIM;lPWGZT!m1e)jpri{Lj%gvWq2v8&f64FK}401G%2S}qvGF-M#rW(Sa3+VFio2zmY#0sgMf zF%A%YM}8)70aE{p$s4RbkU(FecyVMZ$3i(J~=_v@kadZowk(9E8g91);lltY1;YJ$}8vFy_=l87{BFf;ZCRiHYfAI z!}-(o&WCpT;mD^w>qOduPjd#{!-FsDSoxPv!@z@0rhKY%ynB1n&n;Q=Z1YBNcHf6H zZJAxDx0MBTaee8&8$J+!{HP-XEqth724483ll?J#zsCA8ea8}lGkkAwU{UY~s)0jp zhP*3mMQV#L`kBf#B7v%fV5LOyCWcw6OIwGu7~xZm09PVK%MnS}2xbIxG$Oq!v#~`; zGl#vJB4gKRG9}8;Z|z@(oMRpKgcho^n!}^>?^G?80twF2#B=5(FL;ci9Sfz6%GcrRa>SVHcS$a|BU<$ji70cbV;j&o-q(p$ zj)Ply?Kcb-W-Ld_ZGWeuWY7vU$aI_vH5NK=V3+8pMxWvVq{)je{K3=+-xReg?$7`+ zgn|X-1Yv;D8=CTJd=emyV}OtXqy8bo43~fkF3FB1g-n}bKpRlbao_vt$K4emWCyx3M91_laoTazE`$VindCr{^dr9TPz|zt?Qmdr(U+2E&h}gZ{T_J$YbRDby4v8Cj3dfAx>Zo zxnnjZSnq`J3#FxmJQIF=e7W-d4U)55kh3j;nW#d)>MqErDtNjR!fGriNw$4?C8>74 zPzSpt2Rc3?$VQmbzIloM0}N-<;4n&WzTZVJ8Vd>8kMXdUD}*U=UHy7U1F)lv#k?-; zrN140hy*Wyl#qm9f#VBo@b61^V=e{u6jK!OsL18@d0pZo@8_^3C*K)R^Q1Wk@^}X1 zpS$=R(aDEYu>7F%iGJ}D6)*ypXlyfHHz-H4S5r1g}~xq_OtqoO`* z2g{q7jZgtq;0^sNIByb?``$Dpzj`nhu`fM9Yn5-?pDg zjT5g>T9Jrb6;(QNras`lZWL*TbAG|NEAn(?8NKtOxL&9JuuN2>#?CA7*-Hg9Qjp=k z)kG@BW#Opeh$xlZvLP%mRaEJW9GbLi!ptM*U{};9G)@yAp+W0_{S6w_@Lbq5DnuV} zh~ZhHjx{^&7N=OJA7{+;yGv5;dYCpCGt7)`T)E}KuzL4kYJD!gW95CHlVICILQr(c zPm$_M`dqV}SlynITQ2JklIvxP< zq+;9c2qNIeyy>1iJ5#^idH^EkqZH!jBIZmiXi`}UDR3FHOWQdhYC{u!a*tC`$CtRq zhxJUf4>qJKJ|>*AAEvnO4cMgan^e4HXP{B>*SB}Dn1*jzFMaJ93l61DlhB0P-8+l( z7+8L^xM0SnK2>n%{n{QCg=y?HGqC98k21V{C=&t;>vIQ=a%c#vA5Sojq z4gcggFiaE|k|!nWne`V7&6&kWLma9PK{!09%d8ueyL)R3jeI`0c}Iy&y~(91`&Cq{ z_LDAsr)5oQh zs?1Teb}hU5`uBp3Hid+c_8Bq;WuMKw1JrsKy>Q0)Y`Y$zbqcKW<^)>gpfG3rm5JjJ z@9B&rC%s~$#TMiDMj&JJ@?LSEAjGES$m^>Nwe?nARm-myUBot5G9yQ|(tQw0tBLop z*P|pwHP<0;TN3!IOQSq(jC{7FgXnF}F~f&j^A|jL zArVlRNWx{j6V4Vgz%2@=`mftF|AQ_5$3`UC6b@ z5k<&9A1Pl+cfxoZydd66dly@RGjro9QBH#cAN2 zGGa>Tg;5&{e!L5qi63M|Q3mFZ2!km`&dCs#U)X15t1(8L*aT{tW%AR{2Mt3m^cRbv{H~hgfOBM*8P`tPE_4ZLWtDn1UN&)8;tCLSMfF|6R|EVV`b?{? ziK-CmlvhX-0XYNv2cboAFd|GbmMzO5NWR$D`k4IGUnrViREW-h zkqXI9_TmH2 z$+Q2?#@Ea5SLy&wno0?SE@+=WhfRi2HG&=Qj@pE4Rkt-bW9>>vYROJm|WtmEhB801D0h1 z0zAeWBUa5R>|3z8tz$`399*qz?bZ{{ix_C!W}z)x$u?nxEjF8BSuGwVMhUKbhi#&< zKiYeYEz*=}ltkKRudO-`lOk8ME9cZGs-leP9d$YEY(=DK8DLOh>yNoi2T_|<^_bFd z+y`keH5VI9hI;1fr|A6qB|}88ml0SUlC)YX?6etRzV29cEl1Hta>wqOg#SR^bSS%; z-hjz@sI^~>nUt@#+%a9Hl#6s2C1p-B2v(fQNp2paa^0lT*tRMf7M-)MA{4H4$x@C= z9%%Zl&Y9wwQs#fE=J$clX1NJkgG&^Jv&5Y-mB&8*kl`%dIpobv%8A|wIyROlWDnze zWSYw6t0}@!vnUwxlr0e~FSMmnd?;V9+*#R_C|Q>pwsW<6NR%|#3Wft+XvU#W^^+`PWdN%zsHwRV>n=AjoBYxCf2#+*;!z4L{pBF?f z%9vMHii>@sW1zYus`+%8n2$xcx>LcWVf6@zTbctD!smTV3J_c|FL#=0)mN&h8Zh{*rOhtQ1| zAoh7$Ch#Z*Q28?NMc~B@aCKj#4>XUsWmUN7qWzX4T;9$#^ZIIU+qH0De<+u%FHm+O zjYE_MUGij^`3|w{xI_QgElV+vgas>AoP`wm{+b6E>0&UYt&CBqOPc2c3SRI5_7_$E z#LoXl6?&iGxWYH8BEK^Qq5l+B-+G6pPIiVi^r9ZdHm)Y7!WO2+*8g)ku|#>?ZczZ^ zYeaLa*fO&O8U-pPjZM;WItkjU905=ckVHwf&-NfDNiqhPlg&ym6n$?1ki-I1f(HOT z^o5*_Qj;zs`19w3?;oazht*bmfC&n6#`tNFq_xaZSeuJANusD}PLvdyN(V_xQru21 zyYn^U2(5-2MiVRCuQco)a@r!XT;MPf-4>hc*II+MObB(L%>%c|a_`zEZSZgx61~Kh zM>x#;P|2Ka-A&gkwfIg`>etZG&A)!m8A)em;C2&1M`Nl4Bd(W z<5D4G4LTWf6n*AzK;(C%Lov}T@!GlN-Rntkop1`q7*;4`yAo--`>dkK7fa2?w>JK~ zR~|Fs4+SlD#h~08unk+5%n$Er${Z+pir=W+o30cF=DHJV`}#z=-m`;JcZ@Cg*848) zbe{R_nnxtlE%W{pRvyM56pgYpws=@o(4Vmc_`}WL2o~_j0oHNn0bxz<4h zd@aBW3x@K|$*PtF{Y=twj6ldMtqbe^m#3r>aRyCJV5(cMz`KYVi1ed;G6>!Ldq)h& zO1;dARD!G%Duxx{8|VV6_TG5R3tdu+7>3Q*6OqZ}4?f||&!~tn_qn1Q#8@AU`H^r2 zZ2$QqaTiZ2)0_i!iFma%lv=o-zT%I|m`3d{lrF=rQJf2Mi7y=0=hYA(mz<=%cpH}*B`~54yhJ!LUwf$|kao;3C`aiYb|GD_7?BevD^2+>I zs31``b+Y`H@bofuV*2k8Azv>AEQsKXe3;WNQs3M4-P;9}Zp=Tb7e~2I@Fo>xYM$5bCe+4F>B|s> zugM?bw1csk8S)@zi7%46Q@yeveHWN+ai=gAg_GEI8RLt0n%! z6&?8EWt{4D{P~WC_9Puq%^%wlyJN%c@a2LW@+9Oe-p*~Y1t~4AQ;ut3zjbx90}&Sz z{m;rYLlqs()jx{F^9Q%ePnH{f@P| z|9@ZgzhmxyKdX$rxv1MW?^3sPu@E#dvHYu>YG@;7X=-EQ{I7RzR?(G57DVY@gqJcr z(nb*h6{Q8`9x{*#NMHepC^iCudgIuJ+oWt{p1!7;=v@#oItb?P!#C|})W)(<#75TV za-Z4ZJlW!IeKM@d)nZSpTXG8|g?t7@xU!_mPOBbN9ufbjy zi0g4J2w5j!&_8{eFKBa+AZVQNQJ3f$b_~a`Jj%O-+yuvxm=XttZOAUK|4nXKuN-R9NJO?tx+BwAw z*<3kv`jMAXw>4fxH=Btr=l(~_FP^qp7VELCqKV$4u+Cu{RsKqR0wNDTN+CbAL1}}* z8eO|i$FW&HUem(kcK%0G;*x|WcjWcKSIrwjomui~f*lTPr#81&fv=^Fo{JGLymWla z#JNp4_EbMH@b}3OogP}7Cs~eY$dBpBdDdP~9jWuF7A7KR}Fx)GF zvoOuKrUN90IrOwwX}|c8*8S6jLJ`Oj)}vjGGpinrkfg^A(k^4jgkP(hWZGQ=K4+x4 z^;hzM;Zkr;gR_A@6J`NP9Uk+*uy>qEn z#lQ(;>w(!B@PvMWtg_S&4*wL0iatr8qRSC}V-~W+h>JG|hyce_3ghI$eZ-H;CMc9S?ci z93pC?`1N0BI{yii{|z8~)?)(U?~vN}-L{qZPXQ!r==2>$6%1YeMptE18`Hl@E6M*Z zSo{wg2Lv)4%ql_CB5cklTnVZk+XOpY87S|MT#U7$C_LT>#IVb2_Zc>VrCL1Ae^3 zf-DU4fU9vjz`GTH5U4~~xnF?Qqjqc)(^x{0R^)*)93@bFxn_Fi5#|C)mS=8Tma;PG zWhh-L+o{4-os^Wkc@}h~P|{oHOW$4So$FFfx=n2(3kg&EmS%oA(Y23-U7FoYv$@DS z*aE@n3uM&a!WOI4Ve{71c9tqYm+qvlg;%ioq!# zPh{2;F8KB+)XZr1HB2*Qrdm7&b~kwlb8g!AGqm#H z`{j+D#7ShO2W|5(P8)JwweD;5;L z?27YC_JFQY+xiGjPo55c8NqgC>G|NC{IJuN=V=Mk!!Ge1)B02fM_Dy}g1P<1mxXZ_ zoQnH#Oj3z=kMQw_!i|HF%`Wql3&vqF^lc4Gt|3)@_7yj%=d1z^p4F+lFlqTdmKdu} zzc&^bBZE_&<5`LcBct8h z7Nq4elBn!3@)xl^xrb(J47Jpla>Br>$_`do{C#7+F!NncqJcuGMQiSGt zL|z#MK+%+Y3GUIkls|35BOKv$%dH z2*O)Q`AoU10XIdXwj#(*Q+1L%Ah%)#ik|n~gJ^SuRW}?0<=vvUqg^t2>w`aK8|>l% zs~JZ2mBsdVocHw*r~ARIIY2yV8Z*?u$spN0VALfdT(X@l=bPVg)!7DJ;Q*sCw7I9* zyc2;)gYRvfF8w_91YX9YSX8aHfHov*L-vq0tCV0M&sQdWf_+@ z`SSXE0}!5I4`B`!fo(htRb)t@g0O2HBnyN%e}Io{e87x-Y6d9ELc6)cM0enxA&y<=Lv{W@X@K_L#K-S zCyaLS30Cxefq~Yps7xs+phl6$KFRnGF?0?jf|!?vDa|_^gwVY{kVn`Q!Yi6De*q+U(PV0F>ESLN^|TxXF(EMlFFb) zNhx_}Qln|+uP{jDZ{qHv$B_xC*tN`HX(Tc)Wkr-L6RvQWVoGxnd@N`{SKvJ#22Fno$D464oTo-YnC5=t3jBm`DwcmP7A zE{`#jS(MPygh8R$YzMt2;O+;IDp~;ql|}Do9-_S7SV8K!f~81L%q!Lg7ei+C^--Y4 zR#SA8DnpICwuFY4V06k#Ng3j(JOD*qr7XW@t>$ruVtb7aP~jh+)0M>9>ya%Iztk4X zs6T*|B5!m69aO92$AfJdQxBgvc3`8rcXVL7r*y$vMim? z+c1v-K9%}YTn$N7HLqxDug`I%VU;N&xMZ(>M|;j}80U9G@_6-HYzW%wW|QrLN8KKn z>+y3h4^_Tig6iRll0s4hRYxm@n3?%9@6dLMlwwzcV4m)zHFxIY!MJ&IVJPQv< zepN@Y!O0iQENkxx^YDFa2IcnyM&i#MVQ=>BO+v$-?*fCSJxTYI#r39I z`R#tcN_g+a1&7R~e9#h{9F=|5u+K0k^72tu zQqZoWz9V9?(+f<~eza*BK8$>ZClNbaO^SJfd`{KH=2~f~USIDh>9)R#)qNFrQ_r&u zF}}yqO+;6l0h*dc&EfP2AqfM?^UXOC@f0j%p$W0gm^%W=HeTo>PD&}9f2~y7VbR`CYfv3yV++NvX z1UUr-Bk4?+iOap!$H-5k^|5Nqu)BwvX}6m&^2f5y_~x^8rkc%We@8VW(qIZ+VD(0A zxb2R2nqyGCuoDO~@R>elm{k4lT(E8CkOnjN;A=dgb_A_C52zh8RdsQNvZ^u#!jK{F zY#l;$;_`*k`-5wESI+`MTVFP7pcu@Q?GUD$qDHnp4Q#XN3%tG z^i{vm=3(7;|B6(oMJd7l#)XvX7|jHspnJ`k8qVXPv3m#RJeQO zVDn?JURN`YR#bp#`AEQOHiUziAP4BV+VX@!cDT0V0tCPiEgVEZQ%E>y3K2-*hw^zL z6K}`6#~=Y6znw6{a-hJa=d~kb5K8sZHb{RiZsYzuulYVISX_gp$H+^gh+931KWqZJ zH)D<|A2OO}U7iSk-|x+~vtXL`O-(5G1XFh@2`&g-RCZ%@L}RzUNRB-b90wvfKrsmC zn4Prb93V1wTDAWC)Ow(%RUsYZfa$Ok9J7X~FHrR>&LyNa=k)$v+K)VuLvhtKfwEKS z7Ypk#>dJ(@QwzmrP_a4+f@mwlKFUhODX3p+8iFkOKf&nzw|U1RA&TVMaCkG-`Qa*4p_6jt~!- zx<+>_kG5rst+MX0hF=J^7$ZSSE+>^otcf<#h$Y6eER(=hl%v&UlJ1hxJaxzLMuzTw z*bCdix0_3u%M{TyepbQ(SNV$W511TK->&z(jjd7f8K&?|a-QM5j4r7+sJIE(j=S{E zlb*0EUSV6_0N-GpM`DF%2<(nw-ZNy%C#BjahSDRui2N1@?hq6YpZu0Y?vT>&l0UZf z7AEVXk%^PNAe*f=sb)m9M*3)sxNe$ECI$pwRNiOtEb^y`w-G)kzB#nRd}D^`8}zSB zJgYUEoc%F-=U>R{-=fhMJZ>A5eDF!lc|N@1?NmvPXAGp?M}7YPRqpy{YWwe`_wO1- z1$pu6kMDAq)%O~O*#F7a4V^vhjOhjcet#FY%uT;%3;yc)iC8*2xjOu1?9Bg4e!Ep| zzw25EerUDbN^(#U^uJ+MhJ;cNOGbv0!~|qWev>Zrog8Vz5r0?f+(kcW{S*)JZ-b>i z3?lHqb>)B$FEy7UBo>44?abWl%yKi<*SG0+`TT$s1PEj4bR-A+BFNNbf62sTVn`E* zc12o~)n;LsOU!r#qNieTITuaBjCAQB!(=p|M}Yr6uT((oIZrO_rNO@?(8*eDYb3PM@2Ev@%S30h6{j+Mxb@syYs^eLqxYOJ*ml10 zD5zW|st7BKhS^R$5IlX5P$3c4*X*RXi6qcc>{3IH+Sjes&E^%1js_1QiC^nk!*Wq< zZIe&D)A9AyEeF+Cp~MawUj7}!5YSBNMy=>l&TXO_V9YK&( z^`tUS<#vAYS_Zm7j^TwOG`bNF*P;%a<)O9v81FAUU1UkKZ7HqbH$J2?PC zMk`~Oxj%3C9B5eFF2=BB0l7Kgm~GIueZ4&}_kQv*7ii%YfFX57D$qHOD;~0cJ2Zqc zm_^(+l$kR&e{3JPolWjKllRAe=6$D(_HABLVjfsBbl!Sh5+4^{3zvADY$k$ygfF0* zv;de_B)R?`lu4upAM8|=-?0?DasM*WHOYf4kF{mKK53S$WxoBMT1GzR35iTE@q-Ia zJzwG10z_F!G6$-#i367A{n7$vc1gI7^oavrxPSTIKMnqWLqRr~o2TI$ z3f`dK9Ps~yf{dk^sj#Q9jVXz;i=m6@zwAC$+4gU1mDhB8Blez6&%`+3AO$uA2u_sU z(K%nU0mg`Y{872WG$myvC2r^?`GbfUv1tBw9pBXFx+DoP(oy$5JJ&n!hx4_a|JU0a zumBvkVuVKIKA#g(DJf5cAqc#tMlvH-(KKt?orGA>zA>g`m?tJO3^bDxOx{?!NgLgM z1we^X)e?1y)sbt-laPSMgX^xzWSp^=sWv|sQ#?qy>Z*0+8~64ayXvMb8*SM*gL^(! zt$C%Y^(;*%PYr!Za zimC~sIYEms)DsK{#|J>5DbdIn<$`}=6bL8M)3q53(u;C+@`qiD13SBc@H0)+kQ`rPJ z4Y3fPGd)W_htTOh-U;$ShU@w+8+1&g*n{vFF{a^cxIF^4Bc%)2D~h6=5fOQJHie9^15@94{?IrAxnoB1e*c(zVF8=&ZP=RF&lQN)`7%}_TNn%2ide!L!dAxW93hT& zo(jq&sQV3ZzGM=wG?U}}LJ>P_6G{{fh58{!O!k+vxswpp7*yom|GEt8} z2G6lCKfjmkF2AD#|NjXI8+&_eR|k3}Q)hcuCu7rp6-Q+L>&O4DiKtpTFN&e?M$?Wn zN(m!bF#6^zIN&%KNmxi-CLjevBAmclN=s>LB8o*4dy-@fxV&kZj+37sV?(Td)p54_4Zi|sZ+8!fUkTAkg=XQWWZg`~%v=(QKG(uW+ z6lNoZWk*g=8qt>A8p#2PBWH|l2*ZSJ1hVq9v#M;Om{WiHu$rmPS|R3Ef2dR)t(o|` z*Q%Y$xI!-+c3ylwe%9qNe!G|+K8(8vK?bUy>T3}A=xDWqc1guu&9${rvH4T0Suww$ z{6y2(V)GW4ZI6ApPfU(LaoHVz^t$k?hW)%cCm|e0 zI^LF@CS`SM)U4KQp&R8*M-{_kmxKV~&Sr5QB1g+^1QN(gi$hADrW21Vcd{gk78x1` z3kX!ZHBU-+!v?1;y5q67$+^-c&GyHw9W)7bB1YpeSiKty`6843iIRoZ1+y7%l9n(R zRVXLyLp5sPP@C!|U)wLGq2p3wd6H$hUxblDZ&-GxHfxh|dkiPV7hVOFugK@<;I}P2 z&jrfU%hs@7L0djc-$$@QbZm*p=_X;WDo^-RO)+e14~2b18a#zo>jOk_c~6%eamYcg zQKnUm*-e7)G2nUq2Vr7U^ZY#-Oj2@}Y^j^nwbjTOqPQ!MD$*{)zX#gdqP?-wTzz8g zU3{Y7fz09f`~saxcb|QP(TLD7V&6K`i3pfJqrz@nc)pKk`pw-DQ(Ub1)ABK_ec(;CNoC}EYb{F!7@ z*F5Az|HbTbpQpS@i$gED45xiq;6^gxJ&cywPfNPs4Ss{R_w{G6ig)ocw*pviMy$`L z!CI0QvS|dJ8Q2@x8d-Pkr&Fegnat|edYR?H=A2r2Fo__3Z-?Diu(*TNjz^r_xb!R^ z7$H7r3pwXxJ^E$pL$4rDG?0?b^4Quafq*?--{?z7cVF2{H73nM6Pbnf*cYIvjhS~` zmxztq?Qe?@5uI1m?pZ{CxDxT{o*=aFHJljOlhpnf2R&IzZHeNgAE#?m)|-=Yr70;- zP#puQTYE@QA8pA))PS*t$yX2uAM48&Po%H9gz=2o!g!xLS;MMgx`!4>$P`9#d7UJ6 z5(&sldn_;(NY`wroaciX5j#M9qnb%KL$Jrv&Z~B2=i*`9W|o-w>V|H>C!9)-fsCIK z750V}V^O^nwWWp%zO-I7}k-(z6-SLjz{j|;7Dx!X+!NDxq=DeVmBdv;@Q_jBv> zdNTjb#~XKmnGe1ID;UtN@mzd2AkGK^w73Vy#KHI3HlE%gZu<8-DL%FX4?wxSWdN0! zTg|QbWIqeQ7^40`jJ#987-J%V)?^-;2?mX2nm!acPy<5J!L-D0+0->wpF-x9P24k1 z#8_817%`)6pptnq%Nn5cNJqjcPA^RwqCf?QNrjo!h0ALgK%Iojo7 z%}1MM%y}drHQn4B0Q^?fzMQ#~HkB|;x+QfjVuJhs$Jjdt*|sfPqqWMmtyQ*dtg>y} zwr$(CZQHhOtn#XQwfDLAoqfM}-#ho$h&dxh%$U7rw%#+dWlKd9XNJc!+toSuO^x`UGhB^pCz?NP_RFh&N?t(oB91islh!Kr zU9d@tlkvoEX7l}Y} zb`|!Qeuv}1h7i*~zuALc>#_4Zh9R&&bb97cCJlX}FP{u(2>y4_!648vxcX=(JkAS}|g&^UF)E zAsiI4AYm27LkXV~8d4`2r)NT;vy$w1)PexeSzpc+iMzCgS1m~ z-Uw^>nhQv6pWK*Bie+(LCdB-0 zC_V(AB@YxZL+m~`^>7`#4OnRt#Pq6w``nDlnuuJoVR!580$wGnLS~+fJ);SHuCx_R zHpD$0Xw#8le84edru^b$H%$~lrpV3VR@*OUxmyjhP;G=0R7;c*yg1Sqmnc^F*8GyM z-~eVfsAN*YxU>p^E2E8X7)L5N!kQL#hJU+b?g2>LJHW@)V|$qWP)AfZxo93xn>w`; zUkN@jrWctB0j47~aVz?43d2QnfrqeYj6jmW#d%JKFXlj+XRxOk%lw{u7PtAwRGrgRBq_g!8zzdI{@s+Mqmd>BKC~zndNTj}TepVcXNnvUqxc z&&NW3JrTc-S>1q^uy({FQMee5o#EI9VUk28nmyv-C&*b&TLpysi7dy20S4_L)tc7M zIn>*+U3Z?+ed8#Jp2gtzTi4-|sEQ2^q&wZD5zp} z$Zxm$kbl1ZzTW=xX!)OqjyE4k&D1x03gnxv!2KT&9a}wn2P6Bx(u0(3FzTjM)E^NRx}Gv04Kpa3arnPzy!gWmCg?)CAg~zAc{t_UYYbM z{fvG2@j*6dr(ObKuJL==@f!>(9P#pvMyzXYBr$bf@P`Roxp zTy#*zC|zXz?4b1}s5}JgNjdyD_o3PTnC-Ko;hPuxqCqOP&oy}(gJmPn_2o^=7yo-y zuD;1L6?|K?q4KKh=xr*1LZVGmXKIc;>z*O|Y3PHY_a7^pG4*~P-p^gmcowy1?dc==6_Q){UD9h% zilVM^HzMr3oC!exU3bt$Lb7wAT8tsXHuP#36fJ1l7WI%W5`EA+m3f_ zDYTm#jto-6Dqtyovx9Iz^=`IX8%`CBp*`I|0aLky8sICNQ&q1@HcvW|H}WG;(K^Z4 zw7Q#hxey1S$ubFVC#8Q2_xHjK3)Qy$G!!N{qmjfQJUu!dkl zAACSf6NviDk$OCa*P9{xWJB_BgJB(dc~Je6pZFmr=P*H?Bs}j0M?!y31hprBkglOb zp~$$B7{;puU{;u|S6NV^dPCh!X* ze|>&_*(mg%XLG$d=)DRoO-^vNzOzfuqsi=?b6wEUP5Q- zy5~FM5y%AG7mBS1?Jqu}uJ(|e!*Ail_nN7)1>lKM65A!-fa^9Ekkl-Th)G~rMKEK;$5J)b6lSh-*!~6f|8&iNJMCYY?j_zwnDOuQp2l~S z@t>Vmv$dE;$3`XaUw9!)9B&7pgWD4j8VGw=7 zi-DI4L*dL#TH<#uQj*1M^+Pl7aud_kOS$#J;`TB#+%s;|4%1c>H@rJOKSuYw-~kyB z>r>I_Y4qj#>9p^ElFAv1^;34j>IQPMM|&alqPN%ph1zvc=?C@cP$iA$G@lwPST#9i z@N2U|FHxL{R}?j)A5#=BO;YG24*R7qO&KdNrf(j@Hoz>%H{daEDOb6&W`GZwyLnhN zsOrJ9zXbMei{hdI3PTP9p<(PjBP4l5TZ=UR$LWmEv?HtJFO$& z%tv_z>*w2-VpFPV5tOG}AsmR?_cF|dugN~*49&B3Xb8|H5+#jT&nd{bP0d~^1*_(q zUyR|5H^VWVv#Tzo2kW;`>)(^O;_GIlgcv@G;r@Ef^$LDo^a`@31p&T?*|IXM5*1%F z#XADa*Zyf=X53sAEdJx1c`?d_tt|5WV+}XuyU!d!k%}9jCDN>NEVWMoqv2O5*=<&S zBtqmk`hf&=0kq)CZ^jqQcC*;TIidQJmZ&Ykralvdo(Rz3qHRX|?UE$#nT_B3LOE}w zUK`7f0?bZTPQ87PiHSGzhsIGF!cb6;{OH9u;j*c_3qMAq+gOILZi#sz1zr#afl2yq zeLFGgKjJxbcXr!+pDEp-6=35>7y@&K1<`T>M%I$@1%ZA_$ldrKIEVo0C_%H zp$~p73kZm<+JRJf`Gfp?h(IA$W3mHPdCn=>$QM%@PXN4eR}Fe|{lTHbLdG3-m+P$V zZtflc)4kr_YQJurb$75RA5<>f*9B-G@B!aw-_rCN9l=<-6`-n8iD#(!Gm z-2kz9R2oA2hz-S@1%{iuNr7;un0~r^nsHitYW6B9>zKy8ZzJKo=6eaa8HE$gdpioF zyDf4Hu2b7+WxF5fucXg;bN#3a$90ts4= zK^O=23rbb0F%%KO0-{cO$H zFCdSPAlQF&X1|%;ewp6T!4rbU6}rur9|pJE@d7!#W^F*llGmttIhn@JxHI`Wz4rS0 zz5xeNp-L||NDb5?h2EMF+CjpQDx>@iO@*$?Buj$4oLH0ZB+x9sMS92*ASjkg= z1h}HqopHLb4HCN)CkGIt*6$*6{?tyn&QPu~x1(mX_}=i!g! zoMCk)bcws6P)(b!`aodJnyyzEgj6KvGjnfI8{f5d)U9hlbXTj*OUfOcXc8kIE&)H; zg})qa2$#UHg;kqrYuY!6(%(P;sp{$*9%N1^Nu`!L44uaVNC}FI)J$^~4BphoZd|R2 zarL%AXs-^M{7UOiIj|Z5{?ta>v>}|{+ZaT_iX0@5Vm-6?LU zNqP}x(&3|EW#xZb+P`h^ufvx2K=-=l z+xCdQafIzZ+Mw;fc;B>&-z-Y`ztQBsJF1*w=^^|1;Dx_TC7F`81+dVFmCXkG#o;4Y zYc6U@0*R@x?krJpdj-SRe93@IUT?oT)AX`y-huc6>3ZpULwB)grY*rM&R7yu$nDik z<5Uw+Ij-3*IHoeLt>I^)1C3k;b#{^1Xe7ti$+ipGkx0P0*StKCGuj5gBj!yBD9dQ5 z?&U9nT`-LVl7fYQRv9UT>crE1R&Qo8C@+)3yW1{3fP1;}RRj#1@$7j5+x(T|{O4c) z_oDpen6@%X5XP_o0EQ$00DS-JMG^Y0F8&uW{=3@lY-Im^FZr)>iu$*N*^1L=3{wHC zyZbupAP2l(aNM9OdMy!M^Q?cMC=s82TwPSiTmm}!6j=lKua-uq`AV&ZHK_w8DXDnt zRc1sX7y>DYbw|7PVu|=+y95@qgvO`@7AYyGDckD1q-HWRN? zhZ@g)OkW&*R0HPE$sk^rJueQ}JzA!ZB3ROFm4_UaDV?(yi;t+_k;Ppoj*OnATNjQ` z+^<|vokh8D+AABGeg?-U z%2)B8292l22&m^skk85;-ir*(&eB|Hisnmp@Xdv3zXZp&-MT+fJyO(vu2H;Gcx@vXL&o2;xEoLv%8Q@P&Wohe`YnS1Lf02t(&; zODr#zoJy)F7GO@|XfG5`FvnFEmnal5kC3BuDp#p-uUL!#UDBu;!)!95E+W5Bw8>iU z)J}j&Z)IL1qkGGjW8B7oAVD-1$aMh~ESZYSyKN;e}FEp_gW6lYctwZ;zGxb08J=kTYGz`SwDyw8u9Fd_(`rq%)%n#ecpBuNsAnj(M=q5 zk}+fVtQ}uH2AKFWCZQ&3LP&kIyIOa?5k$I7D&6i0lkt#x*q!V`USr`>e#|y7Fh5U` z%UUF%TbF?a7xtB-azxKz@z8Sg@OX?p z(fC5nuYi$7fIjJcK#nmMlhNO2_3GYj{EFaHmm|rii360O~9D$silu? zf4+E&&}YHjs_U~5l_Q6huRl;WkcP^yP9_1yj7Dr(Qu+~6V3!`yBa(Ia-z;XvX1~Ka z@3qP-sPL3{N+<{9ZFdk0ssG^YfnES`KeXH|8zLDYGS3vnAn#A%s-FRo!RbbjkLY!; zHBjABk}SP3b@EZAN64y-(^H-oC31sV(Zx*yN*EQ`Vl@bDpoOIx^!*a`q+*tynfKx` zRFBqL3xe_LP2Yuyn%`=h8!jwmE=43~ zTA#)aq%~0rQ!td!q)NZq#TWNf)E|d1zG=?}iBMpCP4e@%>d0Uq1`b9zedbntXs!i0 z$ofiVLs+sz|Y(cEj6 ztlXw#A)%PDxBqt0v~FDLRtMRAGH0F;k$6R4o$Wo7(E>skoq1tXOSTElcn07jjobc4 zqn>flVxk*(J=^?(#iQLBm+n{iP<+0ldmphz?Nq|g2|ops$yvmC>c}h(Mqa2!7YNU6 zjccwt+b+W5p-OLSanqVvI$`d^pV*nqSD546GRLK0f&`3lrj{KM?C%E>X7l+xK0}@k zeQx@5Uh^AiPoLa8kC2vNiF{G1xwZNS7NZUuYvJ3_=m ztPnf=7h=HCrm|;JQasIoXib~g5ks_eb`$B^;cJ(#j2gI1w8W#6>}k^!gDn%@)a$LdL@f*XHT_#u;^Tv>q*+p5nxk8IDt=g9K5s|*&R zB(fL_1zVO=}GjaH23L|e(_oR)h!;0-SfxCtXH($gq4E});!TW%$X9{DWhr;muV>84MU+0U@$b< zf*V}+{9!IZ$YCuem(}jT3yc&f3`RUrFm{qbFt$qaZ@J&sElLmco}00HTvMH9KQkLh z;4tj{RS)$tSq~B17Go3cQwjLljedc{L5&}mI76O#C_O|H5VcaQdU&uIKU4>8yF6bZ zoXWcQ*gj_)h2~j_9Y+{%O$sWLnV5iPRk%-5q8eZM7YDfw^<)3c%5+uKpcfrP)D{T3xYPPoo3H<7Aqoy+-HcAEkbKbOhDZ)lEbi5Fn)YnvJ2&r; zE7Qf*QK@+(eXluG#h^v=6a`yMLZVOHr|R|6q&O9k(&7)6tcFKf>EOafmqC;~G{suj zZ>MwvDjyfBE5Va?(lNHqg<05&9G9D9eA3kw0*o`!mOI?cl<GS9P`zWKg(4wU{5zUJXEW$ z7UGXP24^*~{1ugGjoa#_Zctt-3@jJxEL45LW#7L-Vc!|i!Fk+L=RlDpsUoYj#f>BS zAvivywoLufTVH9DEnU?+MQsb4URA`jv+-^oSN(%g2djB&dnLFHu;+;7cKY)xs9dN6 z2zTLyF` z9ldEiI!4-`b52f*lM6mNOf2-QEWOijg_t?Fg#NO5SxZksbdw`yhEiK*YVBhax6Vlw zPk9RIVauFgmdarQI&D6K8(>`HF9ZOP)xo<0wFBx>`QIq-O6B+ao}=k_d#jU}G4_+^ z_6Q;l4^5P0 z-LQWc#5=c-&CpW_G*vk+yZr0T5@ibZ87OiH#smget54zp;(JHrqIULOAzchGJyJu# zY*COrHBy3oS@B_2xt)ag{r^mnxuQss&BiX~3ch$I4H}Q6m6T&%F>*tKef_8~mKFY3 z@>_-pQYcO1zp8CM0*3hbapo2O#{w0-g}H?S$QWgMkBhuR)(^^+Xa}`) zfBD!cS*EGG{T1^3UBkL}$sVMF#%|G;oG5?-Y8tOUY$g}oM@X5qURB9NRcYhI*?vf7 zmvroxST9Ih7y}INP?t@=%tqwRvG!hrD`-VX*McgeOF7}i&^Wo8lq|i zc;&>;+aNb!WL)9hyS0J|jbFK;4tNJsHN3}NPsHLTwR)}N+)+_E_o&t_#!xNq6)em$ zdrmUFsr(1Ek_Hb&<gkI?tNRuN145KZ|P%`rJ@Bq3)=h%c!4AH3)7) zonm30hJeZJcO#HrQd}Ep3qW=HFgtsnb%MZX=V^L^ojq}~UO?UNq_F#1Y_WHWo4i62 zyCaCT37c;2)VpJJ2H>dte#`GA6h0Yu2088oR=u!yCUHZKcL%|^a&8;1Inr9aT)CnR zc>@c+xJ{$Pe-eBEddE=|(D)EFre~;D?4?lH^v~W-WLo#TYA?Geo|n$qLZWiu_O=k+{lTEo!sS)gAAGD9&zP*sp)wG+DtiP>G6HPo?}DnX#z&=*4NhIv`OMe#3HSEY6;*+r(}M$@Gy2 z%nH(@reIvgM#YK~t|z^i?#8CuaAtC?>1d-c-Pc@}yy<)fwpRMQP7QOG*n*+ED*j4z zRGa^Pjc(~EId_+Y#o}cu)ykG_mqBInwdX>iTXam54S6Z1njr$bF^*!e+Q(A(twtQ9WE z`G&s~yV-<0($HCb;bu{x=D|^GpqxoZzKV>W`c+S`tAajQ!Zt;0~*(#t_uE&#l$79Qr>YZS*68C0OgCuO=uM z%4x~i-xPK}%wDKL+F^NX8g}G!`Kke(7@MDS1>EIGz0^`Pa{3fxc;DVpv)`yd^a09r z`P|{M8(w*a$WgAnsQs2LIp< zm9SiH@sfxF0%@DoBSV^s;YrfhxEs^2_xUqi&M zT44SzKk|pa6IQv=T9Vb(h}$jD2O0fP11VCxSgPLfZ*Q(2RP>SX!szh(2|Zu~8x=wxH|DVRQ&3tK{i?1P5(t-V?JraUlB(~qlwJ$R{o`+3Xw7{_d696H z);g5GC)}IyBb}%1epS&(&_IYK6j!1a47BMgASizY5i7u}zbI>9-aE~rT;`H?&>}?y zWAe{`{mrxg=W6`Vbu!|mg0Yb0W0Z>8t>-=zC0 z1&zPNBtCycJAhzbrMw+I3G#bb9%+R2DHeVJe!>M7>8n31|74D%x=a`5ly|%QfhH4vM z(F%7=^2+G2(Bv4m0cone28JFM(0vG2eLNz88>4p1julP;^UJ;5s;9L;wXyA>p<1a~ zI;Asuz)HT7&|`K*hdfh*%Dz$|ce&}MecNu1ZNy~X^fEM0*9|4>*ZqVsu%5815WvmV zV-brRBp|0R6!2-DgV%OiGC^mvrxoM^ZzCqdp(JR@p?MI2vNa#tiEmbQOfDUNs!*4?-0#wZbP?O86`xhR##LY)KDZCz9w`WP40eh;qP4+GE0 zy_^3ClbtN#VU zNh z60#NOQ>vcfS}n9o5J94M=31VS5|dLfqtU=TYu6LfR`nezi5a5N-0m@K3ryP$x!`s7 z9vxLm(AM}Jtj*;ayF#OS@KXFme}ksrs(bZ-mP$*N<`!f6hL)R>>U+D?JmNrU5ihM; z^h6ctkZ0^RHSfVYmx+D2ypt7VbKFVX(AF`H zAiWo)ty<&qlhcG22SW2MhH=8IkjKG2b43yqtX0F(32_T~Nf#q;7A61qo&0lM)5X^25DmAqg~Pu0()&!`cplEr#(uOv=K)DzIb ziBXA?&Zh2eWxZCWk6QAprcjQ~oNRKY~()DX% zkc9Xd$xJ6^E;Bno25Z0)z}f_!Ca9@xCGZK5pPKIrA982|;Z$_iI~QBeeWR1ZC6qA)-RI>Vy=vkQ%Mz`OBovQ$^M&^$cNj9w`>2>_U<~;O zu)boA+IW*-4pA#74zcjD@i4gx2 zJC0UPi5b5&8XQpp00jTn*db-);Gk#nf6Jn)xOplrp?qHdH3)xK<_*>J=7YBPNgELW>cJF#J-;SaKjI^b9$@phu}0|B z6QL(O=iy^JJWn7Tr7B5EO$sF^$|n3^6v1YomhcNW4}~b}#Bnmdb<&>^|5ob2m;+}J z7i2xmYv{T*%0QXjYy9iDKV6X5PDVn@$kz1<;yFWnSg6Y6=;-^YbxD+GZUL@&_ z5A@pZLoJ`ij~j+wuyJAb=pQG}4u)I-b5w2(>GNI7(Pa*x_&wzS*U$zTA)la-nVDIc zSaq87eiF#8*Q#AC|^P&|}Rq{oCdkZ4X}8$uCs(xXVIR{^iA@MNupG*w?B*{xu0H;osA zDT~}rygHkmQm!JZl90g6Qg4@HRItz1d0g8f?{9O>#AH5CF8cW!)kU1ktKE!qoLrv&iGb(aHDkQqp1lgBDM(m@WhLXA(GPq!Ik*w#3j+H=QL%*exY9&Q6#UXbB&OA0Bi zEYrK^HdeA#qgGV-)Yc`s7HnP;c-*7_$EjkeWNEG+3N7_!upjM-6m-^}fCL+%zn|ni zD+qS4>Rjb2L`$yiq8JT{IW7Sd;{35OenwWVmDPxi&C=ivg+mpxESh_<7?ij_HYX;3usEm+%k0a+F zYPrKHyLUnHlo@)y1M+LS5^3&VteHAbu5wZOm51UcYO6LM=OHY*T&;R?SyT!6mft_B zxVq&oY@*&kHGZL;yC3or$G7#8t7ZONC?kYA5M$I3zgM%5(#e5JIWk46xyvlgP`6d0 zyH3`kdG8}NBva^QV8Cc&2>Po{QZ%7pzrD|mbBPGArq>^slAj;s;RVthrSQJf3;)fNc8k@)_ zYfH_nUxUll(w3HCP0iKcV@7V+tV~h z!FVQ1rkt@Sm1LJuC|ZJcFjs6)_je{qzwQ%qL8xf|2&*v1b~e{tA`+}7HmX`k&DHl( zr?}GA6emb1t9X>ctl{I4M|^r}oDP>z_8+lx@B=?Vp-7hIV0PA}L%pmNmS3Ykj+geA zK7X2Z)jL9OlKx@->T10-IY~BcfmOwEC=#k4QX^_e)kdlUo2Z77LIr5XozU2E#>wh4 z%0bN09w$;(G%h2|W6wFeR+UD-fub(sptc4}nFCO)JbVBWP!>9*B#66dNHHE2NG!3Y zwvn5a5?xe-#C@HC!5wG&stV!c$e;{Ryq&RZD7X1|4K>^UOp?pajK3g~2aa9<$}NRT zqj<#GHcai35_#Q3zr`N3J=$a8zGC|^Mf-sx&$q=$0c8TmgV~%MkFqftH+qi21)*kB z%VRL#+xCI11K1mbQ92+Go;i~Sh9pOE!4NHBWOn>W)svYWlqR?rhXO=?{sX~3#;3RZ zTwd;+9o)w05WsVZ8Em&E8e2$L__sG19ADaRd}JM7&ut)ZWfcb&dWH-5@NCi02rgAm zfOE#fgCUA$69GLB9{)iGKU3o5Ga&^*s^3Bl=^abenw5R(y%=Jh{TN!}m~iBTp$0f^ z+QUm0yLf||FUYmU7K-rteeF8Rd+phOiq4mefBS5Czw~V66nPBGSc4myhYp;69FIuI@uW`&hYTvI?Ce11a<3r65!W6rD*<8p_6F z*ME|UKxG{Z`+D3IgyWK%uOd6(0D+5M!FP_p!<%$ou|*#_ZreqSk&gZ$1;4FJA0CZE z+2+tmvsu=@j81$-rG5zc^DY-ZaA@>HCJPbvQ1-3xuxk+_fe}vPr-|-Uu4W}Hn0U#d z?J%z7?`85oWP6>HX<(jC;%S64mA0pwK6;;p1=nLx>PX=%NfzLSok@IQn ziQh9K=_|U9@uxRiCPW#XBD@BS)%kw=iBQZ6;jtcYr0)wn!5Rp7Fz01A&CJOOK(oCSVb3XSDZE|~i&pdbO+d`=9kr!(h8L=sgUa?Ds=fmn z-}Fr^%?NO(_pr@#M%NuTrZi#?YP#7Jrr5J}(DXh$JmpqCxlIy9(O%;9vTIZD#!)sL zS$2bM-r@8-jTLlM!8HuQJT3$tg6`XlIjA}_%8Tw2iHh?2>-t42qcz#tu2)*MkYq>Wlm z*Qb2x<205maoK2Ac?{0!V@-HPJ?8B&DTd zB$tPQt(X4P>W%TO&m=$ z8zrcEVKNCE*IId_NPv3MS1c-08vPR(jxL{NgKVqN z7ACgJNwF4CmMZ~B7K|xFmF-uCPLb_LMPije?<0#)6M$)vj7*}7-T*B4;welw&ghMj zA~bSnXr}RE{OZ z(3O&t|A9h<{D=RPi7PSppaHt?UrJjd}Dy%8ThhMu`vrmO69PclbnnH?cGQ$C%OlU$XhMQhK(+){gdW|H?5XDOr3Eheh|6w#Mq8 zp9No(N2XpD0Hjg|-T-MR){0Zo1tZD=jVgdX&$rj9DKFjIK^lSg# z-*XK|nMsjHAcPanamizuYRtGy6z{&Mnh?3)$lAJetT zu+oiE#2-nX&w#3QIYlb!rMjBcop92AAASW`tkFBJIGfu3W_sFaFHnKT%rO_3d@0Y< zAbyiU?QHVVMc%wzC1P3G=4IR3uFAEW2$Xc=W~0o#BIUuY05XQN6J=Du6oBWPfVwg1~7ruvE!7?IO?fE?XL zD$HvJAw6L}p!e|tW;a=ZDYG)1a?0$_Htllvb(}4X5?uh@My^w$sWW%% z5h~QNI84^PGwc>lJGP~*7#(r8RXPs}Zx_&7H#OeHlkxfn5ci0bm>h%qP&h`;KIuJl z5?{#Jx2KO|rg@a#`VvVcZDxm`$K!0WB~%2Kkrn|4&-jz?5G&>dCvM6SX)Z-J&E!$$ zF$C@>Z5oOGHo<*(jY{-mxMB2ToFFK;$5NGt?KFP48d)oOj_#vw^y>^`&j#>0?1RoA zdNP|LC0AWI)pcA)46`@ZhjZM30qg)hg$K3b(=AW6hcB&OVm&;!A3B9N(auyzsyX_Pw0wE=^b`oR~81BJ(dN0B>vCdu^kh zH@C8DVCoP)Awuf|tanFon(WDx*`BB9i$B`I2p|p^CR9NCDDe`a@oI*oX4= zBL?f*`NzRb0pnCI`BPtRa|AvWrvj6%-W2ooYqAi7vY0bLz3>94H2bjkg+h{W5J-eEY0me&`3?upV)};cs z5pWp?+KHFm7w^+kF|xGOrD6|305@8kGB}`{Si%IgOM7l4#_=;Io@$G z59vHgjZ{*k03UbnW&#d}R!mJ)p9A~`yPtQ9V#H#oZc9~g6fJ=%t(FN2y(YB^~@O)waN?2B8FsoNbHR2CF#JAsm{7NpoxC+q8FPGk5S#xS4(M} zr(*+Y!D}kf&MgC^SxMA7wu&cF284UXPn1Y~U-v{t`&RIGzh0*wDwLviDK>tCv};bF z0iz$5nItNX@ag5ZSq4bRb7>?D!2pUO<1p4F=bh51O!GKVzugL z(F=Rp>hK6wPrn-8^ixymLT@TDMSJJC=pDWlAF(xhzm<2LlM6+V+OMTfEf59APaZ1z zP6?PLLh!g9;IX6T;&feMpo`}+6hudp6Rk%7yc62PY*z)_+u{*%0Ah)ZWpLI684M}P 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

#I+mdF5I3{uitB?@8?6)7#3! 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

Fk{LP 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

lJ+x%>Ad^$| z=5Y|%h>)93jx2{Oedo`)jgaZ8_R;g_IW{qhY+{IYy3B(~^aH|;9_$+rp&gwtJPCxm z#5RygKl?^I@N0=)uXz2p`7a!d%^|jxH{1m6fe@2Kt?AbZALXg~-h zo|0#epPuwHr&sF4I^uocN>WaKJ5(ZrZpdwC%d6j;;zw#Lm6%TvQcE52l#L1ucp+-{ z)1QX^cXR%4LvQYLcnAT+A5l#sU#luz&SDT_T*BPmEceadPM^<@Q(a#p@=3Stpo?rs!n`!kLHm*! ze#Kt*7_fHsCInRJKY^-cZ>s~(eN0HQ8rgCSC$ML8;q}3+N9cZKhiD?+!|07~EooDL z&b$_k%{5X0=b!lD@`Vq9im_ z-LJJudbjsrDNt*~|5Ya8g-%G7_SZqE@b7Br&?r)&fmk*SLWibUgY0b z*HWfoRLGsm1>%ZsK1n%M2{kvdr~J$zgOO1QRVk&p#I>P{>O?x@P^YSnk|uHSXfp9Z zAAv^(Ia-b}zx{@=lRFRbTQ{hWu?Y!NDRUTl)R*BU>&i^_vxC}!3`#&zOiq?RNc&<| zYQ$d1AHL?f4ircZ{2?We=|X}1qd`QDs93Bm zo)8AyRYgEBBkneX!0$~)(I@G_M;F3fu$X5&XU91415N3mc{I8O<5mqh2~^)qjuJkl z`KRz?2$uA0IjnmNLb3%C0UMEGX(^MJ(IB(bAUMoCvHL6m>0&FPGgRqO@@GC1#w5O) ziX7_vZ(6;j5iID4rHqoQ(6^UnuJqLHeO9{YoG*Kf#H+ZfLE8_539aWo*9PbztP}h7 zJvd~$RoCdOQe&3Q%**{ZNm-*8IT$)JdRXWVGQDrX8_9Qa#0KfoJ#FReOF+g&fVHw-Sq4pgoA(3CE=4qvR~-(GW< zST#Hs18_#D4JW!)%ef>%XR7gQ2I&(nw-oS{ z5A*EQ$B!ZFuYDMP3>;rkbP+wX>02g2LGY%?d*Ayyil!NKzm5%CvVaBOi}c+1;yZ708?ZPp+wAr znISScY<3G#>q5&Mr8`B+Z*AMb?}~Fr2}kfeFz`U^ctzDEghzeB>Mt^w8sZ^>(lW3_ zIUF_%v7n9b&>dZY@8I7J5WDk8Z$}pnpuUfx>kElv?M%-6j3ttT$Va3V6%`j1YbM_g z&*X)_AW7HflcJ5S`e482{ez7MaVlE`HyMUPj`cX zitcR(R%l*~djVDO6|)uJIhAQuYgT-dBN+*5eLgEH%%*(B8kR&I6|P^TQ>xkzpSB&u zGr$L?OEZ$XC!G5Vi4qCa zCME|65=8-NWR3r|@6fd{1(e4Cy|{Ev|9bqxkpNtXse!1qy~Cdmx&Y_$FGtd#q^2+@ zi~M1wkwz;AuO=weABhOb*8`%_KMwUf6w}?{}m~Jz)$dYCF4?Qg060Ch< z4E@c9E4Yu6YkDc%s|3cJpfrmLbvemlhO^BtOxn!1vq~nKQ`?36EiZ9^y}nw}TYaW; zj2*f`Kl9u}37CxzVS--DO);4EBT@R)wy1>Sn2pY{>1b_-kezkVZRb95jOh@SB~>8NTM<`SJ|a$qq>FE}1hz^jN6tpmVu`ZJpd*GI z&Pu5J=Fln}$Gof{hOg1s^N9%&A7chs4Ypx(8Rrq2Zs^2$zx0K=MjtK~xr!;L28C{m zvo!hpPBSIuOOnP-qP#l^A5QoUbkqvSZDL2=OeJEMDb~&w-7z#7sxo_R(sHuv_af^r zy19IR5flcn@4Ox6G{p@5{IJ(ya&#qzATVgDL{O=jxRFDgK1ZbpqI|t?@zCd8=Q%%I zhv_}bTT0lXoj?>Q0S={a$J><^8m8+Zefyf>dxrJ|=t3M?F{@PQg*wpYbub(j_t!pK zU`6{#V>08Fx<@PKF_1niPj;g0c;zuJjk1N3)j_4WK&2rs+RYT`6t1{h37PUUM4#n{ zXDIpCLodqS-!4VdVxNI-vPJOSY7Fgn-Vh;Tg&k3Q%**wSvrs2f-`1 zC`lY6ClP=(h!h}OF&P!p0#EmJMKoPJnJXIz?9-LxF!i z|4&|5W=tB00UA5GAa|dF?Fy_|bGU#kjLl~&pkMb9jNgD?xy&HZi0X+2*5eCa;FWxT zUD8g?(1_&Q%fs8ZpJ7^oG=Y|WwG7m3hP^X;h2Np_v5+!o?QeP}qP%6BoLSbmh$5)a^v^p{K!60$7k| zDdTU^ZLRI$#B|CBbEr1hs|Z}?6jG_f^j*e^V|E&az7E6S~*8^ z@GC5J`HE`O^|Wv*K@(s~ffG98zIb>~DVT_#ZZ1Kh3(n&zKi-W~GM7YT_wEMj((IW+ z5em*&jBWu%yXu&UOOC%U7h)@JvF~*3G;|<$!SKw!E;;#~C((50*y}ncsuk;%XNiY@ zI?fVQJ$^oq=iwh_KGpfwNu5~jipT${Z^K_c<)SY@IQf)YV-q^)I&@Yj3apk+QQJN!8r$FM~SuUPe`0Km~CwHP)5iB+qVP70rOu@!^A< zF!@9?cZyIZ^lX9n15+8XJqjy8h@(xcO@qK{S30DvSx`H;9ToQ{?(^?IRQB(R`IpN6 z0R+m<+hIqrU%u=UeEA~wPgPdm+S0}vzzhK$ZiYs>jusA5hIYn=|J~#=pbF!mxRChy z`_brNVn~8C)uS6oP&S-66`s;!9vHCCG7XboG6uC_I7YH}T9-64)u-6edCknZq1o)T zu?MbvaS*Ol*%Dv8qBU$`(ahPhsiIhG!}7dw^}MkWA8+Ne<8s1)6qptHvFR=7agzOU z-F}k$5b!m2D}w8Z-OXdgMyPIfPcWccn1wAQRE3RF` z3O6=dq{BtB^U>uRhYt5~r%l^K+seB)n(R7Z{X^#Fy586LErsfwrAB4cMVY6QOf5Se zddmIUv*iKk*`+5OPkbjFRQqOEkw2M;flr4p}wBZ z^7sr9yumWUB5HnsD73S+Qj#+1$Q+s6Oqz5yRg|!f0}(F-@`;l}#i`z*(#&!jHs5mp zX5Xx8W?_A0wMLwOOnpt6BCW_=X|5Csym>WU8PE}!Ni!y@g)Gs}7#=!Vp+3=YU;sA& zx~3Ou^4eW^KQmuC{Nkdh9)A|quOcGP5Xvd2VkAIKGd-ImdA}g^LbQRE=XhNX-o(6$g%M(`EU4fqhf5O|`e3=gJ^EdY-7 zzeJK+{21#{TH1q?#ySJreC~z0!O1uch2sa1-iTm6mp49AE<|eM(SeEP&&8Sn3fNU_ zQ8F<34LM_hn#cxH#+ms8aEQD_L5%}+1{0(-#)y*_Uuc|TD=`Ck4Uq9gLBce%D3MuH z*E>i~5KzV%myIydPt&k)@kmuSH9PznfoC*EQ$l^eb_%yDt%2$Tw)MgOlgY=x?mWO0 zu^)!Itrq7~g_661BI*tfrFc?m)D>r=f~~v*p5ke~p5+jr+JqnmpE^eYG(z4Qtr!MRVrG zI8KZjm)Ad-jg9a`8lW#QSszTE0IQ zA(?RKfU`|mU92lN)7%k{8KO1u8X>}V^qkL%y+>vm-V=( z{meAHfN9TBBKwvygUQM?E^u;$DCy{or6zHbGpk#%M*UU)m{xct>Lcwlzgk@Aq#Ms^ z)A*`m1sB7w@oVPHCb=icWmT7imH}>f2#cJ37MZ7!9y^cO78>aXjCG0&(&uEl!4B`0 z1W*^_HLBNypT!REH5O9Wz}nd%Qi2=O<#0jVHS2Ky<(1C23A}D%0xAX4I1JJBC+^Mf z*T0{D+yg>+ceIead$Xm^hQ7Y&D#XRhFeaXlfo?L{!Us!Y43POEep<9)e;jxCHR69A7Aw^TsEgw{`KR9mzSaR)@2twzK^N&o+2S zC&Y(VNU_s6PLbfn6tm9Jka~mpSVR`eOSwkiQ%DGrR|pWqs1k`MO0D^Bi)2M_%WV}S zpr6H3NRFoZ^buTNrKV-Sc>VxFFBnKcIe;u6$r4CXIOB21Q#+Za*P23Lv-%1(`5l`Z z<(x(|Eb)|8xNSur6~~w-LLy)~rA@tryw?V5+~YG>`sWCQGKW*L-#D7d(^xP?P;5mh z6YJu_BzLE_LISTTSS^v$e9}67=oh!@dj=O zb3P9>Z9;_Vef#&`P{EJOIxq4htMI}(t@oJ=RqJy1g&^>J`;*rM8~1$1@0m{gVx&Tnib^wfpbpOH^=na zjL9iCFc0R@w2)vy(artzf0r8J%5lWy?A{%pN)wPdHftO&vwy&J&fsYwk_#e3*+^KY zb`*AVv)DZg-CZBi&eEU4R>@k32jAEANZ+x=NVP>%tGMYmTNu@`lpfr5hGuFm)ZS(!&TY8`D$to^FmN|70LPqJscQLAVd-##F6 zo=}LkueeOf8GT79GdPk0gA|#=x;4O@;Xe?N{AIeC5$5nqXYA$*R2_eBdBB*8!qEe&b7P?mzq3Gh1avxdyxptHMq%C}QI2*75-146?G6g}iKq9g=a7DMZ1Xiy0#lX6t3g|eH`8Ehd~ zMwTBLJJ*Wy{TVwFHh;7n_KC1B9Q9JVP*`%@mlIl&Y!)`M(94pb$}S0wr?ThaqQxJ? zsqGlV1n`75FqVO9`8kfafR7}4tT8Ss1a;VRJ3HB*QzPT>5C51#7-ujk^Q$B=$Vu)3 zBARIUV4t}+zXh}uy^){*R)P&Z1JsdBU|x6tQT z?PU@*i9qdL>bCC{mfN9G}G6j(A*{CRLpoF!xuTs`fmd9lNFdP-2Q%bNL zk~dTjMTsj6#GWIUR7V+AQ=-+vkRLsmNf)nD%-0N0CX16ZN<i zwT{`E4?Ved-O{k9J)+>sPS6$vYR34A!Xs(<(1xVa2%}S&c}qQMoi1#wTFT?=QmDC2 z$MRtG$$7KfdKg{k+O?rAStp^>PT5YdWUWe#*4sB$b4;rl>h;ozKFif_XVW}>YYn&_ zQfmR6^t)W@|K!)XXB>gB*Z!js72Wp*S#EO)XYu5<*V2u)GS&xgL<_{?_kRYo^(~U^FB|T{4mQ)#scZSuyQQq74KX$QkJ)SK>EXQ_b%=0X)WF3DbuoMI|{>zNheSqp!D?pEy54J!i{o8a(A; z=dIZB^@;0al5U#4St4Hem`6CUD-B~y9K)(LQ1Vu5;)E2dCQ$2bye9a1?E)vU2i0J# zNJt$DGn9G(+ez2CpXJ#_55sG?5{QaYs%b{$^UDGZ@YzUTd!2F(!S0r!^y3d16K`6wSAX?FAO}uXjs#j8Z;QlTl@ckf zMzGg~B|Q7hpW6BpUAUzYE12s_@#!@!T?|k_&qmmMO$AO|4>AX*^)#k!c$Y^Sy2v4y zPb;%bWuJhu&EJg)e2TLZg~#hn#-P^1NqmLdhCVoLnQcvv($(tgUu2P-Y?W6>d-+oS zDzblCbp<3`2_AHe>ao82`sY>Dzmw>{==C3cl3}*{@eo*FzGO)JljgwxYO??&dH_8a z|H_V^Yd|d>crwA?dpJfnPr7i_|2#1V@IkasQ_bW*5~nO#wYvJ zX6Ea~`$dyAE6?MIK3J$pm{VX{j@Z@2e60W2X{T8mt>6S%-_ZDfd@)#y%Hy4y_is(A7_OvCJtL-yvp5Uqb zX+a*Dr1Hdp!_%`zS%@km?34W&dSHhdb5`MLwb(6W+u=er6 zlrG^Bgd8H=*t-YVo1P3}*GovOIW!@KgX9@4nk$wP)W&6+mt{5I>` z+f>g`j4ydyPLNkx96BV%I_KNwPpjBzeM|e(q@9~mYfqrhHu=GX9`O-YNkcR@%`Cyz zyKCI4Hzdz38o2HOrJMmdoQ@xMuob|fZ_Q%@?@v~lm$ug`0qyQuTpYn&qdEZNe{+Ou zx_YmD{p!j^p5i5N7|iu1<)te6kra%#-NC_ovSU4V#fiH)RKaoiXoJ->w#$$S*ZkD> z?Z%ds<%Taa8$KczLB@@o^iqI>cff!eI&ggWEQc49C7;7Px}=$OeL1AW#>6wn*0tXP zeEwCxa8icJ)vRwj3OyRShj1m_KqZ)vksU^EOzo?5)Qr zz9h$J<*mV9WkRb}@4WqFg(_*G(kM+HDT-P7CH?IlYkU;nN3X2C$fCR)PGo$v`=IbA z32b`X0`$Pa^Qr#!@OPi@Z&Ff5#XS-8X{Y&;&x_X+HD6G{@)*i(mOwBCK2+_2!KTEX zx$=VrPEi&T7jTRvvnlX*gLnE6&Qoty*IjpabywXrKa3u8j_dkeE+qRqYG%;BvGIP) z3KKA{B{5@|EUlS>C5Z=l3dGbv14nk|kb@vvz+o#uY6L3y*0u~*{qd><-(|)2UK}XP z!qN1U3`PfR6$OetBSGVLG~FHho<9knAqe$3*NpM#>Ji$i%|cR>sTv0k%O~NGx%^1G z%#shX?mjFqM;)ksbvu9)0XVKdD^pOZrMb&Yw5jh`mqjcE1gN9pAS}ek1xTNOH8u)9 z+dL$unh8Wz%Z0B0WG*5kxFK^!gVacMVBzFX_VB_*Frnl5&euS!CGk}!Ea*zLG7hzQ64>ezU@#N&;=8%pr2ybTlvqq^)iD@z z;xUh9kUgWY7yPH^SC>)JBy4pi^?IR(3w#IGEfB^ zW|oQVDo^4=iXPke?z4B*BKVyiNijd(*?oaI!tvA#kG?oJ_owXH< zlv587g%fdUrzQsU$`cL;)~2T2gZOKI%DawCnXw+(GgG9i-0t_N*+lx$C1UfN`Uxqi zl}&1q5l_@A*BvvpR7uVx=?|zVJ=_$)k*Vi7m+i{akPI7%GAxYawEJ=){9w12(l|dM zCm74w7V3dnAd&MWYuroUwjywFACW0UqHq$VtWe^Y-vPQ#aK zeQ)v6lNwD}`w3FY8Z1cxeD4Kw2GvQ?9V`h6MxDm`jM#NaTqfHlVXP}3-o${+b7x{u zbpPwGm}G*%{CcU#hS9Swf!<4Z_;@1Oa{&CPK3AB61nL)hxXZl(=2KQ?;M5CJwRX++ z5@WcTPUHNkrVnuZ{MD`n!0Jm+=dG9yvxGTkZ70F;$%#VVMY`GkKGR4)cwy%RU7Gj%(}38tt=$1PJqc|POf7)OY0mW*b4P~<4jtn)Fk)-XTp4;7^FYM z_51PhqF+pM{H$-~UrHhVM*Gz~P(%C;^s|^HZc;xngPYz{hxS@k{;C$_&&S95;O4Tvy?J#B+WC$7@uTk~yw9(g8}1G2b1@(LjOZhC@p%G((SPvqMv5-(6(cS<;T#%2J-NGsP!> z0hx0}b(j5{j`&OHF96d^6#({TobFPyw(v#i5$3NRHG()HVQRxTLA!>D**E5Cx@8EA z?5MmySj!I&p=|NKHs(PrwSA%*ze8Ri*t%`agPIBdsmf^uaHtG+<^$(d@{lrw&N@9DEiw`SLJ{D(V zS<0Q@BP?XdC~+5VuanmCnrU?A{o8iR_lBK?Oi`H@!tuDkWdIp1AYA2ch3LOoinI3d z*YxO-aEfW1tgOgfxyeW~WhwXfLtrh#hX+i}M4K@>W%vrBf{XtWJa ztsuro)-EE#S-1W=g#lRfDEy(RoJ;;9@-1G-4WyH`$u4{=Eer#dT8Wlkc!HQMF$Lmn zZ=xPOsL(%gdPq!>y(=ZrTsZ`(xCl`(Jrh#;Ez*F`M4!Hd16hI1%FB4(9hol9TG2lt|VaZNb~&|Cju zGsDgm>Xb4hl@DPtawD=^=Z72D1`Td*lU_ih{?~ z_%wE@)^numMSj>J1ud8h_ZEr>iE7|j6Jf5Hzs1*JeqKuGurzu5{6z6eYQc$IhX9q_ z!3v2$^i8?37*@e}ioG!@S@G*7{IXk9GkJ;X(ltGyBTeDAdM!`4*=fI(DsPEac8AU& z@yoh`z9p&nyw*o-@$U*!x~h(Hkqo2(n`K3m19krdxGQ~4(Xxj6A04`h9LEATLA}2M z;x$J}UvzrPkSdX`RJ*^IoKi+#3m5rDT32mSp!uz!r=4G5R?>7;!ienYg%jKPI?v9-w%+xHbTB69PY3 z4SMG>+z>#Qrc!>DzJu<6?sp|qj#400$BG@%7a3$d5baIfquc1XQt61Fw<)+7o_Bt% zX%WTo0^SjvKZ-FjJmxk5OO2MtH9GbAuC|ZanI?^uR_Ep<)g{%zt70C90O?buXnt`K ztZKrzKaNW;jvXKm+>0+#RLQCI!y)tKs!pAkF6whj=RR;cmD?+8Hy39Rk39*tQoq|V z-|Zv=y{LV6N|w>3Ce*v#7Vx^H>yLkSAkWYrtPC9f4mS_6T3!Yn>GA~l$S@d&5=OQk2Ph;0T8AN8Kz3fDvD^G*(HBy?TJ5ARDeI% zuD12Uy8rA_e}s5u>TB1Y#V5;S>g$Po+iT~AdqM|(kFo$E@j)_H2iMGlpqvT#Koc6L zCWJ5eZDwGhOi+{~#cWK%w7e)$oE?(lHrt&J?DOIA;d-z^r#Iw_wW7WlEGu#SMj3Vqat5!sGh zK}o|kLd4Qnr~`#|73iT|pwSf7Bc)eF!-~|xxhS!EtWu+=P?)y zs)-u78vG!k7#EbuHs^Zf3^)gG@eG@bcaY0Rxim~uqS^XPt8Po&ytdjU%}{I>^Nd?) zx+<)}6!s3cEA8z)RK^lu&^dPIZvMk*qQ2LZH&|3NQfmN}%?)Tb=l3mL*}@hJLX#&W z9&kl4C@9ck$eQ@s2J}KgB%V_GaXj%m1>=byn3ATgqO~^FUFwkB>E*3B5_DEI*^N9C zzFEKbFAKl4shxt4#VM}^TiYU6uLqedn6*MXVlL~UB2)Z zbrG>*qWkWqaPKs{R`%Kt%R_vGWE;jfqh;EEiKMHU8lFo^;~`QK+iOQv%+C zSPCf(Y8KDO!~uqm`%jjVqt%@!G7;S}xfjmmUXZ*y z7|1787srTZeusMktvOcvb4moO@{+8kqT=s}7eDVeKHL@@kj>&DiZq;UDI;Z%M^B_$ z?I*-kXnbI<8ItU;pmap(4C_A5f)Z=V*S-u*W!#}ygJ&fNk9s4el!X(Qz%tyQr}tXR z9msC@Ugbgkeb9qi9H+G`$=fB0?rHPf0{2^B0O9&$O@*Vu3M9|iT=g>97DZ$!as4Gm z`_b~MTksDf8cqn`zMnVhZGV9RFDAbX8G4*0Uk%RH)wZP$#y7@B76aCRju5^gPP}#x zd-ZK^l>OcaBK{6ReW6o-#2fd=M0C-9b%w_&`MrR8dnEW8H}Y%B<5G5w^wxM<-hGiy zcFXX~nQ^pJQjOa>Hk@#T5=T-(egykk4sdOVnX@2_^9ltGeeZm+_u9enaQJ_fSAjEv z=;2G+j|jCgKyA%Q-rFmx`8`{=33|U`{%NfYIWAV>BdHGQ0RhMhJIGND842929w^X6 z#N&KOW5}zEXu|^tloHSq^yX?i2?Bo~ONkm&A!NAXh>(nq_SFJJ2Xi7v&nysM;VxGT z*m{Fn%M5_BU=T!K5MjsTW;1@288%NgFSwT-hJLDOCb^u?4o-HfD3bAqwk&|faEZy! ziwx$nWiHAkHJ(o5Vp%_d>uF-ku8ALk{1Pz*zeXmRb)-Gh7Pr-veC>)9d&ppkm?>0s z&l|8R3z(5y9oNV#5lV!hEic)rh*oCej4E^2Z|>QOPB>NI8zBpEvDQ(t(K`aCq?dsTkQv-jZ78l%LOTh;-DWp4yVly=Ti@5&HSW)g@;=V_W)aJ8GU!GguLO z22NMu_}Wz?Zec)8d*88c?f`S7hG}`on!5_~vs->-H+e68jn+=9sD-#&v7Jg!46i3U z()|bAF?D%%FTr1Srkp|U@<_LUvPyF_J=up>tY3pG^GrRl(|UqhC^FU)ifN(hq)j*Sgi&zaY1TY6*{< z#IpCpz9Sh=yz3hKxj|$L_V;O%u(*3q8s{LR8?nG=epore)3mslx{8 zx~e?aP#!($mPCeVBrC}h$u=W0D;QRk*F@opl}o07VT?pj3eM!l7#N65Hki_vmy!43RVhZ2EvqTh3?8RfrT-Fr7;DI9>!w# zTj;6O>~qPHx5r!?RL z814W*=@vitx1T%6-@TkW@mxATUDE=8J*7dU5EANj;-h+1&c&q{5*_|ZYm1@2^4O~K zX+yJm&@~y+dM72-mX}CW)ed!j5o$N(0(HMcwH9J*!pcn7{(L<;@t)Q!h<#R&_}DAz z*1Z-SFNX5jTqrT=^O}c|QQKHW;6bfoMz}?mirEJ9$m9Hw%p|mfXUxo~>G@6Pnq$J= zRAIqtfdoEq>x{rRVJe{uDzI`FAvSL4Q|)Q>W*NksDe&~h)jfdqA+N3K@aA7A z%!>3oAA#wDQwHGC|Ji%>;0|-mF5L^=~fR0Hq#wz(LpogN<>a z=aavy1O3_3peQIx7>zOPJRjPIFYuYZf#<`~S47L8;ReK;v{qrvbl@9WO?^fBM>3Td zc9t>HXHo@*LQWXbF))Q7BYa(hEgr<*bmAV!4A<=D+InfVqI};k4o*M5UXEj zJe+j!l**j@K*uX`k2v{Dm55#l_~VhhNK{nC?5#XrK*z%;B z!Bxs>g^Yi}4rvw7+BDSp`_rk)Xc?=!GI_4t4`S$qDW?8n5AT+8j#3dHEf<^L`);o& zf4P)h7%!>07J%UcenH!EBoS8F-;sDXG@natke?{2^;9_G^XO=p9GyzGbHbxVbS$zI zjR&7)Y zF=K2|OjZBCYAzZQZ;Dj29^SnR8Jnd8xSceQmC^Bnq2bCktb)~_u}(R2g)J|ZBpfujLvpkKUXo2Fug64&F(Df^al18^uqrLTWw8j|CXFJ_^OgrUzHN4OC z_I^U?Lv>P>D5x;TBnG0QDkdjJS5di_5nXdzIlc01gbrd`CKUd}HPqmEbq8fg zy|q)NlL~8&PSN@weJ$3ab~BFDKSBDFTdk`H04#(y-oOd!)wN;7318oW;5h_j)Ri*a zd#-M@u5u0ZaMQzF)5Qy`lLJEgzlL36XSlp9@?c0UuLHUCUBTB+Gq= z=IPhJb~NP88VdS!@nUt{vq?SM?Ftt_CHiD;f&Mqm#M%i~>e20ZR^+ z$41iA$HwS3il!EAu^#Ql;HGaG>tUv!5e{AQk}SmzqPtRdUQ-Uy$ZIj7R_SxMKTTP? zsMFxAsaEIfVsO7k!#pToqy|>XAbH%KP$BGFD}R{A6u2)mVPE&KH^@`Y|IT4rzityw zx-diQPq60rMsnLFglBISJP&z%xxM(`Y*_RZ8L7ms2egXN2Uh-}&{*-y;%hF-Nxi=- zcf8@+K6vBn4igE#%^0PHbbz>POmi9FCO>#kxJ9&`?>NpgI^z7@NK$h<%LhA~i%5H3 zbR=G25|R2aYx{O0WIo>^O1-}~{iDtA);W4c=^8d+^CsNaD|D4|*nHT6sR8g0iU=fA<$NHODwe&XR`;_*ictB0k4n(d&Nd-in%k zly}(8Vv9J+B(D582to!tgB}c=T~k3SC-E1}i_%BPSYF4h1AX(X8+Ezu0A=JMdv>A7 zS2c|i5&j#Z4`qPZ>0rNfF;UOxCwot%!?cE-ZxdaMSiwox>ua#1IFHEIgCM7bYr0{3 z?Ls}!F#i1vhE^ewLHr=Y=o_`*HDgQkyP(}C!I(k(39-P715QTOPjb6B8QU~ zPFb$Gr6Fi93*&0gWc+L1M;B6;yu3cKA@VLMACREbo_f%hzp1e&fS*$A@%AZNWl;B_f#<2m~0jk135S_WJ?9_^fnpx2h^e^*)<6tii#Md>ZX^dE9XO z?mYM0cWM_1w_Y>6x9(Dg?Ke<_YkBFq-@1BMV%V4yIDL)}-*MjI$q$%Z0~ZVa@b5DAWh zNrZh(zR>-n=(h#l4O_Br zA#6HgdX`s1RSuAjm-GD}R_&N0ov?X(jKDIIkI zdBd5TZo7Mk0LpnmwB}Ylv%twnZ}QY(KUGr2*G!%VpnnIr8==_s^Xn-C*EjHY;nb&xlcL50GAan<Cc6Mh@03EXNUEeV_P!mwu-m? zIy+tRKogW|33TNusC*X7`)O^=U3S0@bZ4~6Wb8y;;pbN9LE%O|_gjpJ`Pz@61htdo zg27j-;wm~N>hyF($$qW`o|c4jSq^Bmn04&RG_ap%1*NJ8*TFRYlY}$Wno>bmceY6^ zY?#a1A`Eg05Qks$zrlvHZ4su`MJe2G-yYB4`5B^omC z7!U%Zla5uM?J-9qYbJjq*`^HE>nI<1*v==g0Qv8s`TCu%E4%tyx?Uo$pp2d+T z5y6ESL{b}%=WZfOu5qSB)jRR(T(TO84s9E4Z-_eA%$cpy-(H;;9-td!sTyGCNu|~k z2z--+d(_AARUT-qQyaiytm?M}U+MKnqDg44a-p-z8Tm!7iN4G&vz_9k%*sf;W|R@! z%%lvNWJB`vdw2KJ5_+@SiPaN!L!IuMae(mTY_1WIQuUMb8a>xcOh=j|+Lo8F3EKji zaPJ4!`dr^SU@z$psSai ze4Gh)E;8MkZk=(=NssAJ@5?Z*ZZg+lA&Pdg&U2VBudOJy7PFAg1L^v#GiZ}j)pHGn z4l|wJlZU#k-o|qOwi|4p&FXu|&}&!0Bi=7gdUdmu3%>Ckn>EQCH2R6Y1dpUnQo`2w z@{BHAFY62c%h2EiK?h>bllompb)D;2t3n&+D4JGgN1rNooenD`4we9;VlV26jvVH< z)@w-L4Fcf-#tv=2`}3{U<>hrT zj@Y9RbMYGZ9O@=!qf@t3z591c|aD`?aPDexL4`Mk zw7)IYc`wPC=CxtLe+RJH3PhLI`aHZG{J9T5PtAQsk6->N)zwI3*p&0FCT@Fd^|s6 z2L)3o1*FjYsk)+!^POSbii!wTxNN%USrXBrcc2uf{nmP_zR9a}PBFg$XbDPHU2)8t z&#GMLH&l`>(t|O*ZGxB>uQ)_ol0YIuB-9#-o9?>Lb?#7xy&mIz@w=zWrSh~9SK1m+ zg7$82svXg_%CJ1YrPyW?eVS~9ppzueRBZ9t(Yi0r?PlF9vN8f+M4<0tY--YYyz=gt z;%rzDp5NjDJmlBhqz~p~0Lw%58P2M}$RSju{UO*n1ft0~zWfB_Shsp1LaQXF37riW z-q6W}W%<{Ug%i^rnD{_DFL}1QLde7i!hm}4VCF*lf+kbeNDl#zztyW2h5;n(ZpSeL zvrEEeZc00^{}63+u_jW@(N{PWvvK53$XHv}og=*IzAnwM4~^I}@*C(GN5OQHrWFQo zE8-jr*=^;mrPMDO^sZ25eD$^SV+NObbLH>AbIV-wgoTmZG(K0fSb(_r9e?7%>Vt^e z)!mB6$Cscsf9A6UL@oc-@ydZ5y(95`PVYexMw}@F72W}MF#@>V;f-wK*VNx1|9DCN zz5Dw=ec?a$=LSW8VYhG0AusO#ggR_(;9=+DOs{ERV=ePvxBrs5E@^l;V-Mkeu{AU& zcDY*r0JjE7i2%lzL?H)8!b#-flL$nvjF7ZkV57}ZMZiPyFWK6GoLHksDq!O?mi1&1;DCb^4;%*4dlAD zhQf%;hIoZ$#6=zy=RVWjpBxB%gra?vSn`w{?7-mK$b;p>ZZoJh!-@zu>G608w!IaG zgb`VwRApbPBE7+;+Q_4g+%;CcMOfl0(pBy_!PkFouw~my&zQzkfw*W*Hz|b{<(HJU z)?Uni^?~|;f(CVap)5Y*&%<9hNVkscd+Cfcjc}o=xRqX2Rc>7KZH;4+Hnu#wK89=l zdj5Ugx4jkg10oEmn~et)Cw1)P~=~$51rc_*vV(H74Jw>hzHw3oV zB2JXsL|%4Lr|J4N4qD!tLM*#s)|vZ#{(AC}WrevMImFv}-vu_;lVNdK zGX?y5*zdqirPimjSjx9A{SdEN5?JJ!z(?@LW?~CM5{RC!Zmv5iX~> z4!aD?=}1?WY6R{XBfiEaOlj6gG-Sl3%F8!I$Pms=XMLR?J9>ABR=L%3nqJsW7sSGt z8d7RWPc8O?k$HXx`+2S{B*ykZJ~?Xl1w}>gqiYS1SBmKnYa+&7%XzY9wM2zb8e*%X zPWYHfXRMc4YCWjzYIk{Tghb`^c-UjN@66AS>w#|_F=o^|dMCz^AJ*2E$3@9-BQG{g zKFG&0Rxks>*sd#GW5tbV#AIz-F&NW6SknLEK5_E)^Q=-=G2Dsyv+pZT(p!a{uuUvU zOe|d-IaBE_G=z>~O{aB|UGQ4__c^j-m*YI%n2xhSjRm(*lRWdWaE&1ILBy%YoDN}1 zY|h%SnR~weo7~x;L%#9YutlIXt!%lx4| zK!3}_-dwI@+?mTeniD(%7zj-=8D|h$uGXyFPs8#J`4)>8n=z%H?>&?8maYKP|_ZP!TJi;g+m(_9VqnM+pi>?>4%wyb?C?t zL<%$YjQD|vXLL~Hnd)*s+J?%1xc0bsUF=-nM;*1ONRvOg*iH^`R>x<&O3s$}VQOAr zyxbt9xy`6hVTBk_liy&Xu}#yzsoqUB1F(;N|HHG|RrSXWLXK*p%g>*_?EvK$t+iaJ z^5)9LF~)}OH6O>6$ODaR@VXPz9|p*V;Xmf8_E&{Z^+_#tkcg77;XM%0fSMFTgmB`}W;?tCjL?W3GCae~Vd+h(X$xy+~X_8u&Qy>NuBkj#VN zHd*#VekcnocWw&_{3l}U9MF({i4X;G_Ams2yoQD zyEez7ySdNijvzQkwrvZvMW6;v_axW?#A-%x?!Lx$P(+utIm`SpH*$|Fce5IO%)1cN zJaNQ+`n{38+#BoUh!~M#AR`L(`_bkmcqwpu<|a)XpQ_+v#>@YM`x zRG2UnBMLsfO-_6pM`gyH=+yR7skqSjffu4S&6V{Dy975ki4@*7Wzr8o z2G61+&EA6o>XJ86A*;tCiwF-D)?)jz4hBqGv}h%Es+>`gqG31AL_TpS32(d*|2rr~ zQuOB48a-1Y#sBsCP0B|MH6|+|6_{0*491Q~31wSRyeKc3G*2hBq_i$uE+z%~K}VXI zW)L@maYvURF>U7sDSaaXaCAm$79LSp*;!5%_raTRt@gy)ds6ktZs^US7Y&&eD@;9c zI9J5%3`}bz>42Tnm2}oz>?2j@%#Ii^A4U{=4n8D5)_iy^A6Sbn5j3<&zH1IOe-hM= zNDclQBZm5}DwY{oK(zht-KAx=mjfccTbcs*fg^eR2=)ab#f~r^1LlORwlB+p&W`*- z>wQB@y4#A@S9{l2n+^IgPV{1+JxmVbo%kRMBtkwXFd6fC^;o)6>keiHR@dtTtrWxZ zAjjlMeQ?QU;n~hU$BtWQrWc^D^jcXgIE2qBaOQ|v$pt{f`lE5NA0FPP?9*^QLxNd+ zM(QyrF*;}H{^Q8XO)@EyeTW^?G#}fy-Gg?8uD`(nX|JGVK^+VPb^JUuGIZRW0RiF2 zXiO$1PBLbrTa$^DfHVOqGP&htY>q;hmw*)U990RaK$jB0mx0qbA%IaNBM864se~Mn zErOiprG`hHCy?~JI9cCwy!2dOF^=*PryrHiCaX>E&I0KoTZGvq2NwY!z^8=o0d%60 zOw+3J*x0PIAA8=}9aJ|MxY+WfI%0pV!g!~vtJU9f-e@CD{v+O0N{2Fqldq&Xn_3Os z+KN9kHG?PZ9NM!(BW{_QuzQWZj(Qoz%F0Z&N}to1(HfF9SQAT=rf6vnOYt^!a&VRK zarjE0Y!L)EKLPlFqxsoke$DzJ9ffWz{VZwQ*Q|W!A2iL>qf7ks_0AaKb`Hr z_pkri*?Qz6+u?sh(CktFClK%d?repfT)$5|MP0wgN&nv9PN~28VT+^wm9w^@wOAOG zbD{vpDlJgN;f7wc2(sDakb;#vDylz7WC7?%TX`fc)iiWE9@sZ&1Hi`>V;xhmrP}8~ zVi#tCjwqTGt}AcpZ(;Zk#do{cQkq*#)?9oEU)`UkCb@fWrn2T9{(8JI`TzV-4k*u` z4G+MeS&bPTR2a;_0K>uC#8`ew9ucODrQF0G(3D}`;mqv`32VK-Wy9N^9`Iq@jB{gn zoaWdLabteO!^7L%>*nDZ9T4W}iVJ&g?13Mw1BIu4(TBzF4>Nj!#4|ld1jj$hiDR7k z&J`9R#yh$pUn`e~vL5B?I6e#e166J8iTOQ<@&L&h)4|*rD{U%F%~@0~$(g}c%k9N2 zRnpujARWt)>Qu($_H&nN1zDpDcx%d80ADtNmByz*9dl>*qj@Dh9HWQh2@4*s_3Ym?EFH!hI zSAZ~98fW&%QkjdBvpW%cCdjz6VXA?UfVa@a(7iI2TXDK3SIng1iH|AhDMUmRkxno} zzoqYCsT6gmns_letLJ-}griO&UA2`Pyj~T(*qCL)+U3=Hrhm|#9{%RR{-JJUWDx7A zR#dz~Y&;^3N4&)V$RL%PSkK=1R?$)mni0hs75QAfLk-#vFm>Sth}Z5rtMNiixCW!* zCNrM&zK8wHn>rsNaD(HT zfT~&rInwW9VeAXZ)-b-*A7gO3f2qd3Yq~rGuBPy+?V{tCeNG6RndK$5-#ro&i49}i zJK!`-%dXlsV-U(h+iMFO0(+`1VSB}EJZ*wxp`E9mO$T_<$cM>nyZ&?-a#5y7_}1C5 zXNO}l41Yrd*jap~W;|W~*dl z$skN(E+y4E8LhOTBCXwok&~Ay3McsG#%s$P^3p0!Uwhr%swmPQJ+`va3<53^qqsEz z?IM!-IB&6sk=BEf#tMy>ib2Y1X`3#=Z`MOX!^iKY!uJxZH1v*9$s-#1w6G0+6$6OR zXi*(0NmFNFJD^r$L|WJkGD-BoVwq-T8=20mE1m|@xxWwQB&D2c_|eUin0rraszDH- zSf}dYxI?cnwwqvE@?5DlKhYlP#XOW7_^U`YPPU~iA)Hs1?zu*E1~vj`QlQ%;+1izK z`@QJma&xn^jug(46Ulwd8r0mc!=~5pXR{Y@`rw+qA2MEq9u@0vnnQ8lX#^YW*77*S z3d~E2Va-$`!9z~;xItFvM}c(QzNIOD2EKF<(gDw5rFoA(E%0>2*q4~J?qQi-l9||z zGZuV>&fZ8^FQ_bwQNigIK_P2rn|2zU$!#oaDwV6ZlqTZ!@B=<#>+r5+8&+ilc@wI1 zH?=on{s=*Bo7+gQJDjCxI$~nJy+Hjzq*?H?^3W8`)EeqX9;L?^*?V@ky29f~lg0$f ziD2x#D=s%s=oklY_Rv*3`OKdsfdIKueG{m*UF!MssSu*q$6uzPmeBQ!eTRp#X}0z+ z>#iT7NIkX+2k7w8-v($P{$ zr1?emYG(YZ)hU1e+oU_KZ6Q7Nxj>G}A6QDIvyFz%YF@=Wa|scoaT+Y{gQ_;xx%6=I z!iZI#Ax6wegDUYn72j!ff1ftZ&;=n=+XM)$I{ezCP1;kE3OOYmktOL0>{{`lVowPo zqH?VWB@!2)Zu8_t!Cz5QRI)13H0*l_AxPx(9|G^E?+|aD^m0k;Qm1cYw}@%p?Ng#+ z)8I4D>Z8-pYpR5u)W-55UCo7eKvpTA=py1aF5R7;y^U zCtDa^-ny^{u24l(z^I9a6w4Bk12st~K}z(L5P$%VGtOfzv^0ybfNrL!Re=lG{h+H( zdLh*Gq4kzGOznXMm#-$e^qSIbrIM^;JJzrkw%g@qr-c|0^m@vsUQQ7^sJRG)ZdMUJ z^g=zvLOsor4bxkyx6Utbvrn3oGuRe#ia=~SgONKJcb9iq+w8vS<3m{2Z~Eym2}+@R zz;@3DB=xW-EVcy>kxHn=2}KKn5;voi1|Bia2!)y3E?pNCTC6f>-fz%0KB(QJ6bDCH2}}IdF2+O+Y+l!S3~A_u&DrAnFw<=d@38ilLp3dyiYlv>QpCwzw|S zN*fQJmIb{u-=X$tx_!b(F$`#_+%AhR<%Pm7`U`h%l*qr1*#5oU_|HZ}zdsiS_?zYp z_~)4I|2ca7zmC{Q{$n}~P_uE`5JB*zt1ntt)s>K<1SF$DH*YB+W33+p=vs`}EppJ2 z*-4=grtgQ^MN*j(H#0t{cZIor!}9y*^}F@Bc2INMk;q($Fuz}3ZEbJ&oT|OOPvQFk zV+0|OpcWgwKo>c9``2P#Ge?K-BdTDxQ9z7Y8 ztSOEjuKqwE}Lae__zK>+;gN6*rg9w`kQ`l}>wGQ`@xT$&Tr?Viv0# z5731SXxT_7fuzOZw{ zC#qOnDD5VItF7B_?S{{ja-A#K6m$S+T2Qs-UBn?|=T2|$nc1d4dS55&=gwl zbJJv$<Xt_#a0f4os=t*CM`|5(1J%Am8p6)I`_k=Qpo3$<4d ziV`oU!dk;rk$>rR4rDdsn_cW@p90r+K%4eoh;@@CXiq@Fg4s%Y^kvztvpq%({-X0( z$32`Hy2XNqo#VLS!tU7qW1O$kkqE!-@m_5&{I<&1z@6`7D@!xQg>Adasb2nQ;Wy{x zmW*z0>*H{BvNarA4dOXqL>mBt+9pwhqDx6m(RSE9mZ+??x*Phw!{>k?)#V%S5n%Ps zRjO_w^4=J0!fq8gZf)b_xmNcCKUB5TAT!3TaBM6`t;Oz~UMEbAx~1T>-qJo77mvU8 zOV;Ufp3c%_#oRTTYC&?uy~Z^Su%!~EA});}!$aSbra?Cds&kZ5P>F>Z8$!xiuWdcG2dc*NCG@K@RYQuqNCz z7{rG)`3YqdGK?N>DB@5UB|@giKleMQGdM^@SmXxr8!m;QgH(I>MgN0Nw-le6AP%GC ztPaGsDBOVuFbC_?23;`0{!6Y&Cw6Y!hGcZe0Gd*=D3{nES<3*{gfd!%JDSEpH){Sa z4LnADSqdd^kN(;=+xhufXW=#8SHKnEgKjNs4VG68u9Vx$3{79rhI7g!y4 zn141s|6Wo4Pp$b!=CP|;J8bezGOdII0+RZl)*1x^=kK^8+kb6%NdEhsvWcU`H}~1| ze^X++)pWj712BB$T*t^5iHO2g4DX7tk|ao-V>EM~bd*b6X{mwV@-u!+M zg`Wp{+Mfn|IXD8`wA+=}8SEVm!4T^3IuZhO?w}Z%29o~U7$|SIVNoX`u2P8|u$PH4 zEsc%tlm2s;%l5@ynab||E9-92zv8njJmf#H5;Yb+Cfy~7uOiL`}_T=35Dy@=a9f0LbM)bNX zdVg@AAM-Kq01{-Zabu_pSrIxkL>z24u!>l37WI0iHd3s!evT$Y+4gkxI4LaofE`25 zDBuS=u5W~gk76nH7r%iPkC>NB=!bm1B{fK{kW#)&PW^%?GxLG|CYQlQ`9_iFHdKqI?u1337TO{LWa})> zisaipE08ZoBNe^53rj`eEdMx8r!E+l5cbKyR2s%vd#&BhzrBB~%BPLw2HaEQ#zz=m zPf<>5rjSNvMQY3e(S!>YEh}F)@xU`Jc9sXr2{oOn&r%-eqIHsiRfVt8Y-WgODhN{av8s%Vd&8C3VO z(wA&a-w9fZ0SdrP`7JZ8*$$W=y{G^TXSbO4JuTvZ9aGw@T2Yz)FV@~M$kJ`y60SC41{Wl-hcJO2<hI;0s05j#4D`1!N#m0kxi_6eNEY{phh{0x-A_WY+;DOGJg`38$(QVO33$;ATG@ zJH(G&6p-JSw5KLf@8deCnsRAC~Ohvv0Tzh$g+e4&_*;raVUg&Z~z<7IF*~ z>WoPq4LMmFI57YNMH8I)(Kv{Xy1|+%!HjYCKqgp7)J}i7n_xgH&n`b19#m(IX^Q5! z%6l1OGAghr?rL3S}NcEFB>fJhWuE9GdVqZN!}@f zjz~O^2}z~8@er-o9iHTa&q>p<4i7z=mONR9mLLiys%+`>cf)Z;I`qmt zSyI%q-2S?@GQOm`CzGjM83P`xSW`$sw4|HIHX3lP?}_O?v3et(Zh`lQhq312^_L7* zzJY&H5z6hGzbTBW0-9|)(>_)__g8ReW;k^7HvJuSH8VS`0fp>k(?gc7)HIoy##VS} zSBCc5LvQui#4n@fr&Qwx_|+9jQK_|KR1~>vfKKRUUEx2InG^L}^1+j=Z;pK6PVe)K46musE$v%k5qqx^_C z-4VNe=xBaw`f;71HpAaSA&sq-5rRw4B< zD%t2Hs$Doc+hVChIFV|baqDY?vYb>T3C=XQ49vaRI9Bd5$*IU#8TE+OMePR`tiuEL z5!zAbI=P_rHW_{kqD<~V6pzR~nSKk>&@&>=v~8dP4K8TZ-1-l8TYxsZxFSh_tX{bX zw)}6R@#{|_ri{2aN0L0klb9mH6M3X7Ip(zDM|c~mkS8)PU)c1@G|dr)nsu3wiV{E( zMNWA);Zz&n{0k}GnW+H$v?SX=V}tTSrbG>=0Z(GNA;GbXc^Z(gi(3gU-y97O=f5I z0KLkVJM!d7CZ0$St>HYwgl%F+$e?zj>`fAc-%`7O(r3jCjTzauGbuVEPn$Q!}w&Td%tB>OQ42)vX1nd0}+MHq*V;g$m{36NI)ZG5khsL$T zFb@G;9Jp^?9y3EDkXr0gRszK$I9sg}wGVp_N>PnHJ37X2^W$QWcM}a!I@fw>+H5_c zu#I+N?z35A6L!_1o1OEuAU^)pdQE45NM1>b-)0oY(^D*Uhe<*5xmOgy<0*9@NLw^G zg#=D^sg);?Y_zUojyBX!S^4=dTY!H?)PKj?zeM0TJc+7Azik0_zYBNa|CmVYIk;IH z(D42B`FFhiTL@0j%)#Et_S-Lokm0)TZr8~+9O?D)qO#4v#&`4;zdQ;%FMnS<+I?hzw+s-nom0K6=+A3aU zB1sn#dN;cJD~kk7%w|f%R9hY=j!l`oFrc|K7X1(1HyO6^J8IVIwTJLN160X~mOKf8 zl?`VvfI-JeTkud0QbULyeV@58RNlw4Q8yp819MfU>ti#-2F)P@1>B#u6iH}4+f6uj5kl4?-&QkV4lMgJ{gWh$MtZglk^Q& z)w_WwGWbElLrl-`lR`58Y;Y@C%!R3sA%zWvoTF^|C363Ig|9g(WHFdXhu{CH@SQ3=O-@efB=h{R)SVFlcEG`TA=RA} zL67F*yt$t5;}kGbz|3Su4;!NpfhxpaQ-+GqWj>wAS(3k$t=H$r$W6rOMvyjn!>mql zcI<^a$IM@sri>GuaptI}-p!*i6uDUzj%AiRWNFn@FK!l=n^?1H5Yu`Ab>1#mom;UQ|4Q#n zVv<~HwJ@|qob|4ljk5Ak1(Owu+}W^dLd}T+=^L~20SlP^p16Rbjg6%P|6dN--zLa%PDV~f|K*hZH*_YH zHU5ImXHoq;3OVXe;Pzj63I64%vVrQnfd%TZ8nQUSMx+62TD2VECsWrx&%U8Sf(Smo zJfp708Zi)j{BPTR_vhmocU}(G3?DCNZ?HcIQo;zrV$tx?B6r2GoLn&mR5K2z^3bC7 z@xvGeSljf#g9gj3AYBG`vq;)Wv*t!Qs26JOTM%CG1;)~`r#$u84nfV1P`!36@}rT- z@7RVWFg=6QHF~QvJhK=ZuvVBQhmb*@!Wzxm)70#+#>#xt_KNJ+^|$Os!Gm7w>kCI| zDTys0xvIsZrdToe1r(%L^*3qCAzgk~oypc8V#RBettYx`YeSV$ozO|Dc);A2<|A}9 zI}FpQP`SDrIpgQ=8Mpdl86C?QgW9ioCS!KSq2w+XUA6Wq3;$+I)ud;tQcMs|G76y@ zYoAEGLKvQY;e{DNB)YwgMdMyzcVQCkIl4c09U%&je^`64(kl%e|8kz~i*crYX^aD| zA?FfHq_D$0pV0vC=+@GP6K_VwN)5M_q&OIL z(m6Q|JGYn6K?{Yh8S#<`4*6A5hEkNQ&9E;cGc;1@0DNCAI+%>T#WavH|FP&Gd>qWg z(swMxNs?79rDtf$5s7EYOdgZNaf~v{wfKutE+=WW>1S%DbDnVhuelIn#yKxltIVwC zai&+oKEuRrjH1Ncm#cBQ2rWh@D4Mc|#{2$-`WE!lxL0H~abt@Q#vNv^89CY1Y10Mp z;-hvLJZyFK7XG>?M#$KR;>RBOfGxOJgyZ^|E2B7G1U;xle)*j>%kjmKBCZ#} z_foN|!?Iz(gy10NErw$MsuiYQxB?dU5fuiALy#@Uibas6xlCwy72PbH;io~noKfx) zDG-b9g`=h@rbQdh?Jmi@zeK#N1_gxW&M{JFO65mM_Q}= zm$}P7ui3vZ;9rTyIc3V^CCHB-&9Fay2>cH(prWb0k)ENno|Tb+o`LE275wkEE`=&@ z3YbgCpD5rLwc23H=gUQv1Z|D*y`sc+I84#M0wU-D^neNotxxb#@I=ZJHWDEV??0qx zUA}ki3s3sInyG%HkI&CZd!I_asoZ}Z-?g>X`qk2A#yU5 z{h-#X_=$%`p6+&&q*CMSA8};3E)U;Fk(a6>*PjQVa8HD%fl^x)HYl$fjxHhu++^e_ z*%KE=n}m67S5EpI7^dVY-&3sUiIEK-Fje}D#Z8k&Q}Vs`N4PfzL0!UnfcG30QAHk7 z#<~}&gBYfhd=nI=>?xJ<+8SXaIvpfASN$5^YK7StDC<-ErEbpK3waWkD06JY)uc-p zR_NKOdnn{{qKvOn8xd$tlit$b?{9SMkpG%DBf}SFh%Mm~@ot|CWMqGzTPw@Xz?y=Q z47a6Ic5y5{AZ@roJweo$7k3zHvG-@6mwhfvYL>?ik(B`D+K~U~UdCI#rVJ;lW zdKl%FxJe@@(AnqDCH7pu_?=cq?>O(Nxjj7>U3?~*jC27=G10I|aoov>qB8&17}F5G zqXvz#pl6lfn)wpSInBh(z|bu499jkCB*tPOx5j?NdD_Uh#IW!a`>Jx?PBms9*#T7RUnDyHB^I?T~nQ`t|ovSo#{B{WTO|jNS;-vx&xA3b5_LS zrNS`%x%f=1tO=zUYipmjIhjd9CjUr*B7s|~hmjynoAlT-F)XvppFl)l4mC=8N|*(A zXAtP20GVQKecix8vcB3sW|A&gee^98bqaP61A#{Sk%fXzp^XJXT@UaZxzW3lqV-=? z=vztGc{+*~;lnGF)Ulzhh2eQ81r2yNw@3k6b^73?S!3vpUX6G73)#zw8yg~OCzHr! z^DQ+DM8-xnZG#Enca_Ex$P^};RA2zvt18UYlorSR3K((Cc{^%yGud<3*zIJw#l%<` ztv5*#SLV++mvDmeAs$XNogHQxuU4KqmM1gUQ0$C^-C!_S?SD*+m=G$KgOF>+zKy7K zXbW1#cQT|4Z2 z(%2@qFI`KlPhV5Ks}I^RuJ_rvX)O#(L8DH~)nUvMQpeqKyk`~mC$IU70%8o>3h>Wa z>)&C#Zq1FaS!c8F)X7)CA)Go4#I+QA8XMc7vjy+_7@I8E+I&)Xjp?(nUba=+*lNNV zDF3lkmF}q~VY?4|dCUk52Sv8Pg|2r^A?M^=C^P~;^0Hyh*3kE9=FY}|TFs!-(CZHN zy1$Ct{bC?EE!j=LF|K{kJ$jQMwo8Q}K<>=S5TA@7tTGuiDU#n?$sH%Xdek(lIbSS` z`XJc$$UZk*sJ%cVT+O{$r!BbM6*%PV2*-eIO=QxpKr^1armObCQ+h&l^V%d=8r}DH z9A+U2ZaNB*#6j0nAUjL4vL$VNaUFas_Or!3JmJN7@e+i|I2^K$&^gKNMBGgPJm1R` z2`A0BoHE26 zbl+C#RtW{=hUN19xY0k2MTW{CW!rtIr9lEv>EWM)a-<-Opz?BqElAUYNwlFegM@-RbPgQM{R{ zF)Dvzl;aqjr{=doU(NLmRmQTQL|V?43uy70Kssy7@29Rvf{WUxRn9N!{cSBEz$gEw zpnxY$=;)#nB|E#o6TYf7kE|>bZrW-HI~MpGJALmsQ4d=2KTvkjbipekILvhMdsqQ+ z6)D|>u}^YuNKbA!S%L2~jw7yegTb$a??V%R1ZB=(9>gYe>x;@ZjZ0{rLlB)lGeX?( zm83(Ol1-=gM#h>?f+PlmZ{UH_kjJ<4l@3VCkYFnXRwb-~*+ELg-Z;3bp&Z4Yd=J?@L z|D3YQv0KYVSq1J}6}3?}?FiuWOdDzlwpulE-r%7nMC%E0t!Gu-l& zSK}Ei(Z=5Iug>4U#wCn3+Wx1TCTUE)<+c!HGE}qWFfybHm8OB~{t92|iTbFYnQq%0*{%dMBn| zd;AO`h90j)G!KxQuwr$~ivGcEnxG)KM}n#rpNw!?xRI z74?xCgBQ%?P*0|gPgBR2JIB`atro&A@iQ9+nXG3}&IDlvmBF6$v54mPCGy2QN%+RL zGAW6A7drS+RlivFcIFdwsumy9NW#6xb=@wGxT=om)<2?k3qkq%`wVX!!5u!!oV|+I z%v{{L)tWH8z3SSO)N?5)rR{B9fBE0=LpdzcSj>>cOz^#q8OFWUe=XtbK}6t82BL^#ohDB;iu)fu)DP+qoB;Z zN({e9?p6oZ^)s-FIR4hAJ4x=8|77_KUjGEqe}`A#@DVrJH@r5!TSx!X?Ct+-8yQ&| zndmth{SCE_xG8Z!I=I2E`Og{k1_*7grSKLcPD-58#$w=HU_KkOjL0_2_%vhGH*=hC zgHG{rYqH-c6|S_wFS_)1AM|?M+*_MJ9lyvsuEKD??^*5hUhK7 zY!Vk_%vNC0rCW@sWZ}%>f5gcN8^!6p1LoI*MUqPd=;XQ!-BX2~N6yHdckO27o}9OL zb$^21#O@dhTc0q%&7yOdG_MOsk<2AjHBf<|rH+eZ^#8%#wghyOAS3IdLLI=T)%-Zw zkocC%HqX8s1Q$~=(JjegZ6NQ1DfL~#I4xwZ);PsUE4<7eDXEN+UD#D1u?=@k5QI#CbT#B_; zx#iW0wN)J)R|<&rb%OAJY`V zo@o6nWpLe1Q16AXKEJyja{+w%WIC<3ZM+=4A_ul!bZrM9-aBBoc1*Sgcx+E_TV{A_ zp0oUX4okm!cXia>G0$FIP`-M0d7#^^x4X!1wz$WKzHHARz1#h+FrWQ!A%RNb;3zdI z$yJ-xTvc7w&?w2(6l<<)uIp&k6zfuk@`8k@dXRs1l^{NN+kqQ=Mw#l)4Cjr&-Fc}J z_*14q&+PWG&zz$shbf~>c((asHrZYL)>JnP8Q{LRi|4Kh9FRvzu4&HDx>hf2?j>0j z0&Nj-jDr*$hSLf^S;DOgx{pd4J55lc*X zZjqV-9#Uj@n&<+Xt;qSjt1qlN+AIAkOf{4dSa1|>45(DN;(pS07NhvnyqMUi)@}eF zpiF!|YB(n4l#+wHy=K_?BJ9_kmVmUjld1DJ*l(D)mIb%)1oHd~WG zIFF$MVLu_F$XQ9cB%=j2Zh*A@;Sp$HznGyx`FyOOCxlXB`HXRk$xEnhFy({rB>PZ%iIc2Dp)g~J8B{2%~8w+y2Xf7uZw z9nr91^l$KB!42rnP=0OVBKzy7n1c8`4}mJsB`}gmeX{0L2BjAz(tH~3P!Ae5bW`x0 zNQT*I5L{n;`K*W4Xi;3h$^fqEzgHCqz7)s%&_$OcHakdj&HB)0U=>AnFyW9jDiQSE zg*T*}eJnY?zVKdV16q6yWu9?M4+{&wB7j?X1}cQg{+aW&RPtEDT!bF87D0EN#R$i3 zEQ&}=7&E#uB|#lFoiA(5)V%xIGkV;F6Hl73F0NzB1EG)bk zSeb*spAxl( zcg%@A3o5JR$y%s+u5#q^h!>e`oM#(>U!L1>ok6yHOGzo2Rmq7aja?5rv#Ee(Mh<^* zvNnb8PFOJ+AEuIo$G{mY+MlO95<})#i4Qtw>xqwEQ=&rU71$avlCn&)n9>aH0jxav zSv?15A!S#nI%K|>z8ruFoRnN>Yrq!L;t zHA7Mfuc{tp4G@qn)$V(@{t2USA8vuZZLDAkzXVQ6!NvtEGK4@UkC;K+<|a(p5y(3CccX!nolYAp$}z&YJO)xmiWq@?CG-9z)x^ zW$FU_B@`}Yn9JS0gWYYtS7}xoc?H>1$!bg9c)is4hpa8#>e$@)JG8!GmHba~wgCMF z$^9@Nq0ochCdgD~D|YlOAB|I=hjB{orqT&XZ!3eSQGz8Wvj=0zQ=W_J?|?e!Z&e~l>_{8g zWE!c*vSlrCE5aR9Gm=Pp6gXS$M@X!_nYeFgk^V``^{%LE%)}bw`I!rCp>0osYu$|x zL<{DJr^|A1ZE@7Nu9J%dX&Qseki+Vup-^y2)K8*m2Q9inp5 zp=5ateYAVS4J500n~O+kgFMmppkm(ihqq;4VKa_RK1pUH!g|o!flgYzxB-7s@3Krq z3sMi*PshIApYFYfOLN#urCgu}HYOm6_hsyWTLq2BiC0bEikDg{YUqWyP28e9;{Hgv zHa!G2>#J@Un{(GDy0x27rO~;{Jn1d~+)fN=?(jHtVvZAdjh&fUZLO^gC2T>bmMzY= zSO6XuZ44y_uE+?R2POD!i0UEMpf3&S-yTyo?%>z#0IjJxm%l(I*-n&!y8=$J_#@g_}{W=-|43(2TH58~@UijRq%-m3Qp)v(1Lc6frVA22wxnAzEvj>J!;NORUQh?u)_3^jvZRi6m#XRG}0m z8X+LO!Y^*eUPvgO-!YjE^ay?RTK3IObae-pfNo%ubke$S%sSnYehL&Ani9q;Y-02k z3($(jo&}LnI>4M??%vo>Y5MZDQb-NE=lSwOEEW!17e7c9Uzn0Ude@I~AWzg|>FH>a zeJh@EoSpd$0A7V`j}KYB=;D=G!7B^6M3r-ZxqDh<%H|sbclEz~(8dl;u4M5SCJ8nz zX`?uXcAv~^Kv2+b5Lp+Q_SGruDR4E7L_tlX5M0~x>A5^*&_hQF zhB2k*XZUSM;_}-+E9Z%FwbT|MGEB|o(F~_f_D*5%_8duvlRd>-akywwxTiAoLT*^W>EUgAl89t`VY!YVxhlPR z3$zCe;lGa*XqvA;iBRCj@etFXrkppoOWQw?3JxA2ND7jP3N+3^FysS*=5z3vOhuvp zzay!r<||SnIZ?9+a&z!@z7Ovlqis(q)N1B+C-n|?b-Jmm6oz(u&{Dw;li9zIWUiX- z5#mY+$9BN?K+yU;S^>bmAYSN>thwF_{8G!2jPp4`81u3L80NA9(B>t4&`c${AWZW) z{-cG6v*}Q;cEGO=j5TSFR%Br8q7;I~h>sQsj~mVm&}~9})-%-_-*QO*`%$jC<^D|Z zRsukV6kuu=NCA5D8HE^*kpYa2%u`0*HF<;9q%OU1x|FQm9HJtPzpUtgJCZ|azCx3y z#*K>!9TJV_`_%K1ixaD6@+HSlp2bbRT@U1bNde70dSKzvGz92(+Cr1$GX*J)S~3|7=U#R+W7zbe=Nf zQOSfBYMuGiwpk)VrSh9~*QUiId*h|P-Q*%i8y7pp8K=P10CL6jt&RG=v<54wrz(f4$ge+?8%64z0mPw7A??qd&J=P3x*RgPs*OBGcS4mi>4)Hz8m9yk4ev|L0}Wh;UCB5R6J>Q}jdKYh@txh>qki7G{APTZliDiM#JxGD)U&M6WkNTa?) z53@V&52FwCKtOr1$*FV3cy|HJMK5!47hW(f8ZB{PNpY|MhOaw>Phi5*lo*x3N|GqA{j@2ohKr_h9% z7nVH2?R?GVn2(-mxM0L8iqt+clY7|w?HXp4gFV`izIoH_bXsFuw1_|Qfu}Ef>`X^D z*fBF4W%fs-!UaU@W#F67zeeZ(>?8cU!|>O7X4ZHfl*#wl931I?GCH?1a&XWyF`^N2 zbu_XzG&1~qh9_oiY-4Yw=V)eQ{de=BLB+xm=>Xlkvt#1i*tZ%^7taq5sBI)j5FZ2+ z%wLlb%|DHoQr51PLkxwvP0yuo0wNEoM!Q*25zfZ6uwg;DU&u6lc2U2qBez4n;%M1n zUqt3DzpJ|VH}}>!@d_`(wyV3d$z%G}+vZUR*VWrZr^BZqi!b`~aUEg;uQX3gD zuD64Wn6P3mSCFYvSLuN}a+oq#zJYM^&fHxhWD!MAg`Os)_VVpDh)#l>g@HX|d+%}4 z!tn%OnvE>RNKvhJCOp~}?~0n9k_hyh#!(mo>-tn|V@|D=`8J~@UlV6W9H}XIQgCf& zmlKGeOYegHNN94nk?GJ{*i^=~Bc`EtgF4w@m^H}4^yJxf@s*Aq3Ca^?GK6d7k#~tWT$1C&16=C1jYs58n=C-B8YZoB^T&QF2wmajtWuP zzgvn}idxp46;v2e=;D(`q7=hym5*>9O*QH64gALr3mn}rbp6TXBhAV%+;a`Ff?avY`(l>jf94iPom zG$^P-Z%G{{PAr9$FoTSs)MwdVnF|6nPX}%DD}TE=h{eu-*j=k2sb|g>VQc9c@Le{l z_25DTL$cnS^*3(a&*L6NmD0Ic`O+Pdl@?RYXoVS&x&&Emf(iye4DYarpr&gE=;E8k zpzJ+VjLn`lO7bg4Et}XHMgn*IN()myR*sIDkfM`Dt`CWK@t!KCcVY2^k%RJ>psn4A zZlvrbYe@IJ1{1OdHXLi2xIT?>L-DGGLf9*CRFwF8!cdYMP!Jhd zd80g|3Uui+Y-jM}&`3M{M$5%;rgwPsQRFdRv*&oI>FgW7pswK)PxLK_)P^u46oB~r z9RbgNThU-3Vdx(+$@Yx*0%oI)xJ#>ojMTK7aWEw8>;^^S#g0ptvg~a6pd69=?C6Zd znoVS<(gTup3g%$y1eNqGEZ&ooDGf7+#TS2g7jkmATmiSo-!hUCBvr0e{OAB(Sp8}O z5(>Hl@mgWfnMC7Hwvg^2RJ^F*Yr1lKA%Cz_lE`rK!!< z(WHXc+#-^PrHJem#C#ywm2a-)5k^EAt@|khUO4G3QqV`}!$#6EC_C^MPm^%HdQmsuA?PIW__dC~Ese)e~ z37%wmFb5moKS&Oy`oe8?n-HclIkc?@gYo{Mvtk!gJB?}EK1c#;z3;`E(T>{po9sFd z$l--?a5K`a8N6EfE_Bp|fU>)n^6)GnzAY(uG^!`o?@p>YO~Bg)1jmDagm+?z;hH&F zO(RO7qanuSM`w)A-k`CEehL$vrgY$~mpp&kQT=#Zknm4FQ_{j%Bd{9>uF(@s;EmFL zc}Wq(Qu}f3@BG95vN`pT`fwR|=-e~vth(R1+b#%$k++`xC}F7?pz_kZscuzao6Ht> z@Wr>RTR|y5@SVU^$+vR-u_nd(AJyZ06_rTYwo zLiH11?8%vL-4Z;(6v#$iK1h}&_t({jJ z#4qoNmUHQ=KNix&nRNgL7PNOTP51XcIwklEq!F0r20GHp8(<}dOZSG> zg`F}5u(;n5Z4t;iu((nr#;weFZyDP)gdETD*fDn;6k&NlU}kqo!cO?O9`uqiokAVF zfwR2l>R`sDAvG@H%VUgduxJNr%1m!`5Q7^;({<*RvZw#rwaa>xPcD3RZm3?D zlIt{OdkUHGb)+Yja%iY3RpmhP0Kz(%bsvTu=p};1vn9S|jR{j~Bbp0h%};W85`Fa8 zJJUU$P;U+-aTK_&&@w|Q*fG{xHDZym8vdlTkQ{WEZm|yNX9VRquebn<7?+=YIi#wE zx()mrw|VfT+V>OsL)4D*71)v8?+VR*l?i zFNR9aq(01ZvROTZ#?w_AoQHFUFt-vOVN^}1_4-Jww5ee9lIt5z9I zbdHG`!ej~>eN7|U|Q-?w=4Ec;O`dz~!@siU0hcD4Jt61GOa zoY$UNOgOj)y`GVt_HdW+u$D*2H;EWI35EB*O|GLu^f}2(Yc%Hdqg8!7c2Uj|U3Tbd zP~HZVIjNm@!0o_f!tz;3rMJoKAcFhXT-7~8Oa`{D+n*D-3@e2kaWB}7m72mAJNQ?d z<^q%}Mc8g-_dFiSA380nkkKA-6YBbl zGeq*0&gr~63JZ_6FIW@|rQ|yM$j4aQ2wclK%I^SQ$WP6VW?TIJ_9*yg{`T+8?ysG! zZg327((j2L!#DYc{Xfo*9R4LPPV=|MxRjptca~@WZDwR(spsHOsCZ#LM~lQ|Eg{fW zohZ-DE#e1Y)=CAa1QtriNL+;Hip2{@2w#8M^!KR4GmeW#?~TAzykD_Z-Boig!ldXVy4m@)uLu7E zF*0s^!DbUd0JWW%eeS{$VCPr(t7SWHx957ioK<2j+dySn7cn4u6@zDW5j?9?DG8zS zmeH_PkX8@vQkC z!`07E1!!4WwNFs6pE`a$aBoNol1v`@Qb>*16nWXMS)cO@<%Q8|eXlMsrH%?{x~$=r ze+n>v#1!HbB(?IZNCb7#Q^S?=`>Zie#a1jw;-z#j3Jz-H;9K|zU;Yx(DWH=v-6l9R z%aB1PSM4VH^)c5Pu{qXEuk0m=Hj&Z*D|Q99Lc<#0Q%v9v`X`HxKkC80IW4bp$K4#& zj^IJrEBEs**T;pA}@JzK$d5naAeZFFLGkS;N{pJt|$webzKb>k?w)VS@2S#W*ci2;# z$e7M!MKUyOQD-L%5C@VrF%v;DBo)1-IH;m3Dxdt*xLq(EqeQ<~5O0~HR_1IIIOAGR zJ^WQc9$ov2WdjSB^;0;Y*X^W0xL87n1j=_`XAvM9N3VCHKI6$xNs2X8nDNn0f54{- zktvZ3IChBTg|dXMY5cha8-rBX(jykGG2hk7pu0gc1GFF}S7o_@pCzUyze6t39!lDf zj3Gl;l1nXed^%4nL4RKDXIVB(`QAZ<;-tHw>QsQqAbQ_x;XYc6Op7^v_OQ>!w_WOo zeV*xODnPf+$U{Sq8&X5FcA==laaKfRC<#e+@@d)h!7Pw8Ts1i8oUzM0NE{dl zwtza?f{`ssyu3U?tdvCtBh$hVX=`b=+ih~OfI$kKY;xIePP`~n>Ua%+FiFIe+q8rz z9<*&JORyQK!k-lQ=#eLjDWuO?`7uF8HWD>c>JO&)htS?_5T@H+<@1|fw+gnyRonM^ z4FKf{phUY@KMDkU&CUJe{v3;&kd;XR2`^2-3mZYT9%hC$>kTkh6LW_d|KOb`WLTaLYNg;$>{?g zW(R>9F${m57<{44@lq$^9fpAE8A^b#_tT-D+2O?`gaNDDQz$(Tv>Urt2*DLZY#b+7 z#)2)^L`|L`2R4964CR+NrW-~T=`W%OrB|s&*&ID_&{uVlu(&8-+DEL=2|%b~;Z;$P zIKnkolP<)=lFmn74?PeW7$LBo)i=1>hP&#ab79jo^8vY$L z{@Uzkg&eL2{gwsDp!xBG?>`0&V>8QdO#qs|yAt1QCPyPzM=3p9;eUPocLcdm19#O_ zLjIhhbc;`2Vw6hnorai`pJlWXO_mi`hp4G1is7{qC#RyWieI{)85w7_DS`|u@eP9v z@#QxXiNq%_sShIG<>wOuMs`7AfqU`-KJ~fs5Q}#%5?fW|eO_(%INYpzKl-MYa$R*+ zad|9l{J=1>Mv_`aA2_;xv8U|bp!59sR5FBW@Ql!j)u&=x<)=j_Xq)Z#W)M=k1J-H2 zZ6UsWR(kYP$V-5$6a8RMm9i^vw*2Cw%AV`L~~rFdejv;0>WSa*smkM}yy%ARVBL;I+oWx3}(A z*&{5(7j9xI5BjqMlEZc2=}Wl#JClEx(6x)v3ogj#AKi1tYZ|_Ov1|*HyVML_Z42V1 z1zn?xeULW1#FJC|S*=nl&L+InkrikO`jhq!BA>9tCUwu;-~QXe9%VVD51JP73o*5% zvsqJeaRNJ1%B8xHqY#xF#zw%kK|CmIW+Yw9-9DmK^&9-;G_)GCW*kj~MlF@!T`LPN zr{C@I<~jSlOaiq&lW2%2>nAN0US64e5W#Of#2a0FQy5aezq~tllZx6F42a+FGHzrj1x_qhI3s z-#QmlSRFuqPoxAI@(my0XoBf!PJlQpf@7?{-P)@eRmwU>q%Ta`Cq}IlAs+1du1j=m?|h~95uvwQEj6^B2QgP+XY$TNZ)N4= zIv1QqdJb+)5A5hb5@b{E+jBaDU`_k86)v1!7!ggyGtB*|*mS>(iqLIhFGPjHTZy}@ zZ(7bAKni>?)7w@9Y*QnvDO%3^pBK^vY# z;k@>|)n)WdBXGTcxtKF`WmCBxLQPA~-+AJU?S|aCnh6oi9}fH)5{(eHj6(e5X4h}b zn8&1J*b~mAo)6!(CnW7b=ADl|1B`#vjx-~HxrYd3OmCv$=8^g({3Uv^idTP}_wMLn z5!~9Qp~oha?{Zv;3vJdENr_7`>e+E81zOP|a1 zH|uNJptJ4hN#3*x7(X|~T3v*&U$n%}TC6%*b#8?c-*aiSR2 zQJXZ})Trb8Veji_Db1E-(I%+aLK7nP`QA{#f-Dv_h_~6IvfT2Js@aq%y?Wui>U29v zjC@p*C~g#|9vYf#kcy`-&g)N%q95y5ECnvMoIp zik9(Eq*$^!+TpO(AF66Os``h~4uLEq;#-zLRyRWtec4JMa?^0sHC1<8t*~u1A#^{f zZ{HS?MSMMh0I31OB=xvkEl85yhcubNlE>Cn+u87buY&#+HaWOFQQu0^^3EV3* z>zKOvrJtQ+$M~Y4ZnK61F+v`{t4A7X3Rs{h&Awg|F=B0R_fJxr9~M*&R^RXP_KKZZ z8|ebbKZ^XRPU}EN;%d(9h|=scRWdJvn|+T_<71H0r3w@74OIhx72RZBMUu(tJ^S1P z<|r&{9%Wg0Oytc@MdJy5pc5(%)FxIB#>PqW>GtLQz+>TU>n43;%luKs%p5P!PzTCe zc)v|~W!<2ROgs3DAyIJpH>p{jRc8T-O`>!U!6tEfQux>?OIDx8f^zf%m(={fsdJf) zJPHFc*gc_d$+oR^fAq6&-W~iT7Rpf6U%S9@SoR+bZ>s$9me`^_^s1eOAzdUt#L72} zLx$wGvPx<#c5IpZhZ($2o<)fL)oY~(a&xMdO=!Bn(1?dM^1v@{C1HS+;0 zJ8M>}C{)R6C(v)!=|Jrl5BXR|nEKkt3kiE*;w;x?{B(A2Rr+kW9A0h5I+PJK%x^zJfqq4Ow#&Ioi!AY9CnN%rDrt<30f$1NWOT>#LG?;{P^dYf z!qN~*Wn}nDg;AE9SqIHr&5o31L44oF)qp#3be9@>lpGmJmxl#8@g1{;cVs|}9|;Ez zJ&5KC`uwyLY+nNRceStYJHTU$>Ri-l$53!Cgr)ALssNrvr&#u+6sM0iAnx=mJB}(# zpjQJexQdIRdp{PDDAw$QosJcGl6A4O!{wqx6z6J*j^`XWSfXX9^EJwk=R~M{!wacI zl6E~fo=_Wh^fH2+cN{c>lr=*cSAb6$$=Z{MisxTk+2Zw$bEH6h@1ghr)jbkm67m-d zcr(b*=pf946hR}(@iH~T^N(X*md0;u+P=&SwMqBL0ZvF6x;xmw)ri2=OMiap?=<#w z%l#o0;E zOPAk}GJ=vQz?v;!f3lmx`Sxwn(8FG>V~RByE2?!FJBQslrq!nmz-?cb#U-&W z-7D;v-P>YbBffUpr2mf5`;vPq=Slk$!fL48crzH{yHfLHSvA~)o}N#scZ!Tw;zv83 znloONTb>#70B{SKNC`N>>1GsBQ*TNGY%uvPrjU5jL(Y3%%>8*+6?pKxUE$nRlfc<# zlz8~h*jSu+cbyv7R48G&U_JVw+tdQAOes$+dX8V>!_ft2fRjfDj*Wp(&HmB}J4~%8 z%ffwYoe0|EeNO_5K1i|{D19zwi#{VTa*^+etv!(?14WKCGbM9#k zCb9Yb+sJZa*ZOK**w#g=;jRa{q`{G@+z^I`McfI!QJr} zD+<@$1-rj4=(((SC{I5MD9G%Yr|)y@h_BU8Ns~d&oN8%W+_8qdpa5k>k9)`84jwa8 zoF3t@=aI_*gT0$~<9>IMX8CRBMw)o=Dp>aEgf}Bj3rvZ_<5z-(aT!%4?lr=&3oOF> zvu|{nz?}5{X{TjIR>Ku8?08BK9u~v3Jby}WVw4xd!L;0%2KQ>UN+O2$D!PopYudnv z&j+wiQ_6#0-8@TOD$wryR6S#RIR?V&eN2(tN<7)8o(zA}q%fBMwjRD&e|IzTav?>{ zz=2l^HeS5yfi%PHwDaJe2JCzXJH?`c?g};I8c91Kz>c=IkL&6ecyBl9@6TAdsu%nG z-h795tNHn3+%MY(2v;|WYfSpwb|Wae?%ONIW#ReqjidyZ@9;ITdv@RU_1Wj9Gd-z# z=VSsvL%n-isI>UU`t^62-#40&%XWfcC8m0_o}FVq6)p~tq&s~N-S_~k$B3U|YaG!> znjy**HbiF`H8j7K7I#iML*2Nmm=6?``pr@f+n~bGTT&fmf5HBt_(V=~1!D%Y+U=P) znVBvH<7r7x^oI0OmRdBrHs}q0cf8T~&5^}ZDwKUcLi+tIeSX&tU zAFRtmaS-E=_v-$I6)r(22m~RB5T+9n5dtW1u3iKQrT`|HV$SLKZ5)+_)BYt`Ag)l30Q?r_fa*OKr48IZCXY%4=bbZtg>5<;{D5zlFuRHyD8vtw z2$w_6$PboE9;7~3LD$?Kzm&XkS}q~~@(4q;w}t@NR>uwQ4Yy49$SNKdgI%g@@&W|C zs=|JO%!YtN-F$WRP`Z^dz4ODiQTLpmJL6u#nfLffuK7v!`GLJ*auJ)su47(5$$f$s zpQg+1Xv1F1^Ki)r@}D&bKBK%#_UM75!LNk~%x(%OvJ@g@v0OytIz}&R-1bwMwa7U) z6CM3+d!tiRs(AoUbJk_1b&ZQ>L|^0ZPHDNdj@31@#R2Na>ZyW} zp(;MA+SMqdIP%^;G*o2iqVu#M148{@3GDr2s?wMEB=}Vc6%B46NI0OKsj3}8u;(yU zQI0<=q^!qKnP4up+*+9X+3O+@Cr!qh7#>q=U4~>ZT$FdL>*s|6w4_4=GR;CXP8u>% zxl~+Rf?)ewN+LPezfLCXX{}P3in&6%AHv~0V?TwBx_;xZB?|ax3Cb_?LcOv}7B~0fN}bP=?}*O}azI@=_s38X z26}~wp-zxxqJdHP1F^LZ&5SGal|VDa`to$HHNop{ubmk+9Qwk|bgvGX(3?FJH1!)ESE)(rBOs~;lp_9T(KeGQmyc`b1GC)yZQMm#=f?tv&9ujjdm!Z&InL#4i&0$$ zTW(c_25-N6iv!n3d&G>|7Mk3B^suQwlNF;j@nH4SEiKg(L#*wu0kupUORNr*5JHS- ztpL<8j^YHKnA>wB+8nhSnrKdSSNpnp+j4c%{Kh%sa$Ub4ln5J~KwC0zVlt(P%4U+< z-#48&EFIUFDKoF)zU%fr#COP97UT!@;VnCTF`xZnnIh&ROs*2FzCjF?P@#L9{M zL(t^UuKeKn*nY(s`?#HTS`zr7{^A!uaP2jo$lzpXkm%21S9V-4T4eI)=_hxtm=cuK z`|Xec7ajY$k&QpF7DK?503p;r)p^Xg&(w(QXMdg}N%O*mSw8V*(a`n*sie+psr8GT zSHwTN*|puESGO}fzcdPrF|XCv*%~Y(tQ&l3C^ru~c-$zCm`l<66f4r12`*$?ryG5x z=3+~&hC-#nlHM>gtygsze;*q;`d@|=&S6uWo!GZ&$$6#t7C#N`rQeg(kSE8`yBh37 zgJrQ^x8OH$tfq&R9T~UTTU*C^9-=#UJXl zO*m5yLtQune8L1Hsxu!az*fAGl2Phh?Es`2O{27POk-Tds z7{zD^reW~2it$EXlQiW^jBawYh?c2E!05+Y8PrpuLh}U6p^F4Q^Kb%^K@|ZlW1+%t zdNXNA$$1jV; z77%a{D<)y`H@_{_F)Q((>Me-DpiG>+?B8J7t5>8QOlA}u(KA+;c|jS@!83!~Y{k2L z#y)t6Q_>lo>{fo~UJ{(Y=;bpdX^Z2lJgv;C2Cp4bS(OaKzm-*Gokk`NsZ^S3Y)M%X zxdWVhY|;A9J?z)K_>F{G_Sflo%yuRBjV zn}*+4U9UgOIDd5f7?N=*KYf4u!A2@&@nINNbTrf*(7Fii+`LTaqLNaLD-V0Q8k;{mJXw0G6>uLUgUIjrmUbSBL zXspaH;J2l^Lc}fqlz<#xM=)*6FUoZG@CUYnLADoA0+Ti5WI^1Vz5lEKs`XvtT>p^k zGc&u$5onxX9lmi1hfo7P*0LeB6iPBL3b;W-x0X%wlKSaFm`v*4DWA@RabhzC!HHC# zHH@$j$y(&5&BlOLqEE>JLM8r668mg6Wol83{9tNGXpbdTY%;Gn@xD84i#De_yhdif zePR|83kP#?5cAipBD5{#j3TM+ok^Keei>O{HEnod|2Cf&X;ItCP(x^8SV^FT{JwJl zQMTW7J01n)=Xmgq=k2q5z!cg)_3?TAM8KtU)NAc@SarBSMt>172>k!mnSk;|6r6pMTnw}BT zJ`Ov#QIRLpMA-^oWjE+_=GzFas}snmv25cl=%kogaOzN&)rP36NX=|+;cy?(KUjPLt+Ws9XEw?VbE72hUixHFd2_M@zcuS7cb|%k zb`tK)Ovt@(2{s=##73JiALg+f76~@jypUVq6bEe(R%t=i;)l%bK;5jOKDBAlCJsk_ zpi$trTyNJ}uga_F>uB06v^=wI(RNrze!x{Ausn3vqO2}fWUNlyo>#VVZuyKen&p^Hto#W!#u+uW0VhqOIyYHWm zae@~UN=HWP;TcYh74{3sH%4;2A98-D8_~G>7q)p%Aa^ySsiwSxcY7z_M-MTVW#HrI zqHTZeY{s(|MaSF4jk`U=Gt58GH6KWe9N-tWB?84RVL$Zva146p;kmGHP6}0TL`!Um z{$>`HNbMKJt|mMqEL4(->{6+=_u!C+*enveF@MT2%52^;e(^*7T?HM$*pVq&d`(P7?Vw>;>42DPU^}pa2#5g{?v=#H(1K=43r>9}Tk zF$3bKk9WG~KskF3Kh->G9`0HL@b& zxMXq$pRSc`YeWuHsKrJTnSq_!;^!-+nmldG|2_v~LQO2}6W<#Gz+@Bg26aoMkC$qV zy%0#ptR>8q^xlIh;*^^c^?$9+NDmiPB1-H73Fm*Nv36ubhJ2LNDSQ81pNl4*O|lf2 zxjB8(z1=HXtleD%cmCQB${G+CRCiNe^{>GVep(w_xv``JP~%j_PYO4RwlV^}i6D`! zxYVsG8hMhSvei;@Aeo&I`7fEwnXp@t_@*t=u=j66^^t&!?F3WrpQ|{QrOt}$>rry% zwzdr$`mb=!=59x*Z-{>sS{w%2iL~u;d{Ddjdf-<=?H{mnKTC9?of!EwOW~Frk&C;p zF_^W+In9U%tL-Qbce~DS_4e0pj;bq*e#S}E3FvUsP{x}DpC}OJhfMD99bbr09%4&E zg46HrT0wT}&h;xo&Zm&)1^@#A{&d^myc57bNu&%$1h*ny>TB!hd5@$wHgcmJQLek| z1TX31BzK!&pkS1Neg7Dwwp9jWku>!#u^_z<_m&|afBQzN67Dx zHa?<1yuPBN`x23j&)m4BB!2|9X1~1wjnsD{E#^>Dt>kho5dC)nwH=|oOq&DXv}nTN zW_`N5^&F2)9SZ?i%X(JJJ$S?Y9->3!O47<3gRDWpnZ$tgZa!k?xhglgaz!?z-uHHm?yH7a&s3$M0^>-~98hW{06V=``H~wI9F& zc|Y9?vF@*a?phhfFdt;79ZAS=1kPhj;!o{RQFG71(Zg+eOc|>7qwjJEorrev7CvJf zCeSFGsAvhQgsF$gYmShC(pZ%Uhe>AtYbNHOH}3Dd_*Z)yFf_|q_9b|@_vNy|`@g=6 zUoGwb`xPuymIPplB7BOdtD36eqM}!zlMeLa6YJ;?gZM+JitK<}-`UXFW(dQK`!$r$ zRf)AKv>wE5$4FLbT9O74SGB~20}?f4UKmSbvJxXoYq%oHOR|(@WxcoWJs8Kc|9sv8 z^(d_{Sdr_r;Pm0pM?o^uOb9`+3Zg5`1dP%tNx&F&?M_h`{6?P8&xLxrE{zZd z{jq^&L>>Xc0~q0oxnUQ4$XpOO-F-ipcwg8MOCw2J&aJsJ01Ovz_0IAKYM|oj4g+qj6cm;BL=B zle%fgPS{|c*A(DVpa`S3CfLmYsNgE@| zWypDz)+Fp$W~{|s&#$KKiZQvsdrBynIN04`$zEk;2;sP9&5L8*%ReL-L^m0cgjKfH zM5T>BbsE(ly4>vL6TE-evVRPQCWl1Q>{$J%abs}IO+q2a;RJKtVi{p!H!h94avGVJ zszuHHf)@c< zHCCZTW$;`=Uf?!WoV%HayV$AGpvgFlCN)gFSx7bR^iW6a9<`fRTd6cZbGu47$+p(O zifB7JXCI(`;!2A{ssU!Qb~nFB zuu2Pxo@oH?r-Dd3e9oVCuc2^MEyi+b>gu})$+fN~Z%6Xe<~8`13j@}a%bea#yK!_5 zebEjtckV5BW`V-1^p@AOD`<}cLE)Z(J0a4z0mD~5)>#!Eu{qMnIJ6(hJy<8WGpfGU z0X8S*e{eruu@Db|n)gDJTM}GuxYe`#sW0&nAgu%?K&oRZ-`ucJ)=M@7goUC4oDfh~ znF%?iFf?LT7|Cv?j7!}1bemmV5LbB|^6^+>2BcwjJi{6iu5Etceal*w=twz&4EnA~ z=nWAk-zvGQQy9VWD(I8(sKta&Mx-1?Z|4lUcP7_kzy3o6eD6@&3uqO%#2e0$p5`O$ zbZ`f-FmajlNFNA{yDdR$IIv%mG{^Zq_I>2ioEDLHl+ z;Eano$%x5Ih4vY~rogYyal<%8_Z~IkTtfNMO~4?|?S=T~#~5D8MP6;0J=TLp2-L4t z5y5WcL~VhS2nh$xCv7|dtXS~N`Jf~*5O^^t4tjMFG&VQgnb->56kLK{yBIdsxwi2Z zfu`go4W2|5rwePZm6iel%k&ZRL)X;lnbi%&H<{35WD?Y$=RUdQpQZXqFMde-Y=Y|%QM)Ig zApDY4_8#;er)c{Z_d4~>G}r_`q&5k}O8JZStGKZx>~E-3oi79@M%s}Tc+LzFn8r${3LqEEko zkCwmS0%8P$1Z1|>1l!y{$31=RBIT;aZSBB*S#SwGFyt3$-QuB=m^xE@Z_vwHX)tvE z&f**PozeKrtCtyMirUSSaKELsAZxjPUu4eCj(vV=)c8(_;jBf30q?jm{$tR1Iis-2 zi9$INl+A6agwoJBQ@)GxkeG@GedzLyFOp0yO|(LR>W*zg4giu+zNdD?3cotZn$q%j#wQ7)GLUQw@w z#+y}Oy*;28X%v~XZ7c$_EZ8weW;8KYY=3YCVcNmR>n*0xM7ZhF7NvBpat-v@Vi;ws zmS=dOfMUb9`9x`ofhZ!5I{UF9M<1E~V?*Hvg9puII|T)!i_b zpQ~2ThI=Hw-#%r!^1=28nk+(@ESEq_*Y1ymY~bIltwXssmO@_xd;$4ftozgo4S8g6 zxu_6M!tr*bk%4lOqwr|MkS^O8J-eHrSU%hs8jVQ|Q z+|yf{!d=KRyqU1Ceu#jqkCWma@dx|h9~K!sRv9Ei@cwym3vz6J)~|=@-225KJIubv zj#_$-7IT)B$I)*ifrXSrba{Xz&wrVJw-MS_Zpr(JmWE zk7H}0z~^u`WH3O{Be6eZ8=4-SAlp8DRwl0hsxbGa3c{_8^4y%kn$%n?p_)s?#bwTt zKm?(8Szd%P%A>>3zxD6`nH~Pl8-MjJGoCShg}mg4lYx-odvp9E=95g)l}f-jSQOQT^KAu@tl@%uBA;KzdEdu+^(@&jm%B z6i=-QkE}cwXPF}2*J&xS@jCNC>HEAlTK<~2JoWxg) zg!*EbvJMq35AbH21oCLm48y2(i{)F1ioJxlLNSYEVVDQM4D#yDA5~o}eJ)ZRYITpE zLQfyg4(y8LPnME0ToZa$!59LH#A-7?Kq!NWzcl`*782yQv(FOH{AvO$74(FqO8@p= zR%j4e`-tS_bUJ@db>96$nzc$k1LgYD7|`fB+2O@lH+*By*7;o0ht3jE^2VHowY~sygPrs!P_8Tz5C)`kQ z?t1GOk4QzUbLKVeAoMo@_ofUHtRk^2eqL!w-pupx^AmRj2$DxqG0cJ76-nGtIm&qV zz^2+}6SS3po4n9X+|%ji9m6yi4D6xU>rb*Ey$<7n!boMxzA+?=;hFg(A-dOwYno{JbE8ki-sxSBL#D(w7gB!kpJ zTNtD*G2|Z7hyt;F5Sbz3>A5jf94RBD-_g5C0Vih^Xu6=*y-v!032K`4F9Dm z{a?i?V(G6{CMyTse;27H760Q0kc2AngDOl}UXFh}*g}eqCjlW{gisEmwup8hMHeTD zV13od33YyZ_Yd7`!AVB-SkYgYvg`A5I>XEC8cAMfCukBBY{83xngOs2@QmaU#<=%>1B} zn?b>qqM?Zd>A3MJh&JSw+@_5ZMJ)!iQ-If~v&WBlP@1PR&2hF%s-lT37z_ri4Wu!f zpp7yG0TmD2AU~F+GT%q+t%J)foA;i(ke^NAZ&6q#yG*V00+huaNSKpa07mLx7Pmn; zEN}ruouzP04@sM_4*jSIw<9-BV!~pJLOpbk#Y@Wd<<1wXi*pzcmW>w@DtxA?&tPVA zfDNHEpI>;qTlV-*xDz>u)+!ekT6^v)T%g;q3sv_SVa&0=MZn4$Hi2IWNfWH<8K^$P zIns1yBDgWHOyEl$fX(;|v}y_W)nwka<^(jy9JE1(F%Q$~u!DZ8HfB*mj=z+~?^osXd_c31&yG z>G>K0%z=>&BL%l_N$8;Q9nCe!6*GB+57n;WAn zh#}^rOP8IP^cJ`!0u?_vW|jHg1=uAB8cDYx-9w}SUK-a==+V1^k|(xFeAhH4iKf4; zQky$NMzitXOR1Aepud&NIz+0s&yIZsd+hx=)L;sI-LDYUh-4ez=JQ~+%W^?VuX{&o z8+^{@>U`o(JAhmyxG@YoMsDRl2u;+4Vl=If9{B68eTRR>_}|h0R|X@D)Z9Y$(VA7+QXX{Xc&D?+ehVC~b{IkKj2a%DQURjG%5p zjt2@vY&v2`R!m3?fiFyqqEL>_wrf!_uxQkL%c1n5CPs}9_x{Zb4o^kLVhv25%|~4= ztI^na%RTGieAxPm_nYdV78)oO8hxZWP1U~054f?R4Tn+Z@m@=Cl%N;5ZBN9|*pP>Q zZP`$qQO7*=4rOfU#R!+Qum%3a+?rgJWxeY#0=%F5s*E+Lt@A|A&6y?qJk`YV90pViI4l7_3y%8?nYmXBfslHR9o~(!sQ6S3}vY%~OpJM%-?pIsj zs_1c+d$IwCg=f6xp4f{B1_gncmZ@QZdHRHo)V*V}f)Q-eqvVORy)$NgjyH2^!BrRt zxl*WCRIj99mf&-K`qlL_sZ#(K9FtR0hjxPNmOmok}XoR7@D=KD&)&06D#&;x}N~Jj^RuA zzrymL!S~<8a?>}+O8845cIYcK+5SgRHq+HNx3{*U6}K{V_>Udue_Y%$6~@10VUf8{ z%*}8v`b8V9G($?Df#)*!itxYOuu2@VW%`-)(-K@mo>i(q(7b%`NVZC8L}rB3W85$I zZR|!ThmY1deOS~{4r(uShI_00e+t@{7}-->Ul7mMnJZQVC{HsO*t8Fg)Z_~zkB;=> z_V>ySjdtiuQ)TaI8%PIT>F}bABY1@-Rv`y2!@R`L{}9a8CymQpQxSoSTU8Bu(yJh! zKh}^vj)hRd{6h?VqbLk>(FN;C^SduyqN?(Wa=&;5uEkhz6nK|g4!~t^>o6*Zu||A< z5Ghf3y1M6zj~f{7*aCw#ZqB%%@VyGu_G-xYUN30tmP7PUluk|9${$Ac+V*baFu{Xk z+QRVJTv6f;{Ai@2)V)>86=-&Li#TfPxZ#pG$8N}y+^!NN0!ixOV;xZz%GO~)|g2J9twNQO@ z$b7Thzivcuq~`MkHYIZ7{Ywh>pMU+| z|JPs07~9vwk?<9Mk6(2m_Wv;ib!}|^5~#7Gm2tGN;Q!BuexwP>-!?c9gU(i2 z$cb8QEL5`)4NQfx5@#G~0Y9|u7C8}M2J47~Ni0|b)^=f4gce;C*(n1nYWvFFki+|ta0DU4OE03nB?g2OBxti+N!iu$cn)EA|IGUI!rQwo)UlE60K zT01lt01_Zl4q8AwQ|KIV9egh)xXLOP{Xz7ct{@rb|4YbYvaFTGS0!V)f<@w09rJ~vto(`a&*!JxL!rhYx6Zu}B5)NmLvE`UD zYyqM^Tk_#5F^}W;ODT&sq3GwGxyEAVrf0n}qcesPuj9~`A=l00OH!y=d;m=}E+1z# z1Mh=CXTwuBiSz=!KzEs<0};9aCPthZ2gyt%&8yu=JXMTQ7BSK42abjFEp{kvtp6bOI%~ju;XkB&}k4W$v@*_TewC^|nhGI$*%Yd7#3?%uuQAGXG>SGSk z+jFR&XzLP+vx+dxE4PJh!M-jk5og9O5u|7sX!|Com*>@HM^%M7D&*){dl;3FT+tuD z25?~FjX=bafg|<|eNhXsZ`;p{AbiR=QK`v8q%Z{tloFVlbApjr zO3cRUx^q&CMh);w?JNV(yq)a@O6SjvqtBK-NZ&ykw94NR4ey}YlM&@g1@WAVPE%HL zJhImjC0P=-Y6zZ&44Vz{<&K=zqlDs!vW(7ccutGBh0ZEtWjrIzt3C#ZyY8ahxC8!YnoZv&Hlo`0PSDx+j3f2C-^{JF{E96Y~)pIsn2#ZQL!bI zy?R6c@Fp7x1UGaX+&UE( z(Q1f5A;>G8NxXt2adQG^#l35^=P0gf|rC{Lc&3|9=|&FD&_@*k3AdwBklG z)(-y}`%u!bM;1o@bi3lj09r*rhzx^hNk-y5{$*-;o1Ob@IJ^53Ob7D`J0eHBFT&rv zMSGywFu_J2f_>svzbeEvn2I%A)n>=$fUsKfy+x_dQk$1@&)!#{q-~DOH&6uGnR_+< zGws%|WPMRLdHKX~I$BRSD+_9!;&G1*VujQ*KYvCe$;griYCX-_5h!Cemt`5$N(mmc zwuvGpJ$g;(#zZi}Xn>ZemN1_sASZ50E& zUX&T_X-|o&PN_O4Rbs(adDf5Tx;540^f_q914oA(3xf~dl>+)&D-w~fdF^V?yb_~d zDX$M}M80~GkBidM9npVKvV5@0`7k?6U1(#B#SpDdy_FEz>huc!JV%{(nn*}Gia|%U z<552FfklJXDOni|Mx#h$L3U6F^{@srk%6B(uWsi$oN6OtcIGNO{+drU>ZfCf(;}Xp z=w2X5iMn*_#3zv5)@V8-L-z3iTF$KaN9v zR3ARTIF+}wZ*Hveh%cN@x3R@OI*D>PZ=}rI-GfU5x(lZJl5RkEy!p9hXB$<%08hs( z%MXW5`47+{|I~22T2sKJpH@ z6;=^ar5mszfW`Es@B4u4$e$Wmm71ZnKwI$dECn91!Z-{(fd;gU{9}*|XY(K-%iFIV9_}-d*_&i_}6H28?0MMP?^kT4sfq z5_%Oz!{5kf7d$`z;Bkff>#gxm6!;q-{(5UDcVajue3jk;zqo_s|NC3xKlmW@Wd`E# z_4ZIUwKx4LNc;yWR5YBCz8u|#;<)0t5IjP)iU(22A)AQh;^Gi3f(OunWenJb;pFBd zMe_Asb!I|lLj=e=NjsZQNGwg?rX+Fg{0Ao0)xMhhBDi<(a}{&ecv^Z9la??1_EW1z z8J*o97vmA1cirBeAUd?4sRJ?@Vmsw*7{gV>U7>)V+Hnufdm|~&O;X+S{%l?A{>i%I z`38L_y{HN92>x-aaT#R;wHv@_#Yk+xwBnQ5|@Sc21K{NlH_9lqk*Wv9?zynpu=6QkWsh z=WTAiaLKSR2eRu&7n+L?_L5b_c7%yYxn;q3UTPS0G8ilB`7T4%Nt-hd<&MDXY0H?o zXNR{|+y{w5vz3Y$H9xMWMw!Fz+xSgo$r-voiV4Lc>l>tCKn&$CctVD z79JfPO9TE@U9)&78Y^VVL>70XT}jC#gSu2_mc}*V{?K#yF>2kH@+^sNw*eM2WfOTr z2!W=(;9|tHjI)3X#m;l1vOSlU0J{U@Wl$aKBT3JM)A;vAn)cbfOX#ZUUND%Mv*2pc zpadYBjW!0p9jMX)>kcOsC&*XBEP%p!rm8(^Bf~2EG=AS)X1wX=VM-Y*mw3NR4i~4x z^t`shmlmJ^3LTInrl8b4BVzm2D3#-+wvD2+ad#*leKLm^PSXn+mdho}mONAQ%&ZNX z_I-=jQHwA5@?xJlnWXkid9I@+^dIr&t`+jbkrlS^7n8FZV@4M+ zE;8)e<$I9XxEC7sg~wTy^iUV!UUZGPXmcEK!redE%2FeM&CSfBHS1yoXZzUZetKE# zl0K8W4^*yEo%f-)?@b2k6ZlsIX74JYrUx$9==@7bBUQSD6uKMPpu4Y{`W>vh@frfx zu%7l=w`{|Xm_+O2L^8R))Ctl?ch4EsD|%V_y|)kVh7=l<3f(2|!t-?QaA9T7!j_)7 z+s4F+kc6kGY(WA6cKwcqWwHFWC6IR?7TR@U{&F${`CYF+Rsv8S=cK-rw{?T1t#(F5 zUgoISSv9trfK`-q;WlPJO{QMk$+vnK&XreY8LxNa2rYU81g(dnV|xsX& zM8)NAEUj64?fmYq8-tauk3LdBHjmeBrxEtIMvm$(9-fGX%s3N zSRCXlMQU;mI-HlFd_qZ*b^C~_|6CSo7U~qSC%yU&YlCME>eM*P>G4?e5bS$_@cLP+ zfze5QMjgtOebH>G0@F7kple%oy+`$Zv$j!q^EA#{XIX3a$Js}-Spu2(uY&XKI(t}ffrjl8sV5-%yvEI7 z806PbhO;hwcP1>$&M=#IMx5*qe%4`+S5Neli{+Wbse54_zI*+Fs$9;@3&saRFWAs? zs5r2ndHu5}_vkHtx~XblJVQyLD>fFO8nBw3H>2yA(?}jXQszDJnw~h2=l%Fugj*je zLm-@E#9710T}9pR`U$Dn*#{9OE?#&!#(R;u#(Sd4S)s;1PJt?>ws0>mjy%w{SX&}e zQ|RbT^~UIKn65EIG?1}(P@L*ezh@(5AjnB}2M0LS)U+RN^={%^hW%Zgg zWw1T0(si99t3k`)6Mj4#j@}0u$+WmI$ItxrCE%T9og3DJt`15}Vcm@y<7y=_z#P0j zx+?~f3Qy;@XNebZ-Wj!V;1}#SPAH2Vk;XhN}e@})OXCIoCU&$~9@&Bpj zB={X^VK(RA%M(0-~2>KW4o1yv5z!uF?s1miXT10BlE7>z9x1Pn&PI!`t0k zKs6w|U~=IfP!Zq4=z0$LzB!7$)-w6&n7@r`2yT%sNzTDK|RbO8#@jPS3FQati?nr}LLzZAk0h&4E z)Hy1PK@*rUh+0*eO_@qk)%`>zIjA{*EGnpbbmK~^hX&~Wd~P?u$85I9bW&&&=bC+p zieEdo8w3F=@?s;kG;HxAR8V%0XV3bEcyw0tcnTEH2@ALygLyo2ieAbtNUXCW(lwJA zD!M6ZVjjm6k=2+^Q+2Q4)|CC_dwPK}PY?E>O=KBUwpe7!o~Ez*^ZR0~sPqQI6Go^B zMQU!QgG2edoBEQe?QmVNn4oF8E~ZR-&(-eK_lp=*X*1%Y^;&Uts^}mY%aJj*7nw@N zIJn(q6)_m+=;`6gro=f*V>0D!O1V|j!A65>BP?tjS|J|eZvK=;WJFB3&QjP@s#n|) zh~9z#ex0r79l|J2#JG2CTn8YO1f7POM=?!V*IhKvgdOr_TYuWAzED3Bx(}I>AO#|u zO6+7xOIRA*Ae4(GagjN;vGas(AaB$(8F-sZm|ZDB@3QDRs~!RI;ovf#$^8eGY#9R%XNVM<6h6?;jo3`#Xdq zbz~j3le0(*+y`;Q@fHKj=@N$^CA1UhBzItDZ35zA&XN@l?$2#;K3n zGS~~2U}*)OJqxX5n;n@X=qLQj&-!$VEoe8cF^13qNkCir4Ki10I}*@>td+~UE~rBU zj5<~c{u2hh(zb z5tTm?U*Km-?!_O}9A^rjUfZh~G0y%-m``=gRYmbo6~)BFtnyke86rQgrtXeCJ}u@X zUX%mUBJT|CN9kCq7G50~b7CgdkB*Te40b##MR~5xuO`LYfiFsJnq<7FPo69uU~&69 zxj-#i-!viKyeNR!z7g=!a8?4Nf_++f@U*=yeYw;M-e_U{bi!nDl#WEWnjkjFT{zo- zGC*O%ZQj<8s*8-;(WpE-$Ul8lLw1>*W8^qPU4|&)E||(6mEOhS0E7Z;n>;B=U8*R` z?4hiZAb#i}c$msq>()@F*atP|bUsD0@d>i(Q;7G&hoqHO5>mji*uPUFq=X1(ioG!% zya$@dq5#Ti4h1;F+)Sctj`5Z(%&5=FaELH2y?9SgspYNQ)6z~_5rt8<@y+ynj$*qA z3#^)4b*#;T4Ae>=jk%RZI!x^5+#X~x4^p#`@n?dWm7ytnd95~xxb61Sg=@0mec25d zL&GrMeJZCnS44XFzIq^7(FD82#$cPcy-glQkNm7nG`QqSQz2kt7AKcBDHsGVDC7L> ziqNWh|0}sjz=g4!ki_a$_T(#~P)&+A|HZ>RZD>i?1EhY+&)tLDDe9ngnm3m_h=-U9 zz1u{4cEYm>iMU6$tH%87Y>o()$HHt~4J`O%T5>2Ph_>#s74c%~H^nMdXM3 zwz^)kILAkpqx=FmY@|k@#Q=lFKvcxXZ|1WPh2^q(X1PpyY+lv5#e7lrR6#5lz5)1< z8(s}qdC^~-n9A9{n7o*r_WZGyMe5~PE^iHY2R72Gh;26Ab%JH3YBgJ>hLyyzX0-f0 zmqCOWK!Xds_5j4Qr;i6z^!`b7soBN@70ALMW`uHqnPrxTEVyeLlJ_B0N+exh0wvSn zG`iF5M1^k5DNf-+TH`T~b(2jnp(P4g4bvu0#l!kz*@`;i=n!4T6>MHeDl&RGm^~w^ zfi-clYD%=AmJTZD-B13iLXn80=%k$n?Rc>p9fFJtaP?NY=O5!?`eK?tRBI|IFtp&^ zT2T;&W=X0rq&aN5Z?M$9DH@=czyUk+b8*7nPYbTIXJsP8ed);F#P)5AE1Io^$Bfud z%4KY|{Kb@rn*;h*wGLk59hqbL5s*ocYDrrH=ruSkzP^u+Ftr9e@eHi>0K2UXijOPv zxM=)7K6H@S6Ou1!mXcJ>BQ|Vm&k9}|-7^S25Eii6jRmpv2I2fv`3&s`edo;CY4^C^ z=^oV!`(p>e?O%k|U2+3~Vj2`tY7k_sEd&%(%Rk>oMNG5$Z~>(z88`;YzBzptSGUR(bF9~OllJ1c(H6wuH5`rj>!{|lV_ zcV^>1EQ^z*`G06mxJ=WgCWt3+94^enFFqtLB-n1eV#zgx_;?lE<37+AGP?-WnyY$F zDn`zGci!w@_LByK^u~avL)-qv23F#Dn7MK?=nxqqn@PQQJB^Rpms0#*hZAUJd{+T+ z<;v{@W?l4?FsZBx?|hSu2NDo>Bi3EWYMGe@wJqi6rTdNe{2D_u#}Q>BX9O zrfsPxwo(}_r$YlLV^3PvX4dh|Ay?tu@KqHp%fvqYG?)WYtHuos0 zU5tUs2-cC)hA96CAc~V`Bq&ynJy@{yf`j%1l;zBn2lI9#+OU1L?sO=!9#1_(v?|TI zwfg-11p2}~b-H@pM*N|P#L%RDnW=I8x>O{cBS`*<+7Gk+CR9ZsrShWsa7a?^Gy`QqvtiWLZ%kXrfA?GKS*EOk)}1M@={A zMR}u&{`9KCXohJ0=T$b4(TFoznr4+~;HtN#jf9*)x+g<`+LdTw zm6>L;_g>W|!k1zxH5c!*lCWGkg5Yp*_eeAHQK+&h#pB}}S&!icgAeVgSSD~&qMc5xQ5zNyT_8LKTEC=^z_Ang;HtD?Qlt`*Sd zipd{d5U2~`9KQiI{g-B9|AC10jHGkX3c(Oo4d}&hw#zQAngvVyqw%Na3 zyXNQXGWDQ~0#-O@X?qOh_KDD1!-O#Fy$m=GZ1E~5`)YcrTdSLgFOhmI?NfF7 z%s1j*9b-C8Oklhedo_E9Ojh7*Pp@O)U{cYsn-$8XE@P6HFCX$ z`osNdHF5KfYve~MR#IN7&Zw0ASr(*Hbp){*Z4Kd&E!0WMyxOh+VWzG>c2DVF??{aN zq$LvITJfonU)}SwLg+qS9%gkV;$c{@t@hjx#Z?lgoAVtzk&6^-PWniSAo=D5&oo0s zM!vBJZ)ke!Lkl7bSrMU#ITFR*qqNRgh+x_uoUavXspTKRh<0vheb zt9rr;!~nuM`B_r;Wb{LAC1i#-^4QRuirLUzwCot}0{09re!kBN_Y5~UWZ-QqSGc8} z83#?^J!B%M=_lEyZ8HzqM(ncp0T)UYiC-Pk8dD}m3b9blgrQPKUyLB4#s>E!0g1Av zp3gSNwr7=3#J(e=J^2aaCsFr=5G?5Kf_~d+*=4d>MWxRP#IqH*TC-#84$$ZydP+(B zt$i0gybE1ZO^XUaGKd4DC%=bP*1@csX1!a>8dQ#C$}I z1gKz@)2RanC@7a=mn*s2Wda5BrmDvpjkgk|swyjJD@3ul)?`?(lL(a*n)kB|+P5=} z_V8^U2U0&nfxQ(}-D&pc%!cRHp6#vYfSB!!U$bH0*dx$^cKPW8DTJ=AAi8~o9Np#n z@<1Fi7;0e&_AkunGGjMR=rVtI=rieW*t+5S5Sd>{x{>=5K(hN6>R+u^-G+NzZnS~6 z2cC@{fv{&pZUlj#U*e!<#>UjuxoLq^X?KLNX-{3%1Ke8nSFBxz$B!>NLA)&Rv(THh zp_{ronsHCiPfmZjhec;{gWt9WmgyN1t`e}o7!=7h9PCRv>(>|4G`If28Z`o2)W~s%d7t);0y1OT_msd@}49%@9 z8I24;$r;HuJ`K&=4e_GR8tmWetrOF2&hZk^7N#qTww(|19(Y-@_l^- zlq)bz%t|&WB0@Qm@Z1jmR8@?VHYB@*x~Fi`&Ch1nX>VKNg}XKmfms*7*7#T}dUD06 z7e<7>Use}vd=cpx^r%l{MABRGoWx(XldjGhO}e|xcAK?HFB_Q5qUl!H%=vMpRka;^ znIt`(b(4@=zI0O5QxQ0Mbja_uM8n2sMDA_WLbt7g(jp?*AXsopVgSRclRY`fg_S^H zVB=ZXP_QEpb6w3>z_7NYu~;epfWvni9z&7~hAH0UnyR`~#U5$k@Sdz}i5KV0(OsJ3 z*R$!$CM2PJ+Wv-xukWX5(BQXNx`jbknWz;BZennp&qHn~5@aQ2^d19enxGW%Y2G2Z zv@+}SOW&Jvp7XgvDYgtt(709;EyAS){v#A_8xAbn1ON!h%&xISX>94sU0$450hq;R zbNei9DUuRq+(@VJUQZdWy%?^LVgh^q5*Fs*8f30)$PJzGU6RcI+fix|j&&~B8L`Tg zA&xI3Iw$=F-Me~U8L_9=!ZQBu?_Njr4TrN2io9CYWc-c_<6AEvv{0Pn!jh(J#n$*Hm`LB>p# z1B6l-+HRff(1-=Y*!lP4IaQtt<@0Yd`1z40RWU1s1DIU2#DKp(Xpd9<$Vmp|$2gGs zL}itD;{^aezG`m4HJQOwT2XV6mTE&YAp0w>aKtnD;_T(VvjV%%y`{k9Vo4>D-d~<{ zZV?gbsry8)IVD(yjR{%Cp~-54`hyhmC_Rd%0g|(zOHfFa;7J}YFJt1>r-Z^(1dL>6 zml;DIW$pFxC)|c@o2(^nK#m~Kd|m0Hhj^a+#;aBxh{U|D&?PVf;$7}Yk&R%I*Tc+@nJ2j^gvO#mb{F zB}{?CS!`7M04x`ACHIvXA{)J>SK5cN?%fZK-@V*W*D^fdrKEI=b(?mAQ(j_Lt9iPX z+iN(ouO0@mB+3e{7nlQzlbi*m#Ur3KKND_)=HeD_3%e&TlhJ}a6jumlV;!c+uy7Po=esli_AiW#ryU!r0k5+V8h5gfdOX1xIypI|3c;YwPlJ-7#tlR-G1o-dAg2s)7w{kImZ#(*4B192rQ?Ux?tYnw7 zy_L+>gPmw6hW`^SPn{&X3v0~v5Y9F+__RGY5k-`gM$gHZ9kF7Z?x>HlAn()L;LJ_4 zT5Z-~6Q?F=JK(wh+|Jaot)vB0Yj7}ll%Dtpfweo#Zt(2rY3|cmQjfVJe7oAI1G*%g zpXM#5#vuduljh?Y#Fn~$&Qm(7W^-KQ;d;3r2o7X3r^Rl;0C-qC_dCZ|8+Gx~BvQ7lH7LPw9m);6Zls zm6y?p$1wLR2Ud~06Ek?I!oP4qj9`Qt^A3HPU|Wlhu2)6d%P(Uf3!MR3r)e;Q3vnz zFilcIjX^568NTruMWB!mF6P*$`^8?pq>_3Lf2i%y9Wt!%sl#r^H{nWGP`~?y-&`^% z>cm1a{BnsMu=X=kgs`+RfYFyDf{{#p!xWwpYVsag2NiOk|70!xeFyU2dy{`4G^Yr? zTfIN@{U^<@U!wo_y@|DrgPkRB0W?+Dr(+-dZq zvReB&gOi-1m_nMhlUjxLeO`OnWQ#d$7ujFiXJa;O@LUa` ze5Apy-yFYUeFnLI6v6Ti>mu*e+_Hjr>+h71cpn9X^(eRcsQUJd@TR_q0>8GUcN*q0>e3k|!#=vU@O``l0Zy~r zssZ4numdxw9+ffQOAkUA`XQD5bW5S8x`vfc1Qlx?Bq*qxjuSj~|Jb!Z>R3wfbxlB* z-RLza&Ck{cI;T(w($E{0!D9wHrQ0|>;7XBqm3Nx>=Ht-dDf*bs%*k! zd@q@UeOhmz9B2BGY>TYEg@Dsn&lH8lyy4re=BOG<^t);QPxG9%w8U#w-jx{L9Bu5mxh@AI?sN?r3G(bU+zVp9`3 zPi;CB1qamBgcI<&M@$A6JBnmP@F#PTg2p`&=Lef@>k$pX_fY&OfAoQ&)%6r4Gwq{# zwq}$MSAXb_4tQkql!(2sKU8zuf6>HO>cr@%Mrjmp#%{B}gj5|}3|B%hTYI4k-^5fa zG{&WKt4c~%Os2ABI%c2~#RpF}RbyHDa47T{i98x!WL5ZCyZF4AXWn)YSYfAS&e|9j*+H!#DRYI<9YLfs>m<bik$xAlPTF*tG>^%F=DtJ< zJO-V?O65Y2wXWYM;~~9reA6KbPK$ExEg7+<(~ z`6WcAwWJT)!6MY}k(D@3OhKm&sG%gNf-oNo2w%y?Ee|0OPUCKNR*$hcr)@rJ6s%=E z8Uj_u64S@jjGxfC~-|@$OGwo~s_Ll%vr= zj2Is*80|Z>E$R#nd z(CRqCLSa8`(^<0_ZfveM+E@ua)aPSQ@_H#ySRZ(RxQLa8b@yI7^-3n`h zhzb@FGm>S3ORVzlQE(?t<=O>P6-qjEp6-c%t&ZhYOj497x> z!c5M!0fM6x{%n^+l4aY>I> z#5*kO4?tG+cbzij&YLyt3oILMoVY||q)v`1>L%hd4vYo;lO4rK$vJI9>{If!PWV`c z1ukq6J*aW;S}^CUZakDYF(5(&?INfrru?zi5~@{8wMCyJ7pGLtE@}-+0+*(MVm>U- zs7{kY@#Q7o3=usziCGW3g!NIn{R|{@5Tr|q+sY4%nLg_+1SUHoy$XptjADpAjB@aC z>kd?2OZQ&rpVE>yNLm&oM>Jij+61o-PHPl5X(<@%y_ybajKpTClj+}%2 z8GAGh0=v#JC9mQx{f{OerQ5cZIPGeJU>r5<`L2%bcnt0?f@jXT%Me~?S0UZsK1@e} z{15lpBEe9yHthmHJK~zG(8%1%vlEIB;i=dJd$_0=Jxtj7m)LQ(T$8aYP%0E!*}A&Z zv#%P-CkthmO^a|v5%ioLfBGPnpGosE=Gxxd_~p326l8U%(4fg#2P!6p7gC@)FkvF~ z0_bPP$7x>kTqS*o@}HYn5Qif_W!$ANTN5AMZ7GpM8?`Y_&E)zwVO10g!?e$X(!6KT+8J9Qm$=O3vb)#CR{KzDoM*DCl6Qu zY2DuH9cOR4NLQ*_JjO7wSnEU)r5nm1#l(_skJAlaEnO zv~(EVP_Ccq^3PzO94$++9mjs0iIX@{B7!Com;-}bQX0{y^4-gHpORN-evxW{#T;3g zgreb%hhNHFW3moQC{%uR^j6T$wsw*As8joycURS)QdE#|L=z`%PPc^=&KMYxaI|EJ zTxqPW7)G>I=wRvplEt<~prX`}P zs50Lbj8(j9A(U0Cao(I~eRh{Fr>xKTWu{QlW(fO)=f$;}3;n+Pc?rcZd79BZPw$$= zyb8~|lH>F$?IEJe3J|o=RmbL~$w7tjJ7YQmyADaS7MhR6xPlN^bm)u+!2c4f?e5_rG+Z1la*GJ1QxQ%AOTA#yds_o#7iMqH>iod8X0%rtV0*XW%Zrj78&}zr>AU z31n{|?4xr_Pthiy_CD?aUUWS8X>)$;zd~{5-j46u(rZBk&gp?w^=XD8+MCk^CcL3q zPMz*Wz!_$c51hZyN7qbuq5%=Q5nb98J~uXdlY8Znu!fY2;|egb(IL@RbQ8qGx%TJUatYIf+6L(SLfL6#QH^h=P&U| zW?LVcIhb95zXmRI+2fRu6ES)k9=ZCz7Gm^=V+UTC=A75wNvM^=0xrRoLqTutsFm<} z_~q*x$pqCpxGQDd)j-1zU(QP!sbJab4So1b#z|LH<+&O>;TnDi+?W*PyRw)#bgpVm zAAxTL;){~CWJBq9zh~V8Z^VtW$}7oh5nwp~PGEV8^In3S$o1 z_vJPD1<9--d`qCOL*PID3U$4yAT40${nqEiHR+(It%SuZeg-8q#|$ zpK9Z7g0TwMP&vj>4FR^cJ!q|( z?WH!s1F0VN_(b-|ME3B+A5Tx#CioBICcA@0MWn@?6s9c-Q4#9zv%-&v5HyUhPJ>b# z*q0~(E%wl0Dh>UnZ84f2i2^kD*YtzCG%U)*rtx;wijnq<#9a1p2_DW9-mJ)Hn#K75 zjMUd^V;*ZGobEK7MZrlO_fws>qprzpSVkWnVIQnqRPU6wTN5c$8^)rp38n{&4HB+< zahj`G^j1X)yA-YPPlb>UBj~HRs8&^fHaz(aQkR`vtp3kCaIE-{n_N$voJ7)FayJmz zF?mlBnVp6^LM{s4A=E=^E|TjVyI17y#H1Kfr^yS0qm|LjN3-D&@#>g8My$iQ=Ybb0 zQ4sRUzT-tPHy?&(HhZA#0w9iNj05Rv_Q{j8IMN$1@0evbO_cb(<2cDQOHTk@qQjP2 zu$W!R!jk;DXt^2I-Z`=z?ENQAyvGSU zm+q^N!uLct=9mR<+Q}s5qh6?;98;0PTnf$=|nWAHSl=2unpX)fX z`Y|ti3)q?({gywyT&1ILxwJl@6Q{nl+6i3vh(K=WK|Zhk8s1{xBGVd0ZmjEjp=g*? z0{zk0yeSU^^bq#E;}f$wU$`gx>+qUvcZ# zzTnrZaElX1m9rHpO5gM@!70r`--F4U#@C%5txD;B#)&*}x(+DkO;FD-0FKnQdBH?H zJksWWDsS9yG((LYTHeYk7^W6yh@ZrnlL*HsF{UNeUqaj!kGysy^aVe8R8t1EDVq~Y zvouoW6mX0MrLRMPjx4Mc8tqvhKLfRdF`E%s^(X8nw2{r^E|SlL+7N?1AkM_=K;fPx`)NYBKjr0<+b z!|t(z06qbPenG%HF%rLDcT!{+0(=AjOz_~QmvpaS0r#Qzy`{oc%jRB9Yj3?SOUXPx zq8ahf#g?Sy>ZTuJL;HQjeBH~YWqq@Xz-Xpzo0V~!D1i>#?isZ0dD`n^W?1pq2(8=e@y!h!g1Y(Kd$&kSJ-QaX|~IRw+4D_t~%kv|RhJ`=_@ zKPj^K^Y7C%HL)S3{5hg1i9?q(&_^YLtV5i1DP-&PJ$`oSB-{lqrmS(uQz#0Tg-C%+ zYNsN;sl+&Sj4X0qV@djv0AQvTI0v(AB;|S4syNjG40W}NInOdwuqh5R>cr)I0Sze= zX$H;Gi2=?9QH}^Fcn~Vuml&Jn%YGag|90<`sp2eZ1Uh~H zV6t5066%u^`kWI_njLW-*XCa&@M{Q1;{0w`JOmQcbBv5NR^3_tm0Eg)%kq1t_m7UK z_CJLclyFz^?qk^;K1Aj>VlD7jO!-cEVx=@utR8S}ApLAUBuP^xQCWQ~ie!;%%Ck%o zo*6j64zjI`f1u&dWc<)s_ME6sfjhSh{K(@bSgvj_A0HPl!H3S$6+XEn_qD^z$cdZD zt&B@-=gbE8{A!EZ?AJ4!P64u2k@kqC+$5Ri({3O~6s;UI89|L?+ap~y9Q%Qk&E2(U zN9>!13aE4fRue)&{hd1N*F%SaL@M=4-3Fd7OxLy)xZAz-th1!!WCDUV(7-S=5c0A_ z8aG=QN4bYE3B7e~D`+udw^d3QFCfe6__g4MC#s8!#IGjt$ia(FKO3an68x#_FGE-N zWd4GQCXK?0r>%~j-{p0&x36@La!cyHG%s6_`2nx z_**FBVTIO^I2y0V)p4^eX{M1lXqy)-ZtSzRQy16|yFhAAh<4fRukG=C8&!2%H!))2 ztnfRm%#O~uKY$X_7mPWJVJRM zq;`_npP3JGXkBap|Gb`~l{Ph9=Kca5?#0z?wo!kug$5a!H;E``yHtbixOfe%*0Ft! z4nnqP$JEIOtbHk0N!>tUDdj`15vCcK*)wU2Lv8;lhC!7~AQM=PD zEGPo|Wkf4zr{-H0f&0*cwFAu=Hlx1s6>SQZetwzY`bvew8RXtcjCzy8dThe5%tSN|chSNGo>-JtqvSzB&WN9U;_Glg`#O(xE_ z6uwt&`U{)gz=5gc!CB)J=qY7BLI+}rZi>x0SE#;rNwBGz)s=x=1t{S{pF&75;#@20 zn60DBf>c&NY3pg^!azie0Y0Rxb8QaN;V7gbA0bkTF1rYZ!4nMzE>kd5Xzje86` z#f{-))|kQQ6$Ka=!t-&$E72-E{&@6Am8c(w6ah{t3O(GhbN}upX-umz8Vec1SzpJ7 z%jisBu3utJyte!{RR5K(IOLxfpHv6&CT=~AVC@{8o&o=|N;E_)aJ%*m`pS48M#L$J zTCctF?lU|cT4REeF%c-eKd@d>Ib5d|3Uj<|Pn_Q9ze{Zp6nl;VWG`4mx=Q`0C^jk* zVAXGR<|a*EZ!L%J^O%PSa*{X!Bg2x4IL1DfHAW@7Zl*;cl6)rPt%xhfBZ=2k+wfIm z1YlqRMO^4}xZSr9NZ4!^xIT&FvX7I4Mo>-^Ob=T%S5y?x!)XxiuN`|n2f@kmEwZQb z2&1dYh=HrtNL6dpEJv|FJ(+efp)WTFFu9N#2ZgJjUM1>Hel+39v1Ww~JQk@GqZR7~ zB={_ea#6KMrhrk;=b0;psMFc7T@=k<@^BZn5bHbQcIOewsDna@F$T2icvY2RY+0|v zrFV*o>MhkxxiRM^l7ufn@_)bxvpS;5CI6j_v6@)5b#Yg{>kb7Ga8Q^OZ7Dbb5bSiWi(7 zz`GHm@PwC6-P`#`=si_SWapzex`P8UA5S01+r(Q`u%Tr;x>`$Q`0<}wX9`453w%%ut7E|f?Wz%u8sqC{3~ zU7OGpx%4&ajef{y_f(v@Q+fJe_WLtw1IFi?`t|zzaa$stF(E+yw#}0VVEQi2Q+jOK zy;zx;2s&A?s{3?Ly);bbm1I|Iyk<>+V%*@suci0FX-oMBaG|%26{0l6ij5(Qqd^Aewa%ck2VxF9OYgK=_gEO$A{*6A;fA_&E(;dxgp>1; zlXKsjd*uFlEmkiRDxAZlGE8sr&ahz{nSF&CO^sGf z+xuX_{3uxS#MG+L}111U&5Ok-akk3k>{mlS-QKGqqI&* zW?pEzx;vjB;S>!wzk& z4UFC|Kjk0LZRpfIYuY~N-Ow>D8N+jh>`FYLVu^H{cf8Q{peDc!kT<-^OR)LIOY7L+ zlHdjhaAJ3rx`vad{DEAPGhRBJ>>2HebOZWIc>QFAxYgx)<4yJJ$pyLAW8WHa$2xu` zbsGXT9RXjS(cLw13a##(^x+J*<-C$xI~g>&Q7>weDdJV2j^l!LvG0I#13Z|uO$nYc zd*Kor*c9d(XGOPw>>1-gs?>l#M!U-bEvlQ7tPD%{mfB75u6+b6Mv*m8maf^|gBs!2 z(ex)zO^-JRm;kirBP4|w4Z4*o4TO;6$B`-$kRrrxFy%V3yDTCgmL{&r3I?Z|@-k1c zpf(%chq^E!BqA0Bzk`see?20{zd{Aa**S$R{=G8LW9Sxip``Gu1)*1aAp(6mfXmdL zUAQukgg&Kc(um!GJ*};hk6l_GD=CeSoCo3-4i_Q;7F2BVbhk3xf#j3}S(}uynxUvQ ztwd!5eR3Yk*o>rsDMCGcDm-H#JYym}Vs{KpohY7}%B^ zK#QukGVzy5wuUbU${&2l+Eie+2w=5wKq>=(d+cL>rdaOuA6_QKSNA2Xe!s_wlAMGx<}LZfYMFBIsIPxyy37d zZN_B|6a<1g!a|ZKoGxT8Eg)gC>+(xi^r!n=q~FNzBoh^8+5`8T;|Pw}WeZDMrvHc^ z{_+>*=q0@)@*vZ!8Mrw7etlu6akzbBP;t!eB+y`BRbSRI9Mh^W%+7hLp}7TI)NeS> zNAeIx@c_I!Xpj8J9_b;0S!b-B1sZft{Dkk18+6WowSg}4!5 zUTU6V(&r=UZY*6%VFo0;lx+#vg?%EmkdUS=QDsTw#VUI?H%=B4S)-I$nfkIsKJoI> zPc$Z$cH0X>CbX+eIc7A(4+d#K_BTh*25van5~q1;B#Lk}5P7LT?U_V}g6KrT-W)Zr z!FQPpuR@+#svW5}Exp|v!(e$SLComteNB_NIZ&XVYI+bh+kQC0(yS&Lix;k(kOXhgvj&O%`&;rH-dLi1D$?!oo0@{k97cTCUWYE4mLTph0M1knda!>!=Q==?b5honNW zReW)$KLewtx`oQr-Ya&r(X;|7DdTx{9maV=ltV%kba@>vaefB+y~kWVZuPT*5CYjI-l z%K8YY2P@FpZk}(j(pJG@Rom{?O{`V?%ZMs0`A}5d_-`nlwOzP=D{P3aOE8)$+oxTF z8RD_&su@)WuOH3W_dI~>nfASIxh?lIQidtzv6tp6pZ4@xSM=0u<-}^Yu8}7B@hz|2 z9r%}r?9x%S_7DKt1Htv0WU3Uc0f<+K%Q-Sti2>GqcZ`ZVwABMm^E_;Al#Zyccj(0F z$cm)RAKb2>^Apn6Z13>(Q|XK2H~u$toRXY}~??})!ADXv-GK`p1OFF>Cd zK84%6Kn%1%6>0b9uhqAVGPd`t&L-tZ_&HWPJRh0ggCa78mIp%PPC2z&Eovf+8zXhQ zL^&WO5LG?1H_5?0il+nON`%{6l;lANgClc}G%edBl}#91-niA^I~fDCRR#^K5Zvi& z@Z8vjiIlwx8Ne3gS4U$M{&37p2k>&AmVy}ZVPRA}re z<5moNyt_Hn(9CLcK}$VZ32(c2O-O~t0t~Y~JGu>kW^F*i$g@4W+YNwi_MqXExx9P4 z^?--RFpa7JpJBA|tG=0SK#yd(ybXw>AP1w^WR<>O88r3t z_T5=Qb47xJ|22U2-!Z5EMx*}G2trwXm&^BKff@EAV-f$qOIZHX1@<2eA^+8CB;aIb z`QrrlFKntRX~tn)2x%n8awHm?Jx}~TLzfyD3$+~3PXKYA!+L?lDS@d6FKxHBu4NiU zonfBB51p+S0LIo=ko_L?;TPj?V>Y_X*Mih;lL_a_%3+wtzH76b!Woxs7u9p0@Aq?? zU#US|NQL-0zp<_5Tc!2F`mrHg$f*?7@@!)S@Pl@}0hbYO_yWE{`VT59`C%*0Sc(WM?=nFWFtdq;gRa3;FEY4H)SC?zR+20FF8wbPp;e5AfUHxU+ahb^vb_wE ztU?TGal-56nYlanG0vMhPrw@nvoeK(ykzYc)wnT_W7G1LGJrPiiUtCSwG9G%j=)1w z;LuE#C|V>iOg%7&q&i;65tzm5=kZ+%ZR^y#+3oxNx)Wdgi#TOi`Z>yRW5GB&ye>UaKHYOe(C z@1qu!V-z`~(n+K0slWGW=u6cYy`U-Sm^OT^ZOh}iQLW~mYWJwO?7K%m6$wbzd3EIj zJQY@Tjy)$ess<;t>ThDB0f_M~j2?{K3>;aBIHsER^k0jLC`A_ zz0Dx6IBc=Mxc*!{*7|TDZjyW$WEvGOkPIfsHp?Q0I3{PV_&UtYp08#pFsJ%zLtAqh zkYZ@P=LD_*f5b@d<2oV`G>ZS4`Gr+v>j-mC_eIbc_2G_n-=<-uB#)`MIGi!5VkL09 zQMlJeE^PItWc8cz$~lsD&lEUkt~B5xC)dbe1nw1DRNi&$8UhcJz7>LYKS{?2fu@&u zvZh&CXP~n0JodJYebTXp_MKD6$BJOTY3~kPYnxn47m>AKaLB*)U3;(IR^9L11EH7u z1mQUt0Tq0&xnr=aY;Y)`b(6+UHL+C)?pZvAO|T8=v#;on_FgrG-56f9OPGgbm?W@W zzU0RG4UDx{zgJ)ykH4ey8(NxAZ!d3dOYI|Vp?{4A^Ml%_9INlXB?F zpONXK#jGL0!ETW{8-YO*4ri8{AHXTpD?)!eC^X6$>0Qpsz$bL&ne0h0bj45<6LnF4 z46Y7W{-Ok~t}I%gby2?zu5N_v$su&b5wxz<#|cpuY&_xy;)uNRycPo0K-|-yE1A`f zAvFi^AN_0po}B(WZT&-e_m0A$xA)^wne^is!1}+YEi)@yOIqoF+Vt8;8#y@q_*DNZ zNhK+n$s)=lao139VxefF$RpXFJNm(wl1V1b2buy(0QRBrO0SEeGh8w)lntYOCy*#a zl6?L0Nxbb&8%u0fMC{pkKk9b4vcIzM`F_2HA1(k>37iqG zqxjH3dL_ddsf#AvdpG-y32!MUDFj%IytUR%|1hi#d#ylOn!mGMn5njz=J|1Ue z9<_!dxY9>Im{DG~+%`0YB6zond~trqUZV!sQN_%3jy_P#m1<76mq6&%4@ZHnd}i#a zYjLA`>7JG`Vy@ou&PY-2ou8im;v9f~E>#e``~=-lTq@mUKa9Ltx>V|W^XgEfpQ<%? zCaulB=7juT1blxhHcZYw&nS$)?d-4t(?vafy=PY(nb z9Gr+)3W71n41DG$^9@_UPp^)3uH@^ll2{lLrxH)g&IYmqk*0OtdpHC<5^-T2ALu=X2l01NG)Yh?CMYLHr z_;(3ulC@G#fPPX}fPItmzyiADIK9&K3uyQm1ci}kR+doc<7q?G;l@}zN4A)?viUR( zvibJCJYj46;ah#3n(Fwpa)fC%V4k-UL6^DuCCOO68R>d`DOeYz$6jL*t>=O;j|r@v zW6!qR#K&6pzK@KOs;K}mufJfmk7$I0&~7VJTLa=)wf**=rXUfXi?WQ?_}%k|#XVQ6 zGoP4D;YAiHzJy*bi3!3?N8l4SgvtZd2(Etn>+GZ>f_a4y>F1Cy_nErH(yzhW`YL1T zhj_Z==CjHTiGmQQ{SpH`iUG)kd4*ZO8@cQAS{&z0wpJDVfi_p=?)$t#~)&FR3 z{8uPtslKXW{&-G-=z$d0@vV>~^68TfgVo}1#dDBYD*@D*zyMyiWD~J%T z#}1hxvRW+^OD3~yK0DF|qX^Cy%B(wh%6$8OQFE6}Jc|(G0|4*iGC6E}xx8N8U15Ii z^Im&_?fm|_3PvSoHMSKG+7*E|RxVUFBuZ1ht%PWRVOMiH5z!ekVr42+(z4s9I8vIF z{BnqY?aa`pb-f{|ZX5FuSID{Fxp!R+P_@CW9#hSj(cM%InLruDeN=-%s7wUbt; zk<`?6*gt;}q3$N%wh^1onBUNhch^+dj*qdCe05Rs6!qgogApn~jO(5C^&h^8^j5!S zesHX3HBT#ZylVucMgz;nKFO&CMt&JL^bgLSkT0Z3mne3kw1EJQsoK6ihcTHntjS*5 zU&#MEN|ew@xlL;9ey=ia%LRS9x?o~zA^Y9?=MNQD1{jQJe%)N%A4^xIzE2~SpOMp{ ztxK4bg$~JSF`DQJ?y#2BbAO4WT7n7k)X3nn!9YX+`{XP;=OqVvXTjVI0|{iMpnye? z9JlCQftkI^9LG5ddJnI;YH~SJ#p&=Lca=1R?iv#MBTo~8W6h=qo%TDeix1ZHR5TaL zGW|urdU{-kk-ExOEAjX12bC*yTORneMOa0zyIaW}C4Uzg_fL2FJAV&{J6kL8rDSI- z*49{>?3imARwyGt>#MU<}-}0G^Vu??B@oO>SVVTk0VSO1tDH{0(t@YVgt88uLu-e(GKG3 z^AQLAg|H^){`4Krh4BD=xYAUXUx#hI!X!p%wdmNY{G^krx&rVK8I12YHKMg^f z7`GRsb)usNkh4Qwud?mB8K6)?mQwhX%{;*!@4!zA3sAZQC}fBo$X|+qP}nw(V3> z72CG$if!ArZB+DD?Q`zi`@WxZU%MY^Nn3web9nU8J1h?)liYSikip9{mh8>+#sXML z&fd4zwBbcUSdHHK3y0N~1}!blj2R@qI+w4IM@9B$E#^Lqy6V{LzilaXn>Gtd+UKHP z>DC7d52?<$4~ZypRfYz|o=KJ(3u%juHMJofDvS5HZE;X8p=DHewhU&tt6_XrOOjoP z=z@yf>kn}1fWb-J)asE~oJu_md@*lkOB#-Rlw5d{Gn+KJyryH{&5>bt_XM}H))WAW-ifH3oDrfZwZ7IFc*?3;TP~z_uFNT$X^1!ttf}KK z#GKFn8AiKij6{)xw}8Gqsc{*w-B)alCd0h9NB2W+b@CD4d}w(pJFF}%MzT;4-(R>p z_6WcE65rezzL}SQf>9ZZA7#TGGI!BqY32bl#-K{H8RG}u=S z7nPtrU;@0s+f-}Sc4Ru}q{}3BbiPOX<@S}Et6qOwmGGACp{W;cjjq_$m1vAJkN10O zxxV!MTo8X3e0P)` zN->*8f@iOPM`WRErod2eV8AzbthCWKnB`>Ov)Nfy&B2$T!Zz-;T)&SR+pF5OhK5XPJ%9zxWaUSrPpATA^Osb7K)uYBvHXBmOg=trLKk@(=j| z-5m!?%H-Pf-dg)Je;JQBI`>d4yOKbUcLX&s0d zB(p1nd4Ir>m>LMgikuU`c&B=Q#&BT!egZ`>NYjg7r)-DPGpkBWT{Ygm?Lpp>P#x$( z5mC`NUWG{(qZxmw)ZN0CE{7lNGJT(@m=m-u(5$6bJ-aTc+EXMyQ#S^#wIZC2IdQjn zIvTf-I`qx-U%$-Qjqau2@gQA#+t5C=?j2t2SilIlZ**I84rc{3aDGP#7|HCVQj^9P z-f`}g&7;i?$A!0yAcpT1nwa7H>zetWU)A4VA~K+FLFs!R`~v7(RsbUx?f=-fINRA- zJJH!&7}*(FThIyF+1MD^8cSQ)nh^gPwKz-I5-T}70oyJHRa0+XV;oYdnHdaa2M##l1DCK%NaRBj_ zU{O_DT+O`lPj3u3PDXBIoNS&knG47+8bOou{?yQ@h2g>Pe(&6>KJyR|FQV|nHJ9Nt z;!zM*mE_6-Q_^lLmHxFbL>P#=Y%a@A1M==evkxxSLkgmo_d0UHvyt_WVwdtBt9OZ7 zOa4D0T1hJv>r_shZ)wT)WMF&!9e>dc_CA3172mWaf~om!C$7|9?~PcXB_T9^0(mW* zNYU-`9}RHHeIqIap_NUIu`1QY&to@s%yoG7AvZgPr$e07N!?oUGQ)M=B3_wwI358p z!PLmeFw#F__lMRcPOL&lDIt;g`_Ii zM*3Edo9)DBeH-7Ct^eIvS876gD=(x1kZF6eq{$fs#)5{VoYM;N zBjLpG!~y&f_y{4f1pz;7Fi4Z>=~E@lE`QXw+2Y;T&JVS&ErzKi3`7<-QYJzoL%V)I zYgBoyalMezYTD>@ZK|ZHNO|vMVv8r>Z{kbUi*xF7y5!h;b-ARQ>Udw+13C=nh1Hw0 zZ-*zlPQe0u<`nuI?c1}h7(%jz*_D8mYf%UxgSI%Zz|C?X*d6@kF57p<{mF*gxzp># zVm*5;gVuQ(HE%Kd@VJ2o85k+hUs%r^sq%=xrMsx z_DmP_u_oj94u|*Nfu*(w2lE~a*D=zU&HR?i2A@dc{!>l1)qXVa(z&jz@|k{W z;8#f^PRbm&Aw$tTDojbz$O3+YE(iY=yj5%#bFpNENGS6icV-sE{NzbmFvyDKX3i{h zTbRh8UaiPMb8mNcM6AQ3H=D>E_g-`6y&Lm72WG^m;QZLZs^?*Ga@KlIM5Zs&EHOR5 zQcBG1tD!}dq&I$fYMG0bFqnwuMV1pu#JeItiUb)EFeT~-aT<+4@T7?Sgq>q;(nFVv z;Ob66bAw-r6Sp1?Nd*a=J}$|1Mexc?4+%zw(?OGsC}CeCsts8YfU2AX=}dF6{`CxR zA$eP#H9u@hWPtI@*o7NAtO}ZhkUP7+riDe&v9g_hS0kAqRP|6OCUS#1EX4TT2%pgy zKm`uX8V6>2pPGC9$daod62E~lWhHLWOJ%R5JA5?Iq5)bgQFcPCr=zp6p%YK{iCjan z%Vj})03S&&LNRBrXA(ggVL!|q1WLJBWN2#KuZ|`mDlU~-tG*7C8p|H+ph0S%N07(o z5;WZkVWXDu4e|06Q_)4i+}!+SxTM9ZGEZ%S@uXgKZX|}Ld^5$rYDzjr8Dqswoy#=S z$o~gXf_Q){q_bX5WAS|6jwx(*9%1+CB$g_QvOyxm(msXsmkhPg4ZZk5F{Pr}f^M9B zLJuR(>Wnxm1rK_%_^#z{hZdFu@o&V0MHbVF3bQaIby%jNkaLNUMD-nO%!mX`S@^!= z&p<;$dl=QrD6YoL_CGDi+4wUI!jlg?D3vFrd2+r6jWWpOi&`(QQ`S(zK@Qbn45ZUo zkS=fR<|AY1mGM?j-ik2kxwoczyiU6NF-8l$d>Jw9H#arY+ZN21bXAaTAtM=VvX;QC zx5f**E0Q~sN%lxAHy;*Hi%l8LLasICj_(6KRLf3Wu96nX6B70Na_wyg;SWU`mTj$^ z;gnuTl^9*BghF1)i$yhLs>huOfkj2AJ%Y1DrlK@$-7s6SxG$I6{;IcSitpK3H zDVZJ+0S%R8836Zq23-g(b*+lG0(o-g6kM(_Lf2y1nHw0`Mf^Dl%~}-&(Rkuc#|k-~ zsc7NGYzY&bml?V<4>9oj7OQvAeDFBgIqjoF!1OLY|2I?6jab}Az|Ds;u>nl2vX9L8 z%z*X{?djp|o)728SKsn*Al{;IsR5JLW^Aog#RghSVR^KM=JaA0PTtTpP}A(8WM>6B zOwjfZX@N(j8Xeo;O~TT?#D_=8k^AvU@)9_DJqkE@LuAh9q`l8DyybhMr0sBka=A@# zUGmvY@s#b&bX|_dKRcsgf^UV3dS-xoreF_G}RWO|Pkf<;m>|CsJ z{0JR)aX`=kOz7#%FxGr-z;Ioxk!!4bo-a*wv9;BFNMZEkVP2QlM-WX)IG8pGYIdAa z)tfAw;gvfy<+vuWs{cFn)%UdH*#Q;97FyNmux8B)<1C6m_o8%Bw51T0H^&Cr#SmN_ z?Xk5m4h>e~$eEbls!&}WZL-BW8Qd26>d}^^1AC{7LmSZ)#+tKL98p85gtm5X5-ZGt0j-XC6 zK$*juvyhu|)b^7yB5qK#^WS;BkOn?i79<&Tybo#8pq}WLjO|>WIA)gPW8rEX%;SHX z^LxBTv=*SYl&+1qvHmQ-b0AWB62Q{oE($epP!Yl@^?FI${OEalpwru;tKr2Ho^q<( zf%~$)@;s?LeSfRtOY8C(_tl8RMi z+;=+Z(m=(RPDqsNXsKjQQMt#OR40+Ls?V4+BZtbc25I)@a5%ZCRH4~VEs5dy3q;WI zZvE!);*MP19~Yw=N)q?;pT`|zo{!hAr$-x55?cyjf3_xyO))vT%$T@aFjX|kZlSUS zTt$cNWpV5BC+e+~FAzz&0>_h>TC%#{I2k2}k#$Pk9zkzz44@K0YbBSj*R@btU=jsH zG+)Z}i&4ccC&EaxApOwk!aZ1sI=O;A5!eW=(5`VNe zjjJl%Z?0^-|DaCR7c$pQErgoy&XcXlI*!Jy-$R z89NBKf+p1gbRb#)H;7E#Eu)z)BDFE9taa~I0m~bdsXQgKwd^Yv%}Vg40KpB%*W!T< z+jR8wXIdt6B^X`Ne*C5$+BSj%%Y@O36ry~HQ3U2O^xr2f0#THQ{{5;rm@&i?t0_Gd z=vXui=!~(11a9!_;IE)KHCD@|J6~aq^`*Og2mO@#sCRk=f1?=seLL)&chs|d?xrwI zVtEi4i-3d28W$hZ%PoyVWJwiSE#vA$V~WakuIcBBszXv5ZAQnW=o?oM4NIs6fpsKH z8pcXMe8ULSnBl6+b0b$957GSs!0lPb_m1bW^jvfec<`0R-6X^ggn1`gH|=S$;S8LA z;SRbDuKU(B8DAQ4R`gqo!bbwEagB$vp8lg@7xQm1>TCCkJm< z=)$4!0izXUP@xNe#&q40J*=mWGG zW!!$K7ZGi;u850Ufqn}b5;zK%39>4+98r#P*d>Ma52BAy<>rw2L%Lu*!9mm>P8T z{`yix4{`>g?+D{k`4R`ohXQ&B?3%cS7cXf{oT*!<>;Ygf4MnvzJ2{5(5Gdc|i=Jlm zpx<#Sr$DQg96;4zqz&#GIKPkLW~{NiqMtXaPLyv5lAVNrLl32FggjXkUHj@*DZA`(oU$?TYkIduHyr4H+;1t^TH@Qa6o?3 zoYcf=q1_XuRs(n8qFbycWn_{b4zqsI;DwV;sV!zdQRKDr#7Q|!=N{@EgWX#$lZBJ+ z-g~wjzT#3JKZWx{SBz^#1xI%XWUj97s+8~(nB+DZVwjDh?GtirKYK>%?rC@qJr-$s z2SKvrEcE89V>VrkJZ*v!3HR{VJnC9xJz{aA+PW13wA6ADj96G9B^!NCg zHA=iVgF+g=j%zw1!vpa_oD-1TjNF%JUtCvvO!DJgbfpAef}-?Q#A1rd%PlFC7nNl+ z@=_$+&&eOz<#!xRsep0Re1O4l2*t^d1rAsSQUpW~`^lcU;!LV1i1DFa<-u+dW!17a z9q#4p*E$}pJvO6xV7xBkD@D`uJ9}dX8xkhIo<`>;pRGt&Z?KI9Hu~KHE@|vH*cWfV z>OMJaYG}$yO!Cg3-g90FTXZa?ie?YVbsX9r^)L6^nfG*3M1E+ls>*;%ZGHzmLk7dD zylhl@j9%bPV6n#<0iA+j=NY(mCq8uNHoqP3HD6BJK3cPs&B3c#qfnS~(gs2n5MhIdQ8Uhh#cym$Pt$#6iadXh$#?Qd$>W;OQ-6eTAQTJUs-jKxj_F;nc2zBpTX| z8+G!~gYTbx_&+=L|K7_(kL7=P1|$?iVFZwAm$UyPKP6ymYv*k6 z=PxG_cO#R(KKs}3u0dG~z$c9SQAD$$7}o7a=&l7;D6bFgN4^aPWey1pD=8QOH+LbQ zWbKx|Q7Mr9hR6FG9G^5$e78K*j`z1&gjr)^f|jAU_#DTRQzwVhOq7- zdF)Db)fiQJL^05OhV^7;>Yy8TTz$f*V0Yxc0^|@`iM{%Wf}A0k$}D>s+e*kKCY)Cp z*QlQ~jLc@(Yj-Ud)ehyLMv>b*^C^fkdW_fM;xFz=^Tudj+2zg;Xx&a8lC$b0x!9u4o*ns>|w^{ znPh8+FWLhZUhx)+(0fIy@eQ(@NnLvE!2+4QISQd&Fx9Npd#@kBl+<5-!M>w;$A?UW zgR-^~ltH zL23&W`xV33(OtX3WDeo!H(G0Y?2P`NGLI{-O|$;FnA{CxdZO^kJU2I*HEh)ar#X4U z#sZcKdPrZbPw?}|UBHWed^!gKmF8!Kaz(}yu7)OtCgYtEP$%wdYEr1vVqUGxC`-hx zqQtUCQ10C0eL&gbuTr85ZbnQP8?c=z$i7`h{AIzQN8|5R{1P0RQKjg}VLIP}YKT1Q zI0O5=i$~{<15V<<(mUtFQqH)>2_EC~#50K;smw~p(F!wj#;gjNvt6IWF|OqL6q?7l zZU3}th6G)wF*lAL1Fk%Hk;dz%pHTycsK&#u>kR(NqWP1N-`qm#ohvrhATKmnG(3c&(;NQ@03?pGV5Nmf!;GjsQY2JDnM?XXIHS2;U4Ep zCYjwyHB78@fN9 z_)mZP+Y|pxc)iLK%kBV--PEu^Kg#wmRKpZhjHM~rEN00ZoL$P zbqeWMAa3M?bIR#?VqZfBB8#cbNuQ%Nr^%|1x3i~WprV@O0diBP<_NhucMzvrrtI7) z!Ee?1X(C^<9jP6uM}B6H{2a5W7=Gl!&UTt-SH+0HSaQn;kj#{}59Fx$C+VYCwsbao zO)v-ZpFn6 z9x(0=Sysl-Ga#$rD?TGMA}X*3D7Dg8?CeKlhj%Op^PZO5-b3X9raCT2Q(&ypG_ zdge8>?sT@yxH(N+?R?L)@nDsK9;hPA7}j(QTq=VR>t=X_DZPO}NW7h#v>zo7-HQ`! zA^U0QXJD&Ni*c_rf+KVztcgMEO2Pub#z5cGTNBH1Xe=ouFsw^N`2<;yr#cE!lQp5e zTz0Ycx9XLNHQw1TT$Z`3YV6<+p&>IP<0f#hH*)Po`luF1X%!vsK`(Q|1JGggq{I3dGHfMNE%0k-4v>;xzZlH!b!xHs9J z$Z@!%LA(bX9>YnaTn#<8X}3A|TZ@j4AKgz)2|G(x znBEK)iM~q8yGfu_ZHRCcXRIIh8_#eb19Kbu%0b$ped-2y$R-NzL?CF7$P-;G4L4~J zh6j6Y3Zf5Esg6u~rv$zpqX8N(U;N<9EV(``-5i`$R)Lgqm-NF@mC5mE(GRMiw-pNb zZJ5mhNAIeVf~I*>H2bCDH`qUc=bz!_@4)kCoc|ey<{k?OJWBvPkH!Bs@F>|iItzLz znFD^AI640-{`}eG30T{k8yEr<=Zp-jtv&u#3UsJQIRQw`KSVVxs68@OtVcxob@e0m z!LhLYjmFqfC9$OgWC(f*Moiju3tUvW$~F|r*bm0##ARDvcBN=1_hNRFC_j`+?khkQ zLK5=qQB>OIcsh7^ww5-SUhh|~e1X(^HmIeSvDJPJ>w92BdMA+FHBeU>slee`tziy% zqVAR0TidU1FB^;7x&JH{mq;3gLyt(~w#TSwMQd)`c>%d*FgOl!b3Lm_Sq57lm8Tv6u?UZ{*Q~l2Go6D@)2zZ?je^n9k~k4_9datz^KzAGTq9(kMmKxt{8im36Zn&> zZUccppi8w3FYGGd0(zCg8Si&h{<+Q60~{q0UxFJtB3v~ivRJEmun8uyN1+!#dZTW- z4xL{VC50s?zAS=B)^ATBexX3*>f5(pkI)+>XH;KBe~@8HvTto7WHy`56Jn!b(8A4b zt??0mP5jhk-jVLJ`YPz+GHaQS>XLY5wVj}qYuwDh$d?|#v=*~5?a;)tA=m=ks&-F_ zWY@F1Y`Dy=vnZ|XFeeO~?dWZ~>$JYR%;12fmr}A96{>U2Fdo5gnHTa4W)kaIO0sv% z!ekh3jH++Y;+npq^U%>Uzo@)S06+2g;eJ#fWB|NV5w|7;t?H4lyyUU8SquZJ@OB!v z^LwlJ6H~`UVC-z==T!^BOhT?QX5E85drPtn%$}sr%E>ed8KI<9r!sCM?Od1HrId`z zu&r}VgsL`Tt6Nv^t20$Pe!p`%*-0T0|1WF{RtZr?mQU#AsRH6_)<_GRddC#vjdKot zC^K=!jpmL4>qNiE*o&K9<6Y1ZGVya--lfIJLcUnWsPM0${Wr6A^yoe!mOLuVy2mGm zlr7$V&I~x=NY`iW-M;+=jZYEUI0P#ATq5ZC6Orm~0kvQF2)j1#!LR!fVD{J#iy^hA zyDKP+E4iUmfzc`~s5O|>e@*7tqB!VhMviQpAsolgt#V{UL-GxB6_CUXJh>+`rU(N= z;l-HhLvBrfL!+RuY7Wc1Tst2LFUUVwb!x$Uez7NX1n(nM2Z|Rx2c) ze4@&UFR@}|=(+|?74ejd;rYmxl)mpFt%diZLByu1)(4>K@T1`%t%Jg{hF}n+r{6kS zVBTx*mIs%&{=|uYMuWfO#2@Hvgaf*Z3Sfty3TPMp^B(_SD`*jS=Rd`Vv9z6;nTeyA ziLHsF!T(j8EL4z@>*a_4KBiWv$}f*R;2#RkJczp=-uw$j@Xwd}`wjnGZG;=x zcJTsQy;Xo#h0uSD^|mI?bWTpzbV^Rv0EmF8g_#TB^#DEHf5UH1sI9mmsi1$#q?;C< zB#`i1tP+9&&jG;#5ZkP|$ndjupp@azLYxH_bJ7{9$bgD_;Jc86$aN36p0_@S@_i2( z95xT{^EL-=bTA+PCkP(0FOx)?MUvtg8r;F=YvtX>*3-t-=G*gB(-yFK-w`hLpwWW; zUJQ7!L%$}@!?puA!L9_PoW__DA~IYQ5oNBLALUL!KnnQxknrPVdi@r0clwY5@LxF# z_<_YF$A~bHMFI5z1dwDr?12W5#UvTE8N5V072s3590*g;_Q6l*%QG!{-FY=dLw=Hy zp^v3K0jS{v@eEeBXK+ChrN2Faf58yV}e`?uily}$f)^CEWpfCqEplq zuvM29!!j8v(&UQ#`e@(rF%gF(MQ#mE;p|ZOl~fc|N<4u}6016-aj62cS5Wi>RYGNI z8%Wx>tVfCfmz#bd#ITvt>c}|1p0T#@#(P9sp&{c6N05bV!BLD zO^9qlNb9u9<>eq#j!IG{l@wSK=cFP@a#)+rkCmJ+%XiJekx@c*c$6o?U|hJX4=Pe4ImixJC`-8*93dbemCC+fE3@bNyh{9l|O^b_|ZdiUa5wBi7_qe1kL8UW)TCTX0|m z7wYz_JH-$VJJ{12y;ZzrJWA~zbH}>621+Eib=~lnpeiv{vWhw_GjufZuwkWcnouA! zo#?QTqMP?Vr2aH+55FVajKATf9exHv6ZR(GBk~>>9Q&%iJ_kkevWQAfL=mcQgmD1l z;{;WJF|P^LjAX!SXz&>Nvc!}*++WRdyk^qFkrXVMtuz5p+rU$s1xg|>P^ zTAdjdd*H@-HIr|+nrX2`;CQR{Kh})vy@i=mJk*phu$)OQ=bb@KXn&xd8JdqH%V3Pt zC0>88&re}vnKZr{fYju?ITpV*z7c-OOm9q8PSNN_#GfU00-k(G4j2&%q+OtQKL@35 zAL5Dy7>+YxLlvmvPA`&@pAnB5?FXGats99~=#Z+6REZ>`p0f*yAn$B1n#k)sEtlsw zvLP`dE&Q82)XIsqMVgA6@#qu>_3l*Gz?%Rw66_+ZLsc{i_H%W(AhwY+a_A#KCc#aZXgedGelsfu$KVgkK5o}kE z0SNII0f$@DX3?;Z%jR5mP|+NE^5@F`Txw@2!SIbt zAYRQ;@JqOdyYNg1Mzp^+H7m9(X|UY>uM0 z&4J#^$7p(>O(ju6A53?wqB*xkBi_Xa*kBH z^$`vf76Rg%`(Z~tYF}6Hj^=cMiEKYzwVCDnSGxLVQu;ex{V6$^EdWCJ|K_Pe)mJwxF_e!*O|PZf-v}fQ)NC<_G+gYGvqkb;G%Qg%W5aON zD*?pJ8{$@8nGLEdI)$!31wHsQ%?Y>>&E1jdX@E7sm5ccyqQ9C$A6+9I-OFv;nR9sm zinGy3iqEir%t&ova=LoIbh{cqKl}XtfceAgW(xnCAz_GwGzGnX%3vy|dI}`rj|g+? z8Do_Uln$kE8T)}@r2Gu@Or+81(iB+3Z_(k0MgmpewR^~vxe0=@m2W6!_)2%@D0%aD ze+gbW<-N4afB1#bL3PkkJUhbc^(YBg56v0gFKBwhPC?vgpy%9}W;TQ2I)Y70 zGHFF*We>`tO^*jh>=Qy1ys>!Cz-_o6H)h`9Fg2}{68s*W>A=IY7kQ>S83WJGik=LQ zje&!Ef+I8NiKHy|h?}p}!k3C2D^J5YxroicRP=<;LTIz6eNj87Y!{J^VMNa6v}zys z+hPn}_aebI@+^vCf4AUV22%ejd~MQLdFr&3g2-|uKE9v$w^wmK#Tr8%MqhXohpHTb z;@sr@3B{D_VMrUr06&kBiG&{l1?aI=YN>doSIj zM%DFc7yKi2L`+pKqnxBmPk-0d4Eo4>#D`g++*XrswshBF(|$D4Y8U&oX5&G1tWx%W4YYuT+kJ=f zDcKQo*A+bbT`GTV1k2YWhtU<}@h05|?XJ)_CE|nuAm_lnl(BpU^C`U{Y!mCNzK#p( zGrX@ur`Zk*D2sm`$q3ThW5c{{&f7u8O|;+2%p}ZG*y_#_c ze!o!N015I~9UhhwEZLx>;6HVxA$TZ> zEMJDqaw(IsMQM&Ja;PT9dZ@7X0&ZMQ?DbeN$$7-Oq*B0=aqC`?k?i=xS`}Nt6#7T> z@QoI(KS{pBcU5!Kl9M$Ck;?MgT;V#elHz1FC5({U36W@g2YE4~VPE35I*w!$89l?3K zRjI7`;i7(bzu?=WB^I*bD}CLxoXS7t{E~S~xIcMn{{U;gb6Vq#vLH+jep>=L=7<}% zRc64UoGxY$?2;^xmb7w|OOw+{zHl_d?;n|4#Leow81SMKKNoxp;X-L(f`CQG4{MV( z#7e*nZ7{|yC}@r#=#IOPyC}PJP*syQv}n_CM3>7-Z8x^3Q~!Di5ALSdeHn$djGI(# z7w%5b)1zRnPESxT;r`#RAIv3B*@u&;oDHS)6a(Q2pZ#&u$ z{d&b08gD-fsN)mbAD!?Db{=~W;?5CKZhDT~$#j<*u|IEG3oj146g~e@cD~cU5^4~| z+g>SzApBNSuO`#YPxA7Rnnd&`_yyjG*BMqc7_|J#-8Xz*Ng$&S1BmuWRj}y! z5t44d-K`4sX7Eyi6opkG=hiDnjgu^L3Y`Hm5%h)Rh2XGLnv2{g`FFzlM|f!cEim$1 z?)~nA19+%M*~DclidC#THIUqHA#bLEt94EDS1Nufl^;cpt|#KSw`xD+$vwfqQSG;( zPTv}JGvr2^=K1ZrY3tgsT#Qu&SDy^u;Qovm{+ZeT&iQ{@)S%)YHxGbuEFtU4QgwSYs$zvLpK{?PQXp*=5a-`r{oeB1s3r!tkayZECsOJ z%>2!f6=hM3jr+02`0cky-k@;w{zXjO*TCM$eVb&K7k)(uGVU5)S45S+mNbsU>plVN z4nClY?Q|GXhwR+RYv8_M7%mt%bX>-BM(_S>hCVVF*dU%DF^vcVzQ8HPXKnn$l`nf- zVyjJ>g_RnWl6_9nM1qV=HMbF*K8ZiZKJ5fP&Qo6#km^2bPr_b9&72_{C8_mvK)90~QtHg4xxR8Z2X&<%wYU`tVo)nI*tdAH%nKx+iSFC1uz`t;m zFSRVOat0m5Rw*pmELoq0uAFkDnXM*uuTm(|^p(Sx&pw04_mkMACY{(oF=%}>#UHUc z(#ndSC`UWa3B0Skr>zxFl&?fvG>N)OkGU_OF~ge4SvA7)hBa0-Jh323yU?RQeUn+O zUuUHmca3UdmP2BnfWO>2cHaO`D{O!%X6D~?cTIXarj7)t`ib#+{&=Lj|jNP^kn2C34uiBThYU-r^2e?Js>)2;a{WES{ zkl(n8FBi4X+54HT8Oh8;$lnN>8!w_6H#bkA^b4$W`gBAezOi>zAZ{r2S zSutIjBJYBE!&Naw8e?zbdBa69ZJI-Gm{PETV0q|1-dRhAE22lL3G6=Z9UV=&e$ZV* zL=1+&cKilIOc4jL_`CoN27eERa1sZU^1O&O!*49Pd9;VMRH)bD)P_F~UrvN+P!)iU z2QML0Yke6~YyE{7jo|he%N3JiRuErO5-_+@<1oBZlQ7y+V=-P+6EV2b;xW9+h9h)v zk}zJ=@MMfImgKZaYy>SOOS%X?$DEMjxXB$I2}Va?@9)A<1^2OV$8NzUW`>Zyc1%y+m}g!E z#0BTYUge<*Mu`yF?dU>i2&*&cY$ZMOZpK~Jpog({r%QYc-B45!yt4g?F#n7re@B=< zUB%JzK^qBRkO>4BWd3IjTYwxOU;^ghv+DLs80uu*&;jZ%|+|UdomIaL(>Ca@Tp%7~O@u%F$1WaLUiD5h&RZa&slE zj0@?NcAT@S!*n_4Ap1s!TSLOV2+YE;utYec9C626>Sb@J7lNYk;+1Kt>KQmOFsZI& zG13^FWCu=!>E`Q{&K*YJBWw-}TBl!_E?8{rXmN#MRi1e{S*(qM4X(3E&@o$3*!+s@ zdRyWsgr4AJ&rS>3ev{8-Vo*BYBQjiwHw$2pnf52{q17Dabx5ewgyDb&G#mgml7AVv zuT5+QT&HhRNy>HA2lLf$HZ|%>vvmG-9rn+!{O`y36YfKs!9|Mz55W&m&}ILR;r_43 zFb2R(oGolj=tS)tZ48|M^%RN9I)88_Jae=gbvglrNpK<}fwp5ql#6ok$RLms0)WAv zoM|i0=wjiTb#YMk&aW;(J##~(?@xRd?Z33(%{^-1oB&VaHM!z-b-$E-#Rr63V~QWi zfphoOaFiB(S|1C&SLnc_z-We_@s?Y)%`b{ff?H+H?5i~Q(v9GdR8W7NmeT>0(E8{F zgSp*%ojy8sD@*MLH)ZHH51q$82JP=}Pmk`~Wllq-BSK9*^5nk-1`b^=v7y%Ps8E_z z6&mFmaQNU|m0GiO4i&|p#Fw#r?E4Q874QPMf-uU}53-vt97es=%Amw(4*;r#Cj21@ z2v1TfB!yIIJ3?>~v>^>eXNe-yEit?5t5{Xnqg+0HiB)=MJ)UX3F=cl-1cc^6D&<<+ z9LqQ;Ye7GSqtuf!)xOGV6ml zNL1=3=xxYOq_GBNM5o$p72=YYm%wBjCP>w_W#(J-)E}S5j4(R3Uu0SvO0&cieo~MGOlfKd4>8-bObI)d%iVKYlRRt+2+0<@i$Zak+glN>7?cD_Em{3I;#6 zuMF(Tz6)c=MKlvE+400C04;^Un)8v&ro4CcqYS z`xt48sglKDb1*}xE{p_kalE4a2~7XA`2X$;E%gv1wg6vH0QiFB|F16?IQ`*PFp&q` z^*Nh3604b*SZSCT{1>TG{Fv>WJm6$9zS&`~Swcbxx{&|JmzH{#M@?QD^`$b5LCq@eN0Avets#-}(uyx_Ixork1uo5V1l30#p|qORL*jc)4r{T>ANF<3qII z-*aDBx+@?`<0R91&xCb?j7!(?MK;eMt2-{3sFTyY-hOD&k`;1M(o9r7{*ttdY-7YK z`KDCq?xq&AuyWHy)XY<2Mjnwr9d*U~ON7qRn{M8KVf=GQNC-+6+n%jR75#-3_r*a! zyp_m{>TTg8%s3^bmj%fph18Uxc&{}SD}~7cN(6@uV=>yO8)lBEPpgv0K&-xP?*)%x zoV;;QE3$GYXa3L}^Tii@H0C74+}P#;f>*wvNg13bwyGVQsG|o{M`>7*RIHd2@g6v0 z6stz^0R@qcTv9)+^Ov~d3%L2JSV4mvyFkl|56cYH56(Z1ZfCv2!(8^@t?Tv@+ryV2XHF$2fT%PuL51B#DR$jM<<^FpZ0HL6p}6AuW#a zy@=kUnjgQEzsojE+Ur81fD5LB5GX;?M5w$3MLfQ!^HYk9>6hL93_xX!EP)oujd^iIJm+ z{r_DcnnW@{0TzfNpZ(_ZqEylNtL!qITD6GCj(#q`Dj=m;ty#m=eq96MN{$m6#!{F9 z)Unf-UT;8S4CC-6=t;*NNj5qj$!3_@&K!FkUC0MiY7i0+$J_E|*Ic>?rJ2?^OCJLj z0tV!2UVm4tfd<5A7HiB4>LO#6y9@=TCs9`_t^e+|k0u%ago{2>l;9(TCk)6AsBU;QfUhe94tnYSXTA<7Je>Xu#TBUpaAZVz8VDsC62R}rbLk^RMy1xcRtRB|m6Eg|ert8R z%y7EQiiB~6Dme3YQNCWSasl_181Ak9ID0X=mqK~&uEZm-OVb`P(v8wg~;r` zU&>#kyooeyEA}d>KMtE_*)&&D{+w7593kBtOV-DO0q*III8F*Kpp~;LT6;B|bpI^@ zNwgD>`MV7p91dMr;+%xv^vbvV#<21)eOZs7s8W}?-ej5bi0>8g!W4qgYGZbwP@5<6 z`nLFrIqFgcPmh7tne)b%?N7>7ka?t3R7Hdh_{tN+Z}|G4KJh3Q(9+qlZ+#_o49X=U znafI3AT(^VJz|lzOmGCKj ziAN(wCjWFh108&YqB{#7l>$}$I=dDs&1qAdgqf_QnY&%SKd(oX2!6E&X8p)1_uG|x z?fjg0<=t@>AK2(f&>E4VA!i0^p~|`@TgmsvQer&gxBPjz=MdU5i@fXdNHb(BDL&7{x3ME4hVGa-@@FBB2gz{X}q!e3D3{k-)}_ zuxmrcoSoyoTyeyCCUzAqh#X!R?MG`D!Bg0#l<1ZzXzGW@4h`p~6{Qf64Y_57&pp4T z8gqo;_zytPYO)!g{8c#r(=z|I**~?~#Azn62%t3w25gY&|7SKUA*TYUpZ~3+ovEy4 zH)o3O!%G&WwM4^n#oxq&-G~jfnS1u5E{T*Fz`;i>8IF!N%tGoiaz5NJnC`b+k5_|Nr>B6BHN}uiBd$CgxAo)|J@wk2{k|1`^!X)a0FE>0Ix-5zl*PMz zHi#=zR;(|h{(JErsO%|wpa*QR%kjqaRbgX}fr9?Ibzy70VwZbEy<(**t+r0pyEXzm z%g>&=E1RGsv?|TYVF}`d~P{v}NDOfb~u>&=*S(DE+BKw?6&q=u%IxAWG z8BMDhM$IRi@&-$=Du5cGbMvJw)cE{+j)kVpn6BG+(w23ruF~iV?A#;BP=sKU$s#5d za{AqP-TUL!mtdy{*fX^;=kIrZMmkP@FPkrl+d9dT6FR<2x``TUZ!MuR_?jbKD)(e*HFG3Sk*vu3H-Cf#1^H6H(x0BaSoqiJ z!C?wgU{N-|V0gu+i8>6D1f9ZH0HfeNCUU8TeQ`c_2o(=*pKFGxverd&?E2pL2x0dS zbxDUci?_6Jx!bgl1o@03}>k2qGQ)4RqOk@<-;b93+5iK_LA&7UXe%K?h^> z@6wrEo;9Wc$xZ8etYs_KSmq5K)||vHIjs=J4LwCDCaseW?h@X9cL!3IJli}zuDq=# z$=}XjGrXrV9FVVk+GhT+vL1oQs9GKl_iL*umn<`+Q$Ld}aU4)Qjz`G;GKL}8Ww#HU zi8kb?Hqw_No-iXwrBUn|7oV`7cS%r4A^!Iz`p+=meRKe2!q27I^z-`J69Zu9XhvsXZ(w9@LTCLm zgY(a3`=57aOFAPvM-#e#Jx=|D;#4zm{`t#)C5tjLTyXvLFg~pJ{M;1pB~)+%&AZi{*VS+8a2;(O<7Ac25svcud&v^ zb_@Cqya=Wv^uk3AWYmmVCNAMz8a%*z#_ z#RKM4&5N3vRNvn)K0$S==dUxl($Y>+BQ@GltBH@BX4Yb^FB+b^Z=Sw&y?}ecJ~m>& zu$OOa_`>a1Lp{0kcmLqwdW*?+SL~MJ4Z$6Hk+6q|9iG$~a$k)+-vYz(CEnw`u3QzTB^HWX2aP*gtYRXVpGL0{O^I$oTr*^ljD<&!`VQ#U*U5}UypuC|{gLjp zQC*a@MQr6@kGXf*0Nuo?BT&li+z3zaDw`8nxMBk%(k?6X5H;>F&~nVybtZdOXRfcH zH@F0cp;|-0iV~ByaL&OXprbM*fe(pq?(5(bN7CjdyV;_CqoNinbLTd^b;R)|0vkK% z*LhXtjaQ2?xK5DfbrfphFcme;i%Aa)VlZTVX7{PS`QmZC@Eeo>tk@_978+*_1%Yao z>%Ddttzjsy-W6KD#SD24Jzd{YFo|+rXoEq$5iT?VVsToNeG(F#|5Zwd4a&P)*t^%M zFF#|yK2~A+w%GU5sP|V7pVQ|4=1yiYmpPHS|J^gPHNHe}jsy0XMSJ!pJR|~>6dfPb zo4|_LlGwvUuob$i{*~fU<97esyPl58Em&>d4$Gi{$uOExTo>&Kl}QncQ4^9nM@0iR zL9ntD&ilYqj9IxAcq)3%Iax)Urx<%0Q_T!_-dqGe>?)OoZ~V_bO@(?n`=IvbU|UOJ7e0geV*YD0D? z;Yj{C(10nMc9(hM0E-!^(iXJ5;eu=4gAYf{mZFw5!$JC0+`^r-1oqxwFn|zQYR$kY zf<)=Ey{)4Dao!QfM&Cj~&3>(FpR^I#8DGa%3Q~!a&qnh#(yT1~T{_yv7h^O)Yh#tE`c(R_G9>AnCj+Bra>Dcr8 zcnD7cr_srr;Z;&SWHb_X%(VRm8)e+s%&E6-U_-q;Y{(Y_>EJsd^%#$DhqpsShxb)2 z-=Z`ryn!jCEsgSxv-SXSJo4-1bP^4}XS_T$=tbO&B1rUV{J zP-hPofk7$VJeiOM?w&Xv6D){b;_k+@Qn^+gry+67eZ(|VLDmuiRc+`A3n(&t?jsX1 zMYa+kYnG?sSP!S8YSNk=ij#`E8q_(U7W;eRFBaulCnI6e_xA;g#GrMb zF|->KgZNx(xEDwNJF^nN-DA#7_>B$gq;v|^M`4yA$~n*rw#|Ws@CFDZ$_;u_ ze#Fv`<0tDd(oGntmTgADw^a(o?T*q_Qw%KlGF2g7>x(=KAxXus4Xts9X6vjwC`){u}c;x5euY| z6jqkl%NSPa2nx&Y=EvkV#@Uv>1d;Q6wTZ~malvpiu% zC3$TlyRKPD-|aQX_mpo!k_cjh0gZ%;LEs`L86?ojTNcTm7Ri92hxG}iJAdl-oygD^ zX$@XqVXhfXRtGw}g&v*;I2eIA7`1;%l{ym=?Lt1??QmkCc7z>50m3~}Z1xVa1!JB{ zdB!kV7GgnijuBGNjJg;eBE0f36=IWIqU)R~T(OIixl@y=R!g1l?n+5B)^hdICQjF3 zi;Qz9j?;uoU{08?#t-)jd8wHiHR|1Z$N!j~qpPwTBMDz0cj{^ zS9AK)s$~o=tF)OSTFDs}06Sk&Byx6GJbHwUFg{-qq1D<#39wz^^gP+l5D8M>XZyQl z_N>sFvBng1vN2f@>e7A0|CtXyL$a7${g7!PDF6V({00KmsKo{sjvN8H%kMI+daOT}tFIoa@u(fCV>nP>gef!ua=lmP{I;DUthX-hf zd%X1Iwl_u>9-_#i5vx1sVB zotJL3nw`>cH6HR|cswCvx4Ls+yQ ziWi?Vd!I4_FLb!p16qa`YI~1*I__Gv?qWkd9`c05uWldff!jN&;otWAIv*veUsd4W z!QZIRzGSYRa@t$ZJ3ow2_qT%9kC<>ik6QJMTJ+zjDJ_Gncz@d9b=a@^zW0K_@pcPW z?fs4+XbF7@hD2D=)`kiOL}XE;l~EJ4X&pO8iMG1-^4rK~gkF_*@&#{s1+>GJDP89@ z4C~~I!mPp53keVN$0$z?Qz$59T;`YqygZEdQLvgTE38P7S*~C%;Z#J0>YB%ooEZ_V zDhLjihKQKOlYH6y2 z+4J3+9#3|k-;t_hnOD`IvP&~2#|ay$>^f3+Lv5>_5;u$cWeep!IUU7481OSUZY0-k zT1hY&ml{{S+1j0F`o(@=+?RR8zT0_QH6u5~G=?gqzN{?80=ecGTV=G z$x`M~@2*8VgDM^ZEknvpx!J(hr|bA9!(Qn;H^XxH8qJisFB2D8tA0EpnwdTC1L-wX zBr2FweevU>$^(BxAt-E(-FS+cnl-9^71XSF{|=|jIbLPrX-W}+V(L_WqM9Wy$hg-- zwCEJu8{2_$O5UPa(s$ZFXtHEzkA3d>l^;(1yGJ}9-3y`{VPomif&np505K}GA56%2 z9s($h0P`@2-*=jDcS4NbPUQED49S?xGCGwcxTfWC z`VAue)*6;OLGchG=+1BsMz)|d1+N=S5(*ugbGvyQMv9~8Vabe@;gI)^gSxh$#by?3 zoovZ)ml(;Z6U~xlNVIS4eA(5Cw3P@+T5An{_PZtPA#s-N9lV5$<=GLHf~7+0jJCX( zuDK!w9L#D(PR!|IfU>ZT79vup922>7-joVu$_0#+b2s$aJ9}&w1&3qC<~8<-qKC?P z257eXkqlprGafnxlA5`5g5`vhRq%B%2ERG4>?AM=LNfWJ1b>rX_B?SWO)s5rYYLZg z5lz$FMhkPJNMKpxoKr|aG{dVjq;p93*BLLrK-EFQU;Ys$I_=7zC1VPaJho~~O{V`s zgVNfpR*1D^Zug@-P%N5L)GVG8Y1AG7c8{(7P--!qEEO(5v8FphMY-ZARiNPtP*u!A z??^HCQrg@mcYRcgV$`MDSl-5*8SF>-ilR8Wg2$@LlV;`#r`3l%jv2}K`V?ivkSh+7 zn!gOml^!Y>{$TvgeL7PZS;!X`*+L?OgVUM30ixRr+(EQES1qOTk`dL&*Tj~@$_XOV zFJAoob}Rv`tP&K3lh*7JAXU!e`xpy^Fr7c9PJV_)<3x-crEL^$EoTtj(*_A(RTc$%sbFC@T$*?sMXzAulnGOZU|COMg8h978vUSuq-jM1%wSN& z73)jeK9K=^-WNBMeiT@@HHkUvikJNV9$o#Rdm9k-K0) zmY_6e=r`@6IU0iixI-lut8FQrUZtXTLC_ydHE*_poVv<66>L4}!AG0vG-T0gLD;&# zkt?;|<&k}o_992Ffi5P1MJQ*%C{SYWQU%CiUxktIu0$27;tG|0iwnxEvMMfw%Aiyj zo6>}^s&9~QD7N1X(2N`J31&3B9dOt4y^^7;aX~}-m%*)A6KkV)b!SS*dI4-nyZOix zW`*t%yv6Zi`?or2LH5e`H;mOgCMDXWk9uas?SJCdM{B%CcTJt#BWv;P(`D&K;8;|9 zC~pmA!a``&ekWG&aJpe@-bt`p5a;KizJd~Boa)ztI$qgA2M^?X;4-whj>r~}=rHAY z*_!RIt5lpVBbjDtnjpn=E=|S|?7Am4QMlQq3IW)zg##DJy&5_jqmRE4=Q13SuwLyg zFtKN~u{{V` zAs_$HK5eCd;=`=7w{#-@%R9~&I3FQX14m+1lDhR!mnIy(XHY0ZMC)gX-~ABYTE-3+;9sOabD2tvv9H zO%{GHj?0@e!z=Z5)-1TKL~R8*ux~G{Fn#Z|Jvs=YrHqKA$_Ab!17liL8auot9a0&4 ze?_Cj^R{l@vI#6SGfy~RPL`anpwiq$f>09_W(6y7TTnZ0(QysTnz?la0l+!r5Gi9=nibZDVOZ3LoaD>}|5?_OlQt$6 z8{FT9BXNQOjPDy_r-z~yNbQbi&<@J9Z$OQA{Z2epjPjNC1e=7XmWMW%Th>XA8Y_9~91>Ki zd3e3K!F-9X)Xug-ak?cOp49oJh%%ql;bTYAlL6;`UuzUOCJ4F!b^T?l;@CF431^m* zc^$Fxzs;60Gy6_>!f97`9_2y3A`R^fUVPr|4ULtZSZ3fXI_IHEEA3An>iu|baM%}v z?<9vjsYKGmmGivjD517!kn!LM!UEc`rPGphq{)*}KBfl}4F6gAn zxfO(82@w5_m^h)LKjAet=d&#YZVel;D+0G?;|Z#nA7B>-pBsA~Ik9pNhs%rUj!rqj zau4keb2~-&h{h#h;}IQtV3#Q&GiT+IaPp{3%-&U+Yq213Sui}?RWhWjD(2-q;F&Nh z7--DMF332A_$xv;%fs#K*DV!#;`IRWxS-&frdx2maQ*<*B_@W#)m4750H0|1md6;U zt57@_lbH6PM8aP~b@;$klqO^}GKm|(z2w=?2!b;_A? ztItw9il=i~jI*XYo(6Y-!!bD2^=2y|G(**><6u|*uIlsdgr^wk-Qoe0HtxOcgnW78 zQ&}@|TU_J9dN*=&ji5d($zpJUrB&4!&-aZgTjgNEr4^Tz#4jm66eq`IK8)M!%pEv0 znV9XymW@#miopaxYFFWw1BI<@wPdg6&?O=~<5hBUhe&xMZ|3)(PWT;mxMzpbd)eNq zy=1_|0WQ;98cN$Ftlk@`TC~b02IvucK7S2v zPi&+hWJ_7k9bj@Y`5|lN<|W!qQxreX=G>_3YD7vJq%eDB*q5ror0qhC2N*t$?A?;C zc_zb|jVYca4e6{ACp!6A-K~gv-9+%qEOIDL_RJj7qR|Ry>t6_bd1%mq(eaL15fVul zPc4VyLmgtpd-J}?Vb0#RWs?Ha)BbFt#>Y!W4fpvM7v2DxZC6e8$qmviZu^}I7H{Uq zy;F-rXRECrD7gXG{lr=r=DE)X1$^{{-;qFXM5MDh>hGkS~Pfv)uBz;=ew97N6@Jv z$}bTSIL;R5;#@4(eceT>%CCZ?HfN3%Nur$;I5ETpqwFd$`dG*>A7Q!TmO29%vyPZ*Q1N8lMXJhpXBpDMZ6cdnZdGs_m{7MH?I~xSA=V|Tktx4K`$L!(s;Jgp$<~HUmw71g2jw~Z zDY)qy(&&IEduAuKI_-0s)cY;B^~;Y?P-z)@B@d1XM<5IZSQBBzV$)uTZnr_HK$A6i zY6T18bL#blfh!};{qPvo=8+irYNt&;TWcz@sM161C(0)KFCX{D`m2Nv+R}g)Kh5W| z3cPk)RN*VVDuq?lw_-#N^9hcORf@SJCxolxed?^AEhpY;qJ-tc%JT`{+M{5XZ@C>;{&sSI04W|PEQjpj5}lh6oa_m8n7#We zC4Fcj%cCuFgj#haI)GULZ%2uw^XhYG(oEUVVj3P1L2CfDtKyMd=DJ?4l5^&SD=hBz zvPc<+7>?OdC)#=^a5bgFidPa@oZr-?z5)sUJl|iD;%fBiD@}VGaL}x`7G=u8x7vpW z#?xG?;PxW>guWt z!gR}WI?A;wuBX4^{iTIr&g!$~`v@y$>p7?rGlSD8+2&6C_o1 zzHvne4%B2+8k4N4gezp~9YU0ab+m^knx z)KW=wkMO=LixFm$fYWhVkXBF>Q%VEVg(8RS#6P<1gUy$h=$-`f&i_TL z`p-hz|17aNLuXTAAp-y)G64XH{%=cc_SP;x9cZV2x1Htxb)aZsX5r-Q_+P!&DNV>9 z`uh?eSwp9W?h_2X-!FWAaUek9S-`m1S`b8j2>Du7yaX}y)XBj#$cW|gDygCT<|S3_ z@TR84qVQZubT_TaQWYzma+|7V)vBfSnomtDgg3q)RKz5)(CXqf6W>Oyv%NyE@xH=g?D*G33S5(a`x_CIw4^;&9)Oacgi^rcg!)>=1v|b zLP0bZitbJx$I*zO2esmhb1<5hIWOI-6rhEVgy>BC^4k1-VUy%;ZVIz)@}VaJLkoH5@DKs~X{YM03oV?NIc$xK zEFJc-kJ+Ns%D7rZq^LGFN=Ftso((Op*cJoY$YIuvJy(qyy8n&_vaKDYNcw|&fJ9Y{ z@PoRIdc?>hdqRW3ZYD)ameyiQ`CQo{Q2@=$(v<%Cppe@8G8_miZQ%tLA7KlKNS{~E|qA*Ju1RGe;3adyo z(z6rTGyHvBM9VPqu&2~%=kvMBtYp?U1*?o?(*1a07)v>sj9GxCVw?txbk?TR1v=&7Ibc zXvLJRe&6YJ_L5-2yg_GDt=Ci&>8Evbro~Y^2$2WS%c_b8^@L{1N~r^}Kuz~FROqpm zB@4MqNCJ^A8qa)QL^*Q^(c<|TjP#DasoRL+qiPun1{l!@+q|=bdaP6^&EJN*?(J5sNEg5;u>{vI0zbARtOnI2(iv%6^<iD_|yvz z`--T}=)xh-g+2J`sW`y}3&9w%(NKAR{5~qxsVS$O0H#QK&Z1>go7Itz!o-Y{g&PP- zx7q?jU^FYT+oozaVSNeK&~|wy4$dbUeKq3c4Q3@jLr%ah3L4oVI0tQSBm`ng5$flj zf?{2OdyK-0V{hC*MAG(EryvMxZ_<%04YYSSR*VKh-Ng^LPA>cnhrEU5l<9Of^+C)e z?4dZrY%7LX{F6 z^ff~U5a9UPU+8sQf^P0!4fK5xpOiM*5e~c3o<;d$P~j{bsCb|!V`{gcGU*rAZJb#! zejU-Tmm(H3OOxSb-4t&Eh3&>>rf*iIo4AeIH7;;;6pk2YS}B$yJOM$9Su~2AR)9`y zEE_QGA#TFgpkb#uz{sjwSLues_eJQtA@6`#XFECs3=1gl(lOcacCzvI=wtj^)>LD$ zGT|{Swgysy9)EYh+>Z@6#T7u|nYR{nll4YP=vk>xyUeR?JGKWlFcUMX(j;V|%d?YK zUODZPuRvuDrJu1oU2@`+XT=rUxbt}QA+srVueRu`b(y@OW_SV@3@>AMTH%vTE_ddz zF)il~2diYW*3owj?G}Cm>3ydFZR%kjzgY|C;eZlQdm)pIVtW-<(P- zflL=Aj8sIgO-_BBIKL!bt_X}EIfdhL>TyiqRu!PVv>N6V^rQFyr-|a+?sBW?E5C<;x!i=5rxgmQbFPq6UbHR<=HR`kkTGJ4DHCFORX8_;45_=fTqB!oa~hjMp@ z8+{V4ZNVh-(A_S^an^5B3;K0jTh`82Nj9Hl?e$Gt_IwuP7$Nk998d2|_gmadg@)^T z1(cXr+f{9q@`-u}`{7A*X8*>;b1iMEB8N?9W-vaz#Q5RzBueheJg*l^pxLOeP9{; zT40;d09D4VA{fW|ZxjAX_+`*9o1rnu@WwSDpH@(R!5k7!D4qoyP+-e ze3AU4ttnMrQ``io2AZpG(K7ByQ?`3clM@49qCO7-WDT54gY8Hh$C+FP+P?YgK(J)I zfG!9BPJsx5M5;H^97!-E89?T0$j~aPiP#%^j1($SV&ko?d@IZ0;qlb{AC_8?-tdDl z?ij8|6sjIT5dB4DYn@mmJXz|@ii4$NUY#@{xX|rvTQT3+p=GUZP$L1D^zovr-lDOo z1SRy}kTK~XTo3ba6KxxcTx&!ftuKqrZm+sg!jRG;7B)N}di?^WXmZK=p{UUB-rtFM zrrU<)m*=ha;wm!N%`HvALSTaI>5nRxG@^poyO?u!2L?x&oP9EqLP>hjT@=%Eqn0p^x}C9AoU;<2lsv^+elrkjG|m8q$f zfoqX0_y7YtgTcqfF)|Y>#Bvy>_^QX4k=D~;zBeE>Ea=HXN3=0W|zHUjAN?*{^^e(jv zfACwcm$eCJ^~Sk)_CoCouNz2s>$9RQj(_f zLyi9&;dFqx@Y;hpva`|uPbRZGEy!#-85)y2d}0SiXT(83Xli%3E1VDPHrfJ7*|pTI zkH-4*ip0>p<9cK^)vOci+AJZa%AADuoCpUM=a?(r+MILlX=hC0Rq;7);4s_Gg%}+7 zaeS6+o;N4#{A7NdvYggzMLP1Sq>wC|j)tIz_QZ2^K3U9M?Fc*gc*}cOey%b8AB0<3@tl?Uo!*M#K?m$K z*~l7HWe$TP>_YujMkwD7L$$$2Z~*14S#V{M!ufIp-K;IEo|p%RTO>jNQYxRQnZC3yf)PwMHoVnfMo#PGo1iTBSim=Rwooiup3j4@#vQ&mts(+=y7}F z5S&%rX;;-r2d{`RTP6N-COM<4{1=h(tbAJvb`lq*tC9g33JYexnv49cs-yDdNj53= zCD;f-;SPpS;?VAh>z^L~k3Y3>JDixeB=L#q+SC%ACq01KgK?n0*)VuNvk?$DmRFk> zS6Lszn(oQX_)sXF?|tufEiCSRCOd+C^)d+0_Ns=3V#al34KM`zNq#w9qo%eVOGR%9h13-aXdwl3PKA&(Bh&cMLSA{-p z(v&`;Z3EK?T0nVw;@^mB!3FyaZZ0J3r2ybKQNVtkl43wI5|R9ck>a%YOtlTv7Ga*I zFT^;#Qq8`WXKFN5|Prw9!E zG@jpw<1E;_>&7h*%w-`yH#^RwY#CU@?c1?ECos^gWY9}ML^KFy!g`h;r_M#WQ!5jK z!fF11OKG+)WRwaNjwd1CC;#GMp~6V5iemp7M`TpQL%Va8e};0$quUMrGz(HJn~r|- z10QMGZU~iaoV$CtMYgHgwwjBUn8>esQ?a@#M$&LVz&_T{#MvCRW4ub1=%z4c#fCo1vk&|1`h(xjR2h#Q0fW{9NZiZG$l(s z=`+>=?XMJQZW_34FQ|N?Dw(JraPn2iSzByj+?5#dfk1P^DWE4rBW>?^=-hG0CY#?% zf%p`=C+^+*D0iNu!sAP;x5ZsAM_D+fm)s(#Y4UzU7n2duOiZ#nV*FSCfs5^FL|0e`E^-VCKp&x-&PCSR3$h9Iv5x)%JsE0hpnoe<$O)Sa(oUePnF#?2rfkGz#a(Yc~G zFVM$4_x|c5nnKb_Cu6UdzSEt!)6LxH!viux{hJS=lMm$D&R>Tb%{VQYZ6|h=Dpmnx1<_5nIer1AV*LxW{fTN!*Kw>96 z+Hb*u8yf(1q%yE^fC$@W(J6vpUip(6QgMVGBr4tPsF^@^bYwi=urPBdpVHZFWOkg4 zR5|m?Ig>aG0yS4gu+gY``KxPCTn-w|_bxI6!Zk@6&`6m&x47!Fp)(e;Y1FpQMU>=f~6<{(AEI z4)KLr?Dtq#JXesa8a7h0sx6Z3S1#eH;4HO+gV6Gm!4(_n{q{W;U!2*aCH<{rX4lDN3;{_xp z^?v{qS`2I)Tcz3{NK9cREUxH16DYxgkROTJ`84y**(TzfVRq{rmBw1RrT$>js%X3F z`DfzqKZ}n4U5@<6Q#y>ZmV*7`rhNZ#Q|kPGEl2(sLR?K8o#~W4>`i{A0RQ=H;^;&y zXkqr_H~j~r|NngX?>WFGrHvo&K;UR2!G(cR`?E>^|W z+PEPd=x6Fg8fAz!oFWx%vcicZID!S3EvbG*DT`N2=96)IIcJ|{>J}ii7aRo20=dYv z))GR&vb;{Sc@^MYHeet80rileeyJ*x)dvw|3D>rAanZkzat z)DPf?974Yb$>J1X;~L!96GsZ?hBKu%K&Kq0cU3NY0ds4DGmJ}=bN_H#>XL|EFl|J)7xdDEHRwaB zdkDCRt#!|j1wxG_tDLmz&s>6P^)rEfhP?h-@FGAqqYIgRc{b+0r?|fDz^|P4lJ2ye zVmg6uanEwvf!$G&W4d$JSg+)W989gk_2<2pgF03}LfltER!1F%Qx}eln>--vlS`!@ zO8pL5^u2^Qm16>l3evZ^U?!mdO;YI>-XYyIZWeNeP;fi0VxB zKQdMQ|4F9*CLaDjqp6G$INFM{TwtzL^!p zaBtKO z8D$lexi26mEj(~}ii`qgC2h1yxyac$gOihBO*CJqOA#$7DLgIFCF+ct4o7=~evyKw zJr`k|D+p~8lGRfID|D@ivnz@M9fMI1drE;jlukO=J=zx3{A~8lP7lf!px&{U#C)%p zhBIGnz*M(=jpQvYiL@dH3^Z*_5ZVdgz@9WH z2Q|JFG`&t!7|+-)W-`qMBeu>HBmKd#*v!q|cLTk(^t$`Nr)zGM; zd<4m_FC1Yc5Dj{9?s~jpcl(*W`sB5&gi)ZA7N9GqzDd&*{Y@VPVO!`Cyd=yY(q$hQ zWgbKB<%N^#w<*&y_2)ugG@H14IGZGs3xB~po&`5YO#jeOD=Ze9W5(E{tmXU@Q~y(v z|1H*kTy={P)ZZXKVtx8?{Qkd#xPF4@4Pp#rnrr_aC_Ef2%USt1UVuC zJXZk|*YTve>(hHo%{D-y!*577`EerzwtMk?Rn(S-)`48?MfeJu29NpD?sBHeG#}q# z*qHZdgR$AiET0fTnj4}qpS7bc`GZ>7JjkiamUB}$ESMpQ6Pc#9N<214c?`xGo$Vw# zbj1z$b(mAlS(HS}_HJ_+a2y0yj}at?zr9Dg8KJh3BYlk*Z3qM17(vl}+fE&1Fm(3V zXOvHe-3H)!`1?8S(GK{sud@kFAh1HTe|t-gQabvGh2uS_&_kNposB-{sl##M@grnF z-Rg?;L7$P$$r-uduW8XKog6B%#6vc}GBRXm7V!*4!r7oc6#mcZf)6q35yG(QTO=BOd7=k+A=f?(?P zM-eo85qCe3bxA9wcY$z3y%dQ%B;!&Fdq>e+SIKJW)K_047e|O65!X=K!JG-Pi0>h+ zf)Wt`QyhZ5G1Y#D@f0F$*KGr(5zA*2)-%NIYR0>KlKmsN|CH5#3+|trxLQYM8^}*& zWQGC&5c%Im$Nz(G^MByUvsAs5uvC!0b>iy{G;lR?HBqpdl7fU4p%lq$it837bDJp0 zmsh5aNU3#P_f3gRQ+Tz$ZJlwS zCXCK@fU&i4T1k8-WjeV`HwjT5c8HMB-5ahJ*OaX@Ul(bcz9NAgL3yZ!Hf4BKRxh;H zELNNHqB#bT>TI77coc)vp?l*qkMCn4LQ*-Jm^i~uN9>YWbUH3Sbx;*wU^ zfKrw$TVC&h`>NRa?p!%q+knfaYki~m*FT_SQ3A$txvVurovCQ%JO#~7GJoy{ZWzUw zg?j*XpsD?yVmko72(I}s zLorbc)&GRrz_-1dfkL?g%{b7YX+X6!;(b-|Mtfl8CB&e6Bi-@^bz32O#szZV;oDXT zb~}&>rib;By@d=$PCzygu$_>ImrdAzRvy4)K%5JO3a<`_&agFLR>b>86e=1kjoq6g z?vL_#5Jfy1sBT^7=x?-F+k=~;5S`R4(yu#KUL=!!L`Gs-7R_5}s@Fjm$^J)ag{^!V z9b!z!8V{J3d>gQ&7|`|z1ID?VEp9^n`?-kwT|%-WHet^pcof=^zv>lHq6lb4&U{Dh zm^}}qVNGfkVkr*px~(uis0dS}ou^3BlV+$Dotae!ks5=aV$k+ z*gjjTb10w@jB(ZqgiQN3py+Ql4mW?EHd)P?WixLb;@2Z8UH=LoK)FbHyLIs_ zZwwd=AVw#Uw1U{>>6Ej=q{5NLQ+@*;Z5WrOYX^2;rD5a{UioI2Q~(kO}fYHm=XPoy39 zi1@TdX_ZZ)Jyced-rt-DCG^i6#i${q1M%p-*i<9)L5Vn}M5X}9ce34#)-HXQPs!pndh&#YW-;!0ED0c0LcAs!;Ybgg|)GXBb~*MfBe61dN%fU zwkEdDg8%;U-}k*PH4C*3QRFV9jUP|@pg(b;M1rYBl#QV|J~TV?@R~V<1oWDCx+=PX zaFB4Mv}AjcOp5dN^VgrJOdt}D624r%@)A2@jV+MYou|N}G&ZK|t#{L{m(!Xayidqn z=$=2TQ4R=lf(Y~k{oqB>)E0mVgq9c4<9JFR4jFvRU#X~h13M9B!kYr3gVfRp8j}us zPLHdB9gprP_dr)+=6zNlx1Ky(y&0X4sCXSS9d=H5*AVXbJ34^Z3=l>dDp+caFlOLU z(ww9-qh%5##TciJ%{pojB2W(%0fG0o&H76%ozDc+Eb zJW7#fZLNuqy1z@tnH&RO z_PEiJ+s^Xjnc&*M@9g9TblLF;2UV^(C|7=gAy4xC_Uy}o= z+(mlLka&mDVR%lLr%}BrcBs5*wy`0%cDW$8_P`Wq6wx?Z$3-^WWC9fCBUmdr$jqszx>fl30xq}IjI62`Z zfNn+h5yniZ8Nt%|wnZ!nqDu(Pi=)VCSAPlc>(-1FObAodXYd|j`b;nX7(osOyneIp z_dQWUQ{WnDm~09um81CcK(r9Uc?+m=BZ|Tmj2z-DO%eUZ>$x06L_L<=>st^FpLK^~ z0cCDTBjcT{>2)5)9!cA4xfq>Vu z0J3S~7jhn!y{!PvEjFMA6t#yIg%>hJq=}sCCgu*A(I2zZ(GBtm47^a8S6urGVE+ni z*7l77M~C01HEF1bd(G!JGVzpLogHyCm&7ifAO}B&%~8>hAsSR2*651-0hQUE@*{iY zE3_?!pMKeJYI0(6*}9g44*j!Ck`>RM3^=Rz;H-4{J8CHwQ9-Wt`a&WpQK7v3MyeIK z(;V289BA09LtGX+BsiVd+`7()QF!hpRK2Hkoc#F}i7_OjrbIdQv2tFNHaGmf-N5@y z734ftJ6Tl2L`7QMSF}}OZ2Xz3LtJ({u%5f1JXf@8xtINv?m}prBH)+h0c7g#Ci-kp zy&&k)_I)6yUoPa3BKj#K55T(4y`)EzEu0u1xJ_{;)+Xwrx1`#zhYsgf{G!N1)Yh-| zAUf8*6mSX47x{HW7b~F|geherKacPBSK!GJpUBupsB6gdG$sqUek0V#JJCQK8)97h!Zn50xf-;=2Errt&`z zvj2X>%|km__kJC1vtO#GivO=ioPoUsoq)alzf2?*O-%nvru^@xT$Q{OR6jj}&$XHs z8(trBYE(yfu0J-kKaYUsa4J#)l4i}pW)S$5yrHHWEl8hV+A#e<2HWLz=LXOOJrq3* z0$3W26cFl!NGiM&`Udo=G$$EQd7ZCunp8P73qgPJO@LEPYS~&N2qG zoqoMxk4nGKxz?m07hq zZ4Da^=(!wZXjY9I)M=E5&MTUt;UQ{J2sTRY9#%v!(P%%`;U*I$R^V}`(G)1Osy{C} z>W;}=OkHmybtpnpk!K3PT}}L{a;CyW($S;?4q3rcPDFY-U=21(05uFvGg&T3hI8h# z84~3&rDk(hqNgQ{O@%7eTg`5Y8m)3Ru67a~MRMGLRso(1i0#%gBdivTAvRWi+_l=Q zyv{n`DeXK3(Idq`+QB2mP&^L&PVVsC(a8a_YK#N3WA?1 z$djoA8uB%Te9n!)F0WvWXwordLdzc$inBKa5L!a-^Xwv_ZNL7Yqe1b{;%HiLi5;YgnQE7F&12)x&iTn3G1@{K&fq0-o z>5SN;cQClo0-Qi(dxSo@_PHpkn-%s|DP#i`iuC@j*MF|c|E$-)S64^Z?Tvn4d!6Oi zn*E=JRILp>>|C7b1Ps53$OcBvU-D01GFj69>LgY&akMb7w($I4+E`WbS>Zw0v0I=mbZW z(?`Ok-QoM*J!~)UQoXn#YXHXtHaUj6@yK93rE>4Ub{topK07r)@foeg=}}fa@9zD_ zjmvtC#up{3zUU_aNkJRXXw^Ab6|2;RMP*6FuntFasf5oKFoSH_yKWmqppuLyAiE+! zJeBbnEw6@qMxoWt-TB8jXtM`S=~`z-f5aIVYEVC0Bu@SymJQ3_GD*)~=;KF5oy$J6 z;owH=fKdxPo2OBjwXnGwjL@qYeP%RWa6f!9lgg@cbtwoy!2n?-8!ZDv0MHvBX7XjY zXTtsrZwB*>2MAI^ruE4D3{EDPJas|zfaw_gSi7E&;dx@RPM)+@ns{lGuQZ3ef%8|^$M%11 z*#F+E2h}0n|7w5PnUdNivn3#482{jhU=Ac^H;^I$vWAJ6{e@yJ-`E_pg9t{-G?0P$ zW23RE*`>_oxVXthV6ZvaU+_o1xs{gI8o<(KW37Fu3a~^gsqnJJMVAod$1lkD%zM#w zIn{NT={5E9!^;-W`?A{Sn`wBM?!?eJ9xLBfKHeJh+YB^W^Jv<6{p!vjZtHwR*2;kh znXA>xo)G%QT&=k5#r=-$`d$$HEAx8A4lgX-5N<7{~V<=C{=-vkmvD5KZpOA?W&_vr#GQPZ8*Jd#JEAmhLhGr&u55JFq}q z9C&P1#i?%t(rb;GOtQ~1iENG{Ef!+pg02hyHlOPb6{<w}`4 z^{g>ms?|9B(!_{*$Y18|Wwb^VT3E%6Q0y5<6<-C*=Ih$=7J4R{W>^)5#oXL7(M?#Y z%D!s}Q+ELJu6287(Uw%~$yA$XMcEon{C0<&r~2%7QV^RuoEEa~BM z1X0)Sgf=VXVh>PK(|D4t+pVA;GYV+Vf##-fhO^4)wP#5VG?{V3+VfNqP!p5DMP1aj zFJ$=M4be1tDdje>j5t15YjI~o zR~GMZd}idrfAq3h2~S5gC0hyiRO`Eg*;w9W2DVt<0v^MD6*xlOZf==A7*vQKd~25= zhGtE_b{X%qv7rab8<3R#Rk&TUaoLayh+}grbZf=T`wW zsCq@6Ea6+E_;2YV(#54EC~0n_H%Ih4o=ZA5cmmCNlsa_l>ZD2LRq2#Tm@f+FB=zb7 z&KDt#fAZ{J{}eay-vA*P?h8 z$u}2oh$zlK1quT_&TrVC1R1C9*eS6qE}a4Iz%Bs=#+#6w9}(XqpxW@_!xl8RMew zA#n<`J5&EA#4X9!NN-X{mepw$&ZA}CSqciJG@0V#hF$*59y@Ru-Ya88Lp+oIw=5$gq-j2(qR3irc$CvXp}8 z@JcXKOZHJ};Ql7vR?l8GGQ}xBvxeZ6g}y}_*`z)7$Dt`a;DZ-#j4%%MxQ<>frVv16 z7tu_nv9c1RyhkczDn5Wf&aeMc$AlfxFOX;hJRhAF>CyC9bqF$q+orv?=Wodz%jJ*-5nE=odnwP$z~;cJ7H=IEc}wB81h;A+pyiGxA6~iY!7Mf}`H!r7TsgcAdpC*b^ zJ${bsn;!eYk+pN#BdFA99`~^^MVT(F#u0Krl_<4P>JpBsF{Mo*6UC6S>uP!ydc%ac zm$nyiz|EO$FUW)_57f*r4szkJ%9|hdP!;{a%-3GNHJ6}orUbto!YYGSyi6ubyEV|t z?D~LjVAyLD_0DI=k+0NLmLpw2vIv%KLvbY+LKb&{o6+kRIv~c`(^GUJ57?3A3u1DU zfDgpWspJb#mG|Wf8rU7nXIIrB(WewTrVc&@FJ4OL2HKO2u=Y|XQ3oqswUMUOV2eNY^A zM|2XHMwL)+?wT#oMb#G1`Z2_^)UX(NkBY`-nMufBbC+3%q&TK+2KPPXeh#v9C3zOk zmFG4?7jYeJwXOJTF~G#s&*4mOmJwRzC7uty0e%q{(qpCQQ_~I-YY*Y3Fj1<})2b2r zRoL@Z{~4>eLiNt7ug+_<+h+AfhIcqGXoZ{J<#LB!zAbVHxY`wEi1(qe&1mbs11K&kC}-=Xa$n2?zK$K%#eDwngM&hOU-q4FRKtZ zzmj)s(>#m|Jr*SvVCRuFgA))c_{>~1DiTNU)qhk?xnoRv*i z!=0vkg;a5zj;eBs^p`bJ>y$i0N+Z*Jc3M(KS%MU_?EZu$y_q2&CD5iH6(@U#~(dAJ!yQ?F+KM0IT6|{pXsDiXj zh`XjBbYy1NO?^*#d70=9bvZgeNtTCIg1NSY#0OL+YM|ltGlMI(1Xi@phSaWExacHR z5X?_;$&X^vEOj-dMxs`eatu;Qn!n#jCPm^?o;j5Oyb{mH>#3Yl;bJu!9xZ;orFY4F zhY@342hz6MDgpAQ8rQ|qDOr(5wom zWj1S(@0+Ap_t#P?JX=$IqU~;pZ)A{rzxY9Mi?5^9SH5pdDo%4TWD=D9`7bZhe*%dA zK#RYavfZ%H4eZO4Y!v_h0b2Z@Fy+6YMU@7mySB<-Xc5oG+7FLt6JeoKv?am~Gtu1daAdHAo+e#D)ZH{G*L@uRMaTeiUU)Jj1 zk)N-6mHDbmnlNho4xsaR?Dm@GxXk>deq6uHW4rMA*6XQo-v2fHpn7WdAJ$d@E17z2OI&|2>34CFgHbS8vw{=0m(@s*Mwe0cfwx(miGu;t}JsxP# zyQ40z&N`$Yc{ZPTYqGXi;obK_WVr)FP`P*e6}iW#V%o0Qv+Z|qxXZRF@N!(Y#oog3 z8)D7eA1a~0>?)t{IefXNsp+oH20h#%`Sw<)b)G0GG2N%|->+qD34t zfYv~^4n3g03GtW71@>>W6UYNr7POaltS)a_T0FF-Ps=Z_Ua&F%?QferGQj;*v1H_L*M+hJ>k^bMpoK+`n-40^%noIZ$r*GxU~25*#NkyDQV;W; ztjbk7JS-q9pryc3#s}gkekq)qS!WKFul-XST6;bJUP7g8NIpK$umi@2tInEu(I_yM zUt&<0&V!1A3dcvZQI2i*J<)dK#W#wV{5F6XS;fw)QG{zhg>Z~C97Cm`K4HXY&t`lT zB|LCf3nW=t8c%AX)jRyX>)z`$Z77c=Qq(m1*vGH3>;BGk2oqHm^i%nY&JUfc_*(G? z)+#=fC)R!}y|Ma&Y;}KG7(j_AC~t(}9$lReoeQ;-7P>6Jzpk6FdYCapl*EW?Hb!Iv(HiyAKCJu0qEU7+nsIv>w2P(?YzORI zi>Ok5YPdcO;{YnFa}~_C@oJfO=P~_#+KlW!IOCk zXBj-z`&s}=l*<c&!;zY$s8>S7xU3(nhVZO>1dXFy9zk_y4;4HPlI*qtVMnnJyhBC%*G7112^1aMd&B}#>Ioo3~Z80ccY z^G_vof>kSNlp#O)c`H|XN?K8M#H4cj2ui=*$SO`D7i^PP97T~{p4-k`f8Mp<2 z6!tW4%c=B9`!QZwkWs=@3~gdG+)uTvp1#v8R{MD$^|=L2wM(lL%e!V4mPR+0Ce|}+ zVl`PU0!4XgQh_>JGha>U({&;7)42=V&Oc;cp{i_N!9_|sv#I*&4QAoR$?ce!IMz15 zEKhop7 zSSN;16)W=3jqr8ND4;G^W#1G@Bgj$~h%nLqsW_rmpO}{I-l`Zj)Rcd0Of4YM5-p}f ziCB*Q^ise3!FJm;zmqu!c{o_`k?8fSw>XV$AWie7s==g0Tw3Lq3KsHO{wVUV7ida6 zR9(BGSoUe{kst}|RLq0D*{HY8P-iKiV$DV`1c9r$YYKgDka zZD9|@Ckt>M)rnk!nbDA^*BlUeI*zK+Mf;Gf-NZRAbIqc)+YqpLRGiRX5n}B&W@x6c zC9F2rxPc9NP(6lYn>u=<4OYOx;&{GztRsLOUccSCDBQ*!JpWxhzX2O;|9KvMVC$QL zicx3zkg{z_#ryBZ58!o?=>wG7K`yOW*rh)!2U#SF#%gh15er-JUR($(uD)~!1Gjgp zSLUvz=Q2MJVEdCUTS3F$zxa6So>?eyQPeI}D)tvo)DM$|*wFUT`q>@M5SE;Wu!>no z2@qXKZrLJ*;3kK5VE}&Si5+`*LN^c(vG{oH_*Z&NUni(tIBmkH1}ALWQS)N9;z=j9 zu)Wmjo`Dg$6lZWp2eWWpkK{}DAww(t=7FKhczpAuZr;~!`$um;zYBe=p8({Nf(cp{h@ZTs|4(FVu1f3QV4 zY+@Ho#O82#rCnoUCm(aaJ;o2j#0^{$HC~jc|NMpEF0Z-E>LRT<7ZBJOXqK{@+t>ge zVs4tyeHL^>DiW$A(BnUjGEss*V^i@d6YRWhnf$yYBs5S6vinBizC{7#lLC5#=Q&O~ zhQJ{~pKFCVBjPIB$QfpSZyc&hhFFzNln;-bAA^t|qlm>LDsjVp@Pz!f#iC4+P3WAR z99qqmBu$9b-*Jr>W-e}+L1L!OVeL57^qaQs+{`-VhZexM4P>wDE+NpZUlc5mX^vPR zTNrpxnoXVxv-$_BMw6pp!5KY{3XwXmya*k1NUdRR(HMx^!LNw{Q005s7J16JWIiEs z9x1Nr*{R#c2Y+D`%-KYQaJAicB)=PC-UH?MDKd@7UxG=78G`o`R|ku8!$zoc)*n~= znpy4~Bn=HTX~6i!^`?w9O{q3P6>}PTG6qc~8ppIYb=gKqJKAt1gpc&9@CGvNvCE2q z`=mkMDEQ;K-U^(zr#9N3Z0t7eAwLl-FxZv6(edOa@^+qq9MdsbLl}#3n4s50<0^XKIOaoytN%h$h$n1c zK-wU(uo&k~w)=6+wo57{N2{zo6275KTcNp}&F^~OtNF14Q9j(QI3jGw;3!O?oexv4 zo~{TQk-(r4DW{+c#StOC!=aoAr<9qlG6Up*M43b7`td!Y=(kMcl%r*7w^;Qq79FU#yn$D zZ0HjQ-62_{33S(51DHbz1|m6`>icA}8f97vB_3(Y5-yH)$z1XvZBA@uGiWa!9`8aEmP+hkW49kGhi3p2HsVOVV37|dg+^`g{R(e=P<}uN7 zpCy>T#rDJ&UdU({=l!-iwLM8vuDrRRtqkaL)us9vCE#c8*i4aEu!|B`b`IY18H3CE zOe+ml6;_F|)*;`xOb=HXa_f@8_*C&iW_tF5VsO$V64J+6s$>yOM)QIO)n)ONH1>cX zVIpF{LR-5D9s?OQm}@jaWe(ePqfT7rSZD?hlxpO92T4g=uMV zklAjM%}OvjIeP}Ct!lyd?wj;rEJ8U;I=V4I<}nKVF~`Au(1hitjGW6ASVHZl#^x11 z=emf+m4EP-locL7gy)}q!M5Ce{TW-Si|hH^zlV0>D>>DRx5X2TBk30qC+t<5&L#6y zDN@)-Gkc7Id}|k_1aAJb51aDXH>cJV@v6_Nb`-P`5#zc=dwRgdvp%fAV^wauNs5~# zRadDw9vp9kgKScfYstVRJl8A=dVWtZFyM9&*wo^>vOtTvYWdT!3adGVkz-+_=Vw++ z$M6dUEl(J!CnHQ{HHo8W_9lB7@-77nEaJWT1GUBK{-CXVhI|=26oIu~LkPD{HA}ey zB<71rjc5DC5bc2K!?ws+^#tF+N#i88{GIR9wzTFrB$(0_GAN&leN>*;BBvU4lGf*N zV9QduIkG`{s>Oj6wjSWQK7tO{dv!8}$NPAHT(|p-s5#BT3e_q@{aEo8Afx0fTGg4g z6zrUR0z2qN!%dmVv80eyxM){CpSczO@?@3(#VmC|*}b2sSk5ezL0d1_8w+0Hn27FX z>@6wP!J8hT4npJJ;;$AOsCuxiu&X}IXyRtg=VYBqC``3{YYDp}5RKTcv-g$od zpXGP=QC!}!_9lHO{afuztog#TKT^}>aSeGKYf>>BKFB3PnA1~1p;3=x4VK4J7|Sc7 zPfbO&3;7R6d{?VvK;wBB6|1dqv-;#Ew$!J130`PDGiB0$yR}$6(QbEsBnsDTqnRN+ zul}Gp+i%D4lo7oYU#GfyOPB2LAV$`9JhPdrpW*K zVTRE75+YjiaFaM={iI;@6oNZO($xlNY}ErKB*RM32_nZ$wV(hp*4Uut;KCnCQPBAjY&|$FD%t2 zNR-EdTM>*O_CR(MxloE$6h3&ajCLu!UK zG?#Dk(^YIH8`YF38_%M7Vg*7LfzWoMm?pZ)7f5SF7#EaQ*J;aY<>Y(N{ztlvA~j|? zB8QJ3qia(5vxxP8lnL*Wl#xLA_`p8jKq<)Xd1TyOXlbnyan=y#u`~X;eQgGGb$37q z<*uGwwJsH!2|tck+eFXgoN;LTY37+k#%|wur7O^E1GTKr=*e51-vlBZ% zk)Tj^HLfW?kt(oJF4?V$T)!u_UBrX#asc7}#fvx}{I}28JTTTs-w;RVEf`icq%Q?Q z8%4nFW`4F* z++!lBN}Pa9g!W6UUod1IHI-lE*d{b_#^H7ETx{|wlzV$V&Rb!pPeN-T7m^&S(^RC& z5@=|6Xr|$gI_e=oGm1{l%u}XY#fX5zQGCE|YP>}F9z$9oJIttngR~S}_&_2KN(c!D zd35G}F8d}O2f3`szJq)w=jL86`~AB?ACSX-*=NP*7>S>gC^5CHxasJo2{?Z59vnj- zYKZyv=vQ^YHF_*D2qYXAmhg8_Vu@tRD@5-^>rb4Y1KK|VTdv%Q-}C-mG4Rjm>%Yfk zORI{G6<;*U=dXwLf233X|Kl=ZhJQz9Ns$6y?zJ!?KN|s>B3>Zq)m%_re&i70&}_ED z4ynzNxE2-Li`wqr;7N+1E@Z@cC44t;U4DKOpLyJQJwoiy>PVENW2%50cpt4knAAC8 zPf?S=pn)>cNkTO(I93Y63a*JFZIiFwUj+Z*TRIv^uZ|i-d#I|K zR1KjZWJbhi3*V;7Lhu2P6(wN4gKZ;wwVyX|k~hw?4Yev1MF6$=H%$HKpZ@Q|;r$_C z#_~nF$@(JQu>9W+hoqC8?LXtxMGbIo>_yB^zVRiA8;=5z5aOt?Z*;L)BE1BC*FPYm zvxW#QGUx87v(BM!Br;_Q@|-V4v?RsMrTmiT1cZQYcdtt{$tpRk^)KpuC3=(H=BvfQPqZ*23t9J-sotj|}BV zu&^ip4H;-%A)3oU?VH&1EZOs<97QWvAQ;->FFC4KvOowpPzSmTBa0l!?GFUJ-T>=f zA!$6-D-F;Xh|&xhrIz;izuXRx#3&7-v>6(|v5V}@sfZUtFHdkVL!LEI%hw0X*G6+i zCb5EmW|PzcTwqik3MM0~;w~X6(|doF3{TDuk0b!g4F2hH%z4;3UG|MU?lEq3Q&BDv?$EK zW|$m1a%~)czQC{qeBGfZNyfsf_ym_dnhl4zP!+?Hxw!J6F2{2*k8js;X;{W!2CBb0 zWQtpYD{6c(E)y7EiKR-Pai>94C&7V$StK6ldscBIAVUfK?tR)V9t-1v1vaE%BI!X;HW)N(wAPr{ zmS_@&h{_Um=vB2bK+$-(8i84YG388=UvjGk>FQ``Wb=hKJOOi~&^!WPPDbg?4AqzP zj9><97U>jPFJj%)AY@m5Sq0h1lLyi?sKkdTnGQCnr{D&nMsqN6+s_|<-H|diY9qOJi*xmsrF#@l znMAc}e~>u%J0}zpiYpzW?iQI@IsA+A8dI%?=9pFsCl5H@XZ_0#Jbq-+%`PhG>8MG^ zE+_PE=Q3DYx-Jo7n#r{knNuVsMAylnEOwTb@hC?rr2*RKaY1Z9YWDBXWbE;}Dn0A3 z_qC))7U*st;-ZH*q@turXF*R{v$?hoP7Sds;7+kKj>cDov3_jb}NZv+M4^Di-jpmu_GvLbz$JV{*2} zC640J$~PjEmyJ`G)G5oMiwm5s;xEtFLsC6;_O|CAOr`J3eSTRka~v9UL`sc*u#%oj ztI}(X8lxsGN-xoKWQ=N(9?BoCZ*7uVbQDq%>rfn1N~lS-iz;fiIpQTN`~p|fpsIev z%Jfu8fS)#8Z*`k0&=t2XD~r1Q;H8M2#!+S}P!_m}9MoyjmOI(gHM%3)Kp&q+;appF z^>&^@qg>MG??VS!LOUd~VJ%#tSs6+0^Yfh>)uTR+pu`*4gUXh_Ch->OQ&aJV)l<8M z<)%Q$A_{fB095T}xGN5}T%knKnxbx*pl&J62Hk?9@s3}N(D~{O!e1qZe+lGK`bOrI zK2ZQv-e8OoXVbVj^G(bxKiwJImo>0t%$r%QQ^QJ?uys>(6%v6i z{CHyKBnnx2ZjX{%l$IwLTgq0lY{J7wU?hw!AH!mW>PC;0<|VhoJ8B!~mSWje(?nVCcy>`ZDoyifAZuE@1z<9ym*8{>j(Ijl99fM_xA+~J8l&1l?EDqdwmal$^ z$Eg{-|DH>gbRgxwBKR0nX6EbnN6<~ZH`mufm2J;+vuyO$PmnPD>}XhmMg*e$`3;;N z=TY1dhAVuduf$T63)sA9uM9q7MwAE;VxbJ2G(-hGB#;@Y0=l<&CrXj^K2@A#b?gj{ zr8blB@h7=}d=-@zwt{yH#5*D-@SP)ZDJA56r@mGZzxBHb4ad`I00()Kupmd`;h`XR z38xb;gI_q2;xdOYdT!*ARxONL9Io9k+HT7(E_;fp-hsI&_!3Y&7yRie@hkXr zvW@pSN6u^H>8HvfHcJay)-btNLhU_5lUtl3ih?5eC2!07NqUhXE7TU^tY_BNhpYjqj`(cJjQer^iQlVU=e z38>{qNKlALHj`|LWCVO1cuVY{nD}^A;$@2gg)P~cBReuOQiDk}D|!P~X7Hf_`f5Ey z1cNYdvOXL8t(5YHqdB<=ROsx{+RMMA*uV}DbJL(;Wt66fRfAPv)L}K&lzGITI)#BsC`{7r zCJpy1Pd%j5B9~$+?;V}*C(q3ia`2ez_mytg4#Q#tE+!)*IVf}}!;XUUkKr4~tSJbM zt(^D1A+ii;I;mpsYDB0L+=&RCb6J@zk%Ig_WJG~JAh0mIjM-OFBU0Mb%n(94_OJxW zjDIa(V>0oZQ8@yP8fCmrSQzTYvut@JxnEQ@zX#>jJ}qOJH#BHPPMU&;Q+{Jq&2hPa z)ibE>nyp1T*Tj?41-&p~OF?mxXIsRUjE-OcBTn22y2&<;(;$uGp5SDAeUWNF<$iH} zZ7|NF-mCD;EAu}4JEHcE>n?=uS+N`lox?nte@go?a^Lv+UD)=4?ThdgR131$)tBxn zVIvV|7Q4S%$5*r5`nPHS+qC^{{`Rr`?PL4f$2KZEv7X^T@_bpak;3CuF@XhlyEf8a z!Pv;4mzAgUoQ2s5eTmmEV9A+_9FT*B>{I?daR^9wv>B-r{F3McOgn^b{%P$Ayn7FR zH|B{fzo_r$_rG!ZKcnye#N~ero4Zu2vJ+sxeTygl_KoX*jLQw2JZz2V1pcW^xxt<*~MvFwivepIG1rb9uBiu;x0}W4^yEVe- zo>!Zhnivn4VIRt#=yF)b|1npZFO+~@0WvOeNMLoycotgS7344#(`txpOKpIKQjk7aN)Z~sm6&&}QgTsy2 zpMo1}$jH6p?M2S<4vyooRr_W-zL)DD#BFr8XJoc#EXPfX@-nV~jPQx=%?spm@OA(6 z)#@6^Ti*9w9t3|#Z2wg3V0w6eeVAlcZp7ts;c66tmn0-7dYkE~GI%=Z%7bDKUGOPC z^HY(gJF-UnOTn#1FQK3&XXi=b1t`q>raOQ(0>39lP}XBwXQO$>rBQO~z< zXBhDfa z0bJLnWxa=@SR*zfb*y6<|-GlQrw8syZjINERSoeaN z(qx9b_G`%8?P$47i(b8fiB%gm#xyVB{9+oDYq4Ez6i*&Zp{kR@;MJqobb{AtsrJ$z zL{wo@kxh$Vui_Y;<0VI)Vzb6Gnz=Nht9sUzs`Rm|lg3@~ZMlBPFJ?#~7PSLWS;3(V ziOG2V#+bA(Rsizut)+RskW+0Fqe*vMo1-U5R?#rhM(p_}4p!(L6of4-9%|F;K9>6F|JkUf=l))*+KjhJ;Id08Bw}Kfvk%6?<2{$l@qso{- zQ7mrs%S1BIwul~mYm|5~C1~<7!13~~ME;W+iJ_pg*^(ms{HevQ?3fgs1Ie7^c@b+< zTv<3qW^08BSYPHdFdZ)j)(ci-Jw4oCr8y{PC6Vz1bu!~Vh)}%r7z;#HXFbCj<$A#K zIPk;rouYU#EiS?6#)U>xI$0WlC*nw=eev(qaa$NEX8c0~+Ms_yX^b(12r59R7MsIH zM-F-q&PD!+`mFt>UVRO;XG_J@79z31$hfp&YMEkUs)*7N2J&F+rr6P#MP;m{TVyaq z0i_NV-axmeRclk9s;iz+pXoi6ileMyYhtw)Bv7=2-dMbc#agAYTJBi8_vZ%qRMU(4aOh@)d`|va$d}y_Y(uAQIS}Lq0)9j}Ru!edyRmd4m zp13j9#2zCVYTglFHuJ4-TjSfUw>+sROR`M@A8w(UYTv)nA zd*J~(mN&_P8V}ipqv+7PG-(b-DS8x5q@YUYsqe`~3^I4d4IFBH`y+;`3k9tqD&|_J zJB~%$j~@&rKdEck51BxH9d?CI+Q!A(IkfQ9m!=w*Vh!d^$R}YM&efq}@KRVY?-}jy z1LG)WkW)$~7z$z?-if?OGN=jYTiI_4O^OoDZzA>p!AUMz?){w&`m1vpxltL>Munrb z1483rq_Ac3&I^&GKJ%$%M>@$~iI^;w!d>&n@wI2use8H`RW#RBV1x3b3XX@0 zt6;8~vt*iZ>WeBSmGs@Vju@DZPgVlH)Bv3cgoC0t+=FQ;MUqI%T@;9zbprK|k3@1v z``bf9HD!+4)k%|2^JN!K^97=@2BCB+6QRWnPDTv1#e(_rC74fZ56qKVg~j0Z(#>ZF zEgi~8Y3B#$>B|O^5>ifgp%51bvFcQjPo3*@t!D;B9g1i*8S)}nXR9ON)TtM5$;z}n zYvNcEr)ET8kg1>ASBN=5t2LeV#|tN;HPIdFH1sDyNjV*-yQU+{8$c{vTwPDdWAj=i z(bXboIHQ%A>Qu_zT3Y`QzB)a3_ULI-scn%pAMYOTa>_U#=WAJ;xh@ahvzJET?t=ND zIw=!0b9&WN60h166_kUCWOb%B4pB2LqIMl_PMPPR-y5U4IL-R5O|8aHqWQtz5*9== zW!rJ3w<@6X7?SxoO1zguuU#QfY!fusO6AvnP#%}v?O>-gcinj!KPovB<`}@^2|KxY zL>auFt^csU-;GG_eF;*g`E!>xncsVWPPY%7QY7QH>4ol>z2ulw`?e@Uq#@mc z&~9ginSN`|Ci8F>*4}67P9n3rwYIu>xhT?WTftmhrKvJeP6A4UuI?)jQJtOr*2m7; zBP<+_;Z7aSw9USN17cTxXPU$L=*L-BJrxRuPr2vyGi@dDaI{AYrw7$06Qvy9=#O%2 z2(NzQ+XH%c_hy$E%Gw9&Aus=Iw;DI!)#+TM*1!mOEZ5{$QAg{(4S%Ld=e>S;ebnUZ zZILZNgh=0A(+XqtCEam5GCI)uT0?DW)@+I!t!>Ei;#n3iAnD%k*}5YYJDlF(3Qp>* z!OZ1e^d=h7^OpwqH_3%g^}AR7c_;NPh#s$+qTjGQ=)qZ{ZQNm&?&7SBQ``blB{kR8 z#~!Awp?#=w9(9VQkWLYih&Np~yK3J^GzyYAOjh_(Yr&GbusAB?2kuDI)Zl22+6^oo zaTbfYJ13lg`RH}Ll4^OHZKRQou?DVBc7vCQoJzfSeB4}q64ucX(0M!hjzmus&CcyP zaE=_x*+T)5Bp7vIj}oQEl8wTNzK&;t9w2&C4GZY!6KmR{#<`su3+(i=Sla{0$tn$n_1VOr>Jh zV6IZ3KubbJsbKBt|D)_3qbt$UZsDrf72CGWif!ArDt5AC+qP}nuGqGnO1_-#en+1k z<9_$;`)}|4Ymc$kv*x2YCrjWO$8TVZX+joR!2srE-|O&&GrJ7Y zJ$wbpEMB<6AmY?Q^MyXpRgGqQFHM+8?Qkx4Pa(%x#IY~s(S;K)L%-#N48^Eukcjo> z@eZ@Y<)5x#UY1mr6fvHcdLI0`t_P_Vk%Zy^6(WEa|ltU+1BM#@(~J65CN zHVk|p!B@EIBckic@p~7=Y_J^2bICy(*M%~46)1F7g1AgT*bu3E%}z$ZvnciTo}x?xSF{5eXYCF+riRXI!WJcqcuRP2MAvwRbA=BeY6+eJF|GXFkj z*p6dU2QhN?TQ+%CqzB3sc~-w~-0oH|->uuzYtNEf5izG?i0ZCV&se~5sGH|rDSo!%B|OGBwqL%=W7Grbh-R9E;F~K#hhZJ4I_~rnjQIW8UD4;t_8Y7R_MG z5CC#ZcnPrX!P*l0E2rf^bIWeK)*VsRD=zEy+k_F{{wrR6+P+q4r-xmntES3kaBIfA2Zlwt0(^5%n z1uCX7X5Y9Pzd*viMfMu)A-cLQVS-U(8Ga*w8&I;=vxZY{`9sI9VUrCvwA_=q}eTry4dbA$Rwc!lHOgzuUS zQHxC5+44VydA81UM_ip(Ju z%{Zl!sUC_@-XwYP_P5MJ=*UKP7U5R959vQ7I-y^@edntWuASlP6ZqJa-aWDKY_9=6 z+Snhkc(zKtXR_}!3tlmJlJ*dVYR+$NTDmYQDEtP>;)o?f;s;^`@7gh{zbS~nwY^3O z9@+Kx&&W`z4B~gB!gq?tdezT0hSvK`w-SKc_G;q11AoY$wjk9NDD8>>1b)nJbp@A%Tw```V!{(oveA#+CuXS*-?3S!28krouS zE&tN4h%Z=i!ji^3GcA9}m)H#;D#V{dtY{4C`wc}C%PYgWXVPb4lDeVv2JMORPV{Qf zv1m?4*C$>1aCDYI-#F{{HX>+!ux0LB7vFU=8lFWyG*o_{%j1d)?V? zy4MT*2YQ&LM0vqzOf{PZOc3mREDVaQ`HTCEtz*kGkZ-J8& z9u%`!80yj&_O9ML>Fi*y8$Xwin!5;B$!BD|O6`sX(o%<~iJn&n$-)h_ceZzN%9Pc% z(myi;N*-jwEoLyLK$9=r)f+9Tj&f1E6QC>1m+>Sj+A>SdRe}8 z9usG=EX?HSDI<4z_WW7>hiBt#pQ3vj$&7OTQF<|dWUhKDp-fh6wmUb-n*={x@(61E zKA9G&Chv+bl*wrQJ&bJcwEW0#%Ha_lY$6|eA^nh2IwI!m&%Dx%8KtGr!_yRiEqRpx z^qgEzqt%l0`pCQV`dHnaQ8}|kf@6#~N!X!1=zRA-h%tY^Q2)Mae{HD|7anTTeO)u0 zuT8c8V*F=oYw2u9C#3IWEcK6%{~CrWTPl93r14mekDwBA10m0YladT@OKZ#pORvKN zffxXT3P|Ewqp73&QM(zX`kmZA-CN=^`7ty7S)RHFzdvf|YDfHLb{6EN$5(>cJ#~#NYLoeDU5LGo&MMwKlad% zcO7sxlpqshY7%z>xrPy0IW~&B)XcK|@T9QSE6${`dgZKrE1&EEm6f#6s6-;y7@UQ$UPT35EC}c>D@yF*o-%-=xCxgqA z$Pjc}j&h6Kf0jQKGI;g`xqHpq&SXkLHbXXzqZ5skQeuj=*?2?|>HTWv?0*{uzsUQ5 z>~-ZXtT~HL!1X}G!>k!e|j-C&&W6^mRtvdcjRmDbIo z3Bu@3Ik00Pex5O`W)ZE_QXGvK|!Z-m)*& z5WI-r(9i^qc%kAguX@XdS|w>lg((YUtDQNJKo_f-TbAn6@(q2e)IFu;jKLc8sAb6A zAoEsaP}qth=7x}=|9oO7=1X(#qt?fUGb>Vb9tf6t-$Az*;yT~sE;een-v>2s2c9R5 z3EG#WI*%84CkDr`k7)8Nl9jti)}De!AP^I3O=#t!FRr1=ld;ay23A{|j+7~pvT9~p zVy$(N`ZE9Ea&65xwc#=@Q@Z_@5I8v|o6$K}$;Y?9GMK*~)xQt%FIchbb(hi$}jTFys0D`O~-vfduk|adm5;#a%CeRSL zyIq;u(EpPW$uu`CJFlBi$Ka%QE*#t^-uT5GF?T>s2yVXmt<(GJZIkiOpQGaGZ>Tl6 z!C_877*Z4|Q3P0`a7^}rxr6q2^$ZiE{T*7U$onYB$lQ9znyfVQ9ux2~roYe$%YP}; z!z4&cD!so}*)_e`L^7AwRo<<_xk$NPk`rxaoiHMgHyN6B^gi(9E?V`|(+G|Qc}X|p zl-B)t2Q(dUbX~qgl~mbBCj%SDqBl&!#Gl;q^6hIx#&c;Gkq=I6QRcbhM-k`K7D>Fq z&>F9)@gXOvo+D6E?pp)0_7FSUEa|B~)^cgJlCgG`_*vI9pk}%c?EmP+v-vYBa$)Rh zHeDU>rc#Xa&Q-=S#c{9bye66c9*jCk+t;e2Ufatu*IX!m$KW__dRS#{5Sb(kFYkmP zz6n+9kf|YP9)q86C4*VZ1-ozbQ`Q>r^%q8wbRCgn*Ih;4te_+>QyU^eiM|o)RYW1F z7-8VDfIul%ldlEn0}36du>@}mMyFk#f@C@~PgvHk(BnHNff^^_H|_mboDR=Z*;D=Z zPt1uEUH9(N+V#~y>c_O9I2SI8-Gm(_N3a&EJ?V0MR4no(j_W@!26Es{NYE2|otCo2 zb(V{C=J*7-A_(}SQ75@N_4MPIMH@&@3Sy0j^A+)WHs?tLB^w?=$1KHW%bMu68NtLA z2W3@_UZ4r7Yz%lhUgYdU|B1s zgHWw26@#8_7Tec2w&XWAQLO!mKr|R+Lc1o=fw50YvCdCDLM=XR59QbrEoFP+lSxluMjhC=2O+Bd3K;JpCu}sJEU{Z>2ZmCLALs5j#9`zcy!N z`#!_T?&d$7dH)_A|Bjo#9>2@3McR$8nCXH0_Kod-o%%SLTN~3!J3HwcSQ(4kI6CRu zIQ=UjQ?*pYIzsVQ(I8N-h=lL^)lx?4Z2bMpc-{ul@JnhDcn5Wypvm5V&VWBWS-V4H zmN_!MDGG^9H_eIDdT*j(H2DxZ)7(TMg_)_-bCT{P`q=3;V^IR)I|YBf%hnplG{9XVB+H#Fd^pz#t>o1er>HJyNjW049lB z)wsskZr5x`1NkX!7OWYA#FbDnNuS4a=VmEnhs@!IW#z>jrh0tWl%WHm{}1_Q#BL?I zcU6wFg{Ol9w~xoK^V5s><>QHaN2mmQ&|p!V_WhG4wqi|VBI@51W~sQTS*7a_gUG~9 zE@g9*LurcShmrnK$E|%O-)MM7MYD!i(JI{*&Qup{5VgkF&B8uSBIS3oO|u6 zPoPm<;^Jlan-86q5}a#F-G%E5w$BUpXpin$I^~!hlIlCGR>yC-o8ze1t77jal!@4s zABD_1c1J)#MU!A{D>gYbzF@nBr?X$^a=x|c^nqf&ZbD)4UD-!?D^lCEG_43{?JK|S zOo_1@bXGyxX9T|~ItAFF+IQsbP@+Gx`WrQbwO*h&8s}(`8vcu1!Rdy};=z^)u!(*ZX z(Q>G?j$Vs)07Qgdcy@24*6&xKVvRS1M=j7jebes>NC<+ z>hzOe)nv<~3lI9BkYqH%b(5kUbT5n|*L+PKvRF94f2!PA6VYg0hfR_+TGVRo#%bE< zfQr4@N9{di0<+3CQJel2pv}nRxRFyD>wJPXutWoxP%YXnwbib`1fwt6L9WAmy(s|H zvls7xvsddQTQQO~iK91D8>%;ptRLK#>3bMfqeL`9o!5G$D9rF@lc>(MLorqEpgkAD z{P^O^88hr#Cmnz1PH~O|YJ4s&+acHt-PMMT9=O(zFmvUH`BDJNsP>23=742mn65cD zGU%$x)Io0FG~9%H-bGu{(bdPZkmCQn(7OgyKbOpwskNzB-Z-&D^{`%0U5TN<7tpSF z*>}mkIrW?NG1!*fW=k^j9Zt-girpv2WO-&)nAdTJwa;6Nyq(tZ08?2SbfbfcskVFZ zU0mh4A7}Rtgz)$$Ue^AU%S$;$@@1^VRnpKz<@t;+Qd}wtC;&*0@3ywaMt152$R^3x~}Ew78j;jov8koW=Du}ncA208SA6X5?qF3USO%W_8hspkX}|cQUBfpr@l@yx$SHVQFm}4z zUm??vR-efs6wg$Bj9kP_4|iZW3=N65Um zg93lb?c(qjs{-vOe&g8qq-*dB6#C?wP5Oga3eVe*px>NntC`N;7O8&Ynq{;>*jb&2 z=5lH`&$7;3>f?>YMsn4<$5KaPDkLi~!kct~lGpyE*Cb{l{o3r0x?X9>D&H^uJXro* zAL_e;_GtL%3S2Mi$yCo8i^J$)i)TWHnZgq&E(JP5d#3c^czj|Yo}mif&l4wjaVqHb zOYXu#wU8HgiuLsktnkwDgS71?DLU=p$-^I&q#m-H(TH_&0$OpmMVE~-)-*K$<$cS6 zhBxD6`U4WdIpDhrE)n9UUPvOv=*f3)pF4DM3e~AaS$Ji>0L;yj+8O?h9^ls-*1bP) z>Tb!@-NUzT-L$Bt77-cxk4K?fGG}!5D7US%IUg6@KBS#)*IttWV7FXDA5Rl)(WecnT*?{QXDvIHN0R(Gf829;HnPtRbV7;J zk7XW}4k_oUSH@q)*BGMTo<4tSezwTMZrsWXxDF<}p)`BFA^*+*%IqPb{%85{cbxn; zg8rrS0Viu?uKIO!)BG(I!*xs zpU;Biy{5@rlAJ~k1iEofLCoCR5`lcz#3S8i<$P#E8eS*}BMW;N!_;#I&Gen&l!%cN zCWrSlVz0dV1NH+n>S$A2BBn@MA_t$F*yHiC_2_NNHTARQumwFjst|V*diee zi;$0^zMWKX>`;W+{J>VlGnXbXPXtT^zSK?%>@E$!?&|sZI5l^3Ha}PdBX3llq?*`i zP>gH{Tasz+4gK_0s{a>qf2!O)b~QheU}LTkyP)0|DM&^Zo^>UEed+{G&}fFfWwDs5 zX|i;~s*BBJu3-+6q`ZWQJ2(A=xiQpo$x48QChK^~DOhuD-S>c_Sqi?D*D-8lk&Gn( zZ`@d69aB|-6Ky56EKim^iS)8_$ih^FC@nL*M@lkfAjTl`ASqmY4n*2e%zgm_@K|TY z7+6wlV!A%{osF}<@=&;sxHL2-+=Ij|>kOLP1!>vkDkX!`3{z&(A#s43so0lxg@HLS z2{b?#%?ZOGoJ6RXDUPH6P&nSOWNg{|G)|eCL@=P;J!>D`TL-L`=h{E%24kF?tjJ)+ zLG(y6Y!<8K*XA{h4{t+YIHysIHI;c5xh(hdb+YhAN`8rHaKaZUVt>xl@kJ%^O;^ct1qa55TLMFguow=|jeC(n8G9fD=*DZN zriyhTGwd4XyOJQE9b8WP%tuU|F+nqwmIbgT%2~1*ZpfBtB+l6WFci%?RTUR*$4K`q zI}TX<(iDy~Y@=YRFtv8P)d2WqoV<|CHWEew9vyF6wPPm6LP6v)Id-V zIj3hvE#5s<){V`Naa>N7zw5!kX2A!Dc;hCvhuw{Fq-CM+{BAHeMix9UT(4mf9S`pi z468~ngF)=IU`G&=$K!|5=HDkA+0%lz6}7`fBQzUuM6g2ix!NYo)bcR2QU4PETalq2 zG*lm-uvGM<6cMZK^9*oh^MAVL6%<`Tl9|yMo>5mA-b}bqV|KRb*D)}o*$dKR?_ADv z&3@=Cnu}V3X*9otaZ}E(oP_Quadgg?4sV&kUO4AhhgE*LX6|2g`<<2)597Cg-Q!zQ zLMvA(v03GhA}Z|;%EH%7Jx>WF8fQf%Ea-$E!Re0Rx$KKl0^Tp-)*MDkEv;Uc@APF( zn^jTVF0PcDRu${2`Q}{XdKP`{b@c!)3{R&_1!R`raxvqqqO=PUUi8)c zL7ntD^+?@}nZ#8H%K|yZ3_+4xT;z!GJ#SYWy0qsxGytyw)jYWS*0ke>!R1TZf$s)7 zBQ>%(XF;IjeH($Wrf}Vs9I|w{(`eWpoJ5nfA9scq z@-^a&6&#bamg}TdmReV*hOI*{va;Ji+wvX!*{0{J-xMMi=NXm14Mh04%>Nn~bO-CG zk4@sE0XPOH(AG;AzMbTThXj(vDH|y_9Wa7oQ5{?y?@~j)nKHn2?oN#%t40@x5;O9~ z{iTpnP7&rQKp5SIi}Dlow|AX?T)!l4uq1MB6L~OGTz|otygXdrDM7hN9mjUw%mf9ybi`F)tNiDolc*7YDJ9E@)5&(#;#}>qZ4sI zbk(q+5qX8`{vmz~?rn>=sF<^Gt4@MebqnrzpR(E?BVppR@6it|eOmGf4=AIrL`#OL z>ddtYWIm4f10@ZY5pMs;Gic5R3J9HI9MwR$*qOtdk2%2Tv`)F9RK1eTWq=@!7 z9YPl7YwRKk!lnTlpf7-D+mdcTn%MSpEqm$($^DDZFMW4I=xZQ?wWXl>_Ct_3|N;Aj<-k=*3%>tj^g?SXU|O5HY6;XQc$XX?fi+;{Ws0{e_@x>R}uIh$fW`4iTuUI={9mPbz$OwV5q@HL}0K& zMBQh`#{_~%iGe^ksQFcwN(`O8(ZU6p*GR5h-n6PwDM7RPo05n78;OwlmzA7#Wn(eV zg}LVR>hDb&i_fb`qk6~{V!e*C_qr>utCXuZpWzA5D=b{Mmk;o76R3C0*w=;xUE2XY zXvTNGR$cqU$u~JxU4-eu@6VK7q-b52!~M^I^rb!?XQKCKQry_d<^|->$i#fngWtB} zhYWmO0avf$Ub45(T~^-s>K}4bJhaX4Vyt{qy|UMe98XLf?{08eJ#_om$(Y^;!$$9` z;aejg&2?^b;ahGu9(*6Z#rw|`c=9|n&3r_qrU!kFb#9x%?(g!fbR&y=;+sB6l<&g* z;SSfTbRS6p-FtZ6??|7wyIbDx;Gc_jay{DGimF~|KWj*{%pfr?L|PVMg!gD@V%5UW zO>Loq_8^%S^o8?sPtCYH-28lP)i+L8%K(7Fa?qj$D@M-97!-3R!O0t;bp4?>X-dr)M2t{08ee00Mf$R?(FeE-We7He3g`TfUVxmfOEj86AMy*9P zcTK&wU|K;al=2d$HX$v`7hyCf1-+!ik-LV*#_2;FgB{8AHxl~)lZ-~YWj=*yh60U;xGO?2d*NWdY zeU(5c!9iL*(^N#GtZ%#LYM$fYHkDuLfsU6}#h5AiU(*RECr$byf*`qFB8>ytmM||Q z5H@!)b!H);=qv>w&Ryf%q}|Df%~ls;mGq@6wF;>Y_Dk$U{mV*MaD%j^nSli7o4R^n zYJf!ZFGkJ;*fjz}T1@NOv`jo^hIPxaEU1^-izv^IP*35d7kDl}PSb3*&nj1j{DZ zs%cgjkD+tAKRf}NrEiVd7|-5b8`!_8x~uHtF`7h%7=nUtQP{7+$Qy?w?A&?*f;SzQ ziP%*UvA>A)8*VU|+`mBrJ$2h-cDo1FubM(|znaYH5j&-g3f)Xr&WoA30mUyhrzH{P zK2a0YZN9ok2a=dT%in*Rg~rxQViOc~@mMh-{!XJBcyBIm6zTK63sifF`Xe%zcNet$ z93`x)iIq)$#``5y;YWze0WRiK9~TMaC#ZtzB9te6s#Xw;MEYZEJR|-|urMHv>2AVO zRgB#~OghP#_eY$}#^72KWiN<|%Ye~~p*1naPHrhBYPe=u;Lu%fAHja$UhScnWC_n| zZ=z9&&ck>_4T`K);mD|$`qH>!usE}q5j7_whBB)3`f_fW(4~yJxD%B3QMtb^?hkfx z)JZVyg0gf>9pZ|hosu%< z+ZJugaGnpAnC=43NCndcGI8?2o5I9(a@;OSAqeIA=9F!(bIl z10dQ`2_0-iWqZWba|5%SgpV+tyrlj0LbqMF%#GJ{OUR9FI&2;N|91oF{Ik-Q{(XFYfkK)Xu zi78Gu|KPRQn=E_glvDOd5k59&!DzX&!E7cmXryI9oDE4Wv9ys%Q%O`_GAGRg6SVg{ z(Mx`C=u?`_udxKy@O)|anLLEQDfFn?Qys`j3DL7MLr5e7J8SVFx6KIN9RBrzj^Td zPCwVFCHt)a@#5kXT66H*)wG~v`6i5oz!)_!t?5#g8p&E&Jp^4Vi}(_4?N++ExaQWh zvmz7Gal5=`<9!5RQJKZ_fJVK|0_P4m5eA|{{77!Yg7|mJ(XWv!@e}@}8!nTgfgVLg zm($W)%VYe9$FwZYj{<@w_&Zdh-uB&rUd5>ijJs8Wt?JGXXGE4w`Uv>py#qn-!jn4= z*V~z-J!y2?Dpg{XbiP0=@RulVWA-0r6Cm>{MU37N@pKjnd;6LS56Ws2ixzY0YJE3# z4Ye|9slX=!sTMW5)b$`NywZ`-#-};%r1YO2+w-upXw9^*fAu#1@MbwXW#W>hqB|3qg4;*76rPE6(~#4l zcq%=~%aUiiZHwuKHk>03lbZ<=kh$tVHi(S(j-NDh%&J~KYPSJ@AJnLwCLTAi#tVCd zw_}~sYlnETk_|>HkCiNhDqTRYk{Z^)JeEq+!!c#s2C^DRWXEFL)oua38oDqWz=3c? zYuSwl+rF${F#W@2K7+y>U7!*-rjWp_)0CH@Giw%S5Cz(t#~RlhjK~)IX<(M%h&)Ab zkWW3sP^AjdU*0=2Q}WS=nYNHEu5x6zgAy^-LJ)pe6~LaBFp+Jwl$+_meGct!e1J0N z;WRA&Cf^|nI)p))Li~ujTB2;;HnN#L*MMJW&Mz_VpHKu!Aq|Z!O*Z~M2bn=w<=Wch zg@~i+GU$g$7jaj}jHI@yB0us{M6(+L5DvMFzfA3BEN<+kAGL;&FL) zoANQGBX4<;3{z(N;#*M@uTZH6%=ZC~C7H>o!YOh00$}Uoz@R&Hgrhx!ra9XBM6~AO z^Ew;^=Wx(v+dR|y(H)@!b+qbco-_HZNx`O15@s}Oj#ecP~|_v4-mzsR4!4GQhsg~nusvtbq7YVV!s+>h>QdmrAa#31`(3hMDmOnSytNtyv_pP;m8bMx@mvu$O}c zZ*q+I?Uu+~8=J>9@gY;rDd^|M$ZY{{_EMkWwqnqVE>PiEkessQV|mc^$cv#gV?s8Z zj^$8_Y})SMH7PE6`VpG%AO^LUMb`(BpEh?w+8-bWtsMunh2)!ltpyWZ)>kX6zm*iz zTq26Dn~Z!`#PP3hNUS?}^dp4FFBBGVOI#aAZNoioO8Gxg^p;=165*>UT#*%0KqPa) zH`P8F``h7P2s75f6FY-aR0BB{0v|#>en{!zD(R(Nz*Zxmi+lMd$o9VG0H0|*a-{0< zROmIXVd*%k#kGYc=zi~5{oaBk&`Age@|*(X+SR$^3_@P|BX&$)j_>^E#vm^n(!wyx zg5)`@ErgP|wxEP+4&SctWw6r8g7TmZVhe?Vj@U@%8d1eU_zsW?RMD zWWFYOkXLXUu;bavZX&#L)_F?=r+3@%#@19+VK0Op9-YXCR-C4$;@-qXS;<%M7#Og| zEM-a^0{3X7Qz^+NZ8H_)3#V{}bG-J{_$_y$)<14^CUP$KV=Q`y)F38wm)wH9vBdPZ z-0#R+36~WeC9yum4|>myl&SUN4y;^>O8>pil-h8za0%O*mpY?xgK&3Dc*k=QfJG<-^0`#uOH0 zitARw8x?apcu(U+`as;;g~ONv>>`E3I#noT_scR5(LqNfQZ@0eCWbo! zBl;dtcXa_XD=MQf7pP<ZE3!8(mT>}#`(rw{^PT%`Iu5`n?UAM!YbVL< zFNXu${dUP0MXjdJhL4x4ohh2^bZXvshwXArn#M4#5y>206-NP*&pQZiBS*Jq3MZ zHq`Y1bw+(ObMORsgbDoTcBP4p$_b_@u3wHevWOn`vWQOxx^XTROYY~QY&pAsc+G=g z;l95f@ycZHGtGd4#NH+@dpf3OvR6f8AA}5JJ7&53Z z1274X%Eo2yf;9HI&)*;+S$TWhyJe*QD8m}!iN{UMv^M`|^DOJ~<>l?nPsy#9B7-NO9&?b|W*2Zyn^Kx~k?`e*EmjWUg&q|# zqzA&NS_#$MK#nnW87|WbA*zJ@I_T5U^58zZmy}|T9d8=UICWD-*#Xy9y_e;xSkJS= z7G79&jp95Scp&6rK|PXY8mi9KQPCA($%Rab-#Kk*qo+C$cd;gv=%|fxU9xK!ywDSO zS*FceE)yx^>8Mj#pyTKk1fs>M_Kl(#SUzb}6EMJfr{6HSxdP=zy7?-!rg0<_>AHg5 zC@gG0UqnC{YUr9Ggowk5OA_0UjKUJiUF1AL%n&}j!2g+VESM()7|qvbX*YAR2K)f4 zp;8{UvKX>-cnz1tlroXI~TYk z6m>S*Z9>1ZgbR{;co{nNJ-zOk!ac?pEq-0%U6X{LQXb8M9}BE6wIL)?<(dy?io!sv z-2@-EOo({7)@3lC0{3y_EGV0@iy-2m^1_Db*W!O*vqzZr*}h8ZAM?Z4|Ip(5dl3F- zc=~Wd<-~lgqg;W0`zG|ij@ADsJZ1E4Z2#)6{GS7}Fu_{(D=>#Y*OGYUg~M<0bDlwH z@W~XEdf*XQzNZ5q3}C90>aZoN+9x-3V7DZ;#1;mAY=7NC9cYHRB4TE97ZcM*HYTq6 zuZ5Ihx^E=Zh4NB{l;O-piYcRnexjWzLGgoz6NT4-1TO-V<|^o5Q0)gqo7+*tiDysYR3KuogAsxwq0m;S}?Qqq1r@40A z7i~iImM0^n7P{=tHWAl}iaQdv<7vxQr0=h=2rB+KnXnUO z6#OL_?5*69*aT^q36<9P4XE=+BEel046(DdGKID4Sshv%vC87<&o-G2=ut%W^jQf= zV&rQ1<6N0sj5%eS!16zafC;{}4WKO6lk*WSdu+L$EU+hmun|gmyFv^R4d=>ok@PW% zOyD39_o<@me3N-@Ye*C^BCNhm>L+eYC+J*ED>qh<&@z(4m|pJwu>+Gyg*u7^2eqDg z~OTAtf=u9&1~unAG8a+*MULOIGrr233CjX8v*+O{hEHWx#wGV?Gi7*Y@bN& z9*AMoN5))DHoL(i?N2{3%}6JFrbN@1WyoD!@lXQM?v)XG{$W!4paQ=lqN+SPAY(h& zCCGSw+&?ty+&d|ae}s1D7a-lcGIru(^=SnT(qs_65pVTOqUH$rwmhVyenb)XvlZ}u zWX}=0(F$kW6kVxHa7Z}N8ywMp=~hMUsW`cV*m`8Lq10xOtuMhIvc6EoV`GSAP zRcORVZ)|Lx1VaA!hqu<>@A-d5fIyUD`{h>zWPgpu#Qy6D`06WuE&Bf7;pytHDDYat z)$$?G_$eg!6ImlCgFIw8Ou#Qt4T}&&@VNnd+}^dbeO+7fxmpM*B<*?j$A|O~yNfjf zjU3{inalI@2@hKn)2p}XY2EKq`V9V|5R421IYJ1%{p_SScw>hupj3*+%e*^v4@Y{W8?B?pQ1{L6wgcvNcZ zQbH-ZwQu!bc^Zzv-P$bSJ34?WKNh6?e8qU|q!m8(6dphhI^yyXvU}R@99(Wt>Mj*) z?RUr09FR2bDk2!87`a+F_`9MmAFA6DCLo!`wy&5#-gd00IC%hYc^b%Oo0c?eNt0=# zP+*bT-d40Mk}9KR%%UcqXLO4=`=l)*TXyo(EXi>Mo@dWSL<28kK0$SNhGZ@YifwFQ zEJ?h_M$RXlPA{hl-;dP@DTIiCD7nXRLjDfX)i0Ux5J~N4mj2FG@LX~05WNda!D|L{ zQ}I(AgC4p#i_9BGbOh0{Ebv`6Gpd~L1Oyv1lz1q{*Vk{5EALI=xM^KF=AF&c%$Rjc1=?q z{95J8n$}dS63T%}tFi44K9HC4v zJGWfAy*${evt1uSztOlZMVp-8?Ap*>-t-4mC-g*CyW3ae4K7ppRlC_||9E=X&#ym#+UA9}?ieu|K#&h;{VQ6Kwl@9iwz7&DRxVJAS~$%T3+LvrYEk zLUM=z={+4RTDVDs_$Ot+Q=lBc)fV!e8u|x

`tQ7meP#DV%h3y^#P2zJ=kk8_gFWW8IZst}a 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⋘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≺W#XBc)|ERncbbTNiW1ZGrW%SG^pLzI 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 @x1$U^oUJ`_e|z3BU+ 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

gbjpw$#%DytTJ zQX_8v6X=KRS4PiFU(9Qduu6$_aXIGoD5cO0Sv(V^nB41VW{#gEh!xm(ET||xFZiUE z1i7U~QRF-*6%W{a57w`LE^8Emj#*QBySRM^b{2z1rDhYvJ&jPZb-&oU%wQI%L)$j0@l$k8EkSaiP5xR=;a_e?|;Jb zPoda;B0HV(yOkcw-*#no zlfIz(@wZeYxb6|Y!8=>8-yUPnp>VWj(Ch7+KDkXldpR3Y$^W2qenZhhz6-8poih1t zlrPVl>DcdUSrZGYQxb0WC~=xy@rrkDn~+Co9dc(a$O=@xDy1XW|4 zYJ<$~IN{>=kIMe<6YSqp@2{@lZkF~c&R11m_vOON|9>s)ENvZZ=tWG;48PibU;5Od zZeQlR|Dl}sOKtNnf$EPE|8;y66!dDMz-MIyO%aj$GD50|k}^aiqur@GxQSi2R=HLT zyg~45SP}Y6i{0-Y7tQoWMm)^4%_t#M!@W}(%tw=)cfRJ+lb1(V_vjbxINj zlfA_(1sLkP4FM4>n6%&3VPvq{#^YVyoko4N8TO$ATxj%m9~>9G&@o3>8IJBoPJ1{{gmS*V9IwV?2ztc_o@s%z|2ZrpMlq{EXI zuZ3RYq|paYeo9IRRzcZg`zt0-Y#=V_*j63Y1lO3OZaA%UE%!IT=#`J}yI1srSr=rf z*%9Jj7u4LM?YoGGPDL6Ti0`_PNYmTq5?)ej!Mt-LmWChk?86LPr2P;`Gf_ZdaskEl zSGShLz{tt|GcnF^Z*y7HJTJyR)wG|nl^^c*o4!5vp$yEF);}q+^iX%?$WRn&nCr>o z?2WT$^Kq@!UnRi|x>cV>!Y-;4KvALlcquFGwdj$LJ^R4XP769L_UN4d;jd3xYFqn( zDLDgg%9)1l8kpv-Z=w5~V z2|leHS2OLHT&5-qlPPXZV099bAo^G^+v5(xSnL`w&e9I0%bo;po4WUp6>gEO`O!=x zaLLT$d>^X=>qzPOm3PFsQgku8FT9BdTLNoEczLgd^6#Rpdq-POU*%%lA;yaS>#}yPMRt{Hlo&JUMVp35 z59*aytn)@Kf$vqT->lhsGhyqQg z5f{n$swFWHF?l%-!7W6f9G&UesFnjH$&OllvIuAe5%OI=2Wc zKAWZG!4P}mUM6FTyheW%$jm-pMT404=s}|Qf6SxqdD`Zl+zYrr8i}b->ffGm2P(NL zICoRtL+hyc_i9^UP;NSA-TR=0=Bz=KN}R|?qt9g#RnO?+x*A%*kLI9Hnj=sflI9xl zSS9`_msi%#i>9GkS+aHNy8To0vVHO$ zf2#w#H{x6Zlzh(#li$r4%x||3NhjZcn2qw8(vNKKh>7hkgW6Q5m>{?k^<|}B+^=uh zPSpX{uRIUEXVbaSPGa|31#v0ZXhQb_J7$uIS&1!LOr&9E4E#qKi7F&5NM=<#YYPSy@Nv8MVYB0(2ojJnAj4Hus#JGro!QVz@@5Kfvi3%BgcYX=uuU28Z!1vnt3jh0K8w`PQkJxdSOM^_paEsVcY>W0-}0 z3E9hCLf=%RVS@B6_IDSW%&&%eQ^b846A~pn`m>gYh}WJp#Gk2u@jpAV@HcVo{_)&a5M`ee6V4`=vL+ zd4?KF9&INkl0fJKZ~cPu=Fz8{JTAjklj!@TC_NF;d+bAA1w7$d)pgTw%oGV4P0X)~ zF4w{wta7y3w!h%05zKZ6)Z*&fhlXA}T6#4&qer3xDS46#-tm*EwT*cr>KJGC z=cPicatA>x)5DZ0YE>$pdCba>dl!&C%6Bz+#LH!d?mPm3nh5d=AR8&#K`c(9JS2xi z+cZRp%_^VKAC)?kZ|u8hc2H4kcUe)L8Ptcks?=||9xI-~y32R@J%szSsJ8m`LL(8G z(t}%7yMjI|JkYOhcwadl_)hAShWva41~aJm1_^WtJ)N?p?qp2abSjv*oy#W2bf}UT z%9t|P?Mlif2UNB!1~X90tI|`-s!*&OaY9(JkRg3}*&zqI`qM>BO+7SCjjx-=$1~FE z%#Bsm`rry*s~eb{nL((>Y^d()9jUl+=*!L_*Z_9Fg+eD2`}rLHklF-6)me%*=9Fg^kr$pcZjDW+@ZR>ZWInQ((VT-lBQli5F{9 z(}TvCNbRfZ1s(WtCo=kJzP@{k9I20>G8W{N)7=Q|H<#eSVUO(xBa_JkCTHX0vNz9arM!L4*GaQrR6~Hv?`4mB#rQ=3mKMH0jgT+Da4Pv}?@It3N zQ)=JSmEn%gnF=L?xMxW|$(e5Za-67AV-lSF{p@E&6{a50^Y}>JikBvoixQR=Um)mN z#;b3YqcJIo3Fo1OUm7dUL#PJM@_d|`Q`nVifd zSgiTSND!83wRk6;8|4TdAFHIy)WY7Tra*aaf&B^Fb=5dVp-PjHuy6JFiS5tP1| zb90GFOi(|gTImV2MkYs^I(gFJfdd@FV)K!h9hi7A%=!gse^U15!r#l}Z4Kul6qJqt zJ;=R?&%kH$r<9$r$l1esRJ`_9OxSQ6^hna!m8j+8t*LP|Su^Bzt6Ec{8Pp>#ijUINpvzU zMK#=gK26zdBqI!V{w!Q4>725za5N9!*wG`UFU9u%A?=;pJNvfn!PvHK+qP}n<|h@~ ztk||~JC&qj+o`1Dijz*AbANrlxBt1fyPs$87qHeIbFDqcm}5=}nvD_Vs!A=)ZR{mGp&!f`0rzCiM&=#3q;q4WGl^tde@ zUk{lfg~L{0<~mzk?N*#A1k(U8LBKng2WzGe0?d%SRXGBj5lL`FJzE^<^_KP1FY4tB z15F%t;Yg5Rli5tCobM9uIPAif^p;3aojwe`bz!KGpq3=u)Xk7emHcA6{4qF}$Z{(L z;@|&Zt+$L(19JOuE~SCjv70@3$gApL#vBK=?1(7S+HWEA&u4^2D(aMpR>4Mw#u%sw zh!B!d>gpB@C~K6&%iF<9;B(Zri);A5>npp4YQR(YzaL6mQPnSN_H4#8)MM1n_WwEo^AZ*!cMs73HFS8 zXvy?k zH;i>N_?V?O@{R|jV|KUmO_&ED)>snPd``f5myZwA*62RqHTyE+h#m8u-W7IEc)Y1!bU$Mutte!gfqk-M=10&jNfWk z;1o#!fI%}3nHQ+)jUm47n%tc?2E7goWy4sg>J80o&&cr8U;ur+YE|LAX5F@3)*HW0 z>9h0?M3c2+qs%2e#^SbxrK;o4Rh>)y)Sug?pzE)Lo{Zwi&~=!=b@fDXBW>fqqO{5N zD|brSE(dr|8!S4?%-=K0e~bvBJ(^_Y14!CnD`lTp%a)=1kI@v78MxMbpW-6oNm?Oy z$l=Wv8>?>kla5CpSsxqNA3-w@KJtQIMTf^f$@M6VdA5+7)&%6X5OHyb)zB=PJZ1y+ z=o{rMxXrK6x=HOJsd>EwEZFN2XCCK7EME%BvHiqWFrer;MNUhcKcc;$qNUo%@3(m7 zVmV$6&iDJg!|US_m0;yr zY{>a&>U@oaKgKhRX2nb)wQgmr6FPT6pTM6|%RRFr#L%EC&Icd)PjXpv$F{E^fi|>e ziG#&$1$ebQ>Iao#LK69`U{IxNW)S?C>P5pQDm9dUsBaz$YsT=eGG4ZPy*PZ7vm_=m`Bz9#HTWR-HJBG-4wkiQ5^$xdGRKy2YMbE?d>aHF#Q; zGfNr{ZL5J_&3y66=nfYx$}^^qKBW}Hwv*_&&hoPUks-F-=1&&tUVIh{ECyjZp5#d- zy9es~1BNoIY!cy!`gYCbh~R=DBcqx7LHQ+;I_l(0sLBT;o0I&Zw6p&M!O5nXQGT0R zvv-s90q2woSm#%KHxM@{5$^P!s))G&cSnHrE%$jzLkP*}=f4unf5PFv14TKj?veb9 z2KfHvF;)Nn0hE6wn8FUO)?}(~UUueYs{i(P{g=M3YHz!sgvH+`zcb&gTejey!_#7e zyH#kqtBWitj6sDkf%U{J&uA_4O*QGqS)Ym(Hr1CVp}g;U)yciaSr)i?awx!fa!B?# zHe0s?Y-cJfiTo%te$cB&FkV8Q<^f!)aAOP{k9AMxez1rE`jHs82KSr*D~QjMtUf9& z7|Lg?bsoEkSc~2{*p|(P5b~K+Fg&u`Otb?nme6Zr)n@l3_6 z_B4n@Bfv_u$&L$UE$5*I*0TU~g0r`om-3Gqwy443OfZAP(7>hGQBzI0;_^~5o5_M{ zL5caPlVm|SZI&1V!NfDlGNb5%Z)nA$C)r)E^j+_SZfM|wE(*n`3T{~5Z}LQ2I(#d= z)LWeO0b>v{KjD*)O!7_gqhN-%1yji@Fr){s;(J#Jl`DZ<%3ZNp!g6G7OB|Pz{C5`m zvP0Z?1jKpFakk7T57l!eS=2`=qp&+CV3-!6O763Z+HDAeGh(q>j@RL|T}>gTt8G~i zd&_glm-4`EX7iVFiwwL2Y0uTF9Q4FRovTe^wK7CFq0G@brGIFLIv^+EtT=nu_EQ`+ z+C1alUf~`mkCzSei~q(7owYpl;%;76E?!Z};PR=K&TSbmcu zQn$>0lT=}$(?j>cNte>yn#W2Bq=+1RldpaAZh=`lj5@t z-zN;zrw!W&-Y1{6<2-QHx%X(Jl(JJcO$gXU+>4j`6Tfv$>F}fq^27@A^4srAUhn2Q&ds~8D(}x5VTkSPVi#fPk(6P8)%c=m5%Cj7B)-@@Ys0WTLqJJ-Hr@d(UL=5g7OrjhAu)A{Qw zY(d}dZIr<_kmJY~2NoC0D-mgnoKxI>lF0ao&6&D6V7j=Hgz+PUvHS8BlckJ@;6$00 zDT%JPDTa|`)`rQ+N8=WFt2ZZ^RF-#nZwgrayy9)D_oN-%kS+a%GD-WwRoT=9L~=$$ z*X@tK3P(Vnl!_rG2b&`VhU%muhmCb0Rq^X3E;~wY}tG{UtUHn6f4=oOxVvS7% zjL!q*c|QgfRJmGU#kxH3vc1Ra0g>TCpVMT!PsmPOe+DcFXoJIyCeamCW`21fHYZXX z9QqtKqwUNXA}+Zgrby^}UA}lDP2@FdY4x%Sg+zfov%F=!Z6IE-?d=r8i}XZh!74z6 zS(S$aN6Vl{EpdG-m*OEIb)Hm9@R+tggRie9>@0Nk5{bdmX~l*=1lml7owE5fpCz=D z_d9A-L2D`EI+G=|-<{>Pl{x*D3Rr1 z4Q=i_0@W_cb~-1~8|AB};KL1A;_t1^>%umwL3jDG*HqalyJ+1*;Gg7yz@};_DMG=; zU=(j{V4t9dBi#ayB?S7K7UOCRPnlq!u#QR(pQ13**AzbZccy;fWB}M&DJIbPu7qzf z4Kxrd3?c?-fQWg8GC7dO;Yw^z=J4TcING*JY?LXJWPARQ4q>e_bpcYDbry2_0i$c= z$c~Er2)p;3OeJ@ASTc+8vz!H45f&0 zgB31iJ%UNkiEGviTqL}`l{W?3Sd4K$f?M)Xo5Nj1!*5u}aqo^lK3=+x~( zQ~^#lWE>o%h=1Vj&0lC-R7#gJ=g^Y1;O`PFdubYUD5ULhHy9f5?I@3zQ<(5h zNU6LK^hr2z^kXAO#p1%_;}t5ARZY6mHBGuE7KP;XNe33Li6fVkCxp+D;~FrL6h^JT zV@HphHiV$0(XULgc_$$f`zc`waMflW;v1s2QZ{_^pf4ql)F1PZsSebi%{O%?p3L`F zmZziTz$p*of{U~6{AsLM)IdqZDM7FA5bzzP3pv-VA&bm|wM*QD<&Tr3qiIlrs9&Eu z(d!YUI^H-6#LJFH0sCI^gkq2~_l3&7GfT+QJDkMvZau@#!#z0E1*h_36e!|fL>V}- zrizyc2ZtV35v!z1q@YyN=e8&;b0$y zf(b^|aU$%1`3+MW=?HlWyLf|Ly-lH33vD(PAtjBrD>oRUeP?r))|gyI27_)J{~7kc zKA2+h*pnSbO+a4go3(1I+DFq>5Q=R^8MzF<=th2Axml=rePy#Wv2ykrYH;Qc^T@5q zKT_AmfH3SKSneozRN)1NnKBD80;PM`@^+J`eM$t$W-5gjLL3|c0VfSU@=h~;dF|{T zRSXdIHpHT+iXUx6rBCD3-K51$u1y;IR(E;~ZLpHz z`r3!JGA(1!_Mk=ykV&LObPDq)6q)1_9u5KOP>?;rFTc~<55%$aQkAv9AC$ID>#<}K z=SGz}Zo<7JsB^fJi`->qm#Hb@jh;<+JUjIzORzIeNb7VHIkbfEs#82}&5Uaca#547j4UTsm80+W*GCFBu{C>K_*fjMO~?1Bq}d63 zwC!l~?=2MZM+h-aat-L16gM2-HZT|*?CdkP+0S&U50|>%j2s=H zA=<=GrR44O8-D5#qP+lb>OxYX_7tcN8j|5uex*o?sM5C}&=QzBAY)CDY7~=Db6%P~ zEhfA>SRNVdJmA5)VJmWp6{Mopi<}gIfdL;QG{CZ=h+oKFjieXl<`>#c>xF*Gg;LB# z0;Au`x8i7^7FB8Nl;j3r)i8Q*Px78*vYtcC%^rhi3L$&-357HjKelM^pTaW{s2Pf8f94l_elg?3iz54L%d9+judKsNjrr)KOrgu`hJt^La zgVi{?>5r#0M4Ic7W9Uehsz!G zr!NfE%(pr8lMwm_9k)5KrkSblGG7gx>1`QHDNPcgUs{}RL=TophM;=r)fB}~FAbT0 zJe!RX*F@fH8w{3=oxFmb-Vo+?|ayxeLrtV!l?aUE*5kTlRG z^^<^X(c#WW>LM*>bGkpRsrJ;?<0No}Hp`4C4T~G5dvQRAr;jTz>OT4cH!jq6 zS82}?7mYc^{C(WpIZ6AYC(Ilmt|>dzgwj;O=E>VEue*`pjbcThpHWbqO;O!|W{OE_ zm%1i9(HnGENT*>yW?OrzdFc}q!!Cyy1nQH$+xh-tI(ws+7!s`TmU>p{Npr13(xsC9ZTea_>xkmLD^<_R^#R9G*#ng%W!I^lxw!2_=&@*7)Jy zMgo|&N$Gj)vUL5K*kJ$n4|Jnw;GfIyD@pa zf5>(7tD;}D(@I<3fVE_Xnr!uG+ssXwqAEkshk{|C;Y*L~E31z|cpg%R#>Q4rgi-|C z`oP+nptn_Mk6F2q{^5erc+GslUNrG-B0O`yc}hP*q^mAi0pFN^=>7Nzil|MW<4j?* z1e+gP#r@Ta`>dVM8U4yc=tfg)bydBc>*xv0DF6C%At^!+Wbxei??abyt&C z2&Qv+(MN%mR+h$tK`2O&X;Dw%HSu93RftA{F(MGxE)N$lW#B+CKm)vO|5<6-3pE$f zG6(YJt)Tku9Uze8?neo5@`l+CBrj_)6a05n|K+hGPh zz`KX+{GiNb3wkfaJ|Pm@_l(+q(w_)9h&wRth)ML2O2h{N6TpQN3N_e{%wRKQ{C#)$ z9r+WFD=!p3@L1bv8n`MG^wCzy6(^d%PUzA|_MwVMeW1)(m(sDptkshT1ipJEf zHYNPu-4E>ZYvV|1Ihbc<~O$D_O;{<11uJW*FCT#q9)StE=;I-%R6ZUs9* z`|;C*mpKY%L-;uiDEHje>$L?7-2)kc*Boo*86=C7v-t~KyME|S$2Z8Qg+)N3tu1cL z&46HqDv{|aBoaE?tNiy~ZY%jAz1~}Fn^tmy8h1AZbx92$E9>K=vMlYQgz$;b=fe3sUjB{aMA ziEzI&#yCc7Q1uCszg4x1%Cn&GPw&afLtgYk(f`DusHWW2R~qUh21;WJ;G=`%9O}9$ zPt6J1x+dUD(&BZ~auLILf}jI+77H95Mh>+=2dsHLNdOp89=~A(KN{oWUAn{cLfdi~ zC9(H&9weeBVR`KYN!EH5!ZcI!6><&IYVLYCweP+&JO#iCoCcLSb%vH*z>xQD-rCSu zIu6pe`@<3-W8Qq~?gZp=7Kq}(t-pP89DaV~WYM2=AyF=L{_Bhpvw5I~JaUKyrf=zs zozxXAP&)<(J!4TTX=3eaz@yUb+ETf<90+QjJ7xoXh>)3}L4qGyF2D+FC~>E*yMG9J z;Sd~W`@b(;+@{QOc*jT3aI0B~E&vI_5`18VJW;vbLRpMa;T_Rr@0v0VGQZwH12A*@ z(i8_FpSbsQ1eXONAon)rfR`2p_oxCC@Uq7F;o=70uko#pE34&hnwq3D)-7fZnl;w^w+=inWip`w|q<`i&jKSyKlJ-VDJ7i4OCI7?P;* zoEY^b-Y~K!?u$UL#@<1H0vT^2?)o7;j>UI=68=?n{z-NIhXnmwKzrWqDgOP7{QT=7 zmj#ANJ(O^8ZlpX9n_hHH#ZW7rRSqg zTrB$F3uoFkyga$zN~JLJpBY>Y&JtVWUoqA^s7+Sdyo{UDv&32-WzbdQP3i}qZua7j z*ntT|Q7VIA)^_P}xkRu3vW5L~iT_#rUk13Av;eK@YtheNFZ=&$@iGo(*8it{z<;${ zNQo8xYnK%Nv}$RA`2)qUc}{c>QJAmv<(72DDWxBZk*f-K-2>)JPTwD`fu5i|JURO7 zmOM-!jWCr1n{Vm^mw#PP67p~}*QY9j3w1C0Eo0Q{y8hDYQJP?8aXx81?F<(thbSnO_1Q^Z&RTUzSKaMrj8(^RMw$ zuK(6#Qj(?|7KG5kKCL&~o$)hMOMixmw4)^@n<&w82ooWrQ>$dEkxdq6+3d@qK&~M4 z{=BB*1I}{LLT=av22c&(tp1Fc3YyNI%D$U^j(@*=O{)V!s4o*9p@$dWTy}!=WT)HD zjmn{FuiFO>{%G8`&Lbe~6{z9lg{z)PsOg9!bfP?U;YFhcLC2n-r5l6EWi6IDVhC1o zeGM`$G3GAB&V2}3+2hY*v4vkb^hop8K%~DK)q3VE!qsTPJ_)&297a#&e^ta2fh9jMv&hU&NH3|}KK~8z9KY#;z zn-%RiWm#g=HoC3ANluwQkEz;Vn>?Pin)f!k6#{#rWv@DE7t-D@o{lagNGqbqlR0 zpq6W7nvM$C$r3VJdT-gJCgc?oMS@~ac?3`WdCXK>xj|0UCsUgE%!QOixXF>a89;#cZe!mTrz+V+xrOR2}QK30Pt%x);ziM$)B>YV>Jl>8HK|3Tv4xO_ez zeE=W<0bP=Q$<6;eB$|DRGHzc})fgqL0p@03#u0M~M;CizxBpTLwY-f~SG+!RifHw< zd;N4dMmZ3`g6R7C1M-c23}G?dkQ#}e3!%Wuwu+lgB$`3FX*Z^@{Uo=~G?QN_w$Cgs zu_cB^!lhJ_`M%WbRlPOOzh2|*zSe0s-P)?#MhE@c>sm*^QK}pE8b0&;E zXNmTz4?xiG;v5aD(0wjKZs2OnYcNZ4jtF>SK-_WNL%fmX+1?Gm`t@X*`xz4dMy={U zx`>$mLagdPvuMclKwA2dRMBU0UYGHLTl%paN_cPu0DLF>%r$%iRTZ4OiPyfrPK9N7 zL;ZC(EBBtv**!hfcYR&Q_lDc|j*TdIvWLm{)&<-0gh=35aUkgR!AP*Zx7VltRe5K= z=d0(k=PRtIFLF)fZtQ9dZr}+mzZ!{xfSDPp@B&3CXu*6$@)DcnHa=Kp~LvNrj1ZM!-ibHTmV$b;n-181#k7WTP-*8i~}o+31N z{1bmbNYRQ5pvs1_i5Cn1iV7m3ONJ8D67qfnU}8w9;UG7($s z+?0pvdeMd_575*BAkIm{Uhv~`w5pbKWr`#!6>8_tvf9ouegCZTRCa3>11**_@TNk! zz{B6hjd^%_46`n&=U=}{Yo1?1RLqOgKlU#|gGtFK!_Dq@miGviXA0&O(GwUzXco{!O7}n{ zEf9~YM#hD6uV{LNy^kbP_96L7dAQ5YW(l=~#xLofDj>_)n zBQJ{LHW_%bO0TBrf-8$HDsUnicX5%MZOcf@>wo#A2THcAzO=Qt44^4kFzT&x^%-$F{?$;mWl`G z7tZQ1W^#`8F$Z2$3`M*6oV>U?Gc-bcLbQt9k8}oh{ZaHXTcarJZ$!<4Xz?gu;E7W^ zDtvISq9G2(Mq%aid@`Jts{X5;`+8f&I{r?s5p`+%))QK@Pgo`b3b+w_NQjC!P{w(I z8vrO%ElgNA=Nc`ldh=A9sKBiHtouH`BKV7e=`by_TGpTOxbO{H05~w`D&k5n`hHsj z1Kiyf9A#T0B+;;PQ&5M2n$B`gv0yEeh!VE^cu)2ybBMQ9+WKP}IHqBj3yxtJzHy=v zcpsT3xCWJKmf`SW8_{axN@zr^CpH4+YjOgDp#z9ssfehS!ZoB{*W+ka-`xk1evLqg z+8q{%+s%tt5pzV-cdptft+Y=gtsEGOHb*0fy6v-x&!C?NFm%FgGCD8~d(4YoAZMMj6Mk~(lW@rIR+pRRW?t}2=r+oryXO@1^ZO}?E1H-*xaR26xT zN^}v$_Eey8?lkOP78PjKv*MiL!K;$@%`6D$KT?Cw>l6;(K0c~$X}6m}x1e1%t%5ff zdokwNZ`)gM$Nu1buBW>*<`(>6g6ORNK8P-W+#W8~`p{v0<@V$?!0`io{=iY)6*c)!k5Q{*On)~g%8Nueurqnrlu$>^*c z16?vN@(rtzTLMpuMeDiRfhiBKcKj*DyG^9%iZD4`C})C&OM8}bImd!RqlXZgnjAOL zBqE2NPVmZg|09Wq4nldElWSH%{%MS)1ZFGi@J}HZ_lHlx2rwMJ4VLR2CYC`fW%n$V zNS4$ThtjNZ>_{sAZCXC9E}IX8<&F$x0O0eAA3Kx;d+D3@ow{5VD;vWE)U7j^`8EsW z!6GQKm7hk1Add?ZK4}Jfi+vb*iA&OrjK$lYHkI7MWaQesu>eg2z7X)S38n+sL?LCQ z0h-H{h#N5{l})LI=(O*$9DG=2g}t(Ce`fIVE3j>;N9b|vrfJ192Ro)qS&7+PXw5Nl z%g#g_^>oR7QEf1r4AK%X{M(L3Yg=in1>Qc~p|rbIvIOQdQeLpE55eo%Gma}Q!Y;xG zZwwWOIMq23HYxfqQH)=PNVc)ZA&+o&+ttige5*ar<|lflP5@hqe8T`&IPGm6@p&7L zIvmsSJ#J4pFTRubf`F4jX0#hUK8UuoWO{7T3eBn6%IyAZ=;T;q25jcITV}Oldn*Zo zwQF^&eFL*d(s6W2Ws=^o=Y1}l5okKh*?eifX!(8a=IHOI$Yu4C*`oqCeETMHYnSYo zQfoQ?ew2PU?NJE??JyxDc@8SngAzU}kgRxrC^s%H1CYTjmDjvs?kJSpAy)WK`0M!P zD{W)Ho3$=;1wLPnCCD;b&wCY$;)nbUn(34VM6`RfXq2v<`~G2(uX^O(L}=sRUC6N3 zkJY6_6p+lqxGjzTIl_E+UByxp7MjSx5jtf7BOd{M7>TJwJ+r5CW)Lc(Z9glQGJR@_)J4G92GG#k6MqT*_0M8 zQwB=gM-(E{#M+Zjt`YUnnDo>l=_r{Ew3Xu2iQE*l&%622sC_1`zd6c9)QYNe6 z?2b#4YzX|)&eI~{_w>fK79QitZ+;br=NvzzN$c%jUiw6qF#P#eWoNm&Cvs3Tk7i!B zuB!id%iOME>&}>Fy~8D~CtD9v6|q9YRD(lGx4X4?c+cEo8R&Bq~{gytT<88G+*rajky7_pLYa-|UXD=Ii?s>m?>c>)CYyv2`9hR4o@6S^WbmzQRRI!WdKS zq#um*gq>rGu!cfETU&$Tv;9$)-YSE3><-ZlW^x^KaK>(hR*b3R^j~^Wlx9u+tlt;3 z$`xz_ThQZ;<9OQ2wl@bM8SuOAmnV|1aHutiF$bwJ3xo{9$z7P2r4V(@**#D%)7abf zm-iI3<6o`(lsIUVQomc*94dzmO6cKSqX`pJ%TCcn!LCb{;7f$uB&o)40zKbi|`&G!idsbHJ+_y(wU>ws4uo%AAKt zVLEmJcRL%>>qr7|Mn6A1U!>$v_%Hqq0wPt?m=sZb@xk=++p(5OhG3 zu5}A7d+YoQ=YFX>;K5DMY8#~{Rm2N)M?X0q7gXRJ!T_ixwI#(tatGV)_N+Ucv1$2$ zI!8`PXM8G)N>-Ozl(R^~LAldjeIBWMHLTdt+=W z*0?JeNGCouwKD6}Qh~V9p0c3ZI)Kkv=V2;LsOx5_Qn@QkyaaRG(#5Lh*%_gI%GxSt zMvrY{d~&91rh(o)g8U#e)^dP-EgJAtb7z8dg&j#%;lO)J&Ej<%uP7(revmM#r_)RN zcsSzAZk)SsL=uH&LS1q!iCP6V8;8;P4MK6~y-6Kc?;Hdg+-aRSLAa7HnN3UL*;~!B7%K{UQ zC*07DkIoVY&H`Mw8DDY>q%kGBN+cMBAdR2X4GVhf05=s+LX3Fe;Khi(LJCkL7(u-i z!2AAq(EJA0OD-6>atI0#6$l|555FmWWAmdS9GE?_bdvVdIK5?7rXtjw*)n~hI@2qh zDQ}!gPMH+TQLDH>>fkCHtkH7%-oMuhBsk=S?jU<(>LW`20MQ)?E5?0x&#AiR956%9 zy1*|@h{|?TBG%CuGj9r#gGV-27P^m$7G+qxf45loL#{N5npx4hiafY6I~hQYo&1zI ziGEHx>FbeI8KGubz6q8q_D=2Af&U<|W$*b5t-chI{fNn6AMmh-$b0(7r-h}abPXjt zL_Sv}kx#x-KoJ2?w5J$1d^z(dM8y~KlD3S_S6jF_;QSf9q%^p*una9g^)-8kb4y6A zv9Pvn(`ZP?M>cSl!a}rnwk6SFB&FFN1(ROY)7f&$Ud7ArY~jAa)Zk(4v?-$e_N5uz z!k9m8&M~F*o=P2olaZU(%&&@wwKwNNvtHpDR4e<6>*Txzef#H96*}F_)p?65jOPQ- zEvSA^vbcVaLd`F>PK8R7oYZIYq(As6Fm?Ho>LSuy>V@9E8I@MND{1eDf4SFxk{SP@ zIsOuERnEK1IbVd^=U3kh<^Q)dhq0^MUzS73*u~Y{<*P#aZ&j+Lm#~AGrnQ-y)xT+v z8Z}+Tf3-8%YHX%c0Y(N#M{1!@`&JUkK`~Rw zaC4-#d#Svh*(pNtY)O5aydFtavm>*X*9y8{?M$!`7+f1{u49>3a9S0K{-fQ7v%R~8 z%~|6~w3{l=gInlt8B5XPG%q5@MCbU|z-!8la#*;;F$HlAY^~e^+c{_aj^PAFH!%J@ zJ#!`(197H%bUe*!HqPZx|Gc`Di3P*!$?o1sU&*ys1yK$BN`~#x_A`xT9kA$}{Kc@M zL2o0L;&`ab)*T%?fxSDnoJ4HA=T5BFf`Z>N( z!(Wv!x+D@kr?=be;jm!Tn$C!&?kPZKXs3_i)nqt`ai?rP4QGI9Ak%vo@iS`} z;@VCH9X)mfZ=s=6NcgB`NVD*>3)vnBS@}znWSlMWr%(huvNgouL*68Bu&3O7fn6-G zQJod05Mv=*8u*1wnd15EerX={%#(ZZ5ldA@35lnpIWZj}Rn525&1u!N~ zEwr+hm6@Xu1%r{d3#P&-*g~Kt;=x`cBYZ}|dWj?qAuJ~iEEEv|FlpG$wp5rD@!g1K|ohFx34)d$RHU>as@S^&fj+YKl7 zLB?7s)(E9kQmJLaVH_JaF0!r;yk^h{U`4*&%dd8a$^i? zqLM0$>rT@`yC^^;M{39rIq_(!{2war2Q9t&u<3rLcoyp#0{~QpkV+~`d_V0kQ{mUe zP7CiV_aH?1cnyqB(H=VQX{rQ<+*;eITSG2kPR?PdE zoUR2(7~8Jl&Vsd0!R(;hq<>>+pXor0KTi~vxAB;7Z!k=KJAE=3>Q@gN_9fgb&5{LRm&gCCU<{#@f2`^?U}mMj0NMn7&OQHzdNKvqDNVdkSWKVoHF%6f^2>)6Arzh@aB zoTXl#*u%$irmAzE<_$pD-wGWNBpvA^nto&&?6b*KRvkWFM*Id}Q#7W%C+w&Z_SJ#CdzIZ)-_nr@LWetE0oRY6zY+A$IQj1p)DW}pbNJ=gI{dQXi2Q%NUH;9Xll_;{ z)uX!MfXa--ufVZpj=Dad`dXs*@-u7-q%uUTu)A2S5)B}Y4!yk@+v42PKwGEk2WwCc zhCZ8REQts{WTQxP<-a-2YT6jJ@@HhBlkIe%$sWF*;WR8B}mE=PGHPHeUD z+xk2CTSysc;vvse@nrTEuY!ub7)t|-V%R1O?HI|~?cnc)(yHn7jY~}Vu#`n85d<~k z4w;IXGli@4yj!x9;l;Kvs4UfCSA3LN$eLlklEnDhKh1Do%8S(2eSc| zwd$P#j%t~|g3@+Xr=C2(hFScszT+*cRt`NRN4<DgDBbCn zQzqx`GrREG(+fJAWcxEbCFEN5;m}?LOh>mzGjyJ3#5hlc2OG5Zfe6i3?I}GqD9T31 zHfLfKPglJk1`ewpR&vMCGp7cK8vS9(iX3aL@mcJw5M7KTlUs_Fikk)ps%V9eVdd*m z{_8i|l5;5E`!JoZST0>fnOrQ3;sopM$TIY5S@j`~c8^Ja={7x`s#y+(G5E@aW^*TZ zfN07~^#^=M8|C;))EHIE>2#23vS4mtYU5xIY=HYWHc3#kvDt4x->44gY=7<^ z4G75bS}L6Ukb8aka}SaqWsh1V%T%8VJk%KpkD3KXd%y&>*_C=_?OYY#aU7CDdr6$< zM7ucOG6PVul=3V-aK@(@aAG2K9Il<>A3L`q=P&!fw^m8@sm366OEgY%d7f+l^j`+n z>+LvGpv^u)BO{K)VA^!Xc%572p&S3N^ zGfZO$;Z*S!c>yc_EhCPQMmKw$O8*RU#$b_RXm1C`1+9JA`ZFw(>-|!a)%rTdu(bVX;y5;c##mVZy|Nn6T;t5`OgpbpHKNWb!o(2 zQ|8nB&RdBl}a}=9mDny*4%yq?Y6aCj{`?!HE`K8ykX>u zn|-`I2Ae?=V(cFGyL$ZX{cU^U__5FL8NQ#31=wwmUvT}V*XIX>GlVO!3L%&i;T^C~ zL@}B)czpomt+`$7u1%xTkI@JGoE1QA z!gS_yHQ!j?Fl%TbGNY~qgMjUE47#qVN6lVNs zU>88)^e%>td}j9JgxOlO7OLd98G9Ms0C^Q*~U^d%$=4Yx(c&Z-~9IE?94Pr_HR0qmOl0Q3SpEO0Q^rJVMK-ohrIDk1Ovc_UmL<{Hvp^^JSi$5ILza%UIG0evm zGwd}sF4mabm?ShGj~f>HB3=gT7^9npC}JP@-j0(lN!7*HWi*)H@mPf5IZAR1Tc43gnQLBH0`$to z(Uj^a0Nd5k6k4$q<5CASnN@%>=63l66iGuj%x(SVi$PCKh~>|%M<}sZZG>6Y$0i%` zZ&>I|;;L=X_L=_|XYUkc*|uzfW@aTSZQHhO+qP}nMx|Y8+qP}9(zf+-?{jWD`@WxZ z-}_i=wfVJLi!nx@5k2~d{?H-#DV5dEGprrAh-ujL!rwgm5q^iW)e@J9BUUEoC+7rP z`4%*=NBXQAhN|r95@VXS$L>^v*SH^q#k!nWacoE77D(HAfMut7i#*LA0D0ao3fpUj zT%tng4Q*{2=*3qZ8B{yqnGW5cb>v+$>lr6ir95mIL6y>nT#gYt^f=>EqFCm8+*CjZKpgxqp(IKTk_WWU8M|3^ucva`97^0&6?U*MRe>TZX* zi2l`itY+RAk35V(1{V({hbwLc79fpHHxg5mG!kEHG!Lg?N?45zqRvo`+#AG#2E=W4 zBFsJ)_y^}w7*hNUExwHv$zx{jEz`W1@qPVs{=^AwV_S1HCKm#6|Hkv`ZOc`+{q2wC zG!4*-e|MSIrLvvWAjU@dAD)fsolc6a(5Lce0G#W-VA!%}IGp>Peuu9xRNTQ~B`+-4 z(q~|tWUAN}y{{_G_!3cMt|Ei1#3q>GgIn=dFA0c`2BcSXcaM&-c{HbRL`)qWR!8oF zs_8PbLBz*R1Yep~@gC)7rQGT|kX$_#1}_<5MxN?Fkk5I*M@U}c5zlpCy1x#6ln0lu z3&t|4DW609eBIc(ESa#|?b(vgqrn$QVNROQtlc~5W|NyHwDb)~!#yH{;|ozM;JI~K zfH%UGbak!7^c?fdWExHsJsxvrlWAq7;&d)KVH$~lqLZYZ<)1ip(4upe6I1V;N<)(} z0%=m5j;YXWCsU);8P798sASk6lRB<8m2?h5Cd zbYz{>QlaC3lfK#&-oSUnvr~6)({u9l^km@1kTo$7B%BrUV8TvGY>+eQ@FKtUyPYEAcbW-q^u7z*v49S+BE()C4 zIY>{ENArskZS-~@uz%th>^5XVm%jW+)QORFmtxKwdm;(ADT`BcHP2kBj!tVT8v3rs zu3W)bX8P!|07`YfE8Ap9d;i#ew58GtsSY%_YE`u0>`_9$#c6(_7-Z?9Tv;UBn8ky> z)Rfp3)|>93PtCq=nhcHP&ZcT1$9gKxTinETi%d!ltdvj{jqx%^5rh*s=Es4(zg%!( z9A(pkl%|NRyVph)S}~H$q(^CD1{oTc$MBfqiSpF7C>GJFbQ{U>K>2XU$wfPaZ6m_Y z;0223!=XSnaUk?=wf@3oZvhS$~=woJPm94%5ixq+G5@Q=Gu}SPK>Td zm=LM{r)zHz-kEE`cd>p)H=X|28=&&{=z|%>se@rC#s0|Wa4jDSaNnZcBRBDWTB2>* zgF3`zGdJ{Zgr6NeTNn(-$$+no0o!KJ)IP<#79H9-FCAbJ`=6aX2S-lL6K>S)WxKG? z`2oD<&y1gWyC@wA!S+j~3;u#4OBy1TWm=B{(PLiNw#0Z969M+2#O4xHy9-?+>9_8uZes@5j>*pR@|n@t2EH*gXH}U4kF^o@Z(8Y z_9&z?Q%!D^2qpH^!b(7Loq4LZmaktYvs#upnX+K>}?l%QLqd9xd#~{Wp!CgtZs< z>pw#+pSv|lF1;XV%+>0eB$FP|X6k2a>F3Fk3c3!xxmTuKtFgTvmk9&PX8`?W1T1G_ z9vlL0I&iehuPO9n_%VH{+f=WkgR1)YtFX!jq47%+P;obxiYCE`JWK4fj1o&>fNkC?nkYyU}QvHXB>y-52Dzxd)pb|i|2pYJGTf_<(Q&4 z!<&vAj9@v2w-)*~S%tA_qtfgRc5f#Nl`uSp7i=P(^r0TRN+<~uKU<2siYsh0y#b@jb z+ujL_9qKyHb;_}+@A@M^lyfr%hWXFMt*}=lc6xq4?rms;x)#Ds@Vj-Eza8FrGSw7} zGt8EukHm|nm^ajCjpicdJO0D-T%NUQYRK}m{+@Y-;Q|IhwtG;3<`H}o?azt502`gsATRsadM@78ttkYh}iOLFxdg^e5C(k1`~jV@yxhKZItP(v>`^!})BKH#Cx1>H%pJL2DR zOE-{aa6m;jc?1k9c~Q2Yegp1HxRhO)*(gGS!1e)Zw^(h?`ifX2-p;K-4~Jbq4PJ?8 zozrVU)A2=lN74sVb?5pOllhktd_K*#*19IM!IqEY?%yofMhA^yHv3}Dpqzs&Ys-?Q z^0Q);!|L@UpV3^E&a=b5xqRd{96>~Dh-rrDrl22D|_B-3)3W}=BAmeaqc}bQ#MZlG=29?2B^xVBJZM)U=rXj>BWp|T{UA!}UG)4bP zKR)($e|LM6QqdIF{CxTn#ELuIx_Gv2*&f20v{t^!vE3DCT{a-ecMzzGD;$MACCFN* zbFw8VU|s!A)xKj)p35-9cluv5ivF2?{qMxgI){BI?wg7L{3f!*|7-nfXlr9)Zc1xs zxi1`~TVoe-l*y+6xNC zrsj@L4(>$%dQ>uY{I~GDQb|$~kst1pgld%t6yJ}_3n-7MLj?qxSOlj~Ik6)GK-mK` zo}P-PU9%lA@%JCv>pp&3IbvmxyPep&^VLlV{2PH?sFn<)HjR%=BRG>y7eYf$T1a>$TJ z<9U?w#SiRV>s#zdf~;|waLx4%#zl4r3y0-na#1f zJ!PoN+qo(_s$zkbh`M=Ck#+L@OTC|oL>~ydsZB^X`W-2w9H{=KEp9)kX+#aV&6UO>jbk&vymzgI856|>k zum94Dxa|>Dyo8x3ya5Vk(lH>5=7*w>$~>@H^;vYrj-9crx^7{@ep@V#w@b=5jM<&^ z)xtq=Rq?Pkl}#*&aSs`cT$a0Qf(dFC4&9B@gp~H|SC}D8{q$l(w6Mt1QC|s)bX-Pu zNz*4-@4%mwM4VK;FcKcgYrWDiNV=NGoYr;`fC?Um_RD6L?#9(nd_^4`oeP*{6(kL$ zB3$S20D6qhMB^ZYTfu7^kqrfK%1@yZ#C-)Xj2|~LG-@C6$u+ECbcsryo@u0=(TE|d zSd@nbQ{u+w%2U{K-pF~&Xk?&pi0oMBA5{xsIhV^a zqQu{@Oh&Mx2!B0ubuN|tE_MRVq1QE0$-joa%{S_sQ6!w+ap!vZ+pO-Nhw6VHHwSi^ ze64TP{Y&&9_WuucRm>gDoopTcNAK|ODmi{q;s-t4FzH%blTU*NH<{R?pggeSNhN_& zrCiDSTvdQuoD=qPA`^N0s(@@)3K(urD1s@a+CVS?ep=cD?H78ymseNk4?g53>=mb+ z{T`ISbF~sQ^u(AL%^&nATHx5%lEir>LwL&x{wORk;cg$2nOO}|Xm<1npO6m50elJ( zR?a=%hy>KH>Y!c)24g~ARD|ZzXg5<%dzYLPH}wM`CT;!V|dMM(5)V%09j?`~mhe-M?|WKG-5!o@HQKOeAPO+ffe6iSRvhIEV{m-5^)vRKj zETDtxCoaBzUB+_RcNEB=P$*_JbJYgupy(qC4MMX(Y)mP|Ixx3J<3g2j+QbBbHK1p5 zVjEz3KZRGG|Gq)@&vpCHivC4#u$u&Up?umy=r^9a7&|!83VeI=vM_y9 z{eM0E4=r4&Vy%d%isVBRevYsl0SI3ykh2IHH_*IBkVsK&0HhYEG0;SlK}QtX= zrd!0=#GC*7<8&NqZTUvi^wsjUa+|~Z@^T0i;goGYZNu|&-0_nAi2Z2m9M|{j9@Ee9 znFJI>k=hM%zOKE(z=XC6kC0Ryq@I34U#C|Y1ed%8rC&#?bVR%rP7rGO;5Z~8gB~j` zA-1;Uj|!AzOQnHQFDX6NU@-(wg2`pc3^ElZ9nwB>Dus$tri#2=4aH1m*6-}>4w9J! z=M4c3+LNKOw5BY9UJ8@~uIA(^2a~pb;OdO6vIJDNc!YZbGH+9-&itY zTMU^kCy+nPH7^IudHeW;DzmpDAOxdbm_W1k1|W~7m3i!{>bfkOAl|Dig>{CbF$IBZgp@*NloAdVB~q zIqe|x<%5(a@(Rh@GU{fUdb(5d(e3pfqo%#I5g9V2MkGu z4b1YBVplRfnS0XgNd{d@88H_V+myB?QQ77)y4lf(YI~m7J7f{+0UJ!bO6IL^owtKe5(EkJSe2 zyjeI%wU_M?eL5YuGO%8ZU{;5goeAp5ZXt5fUo>! zh6lXZ$7zGZuAabO!J=lX?JuR^>7`|9$ERWQOr8(yL0Ci?s(_tk@*quLCJ9;yMXz3K zlkIS>FmqqgN3v`Az<<41kI9hrGXgtowXZ5(OhB?7h=zEhFS;lxF_dI`-Q zX@WDK#!A;~*Y1_Z-%NWX{wtAP!3mP)_a%)k&yLSRu@y+@s;eR|zZLB4H!l)#V$um! zV=xuB1Fpb0xoSKH)mWE!M-^6{$c{1qMBX7hb{WTjiaRp~$6^P#?eOlG=p72{J@#f^ zpJmL{=WKq*CSoowM~hQsJri0l^aFL3L(I;vdqCZ<4T&UV^civgY_?c}g6A3pb%n~8=7``>sDmYdPz=j8zlQ}RqVwt`GgE21*w>##eUk8~ zWto>xv3)F|`$qfn4Igb$At4;ok*s=NazC*jWgl(Sllp$Vz5ND2snO|SLlM<8Adfu( zy4-dAF%D`0VkAGE&lG{B0--jD3KDRMsix>K+mix{0osL-dffJl^h28U)Imj_|~Povv$dX3og~_a?Et@bTHeNxv$e3eUvTA0*KJM8gZlr zwH2toIN;Q~k~T1A@!Ggqv$|qQ#XP;-(;u}OqCoOM+Fy!rqbLDVn$}LUvy+;2El!h% zdC=sT&SG?>RVFdbZTJj=ilx8AaMb(cyd@deg#$-6S8Js)lg@!1c-s@(l6%c1AJIP6 zWn*Qj0o$WpgW|Wa-DOlIqd9ua(9Buo99|Ji0onTg)m7ZsU@rHikOk?q_atB8^ShV% z@7NeBQdyIm;g5bP9iHf)<$2hWM<<4@)%q2T{%QC;5FY6=wQb&5on4J*9QM{~`Ef68 zd!&Um_Q{hkb=%7xxr<9lmmdWNru)GzE0I`Fxy9hHO8uD(4EESpX{iIqKVYS}29~J? z{TYENj;6c9ZS^wTf^4Cgq`5@K2S{6pYp#7Ml4-B>48-;uCa}uD;(J~_A}=}de&39I zNZ=<$6T}oOG!}nJvh4NFOb;(=u!woT*xZ+Rmp7Pp|#^x+(QnroqC~Awb zg1ph0S?ht-uFEH7p4A=PKd$_ca9JG^J$Kj>+XW(F(-{^X|+NVfO=9A?CUzHavaqO~7?*f>!LKg5!{W zeSOrQwe?RWDT=RR*=HM%qExrQA#>f}1|(YbFUv`kJ5uKHv{Ou^D&sA@44xSRXFh3` z{y|$b_>xomH)IGfil5%kOh154()=l4v-VuGw>ewJdEcoTzC)1?`$ za!rY+6z=N+7%0T%RY4fN81A7>n38tNMV~309W!I`KVT1`)!q;4#8D1Omr{de6AEZ& z^)>h@8TUEIk3d9Vw|>3X5)EaGQ2NAVPKm$b<$#m|JP<0y?;^x^4G zvSCNp6k;R9uv%P)$Meo3o@vJ^?kAhi&!Z<^Kq`IKkh^E4J`pH@bg_S0 z{HBB5sV0i(H2b*Vi%2FE!F31BW*NcP5xNqukp-r=RGqRi3XA4!?pP)- zTqcrOq3VArJ|aJWOfyG|2+m{vX>CYRgic79b!`->GQxNz30}A$scv7XA4YNyIWAh7 zL8kAK!^WtuQ65J{l>vxFV$!aUfEq82=04ygHr3QnRyJ2bUPQ9h*&FsCkk3&Gl@$_qfs&^0L$?SOZ+<2~ z*YD;E0hK`NjB}1_-ud)pAw9F|4~!#>3bqcy+Oe!MfVrWuEY(%mDDQP)h%B+JmwFj^ z4tM9lqn%4r(oPGtEDKwNqKK@0AdQf)CS%Je)sPq%VPikv@KiZ=X{fneijIahIoRkj z8g2t|Y$q`gYj(jbSS6BJ(=cf=U46;LeQi>HSKPeg=i^@&JAN z!X5ziPbTz~8*0H5=8Zg{hzVd4<8!_wd9W0FOh|^y9Ygf1U2pVpwO_wbi~L}N)s0&` zH1fj+ujn?gRq(V$H=T`Au?ylB`i3b#hW4GibJ1)b2gtkk%cy}k2##J^emX0NVl}d0 zAGugOw|hQUOG(KqZ`n-K(9ke&Ve1GSr8EvdxCuFm&NS%oPLit|rhl4df^DwfYa&-l zOtYTIO8rcMBmH97BKU%cUP0qe&9*ht@i+eDJ60$0JVWm5#=Av?4z*9R>H|*`0cHe# zVX2y3hjvA;GK8?}z(nfBvJEj1NG0}-&$d~}#AUvUY!%mmFs~CB!{8o#ot>Btdk=Bs zeSIgKdhY0_Y^TS$IuD0WA>1QfzKxfBl%zTw8J7!KjVXxtQ4r@XHNq<`kR{8j^HFFX z$zSi0w1^ZDa_W<|AoBc49)#PbFwTBXW7B6UJM&C1iA$Px&6d_e{mK{>a_x=UuYeok zYF@6(JpYqerb;aHzj9dY$osBS{jW8a<`f#2} zmC$c0{^U6Vpug-n(FT2j{6)9@6RZA%Vt-YO&*YamJ>Tg`D?9*z`u`Qh4F1Kl(*D!D zQNh;sF9XN#(IbE5Ew(n_`tEqCkviQy<0CGgIiIL%6%GGv+89mA5%+l)w|WL4FT;GR~EwyFxC z!TH0vi=npZwmorw+jO6bdAw}jbp!6xp^DPPj9Z%xC$Y&i9X$}y z77$NiWrxetttywmL7zr8>lUo*{HZ@X)2B-SIX;Gohlm_R$(Gfs@y-M z=T2CZTWs1v{88Cd!QNyr-2hJ*WOf!*hDuVBh>;IXZT6^o z8o^Ikny0K1O}x0|zKt2h2K#V@h7udwq^B@MOajrk<6%A&Ld^%<2Xs;ZbTZK{_0^n zHyPGUfVLX%PHYVHep=G*YCt94-)7f8{64)?LYEZBGm?71*cRsbVO?56D=Uo_FX}{Q z3z>X(XQpc+xx(rEwxGNe5U|n22x8H7km6GZsY7T5g`@}~;dP?u6VtD?NA0@JHK*xt zPuu-+Ep1^;#S}iLI2Y7QIU9msXMSz{%H?9-242yC5l#0zfMtAliwc_k=D8g2IhSOH zdHH?q?aMf4!cm;$uSkVvB%C=o;|)raP0g^q{S{Z0jGQ26tH1I%;l22bBP{g%kZ9uO z@Qk45(Ztj%L|8olX5&u`@|-bDN5(=IWIPBNc=A-LXAG-L)+u%?f_T8uG2T+EP!#sP zj<~zFM`@Zf!S~0D47@etFxck96x_qv90%Ofq_l)_Nq{YvlyB7;c`Szv4=R1U1b8mw zOfgE@wNJxjC%w*PK_2}=KUVsa*&kQ%<+F0R$^D9RaVD7K#&}B46TZKsIPFbPOE>r^ z9Otq@=Z4^5A(rrCofD#jn*}>kk_f0o0|dNcb5KX@!Yim0!cu_Urj$8|256pLY6!uA zIWOAatex~pxB8hP(B_#e4kM>lcr&(-LEml2l@fp^_uJzzDdnhHWD0;K8;^{xi>$=DI3r7A4 z7XKSYD$r$GfWK+P*zXVje}xeXYqxLT!oOvtipEyo9ul?={6^O1Hqrvd`ZoW9i{Q9v ziGDt~q3+Vg(nSk+T90cIr8p`v*<>6GdANoM@~vgI3h<20n$_f23mh*1T#1dQ0KACe z*fiTiR^KgNoo#^oneZCqTx|UexJ_u%gvd8~{U?qTM)C$G38F1ykq7XLU(8700x#mszl-%pzdO+A%0$GX?3_PBvW zb^F~QxOp7vO5k8Ala^9TSoYln;vR$MhBRIq^zodk!LI$3hlVeaF*7hcX-saNl>IB@ z{|xMZLjG5y1i*Suu<<+8*xw=l@0SUz^xbWpooE#e9n9^V{w)CipV$ZjkDxx|&D0iUAoUDxuvjJ?(z?;W|ps@||k+XF#9C)c&QhAR{q`H1|$iSpdg- zLLqpMAT~$UYIj96k|>6YNJ+L5xRv!N=(C;o1|?Quw5m#$DhjKvJv*1;pY-}CUfE@l zbEY!U%RPVkQ7V| znVA@vr2Y=szqaF~7Pyzv;v(;njLDYKp)o$3p4yLqAaMb?WCK2;AmBXlo*-ekLHx9y zVSuZHmAe_kmvs7<%{4EVl9}>n z+UV6?cfq|at#8lQ&2{MeFD2NYueg#Yh_JXyLGcEHYu+!IF()43!L&YZ}x z31bZp==@c9WojmkdREy($kch4l(okq}qi>(k{k)yU*JXNvAX%n7gP-+jg zQ8e{b28NutDlc)0byo^qBU1dmr;@R05h-e|eAKphw0X+a{2HL?ElT}fkC4q3P^ zZ1X@|{aV+?rsyr~t<2{ojg!){SST=NY~$RTTctN<8z#(wVTk=pZ$6KYN)8>S30Twc zyTfZ~Nv8l0Bb47urs$$fhGtV{5!nE2P^%X-+FVjs<|RCN>zw2~PI;EHsLHBTRjw)D zUQ?GHUY=G*v8It<%V%k2jJE*~Oj$-_csl^5OlvS!&dyjvE{6frU_%Cikh=u!nC5Uw zp}MHFtX!q3(uHMrM)zy6k`M(VMI-<-AVV_697$u=bD{3`^>)pfa@xg~ho*rQwWO|6Tf=*Y6fzta+)<{Q znTu&;hqtbE>%tnu#`TA6JxK1{rJe=wh{Ny`hk$cl;V)?SwhxxRNz+) z-HQO8MMP|7}&XSDf_sd3KzhBdSd4oVV z2LYh|((cSjF28qpsZKo!bnq9griP$(VKnBCUu0xuHCyJdRqW1sXNrNeyY`rafahLRInAWV1p2mx7AQW0t(HT*z&*BP4N)Gd!nGZnX?L~!mOeAhfH7u z^n`dS7J1&E8x#NyaRRK^19F#;+FMG1mWZqRm}>@_9#0MWh*|}~CI7?_O@!&+;qV;H zoZ*|WR}D2mtg+-4<)%o}^^;QqP=M9js8uDN_yH~%E&WpeX}O{${o9&=QKJ!L+9C`D zV>$qOMlyzPRZf?6A?YVJ^aFIDqqCP=Qf?K?F`^K7^e;U;l!{Yp{U#)skeXhqmj#}t ziTTWcFhm+MAa!RIjjQ+UP0|w+d*U^*q1Lp`4a&08XQ&C>{o4vWIXh9~Y(B^uN9J{h z9clPTpG{|80ezv}Gk(PR>+H7nLhh<=$9ehRQ!B;J&D5c;2*1w26(1{Z<#0@Y`RY~-bCCuL1=3{eE$T>MF6rM?Lx^Mp#2Huf zL)Hkbcd5wumz<`MsYK76+z%LTXXqNpv*V#)@eJX^jpw|KGzb`0xXVQWLSiRePctr= z#PEq^IW%xlxVoarR*)RP1iw{77;d$pH6hZw3aav4u59arf!4XDFg<|))AmA^v|wfE z5c!*p>5%+d`g0MIuO6@fz+5wiz(hPa8B%_6YpngeUcFUG9DhR-$2rDn^om%(R3Rkd zpJ1%RP|n!%VxAWW3oDwqYD-ZiQ$>scX1|E6;U2jzsv>p}tR<{!p`sI(3o82$Q(aDR zI5U>b^Xu~$1=_*oUX2A_-+5Z?vdtj;CEXj4sE?!Q=TR~CIT=NiCCf~IMeX6~r1EbJsi zLAsj5+ZsHLS}3?4X!vP7!h+zXZgn=)1asV#-*|z=1-}~@f<#0Cq`y+>r^aGxWhq&* zD7TDh(Vn}M@9GJF6iZoAb-9ep&H^qsGHy}?pN#ZS8z{9c+l=u$?HFoF@V+^iw4s#j zd1t_4WR3Qc)Pa3J#%yhIbPn9fVVl0XnPhxpO1f?}D{+qyYNuhkUc0p9_E4})aL(sF zrNvC>$7F8;QS@ZuoJ1szYJ2DSSws^)naydMDeEx{WolMNm3L3tCXC<#-KLk?E!fZN z?m?n;A7-kEqZiTQUbaf6R``(3 zl8EIyRL?5HCSK8?>h>%}#yh3pESy8-?b1?HYBrFAT?;fkX8ofbSeKAw$_Xn9^HLFO zDaj*nWg+EH^mF>*_udJ4oFDDW{gmOt^|2X$0*=enHRN>|v1j$)u_QA2nzYqdmQY|o zH4bJX2c1Xom69hDB`QG!i8#?QGfE@J8|>(2JgyKucYl^4fH}-Vz&5{k#_XeDnSWwg zP)bks5MRSENpP^5zdF^pjPC9fB6l~C2w8)2J#`G#IClxe2+)gXgATw%_m;(NtzQ9} zqywN*F^KbZ(n|57cQkhYLI< zdF!T*b2Wyw&9GSMl`Y;~>>biJsnom|*(SIdE<}HFKXxD{@*c;xZa!z3qrN$Kgnmk) z=&iX4P0Ypc+hn-ANfWW;DfOPD(`Uf%e1sM7nA&4gPBr6{(;`LOH?JA`!C7&WGIh(e z>}~N$+5-gG0Z^9i1ovK6kXx@zCihFXZwp^MJ_R@rbN39|Il8n>iB)c2RH`up70n`} z^sxjt)uQ?}H`m9g3~W&_q-{wFR&tN>gjUGYjkP0N;mV15YMPmx8iha zM`B8v)-*H;ZOSl&d&PhtcX>9WJMwP>2gKhtx8`0PQR-h#>a|XE3T<3i)+-2uDHQgF z0oQj$9{inVCEFRN#1C~!I{wgEzEb{3UwXH}UcW|vAKj&zz|!>~36{q?K+d_y#O<3Pil+ z*pxLda)!Ltmu?+^km!ytgYS2zo>rf7v-M6>gfhKQ@eLV#PVS?*roKamAiuXuwL*sk zG}B8B@h)tVTojW+J;*9{R(~3o`9>1^%2rGq7dWe7!JDE$Gz`sKDthO9{=i*hy+L8% zVOkKKv2^a)AAf;R^rk{NLX;|mF{s5NVmsf#lmd%flI6ZvX;3bgx|A~+bessN572~& z(?<@<1EJ0}L)wH$C$y#psg3Rpz(M&|`k@6mBaXXa$CJ+IV!*#lS(UE=PThpG&F$+G6s3VY7XIGbt${>9{UtX}dF+jR;&x&a>N6~;jRk7Z z9I#K`0s5QWVQ6jl2?F%@3ye^@=vQc)li$ydqtAIha`BW#fi{ol z{?EQtL1S%hr92Er;J8LQWSE7i2fGdxB{bLhHgfpW2fM9s?x1~i={8IZ4@41MJ_czH zCx+~{e%8FFhrTsFC?UUsje5>CgWlH#??I*`CCBo4tyuASq7vkXY3pbqZMr6)s}g4$ zHN@_8)6F%sp8)G6;~&)#g^i5|XBZR*>HD{Z4?EHg*tbJW#MriTx_9IiOHZM4w*G-o zOru4zr)HMmM>5)h4;1HV)zz^uhxxqxq#ba@B3^xqU21Bf;`6 zpv~U!Wa;Xw%%)ChK`xHsizFXYgx{m(7KTvKw=r7Ri0G{aYo<#b0=sGx7xVe6c!`x< z++r{7l~H(XpoGo>G7KHm#kxIga@Q$g)OyIf7{l_mXq*}%dovS61m;GhIC2aD&E?6~ z(88FMSyMv$lNZTjfvwBl*5|mLAT}-6ouZRZ%*-t1>TAoeA@<79*3A z-IN*{8=4y}>K$6V`+*&o-kWO{#Q0kk<0MQ8=PGt3#^oL$1VoG3ox-o$0=E3E%hV7| zejmx6%i8}TeN{iE1*2(vP1UKs2%mA7&1!if#|Z->nU=nrr;gTQuW^86f2cl=T>umU z9JPegv1b0$SSZ?r?A79luoz(J?AwwIW%kCgs#}qsv^eUn`ED~lBc#sdl6gThFokJ= zSy{CPoji3c3)PTS0t=d++!WHR)>B~^ zJx7Q|AnIiOip?32H86eMlh)9igR{ap1)6=j*e>Fr%W6rz2%MY#+Ml)F^&h~^Dc zGq9+UPmB{W`EBN2b;7+7vu$*?$b%Sy%1?*XC?)7@xxr?Hbjrz%u&XqDN6yX9yl)gJ zmGN6fSLix}3JioD1P2g&sRGgT%t^{J5SuEJMd|TH6Q-C)nk&fJUy&9^?A>6zStufz z9*7e)%bIgv@wGL85w3nKb}g1%Yku2Qb#iVn@?hGJ~@y$o{XM5 zBt36f{)_%XazT3GX&#a6jYxR;id3-+wov|lKJk@g!8aM`>Zs(4pzu?2;kQJoZs=>Z z!fCh22P^rt1-Y!tg#1*3x9x`y=*Pha6?gIW^!f$uOyui_XZvUThtH}{w?X%pUbk-J zcJ=I8>Q$^q7pt6az3NA$&I9l4y2l3R1kG+=VThNF!N_xKH+?vJf* zlT^y)w3Fg%mW@RE350PQ`6d%H{bu6xdP;q)%)`NbYE|B_)2C1I-Ba3B$a!q{N0*m6 z(!_b&?+A|4mJyA{i9BwlJ|z|`#PcHa^;uK4B}hRDdJ{8wR_Ut(!y1@jm$|4nJSCV{ zxM|j7HZEEcRO>>jSBQgoRdWjO=%QI-rdXQ7U?+6y-0{+wsvO4Svxc-Pp$kkWW^Lj1 zn~vb7S!^fhO~K{454lyDwrn3i+Sqv*v_Q<9Fjj#YTZ1CZ)f`PXVDHG`8EdX=nTOgZNICFz@9x$_cco+ukvgz^ETg+ zE_PFHd?I~DuI2>aakwY0=JUsdV@r4MTPO-}%h4NTlX|7Rg@Rs&fKsqH017ccpk#An zPY^L;*e_W05NtguW?d+=j2gqoX8B28iVqp;0|X>8(C`b_vCwvB3Zc;QptKzX9-G3g<(p}#f;6NlK!TLxa>Z8$T-r-{yGwtF<7kdSUVsiEE z`~rRBqstEcL?`x!!m-x#zQOTHD>d;F$DlOCZ+7ve8zv#hCGRLZd)+J8h|V^pSlXH@NXP>n!lS8n zG9OTzl9Y%A87RKj!3!OB%7w$E{Z{*B zO4B@rmT=qIDs7js&Fs0cNA`(+x^D8p-D}AhHrxCQO^`7LtP>0UbYa~+sm1!QdUd;r zQupY6i14Jwh66%85v2X^%=02V7$g&s@T*+G-wm|*E>PE7f(di%tZ5%1g|t*#NYvbY zK$K=X`joI$VI|WHdk^Uhp(SGaV+ggch+_SqK*@vdiyk12yDx6~FQ(jlR zX^`Gs6f8}z4W{^UVm;ZMLQOmi(RNoIyP+HX8D0v?4trP+b`+Cx6Hl zv@U2bikcLSmDz$;u997XU7+4r`r2sq8RO z3#inna%JeN_9@`f`7b(BQ~Z9sq|18wtwB|Ze0&!!e?XO1az$gw$Fi1%C(9%JI*Q#` zt&j7f)sp2JN}1UsWRn6;C-^lJ0A2xMZZY}Y;j19k@Bp?a z4CSd=uqJ6pXXkCivq2}%M8)?Y7Y+IiqK!G?F%8eo&P*a4>mh`igJTt`vmGC}#v7Vt zLmpR1iRz#R&;M!$*iXU@=}`8HfVRbbWiy74z|Bp5F>F>;x#?e+6R!M|HZV$HM00CQ z1dd~j$aN|QY?%Nu>Fhvk@P}e#-9TtWvII?m3yi@FXxZZ2MB|R6Ml%jB9;73E*{tL6 zw$#oVM()p1V-K@nJ#lO%SdS!{;WpsdpyJ&z6VGN73cOfZ>ZJCd#^#v>-x|#A&SF!R z6x+57Nr5+6CbVs}ITkIEh|M=S1NG{Sjz?dektaYLk@jW=k~4@Vws2k;v*@1Dc9O|Z z?6oGC0XTHvxXRy8Mt+i`A2~oc$YY9Xz3G0vNYI^#;R!Ug34?NI9YI?#*vB9)lj8xp z92g88mx4@3MG4PTQKYOl=}~h)K)0{J6I}(cy1maB2L*cUxly9t4&3!hU^dLrfZ33J z=m=1O>~bYhf9#%O(h(RV!d1i5dznAt&1di^;#zq4EX2iIG+HBJmxim* z8_Glk`EDC=w+-(yZqMj~B3~0% zFUj?VJmo2#Yy$2sAclsOP;}psWx($ZfD|g;MWWquzdm{*?u#uqLs+Us4`>0@*_8s| zjzn=trD%z^Xu;N@2C7CWG}#iO_JYx#%z&q|@fWi$?DV4H9?{Lwy+u7y=lQ+019^-vO1UP**OV%Q94M)y8t?>D$%ez*KuxXG+hu6Cy6Au zAJKBL4BieB=sR31ET+INB>+|tNHcJ5kD8Yzsdk(kouv62W%cuxzu#|Ui95^SH>)7> zHb0}=4A|<7=+w62%r42I8%{Tnvz{nZ5f}qbjbc~VI4XcM{}47!`y@wEC2`Zq41Ch> zMix8{FL*R4V#KDbHfEdZTvrYg#*MFjQ%ZU<{HF-I`;eHAZ$c|Mheq#KKHX~2ww&KY z?&;#gt^@{MuRa`1Wq)dZr_#y{2d*oC@P@I!gdY(BcMBw{#x9j4Ih$?SHD-i{CYY!$ z`x0%=U&L+_rFO-P*3+&Js3<)%&}xwy*)4}r-$6{`Pw8Fsu6o>OAsb1!uz9FNAPmH; zakx)GgJaKXkx@@M%l$z=nBSC>SO*-~enuu8F)iD*S6#DWxBcv5AA#Vt=Q_0KB+#l) z>(n}27gx@`hJx$9(R4@@a3vuYJ;&z&+=WlENHnX*JR-tU!io@*ez5UFk=R8Lx~ zXxYS?FuXCM_q11vIyAjGv@o@*P1S5+E#658TS9eR3NS{08H64c`pr1&O}uc3&OAHq zfzPxSyayU8OA)Kr8N*J^v6f-I-)4VgX_0FAEPEUP{;EQ`o%c2a&IA$kJmjqB>F_=c zZq&+%ztfF%XULVWel>8)0%sxBy&5jGN_+)wv+shRy7di0#DmCUG6fv9Go>*5LU#CC zKNu1_DE6RLfg;P*_TYF~U-Mlr>o1gh+ z?jG}#lC!%jZ|E8Im6Th2>hA9Trh&~;KY1B(kDU=HeE>j!Q~CDhnf&Ow^AG@ zYe+voXMk=|p<0gFUyXme^xGN&e1{mk2D-foVu<0M?SG?;2KTc=^w!Ke5j_!$kEar? zJq|X82oCgFVtyt=uQIMzfX$FIunaN0;LlwaT(T|-e-pElMgkTOJr_~nLyvE|%HHw1 zU-8*O7rP`T7-GH@P)Rg_7q-(Ey)@;_`^+;0)oRrHwIFklElUQ3H7Yt6A2ynhmPiUy zA-5Sn{5u|4x9E7od$E9~{nuBIEFhqpT=X@cQ7=vH+Jcy?216tXUWj zAxVoV_W>frj8dTy-34RG(&`e71Nya2BKt?m2|mso==Fi(!HL~AhDDT~R!;x1kRMJ*oVys0;8 zSB)e#nRz+GXH#6adif)9Z)Vdlo4D%lbc|r-zuqUD@i7)pU_T?Pv`jf9(<kY*NLe~MXy&h_OI&y z0y9{Ry^?miD$HsaIb$DeO2h0sUgl5K*_6{`m;&z%^6M@Y#s8D>Wck5MaL9tVtpVAt>>&_R1&i@ zIh`kDWpF(4a?Z=j5f5~14y~eA4JtEf8)DNC9I?c#%#AnwdfTsoR+b&Dg;u6jy0qFq zW@05DULah_!Gebg5WaS%$l19%bxA#Tb}c^l9oEDyD0@ii}@KgFTEIYI60O2v|% zUm4lb?t>xd;-=8O&i%&7X?!tS#%b?bUI$# zaJh(~3GnWApYwmu+-$v5+4{xalurH}^tgS}IN1Ciz027lB(FGXlEk?>!MzJQCo$0h zN-dRYs>(7VLkJTl2D+W#5%VDcbSw#oke(HDS*+-9yFFXBQ;f@@IF%mu(yQ+#zS=S z1@dU)VDM!mqLNF!T72O^{~wWlURENTiPmv*t8D#dISOo_d&bY941*dU0Gy zT#U>y+jnBs-T8ipIP(U_8M37)lruUPOwC7;BJS)_p_h5mD1F~MuU_SQw$p-WiCa+$ z={2=1ue6B|8+WxD$s_l3Y4(}!(2^5*99L=?<%{Df&Iu*Kn}?&_>6&TR3r|Atto5DR z*XUdOYyJMYO8;KJKOKaEcta_bU+V_)wSND7H0@u_asTQa{JS~se>w*fB*p&(ZhFp~ z&XcKd_&_Wn7cj$u@XB5T@3GwTr^K9)xG?_2>gEqAsnke~=7@c|z4h3@{w8-1;?ENW zi+Mgk+CfGpiE>f!w3-spz7m#|cuNM}S0I~E0TE}}Fm)k{gO|T(7{Vc*aF$=II%wf% znnH5s@<1!%bxuUzt794N6ehOVPzi2(=QH5Z&Yq~|+WYRk=K{$Gv1MZKTl5Wc@SEl( zu5v$`8L;j1Uj}ji{O|u>l|QIzFEzpHLiqO0kLiD7iK=VwYNbytXKH2qH>kc^;02w& zdf)$U8>~*Ipv#%W@g`e$3E;Z)1j#J=IJ9M0Q~?N!FxC1=MbHE5^% zE$X+qlPaw699gu8N1Ohy7>Ls7zV+| z!ciK@z!N$Q!oC?g4E(+tIt=1I$Oxmu+-M{4#TB}7IG!PM2jB6678EIaLz1|;I|GuX zVm>FS_#J|klKW{7HdQ4>G{vK7z|xy;aR@_}0saOB;;mDA6FADm1^5>mGb+jgLoBuk zsh<+Y!<#8B_34wd!`CuEF9vNhe)=Qv*5n2zvAPAI#L?P$igZYDUc6e0-3{2qQ z7l&aVW&Cq}35cc_-AphmmQ3Atx|SWO=fTC|P;#aS&LBS%;*n3M@M znL4oZRzZHBuu<&}78nQPEu-<6k#X@W7aKb@H%o$-D*h3WCKis|*ECB3?w^|a-b0j9 zR7G|Z&}$R|w*q^gFn@cwz8s2V)J!(7(76aHG_+i81b>Tfv}_HGoVF9pji{l(8r8kZ zpH(YE1JCF?Ga!UxWHiWkWP#!QkYD3JetR155Wc#`dTK-uPn$X(Yi4dl;5w6_J7=PS z@)*?nNm9p?;BR4GR~y56t3C`i*SbS;YHieAQ#=DpLtY^c$<1y8%>VEnBHMtXo3|2P zyU$1KBjV`a`I$`(YtB%{$Av#?aeGPUI|RwJSe|Sy;7OiR^{ZtO5?07TiYFmm#{w(t z8YFQ0Ou1oH#XKGul1u3))SW3S?$3#8N4~m)9=--;q#T>Np8SK=uCs}U_p)lB{1#g8 z>={UiZUSWs@DFMG^m0=b!&iatsuGGOm~~9kHw{{k0!kh@OKjCN7;0TP?!0el>VTF@ z3xqy95FmLH7aaIzu!GLf_{a~S7F4AX$hcK2U{y?g{xKQarAorjHiMyzT!#eg(eui( z>^mr(3lF+|#)+WgM)In^tPl!2O&vh5;#r-*gdHOrwMyo=xCUJ%S(LaG3hqUdXYqr` zE!*(Yr*1(%W?232cW=T{nrdb6*Z8)`yr(r_&8=wq9`JN)2o9O5mvx-?w;qjz915}& zz0Psj*z%@Ak`obxgEJ|)OkUYjots|SlgSgMA2<@5SDm6JuA?nQ##d++I<7jNevvSelr@1+l70DuuFV2Q9X#xQ{TUCXDrO4!dFbrfsmAgebm zwMQcY$kDOH zC@!Wc;{|c2a>F|dM<#|F7@%Tko=dQ1Y7$_cPo)Ha)`jmvv04uA2W%&?xiwmnw;<7w zJ)n;{py=OM<}-v@?**Vh31MuKMh2%#p}!U1zEy2x{E*qUE8jh(NtMeXY{8o6TCp+_ zC0O5s23RS7ZB4O9F=3msz;OI5%!Z2yKwZsMb);v@&9Wznt&P6Mx!p;XQy3tMMWXSO zlpXVFDW1HoVCXH7y}2E|F{A+YuAb4Ds-cEAFQ#AWAJ3jbY%48yNYzHw7V~Hz{E4h+ z?_+`L-l3^}NVw#L>Z;HrJKqtF$a7IUSzr0Bq+4qYyp;%LdApqK4v$oa$O(5fUXQ0B zn2F9M42o+f;j}zpFL}O0l?p^E2(u=r({lPk!%ae2!$~tpEw%}rNa@id?A1+}S}yv1 zW6?C^@szKoy7=QdK6||;TnUzSMd=L)poE>!O^L{@Ze-(B&C%G>GG)3QXC=k=9Xn$Gu4-xxy<$@Vcw#hsUto?b$W~Cv=X00K~X4N4|yL%;z1zYsXXW^IO>yUl&oVH80+I^4Uu*+v6A=s z=JGvxkHS5BkDNUZjqDj9HckF=rc#N0d$Rt6Bp&fW+`^lq)6-Q7^$`s(TK<6dqmES3b6#FmBtOFq~m)? z&aypE51e|AqCM;9wn*>oEVj=8@3UuE><37@HxtV4%q5d5DeAAd5b97htzL4r2cWe{ zE{jD|ZYHz)TB)jOfDEmIB?phND+V{sB4(SYuYd<2_hKvD<*nHhOE+QS+^o}k`q!37 zp!>?mB?A}G_9qB8>7u6-pbW0~9sF07A?59_vKBGhM=aOE3H@t=R9E7{k=;JTYlKu+ z!Pd#W`>UUncRn?^z1veVQT(T;WA}*(~tb!sjBRmWSz*AB^IQ+xFsuh(C8e`$4j%OXW1HY3AH@t{`bfz~+*#qCv z*U{P1gNB2!Q?VnZ1nMfPsxorU8V^^^gIc>X4J`}KM8y>l#}Qtx1Y5?@(a06K9nRkI z%#Nm(_BC+YzBVhX7P``s;%Mi4nO=jtwbS`oo8@KLm_VHQ+8iSg-F9_xm6J^bBUDPt z(#I^Nb=9Ql1@*ppzbh++HexBFjxvahOUv9wB`l_Zwi>D=4Q(7F2a6KTQs<`2lp82g zr;C+?xn?XjI(Ez>iKJ@HPr&D&JfeQeaLtOSgy zACj*6M_&yZ0OBq8<;gdUKpH$80oRN`l;4MmS{2MXd8t!}S3KOVnzCI}@?CTL zjJy+R)v6OeSMLOyRVI?QasSlh(Sbx)aPge<U!B=>q*`}Jn010P zm%SjrZB{Io9V%NLd72QjV{NaBcQ>vd0`zj&DVD`YY|bLo_HMx|AS&w8yEQm7b->7Ox7-(+Ac~(s)c;G%!^U*DU;V!aG5n^G^7+MN$Y@$ zYb#X*(|elUG8muHk1hugRXKwOazyo3u!Jk4-kz}{UJmN6GxyUvphILf5%<$d>?dAM zU!oP_j(foxvQ{Y4p&0N=jCPli;G7>a>Z6z3yo#RJkdo}E?#G=(=K%hk>w3I(+o ztbUu@cb(~cCyc}MEl<1V2(%U)@IRtycf(sd+-al5gW3#fqm`4;k9WqK<96e=yW^DB zA7^R={%k=P&c7L&v9l=0KqvN)S`PSfgEHN-FOPk4Ef2X%iHAt;l0@nGq)p?z6L=hb zDQ{6*{1wgSdv%-~Vtid5%cm*#!%?g%5iyc)@G05X0cy(h%OzMVzvN)^Dj=&-)4WBw z4?dF+xZ7(oONi*%ObhTPO?8Rhdo#X-=11bvTSff=P}ZXDFhYJX|WpKzHPZq^NJ|NMwb)dR<*** z#flB*Rr0w2? zxmKMWIA6=Z-2!q^ZoS?aPI*NxuG!`TTYfGW{Yp$YHwN-ZSpvntd23?sY znjo?$_AmIrSWg%^vKWfD#3;pz+fcx;ri*M+*}P)0fppv+7JB`Kusr4;;v5IBVu+7M zj`C<5xI-FQvbMa6WE9b8d%JUBC4ryMwg@^r5QG81)eF~d)yLk*xd}KWissd$y=kBD zUaTKAlV~{>g3iv#?3l)aPv$z^dAh4w|~@y8Ufc%(43=tHBu{v@O7L3H%!z#{@OTFa;-&CUNy=RUdx`I%bd#;RlZ{thu(Adu&wd0Kb2v)t zI*8M-7?XD_Xr*;<$b7 zFN&qkGdJ{Apdk;XBZ?Q9LYv#I9xwe!EdT5yuPL;St+WrkNbEy3 z>+z!Ean9c2dXz}nW6}Dd_!$k)f6S7&2f05ZfjEm11QytoWQc3+6?Uaz=HvAyOY-Z< zHhJ9-LBJ1$U3RrJ*QiUu;SNQUHLr{ZPSHsV0`cbX2`?DhE4LuDbZ|hLN5B+Q?!e!v z!uJQ5!qBDqmS|~wV*s2yo8dAS^9GRsV$sE*1~~zHiRx)KQ4WjYd;Cart%$v@sSH^( z{f0(XE$bk`*E0+8AzB{Gwlt1GB>hq3)2L5rbLNrUuM<>Jyd|wHQlGaJpda)8^eehmsLujL zn-;RCMfSD|SvaEE2?L^FCU_5#^lq=%@b+xCI4P7lQc%urs7599h$Zp5Nq#RHEERi* z?k1K+3IRK6&*5f~WfHb4Y)_&ja#zJF;IWQkj2UBL(gV6F+c;;={#bgdF6i9QvZFiI z4UX_0KC;j=nfGl)L2Gd2{)hSLx5U{pmM|@T{EkSR4j+_`5UBe`{#5k1*>w>?hV+-o zLymNpl9b9?BpL%4w8UAd=S-eGtYq;w#*6+@Vj96>d|^tafU>2N@;x{*jz|HS0v|{Q zi0F392mV_q{4-lzh<#AIn#){2a3Tf;yUNY=Y#$lFr!bjm8|1>n6ES3iCMP0fg$$Xkf(Is; z{WvJ;#dr|g?g=>aY{eCmIa3U4pKP%t#&x)G2$&q^kla9}RTgLr6W;bqLa1+MU-agW zy0V3o@TY!MYPq)Gl<+ADYM6G65&Rsca7e-@tlktWB$6=+@ykoa+ycILakWV`Mg$8 zQ5LMLUH0c3bVw;_cy+7oZ&QXv;wubqtu!$#(U;$thM*qu#>Ry)zsjuR&nCKoJE~I= zIZylJ9PLKWx9csm4q1<)?Sc_h5$>frRD!*tY9I=z3n3Be)#zqqCa{ZR6HKZ8pV)wf z#eEi21>VG)cuoT~%v|fax6!R!a!r@Y%0n`74=b?^!9NWx^?l6ZSnO5$IMBNOa)J9N zBL0n)KT><&k<32xm&I!3mocZn{}L+_rdH;L1`2k%R`y@j3Ry=(M?)dqKVAv0e~Zfn z{}Uxk*&z$uLb~})&~&DmIvHh+!Iu@ptPN1J!a+s;4xKv1fN3i4=NNy7mgtReP7DHsjtKpsBdg zFx#e!W*=l|823@f;9HG!1_tGwl4)#wxDcSrRGz0%$TH;<_l+C@OR-C_Jf+H5p4A0k zbi8#cti)5x&jj|E7_Jx+=2nz zk4kDTkr3T3mDEl{ZL$XD4-5~fo-1|Bom4wVvs2w!^DI0=17QY3k`t20_#cqWbTSUR z3BOHb_@xSt96o|Ma_)L|NgS>1PQBAA6-N^iqmW{_q46$4fl#MrU%SG*P{rxnTSYYq z;^f--0mTu3&oNMUR{V;#$g#3icfz10#W{{3$KrmF;DllD+wMk7#+OJrpF=|IT^PG~ z&VA~~QKc}T&^dq-f|sDF-Q70`4}%#yQT24HK2cPdny(A^Eb@5+9omH1e1;nOMDH*m zpD=};M1mpsuV9OKbPC++h1-sO4c9(FqU<#hQp9=pXJFb?O~++_u&(!L>V+~gS=29x z#0-uHOz7szq6t*&Y<4?s8O=0tb@PWsl{*KtpY5-Kl`Ie8X6lgl&;3;s`X?O!4b(rI z+B*@}w}>yG%6$R#zq_zoSX-Mr+E9yGy2v?NIha}+idxw?I`G;VJ6e9#K?#K!voKoF1{O)bl?`+Z4C90HNn2-!u!T>+`m$v zf!<{YSIhw*fFo|k#?Qyk>8HleH=?q%yMU5=<}hke7W62Bf=HaQ{q4~9R_{oH5C>}s zh-Qmv94Zx?wic9@w3ElusuocbzbphHFYV2jm`*eIz)nm!>x@;jvNbn{hM5=FrK|8u z{LQPxxaGop5Ly})a!`YgP*#ru5Y2pWWhpFa36k2MnE0DW^Ep7&*h1 znp|-1TTUcOHR0sSO)hUdtpvp8BgmeP802~nI=`Dm(A+lxVm=e=)K!$+Md)Y9YcnFr zxZD5agaA&i02j7H0`b2of0o8cwKm!;WfqRv@j*z%Q-BQEx~>m8jYzlGl;fWpU1%q% zK1a%NNAGllL5k?MsY|IPi8z?w_eRe6Php^Q@H7{L#M4jk3q znYl$%Mjf0yJhL0YR0opp4Qc76L}He=u~;CG-SD!q7j+IJyqi6vbY&>Y;Wnndm+@JA zyx*hN^uQ-QP<*(R_=lZMOza3kdhvWQ-6xj4ANug4q&nS>=enN$d$-WoQ;GdV-6M3CDe zZGF6tbHq2I{RJt@mGi<>2nC6Oe*+>Kn6wq`CeJ1G1~;1(!&zZrjjS(;oDe4}s{;Q`7^?j{;45`&TI9Kau`#4*aPA!g1mN|M=p7HHvTD77tduU(aZglm024-T826 zs%q<7xQ$M>Puh2@okr+9a7<^&^?}HAC&%-X=Amp5c`CcW)sj9LZwx|NTM>)j^EFZ^ z3dEccsH=M<;8{skA2RLxUJ~Q0EKn{Uy@CXLASK9i!TE`pvG={Z$v=A-5FrcG2y$%n zGLLXCup{JYYg`9Smm=pz2*il&FelD&kYdHCN5>z3)W|Gg_QBis4A4#?H=t{&h2nT1k7R!gz3B{Y*&tA! z%fm?C>!z6WPSeuR`kU@@VbNfGZbhJ+dn0CxKOO*?@}?6h+_-I_jfq_(%O65`BYy{Z zFfG^}#S6V4=DYrKZ%Zwz{aJ`jsG;G8`?EH}(JW8D#YLnmpSLSWOGPVACPD~;h*sQR zOO_(#avNe<=NYx(N`{LU)5G5lC`%>>?)h=DnyCQj}7ztT9ttC-Cma}&7+g!uN2@xNXa z{(so}8*CX$TYt0?oP~2*QJQGzgrTIq{Qb`{a&1TDORkM9c6=vcGJ3+qi0TzhrfOit_f_ z1fubgM#AWe#TKp^Kcr-`u2a>ukC<>|VqR|VJJdvFMgqRhgp}lkWd&hVLPBXCFp8LH z4R80=vLLD7ZVdN@Nuvw>@mjO*N1B(f11nBqki;dSB(?8f2qNa^K{>2rW)!zrey^LoSJCjR!xE2^qxhH zW@#}v?4w^ufq9I>aI-Qomq1Tm;&xMy9x8BqcR|IYkyMJPHbP~Bia;)++L|_|Gd;b7 zwJUyvP3b{%oMM856VoDO!GY)kjJ@!7pxu$zmmN_naXTcfEYQEwpwlG3ER8iUeZdYS z^+YtaRY_%W)HU)#G^!!9$e^^frKMy6!GQ^pi$@Gme2h`5jL#g(SY?=53P*=ky0M7w z97MmKPiK$;%7T_>Iq!Sithe24%G zuV6nv?XaTt2K;ucXj-DlD09Kjb9i~=2{Tn@ssq<6%?QkNT}LF@_Uv6mA%*Z-@EY*C zkZM$Y`pH9vGT$i1;?m}@C&P7lTWsv&ukuF8SH(pn zd6U|E&anR;Mu8wE*5;NwrBtaCHe%_tpM781_Y^>G&OyCZNLqxYOZ&%A2HM7v8u&&8 z{P;c-kHAXFajX&-+a$CO9_hS17xdY#iIc2Ej1XJ6!f5z#$#uyoPc4U>*%x2s zCTZ7J<;;p=J;y10;w5xpo_o$CN-u|yZpS>EAsHtKtRkoEJsnDghGW`BU0iHmKTQnb zJA#eopp9NqU>TCw$D(Ksa8z9D=4@7Ofio;H8JD=H%hf|Ap}Y+&Qx5X$o$u^FaHx-M zGPSoIYrFa%HO}Dj}3*azB|j)jTE7W&=wr+w_7 z8|r^8K_C>TIqf{T@omm*cs{?NLcIZTKw&-_H_-m z`uhG~>FgC>j@@%SuwIpv@qu7S2ZGli4QA@`-zutfkjU8B0E{U5j(-|g?hrvCz!QmL zew>5;hMvTsVcUbb7A|oYRp8;dU`ScNxVYe&+T66fJZqBH{uVDgk&Vs@LRM)o?N|1r z61OT^K}M!O+4rnDX0X|p%H&6iRQ}f$50T$^y80bsgfOt@AdvXE^b&2o5;d~{j>DQQ z@)~8nsJ3c#{V8B7`>fK~%)<{IDrcqAR4tP9?Kah@Idl4bS~ZLYxw%hr=OFT1Rw0TJ z#n2BjNbwgZz@JJea*EE1H20^8_{eEzjysfht&*vo(_R7Yi5Nqp@e<$r^w9H$C1(K@ zTe!q$S0r;ssBFeovbKp|_{j4?eGKRV_$&MAa;t8Z-Y2|#2*-S zf%7NlDdu)~=kR|iyF)&fTNP6JC}MURis1($mG=B)RknG_X%ZiO`_p$A@nXt??YYuC%I&IRO6U0-c`-NqA4wLO0F zeL`6@UV>sV`wl1Zku_`&PFsfZ6zxstCqpZlP+o)iXAA#Mgeyhs4NRi{u>r%##QF zT5>^vzRmu<7&Ew>CKwkdo&fFR&d_p5g@}!hyrLPTF<_rcPHt6jh>5K!W|2GZ%#ec_ zdFmXe?j=kn=90n(H*uZ6bReI9K5KwgZ4@7m6FbgqevF1abWMf{CPFg;QZE^i%3mq3 z8Rap_hIRf?Cau6anQor{$(wq@5#O!Vgd@Bk<_~fHNss>|&e#u{S=O(+ao87e#Q*CZ z<^M?>NnO(~AM8I~g#XEy21V7s!rk5R3g9m{tVU&cOh``-}O`}?A2Q? zFk=21UF`Bx^d0g$s5|iMJnpJFPmz=b5tv3)BAct5+tBvjnCo~uSQ?W4Ms!mS9f2Z0 z)~rS}Z$}tOB!QM3x<^*IkcYekwH~}jR4A=mh}A@cPF%P4{Sqaa-X;mRb0jQ8XW<4x zA2Lo=8d=W6Z>(`h!rR@qq4c+2 z<6(suwOyRjP`15hDVnisMpwMx1%>zERVBr-9>PGCRrMTq^HKOwK2uNCVZly~{J6w& zq)0a^>_LSK)I;f9;1F9fbA?2Wz|Q^c&-K~O*Fbqha`z-GICaR2RT9O0L`z#m zH)wby8OOA? zXp}^1Ge)_Xm|`)y$K|keF%*KRRZt9`;A;QCoDdbYC?$?+zNg;n;rR*T>TtSvZ+qG z^C3VvWyEinGONGY*Zr^sV!XKu$bCF)r1WrmiJTGM1Dtuq7fH;#cdxrbL2xT--;ZVM zE{zr#aK+Z(jAbAy4VNDqZ_yr&-!P#s_S9DFXf|+3 z^;0}4JqOWSxjqJW7`7-B_9CWIJP{3Hffu1A$vM2JB;Uo=p>$Qo;KEPm=z$k1LIh2` z5i|+V9Z#R3{xJ5Ry!=nb#_D;AjeJSfS}@Z(51G$GjxAC~$~}cJDfxLawPh#^ z$L`b3P~)M*mtI!zlI&}ZXycb^1N|%p<9gBp+o3mawnN&)wv9R^&=ZoP2e>y2^Z+8H z7vthHkkR9xIb7sd*(P%i`^g_1G}#|M2e{|sTz)%co~}iD`%QICWLu9BT)$Di!Q?zq z2X1pGt_%hbc*~GSpvC__X8O!4(@GBdt?PAk)ME*?ONo>1 z{U^B$Isp$(w=e=WZFF`*UBvIE?>N9SMpW2r-&p#ns&D`^E;#^Yd#HM>da!!5dboPL zdH{NOdy==Kx2v~<%k<_wBYC6g`x_YVW@^#g|FQx9Ck*}#kUz3tZ@!I~&)1ed{*{dV z-@^=y{sIU!pQD|4qEIqvBuE~nST-_z(L66|wFQoluh3l~kj~zO#NETnA0$!=>p9v3KitxRu-5Pn1 zMs8gb7jk@rhs-FwO0vR!TkZ)LG!dN+)_JcY5$wucB2>oIVJ)-kGC=OBj+ft3#K_bL z34GBGHrQt5DOcn==#2B2JGK)(CvLig*o)CmZ_+PDCPHDL%B;g6olT4|j+_y}=g|BC z9~X*t_O!C|t|0+G2T5&}aD4tXXy<;1@t~ng>!Go30Zl(y@~YB5f91j0@A=)^Ea2u$8RHLZEz-M7eTA>$Ki;C`wadiT@OCf3iKe$9(;d01SMu1r=EJ0r`)4CvZH>A2R z4HbwzT+QqLd%wK}UK(AtnXYPkF>@|K$}-KYlc$+wYYeK&VVe>CZ-L#M%5;{xUC%2U;HU?BZFSNM&b5l%U3*U5vo9DSX`5tfxZ9=iT;k>}dhVhG> zS>KSnWI&fYN0^G3KQd{#fT$x($3O$unp&L0^n)!2yaLld=x^C+&c$>=fw&1@u58$Q zk$8=Dr&%FmBAi{v#pX23o3`b7Hy=!#UlU#h2AX2eBsDkb+VoxAFi5^Y6mtKPmlhvi~VYIi{s%6@NYW zbbUn<{daxyUu6H%H@}7){?au6pOjbBl%D_6H-XyJ8!2k>!giaQPvzo6aR9}m6HNGg z^?pS^FH`cP%BjstMR0%DW+dV=$&EGHg}J_ZwrZba`t=LIX~pPpa;W1dlXGtE<>BZ} z`Wt@n>9lPf)B(qBbHPrd)MMl+85`ZPGCqIbuRwRS@2GUKT``cF_GgRcV-A#4v_B1T zIEqH6+hASgEUv$1^;^fxGmpf@e{4aZW=_8N=&PkAb__}`Ib-~gbu!qf|M(?;RPkeI z-2s0Ud?KmF6CT_-0F+S_^)zNb9-o<%1Gnhwvhpz|U_7Y31DRppyGNZH!3L8^AyxtQ z+IT>v?jv*OK#RWwY&#>T5!hRPbfYua&>KBBcn?RQ96;_G{ke0LSih7xKz@K2{hR^b z67CF799S^QTk@JV6<1M)+b2*UO9OaPxUFe-_uyzHt~N>iW2nvmG1{O&jWgcIaE!o2 zxMgc-?A6-gMW%YhXd$^2%Li6;CsooYj{@>F7aN4B2r0Jk=+{&>eBCd+NxEzvY0y3s z{gWRwH`%{*7m#kMe~CAb(=4RRp$VZHNndQEgzue6?Xqf2y3^!{d2{{wjTmWkpPh(J;=+tdzn>!0* zpoOXpc79fH#$*y#U8;C9{Kl{BolhTY9>1@al)ugI;A69Sn#5NFYvQ#MHs6Slx=oKIX?nFj ziY`ZRrt461bB-o?rdx4yV@7vRQ|ofUd!R;V>qKY8Vx-;j4@CR>O$+3+svQ0F+oOAT z3#Kjv6aVF$S6cQ+1hB?$+b1EU5=bZ~CO{u6swjQiVMP*4BN2e?DI+PAJDJFsQi0~S zm-!5fZUh$rXPIOPFRrf`_04%6MFu#2KvC0ltndw~F73e_xFi@IyzqfW{@_VAdrhju zKx_>0yFs!gc_G#b17sV!AzBctvoMy35)?U62HHqLdja67(QeGQnc-^$RRz_4PJn_| zJC;Iqra1(I_YrpFCia8RY~8{XN}V%>#DNHdvFhBlh$hrJ!ZI@;f`}tInGx% zFewqT?mmgQi0R4_(}a6>i#Wpc^q=5*A%({Rxi%kwg_b4XMwn9RQ3bJ&nS#0X(S$_~ zT1lT59E8Hw!O)EHWWC%W@o;D+hXHYC#!qWicXi0eSQ^NBkzf%bQG73b0 z$BI5cToWc&5J1KC9%6%Lik+#vAgMT!;3H4H(#+N7H}+ew^2N}!S@$d8$?(~xh5)+8 zsnT5n#t2{WjM&RM%hMTzZ_}bi?SZ3`-{c1u8E{18(V4*}-auw1++akGxL{EayTA>R zCedm2j?roLfTLFJ<_9ksv_~=iQALHjV11B-D=t}Bu%?*aO(D}Mwx9Sr=tM%L}h~7NN8<~j~MqL-hMiS!s>JG(4SvZqrN|*=$XS7g>+}b~8=^q6w5}EN(x`cSJrR58P;$yn zHZldB>ns;O8j2RpV;b?Xy7A(E5~=89Vhz#7xfJH4lff59fHv6n0R!$s?i?v;41$ixXEo~if4x~Y~68I829#xG`Fr?sO z3syszW)x8gGtUqmwIagGNFRqc1&W^YELea)L@jAIN7m~iIKa%0$(_KTwZSz!T==`? zS{r)#VYBO7`HF1<%&Bts0W~$7gOoy?a3tI*6K70KGZCM5xr7x+6ZJvBcZ(9h;2N+M zi?NV8LKN)0PUzM>7YJ7FTzPAkcHFvS*r=rshJEdKYmeW8xba+7E5+#Q;%$`8sd~t> zBba1){Me5_k-3$7R2R*+mu@cfz8nzLM<=UL-3kM|71wIoN}0ze}?O-MU$K zyF)|t0#v!<1hH!8>{8_0yv$;dx!={>Pi5ai0RITTo80X-9KUJ{27%I><}b$Zh2n~Y zd9B>9p5~OfqAp1SlBW%KD*$}aQ6m!Zv=EF5 zJC`6RSD%yyA8{w|Pp|wp>3jVn=JVdGLqk+qP9< z#kQS0wr$(CZ9A#hPAcXdTNPAPZ=Q4djPsn)J-+Vo{kpFGcaOCf=bE#jc9<`;A>eS@DQh7vG`RKcxYn_s>y0We4o8Tt= zfjqXaC@F`MF0aHh#dB?e)DQ)-?8+ROVG~lfoTJpZDzdhS$URrAJ%ctlO4l2q`$ym# zXN8L*l)In}DXU;?I~5wk5MAUDLX^`YZ)wEBG#^rKIo^vcOp=qvH}+rw-h zhMnyl{`_0e)PgAriTTVDrF&K(=Ys;C6rdSNCa+->?m94e3rMe7@-}1sZ(WYIUhkumGM2tJBtklyFP*&oh=z_O_egzVz<`s^duWyFY|2lS$)Pl{s_ZD| zhR}!1LU!9KXYqCi4TwBjSk#c}_bc%5lk~Ri6vi;2wE8eq`pHpMs-?R!e)+pldJ?;Z zq%fjPFXcPH$f~ueq!X@9UaH3+?Rv?1(nij0fptnXaylvY>DMME7Iloea!L^0RBg*U(%LfjZDTLLd z+>U4XLRF%Q)dLxrN9I!Hf2VvKd0&>e{=F1Mf|;eSSRo*12&!^q^rvbBYeYT*k!}0J z;J_Jy0#E$C6r1n)jxVy{{f3nFS5B=6qJfVCtBzf5D(MSRT_Wl#%;~f$*LWxzBcyD# z#yq<)d)cyT7}}4lFV3~`%#WZfHZj~bB^vFMKAf}s9D8pbWX#V@wt zJbx8ud;tMC@XKgq10*z7BDArv8_ST_gds^#UdWBf56Y|Jd&I?KyodqEsakl*P#&95 zjc);5!4_B3W`2Sj9G&Ko@1bDAvDGIGGkie@+T&r23sO*yMad)S66A+GYw{(SUll}X zdfc-X5F@}mkvz!&_Hhhh;8nz04oX2oa&tHc=03A^bJ+;yE?0|p9oYh*KW!SX+3KaP zo1_*8f6!`_I8-J4ocN-4&EEJDtI^|^u6lK-i9VKV(I4q_tLfvPpjI6|Z9b?S1K>3n z-pME`;{7FW94xY$zM73mob(YwMD~8NR|Jxc*jI297Z#6*6JOwSFyy;R*-YE~0?9zf zH!9kZvw+Z;#`xRS8ne-Rt!=|~p7@8*BLg>Lla6h;YF!u-#W0sBA=7DQKK|`D?r+R*l#?~N*vkOqdnHw$*X5p__p2K1Ex)(>No5fDXO8GtDA)Whu&g=K zFuiZtNy2%7A5du7i2Ll{5Xbfc@fcEpC=6lDSR*M+wPN=0E2QrDyn)2U=y2lZT~xzR zEG1YW6k*KZoFwJJ3@xLiOa?UdSZGmQwe|3!6H8cmyOOg%e-+cS7_zKo`TQKp=iZLr zw`AyHlVs0S{n?Qq`PkKJYAiv?Vz|Elfe;25#51Cvb~yEs{E^Dse!dpCcM-TUO}#in z)-k+TL{gEJ0hf{NG^oL1vrdxnHACE)=DMOH1THL-UD!z*OA83w!+^a21gV6;3bZ+5 zD$vebfSbRJL4aP5&S~ zficNpW~&BAL+`N|M<=&4`VtHmjUYA#Y$df09h@C;ulo@bU48E6@gj!V=2!t|G7C94 zo>DH8k?{x(!O*fM3TXkA!AE;0Y~%l9!?z>^J``ivR6$gpp!SPDFr1_y0gUV z*NEif3u^&1j(4^!R?7EYUYufr?=^f$c!KC_jM$zUeMpCW5W10!)1L0Ac=zg)zZV{Ti9~5ZM3PYv z_KdZUgak8EjCbF_U) z%;&t%>T|lY8z$e0`#S$a&uxODiC+rjL@}>Uur>M&h zBfe9S$-6`Yy+(dU>KSQ{sWV<74|O1N;Z}>WAr3BXkbM2Al1Y7NGoj(V4=B>FAb|jQ zHUd(GQD|pcLEEByd8Ow|uE0g}5$tRs$e5fHF&NDGkjaxT;*9Ub*+CKfdF7$j3L=0U z`6U~Yh5(_X)!0FPMN*M7UzqQC-X4Q%gddbpherP@}Ox5$YR-~{k&-NO2HZ%4pNqAh&+j7=}!#2#lO z;taM4y?&aLPXgUOB)3kfwifyAoJ-oz^!IM%$#qS{Nj$)HW=WV*Pc$m;UXJ9JD+HSY zRNF%JAWSK=Z)df9H#o5Mhc}Mg3;VoWabP(#((spThw!~7gf)qTnp#07l(&Cm z-0~ePICzz92qk=P(UHz%+@)^Y#_CzUFhb;?Nd8SlmVJdN_9+fQvx|$kx>V2(xqkG5(_l7?Pw}D^@hRn>^F6 zgA$YwOAmGTEbo;937YHm%{5>y+?(gz9OQzT1l6sB?(a<6tiX-aoHyb+hsiw^c||W3 zHHLcuOZKhE)LN2}Z49)f$=>sn4paA}-r!hsH7lW09n>jDRc@~#47eg?uy1hcVn*Rs zZWT(%mUfFKSmsf3$6R(i596azwm+MOGvUOzH+?}_zu*+~R?*N;8cM$;$^j&))$d<) zOc^VdTz~e`X`+`&>3ds|>Qvwe-?Aj^SjfwvZ|FoNp5rqQF$6Of@$#&Vq_zRaC?{rc z+$sY?A0uJ__1ix?D_c%zH*$+BON?xw72yKEj3a5E$l~$*C2=vvN^?L7wr=z zfF39gWHM9ax1fx&-BKiB9-%9LD%U}}vjDdfTm|u&VFJ0f7~WCZVuko!nQGXb(n9)p zlKR|>XG#xk^Gv#&1T;B-PEm(x4YTz!%IRWt1fm{rWy;C#;!Kp0I;3_8$c_H1B9SHB za!B7O%D(dbA}m8s2jNR?ms7iAL*^7p$5J|}37VS2@n+>8d|q1JK_4+?ykMUT%K|XB z&FSxG=U+&~GqeAO&wlT%$k~o*X=*w zgXd`i-kfINueZE*e4e&AlQ0Fm?}+@do0lOuea}a)Z@l1BL)+fkQS2s12@kRaCPwqT zpIJYE;s_sSW-puq+X+Q^i#Kip9|3-r&uN4Z+vx7Iv!s762VbA#@ILf^zkCfqJZvUi z10zYLk|xF6Aa5fh5C~056Hhv#3}`!q&0G4-K9MStX6)am8t8ZstP@ZLjt#m3g+pau zL!^v=OJ<*w->)=<+ODV2ixviDjm)MJ`6U1s3_b~HA5ar0CgD)r7ZWHZ>CoIK8#p52 zP~A6;G77y(V&08L3AIUc%NDQ!CYuZ-3$Q_f1#5-Pq#G6r*dWJ%zCdCVjT{E$A(umM z7gmTsD}&yozI6`h0!xu{=i$dSlW(U@v$jU^3zWW$2S23tWJRIl>ds$=G9_@DhF3cAAayA{U9 zJ6cBelJ(3}ICeI=E-v+gJ(cA^^+MBrOL1p*h$;^-+T>l$Ijm&TLn!fItzg0hqS9;7 z=dlx46AG-_%gMy#Kh^1=IM`H?-l}=THdX1-;UBrQ@91i3tYFp=@D!^MmQ~ooGA}Ad z!^?RwirW^T<_<59@Y$HHLMA(sP#;(0YUi5035&}^;(|SU3e1vq4h^}AlwMQ z>Rau-5$>}@h1RZYWJSsictbXAu0FlPFKYHYgJSNaQw?ohufV82y?U!28G|dy)O!If zINZ)yjG-xIodbV+ZWO*eGb$dOkmqgEYVMX2Kg+srt|`Grn9idpiU@v66k*uX)1~R6K6vPHp^uTXa`aPcke7q(u$UDRcjPGN6DE*3+xv2W}PzhW~DM! z=UTa{Q(n27iR9S4UDaCX9FnEVeIx|bP;Z$L7oCu4?%aNW#fwEwAy>6xR;-nVEHf~b zt6aa6F?OVL;dUlCw(9WJ)q>mV8RpxQ72dMv$Klcf8~%zRD{R?$yBu^0cdhz>Gro2* zlkzCM6qoR*8u`?+LlIhI>HS-lu?FWxa?K{mX$^;ocAI49bg8vNS8>~hb7(An;#D(s zSBLNdj}5oG$m)7rJ|3|@R=`R9&bf$th<(L0Gxxd_4~*zx;j}B@*2xl zW7GtZdUm%dwy|EP)9Jc9cPfypXYi;uMCPucqUGPe}IVqZ7r3}IK9LbhN)luGzenIU)opsU? zq%rOntUA{l9LPGC8*a!tH~Xj{POkQ!{kZtu9Z{E%LF-8=n|c$@pXK?qkaH^dQG6pSEZ%G(hB%re`I zQ$BBYgalvr98CAI4&!z}A4txTbmEvuf88xsZO822zRn*<=LOJ}JY-!B@Vg`Q(~p|@ z7{8&uEnOm4>~lTd zzW;_dL%zpWRS3cG?zzEyAbthIeZ&9Zck`-3Qv8c9cmK)tW|p>!aaFD9Kp)$A*^b^5 z;cKL40pWl@fq89Nys|(EVh5x_^TlXi=m3jbpO1a&DEnmA@$~(LkX2vKF+KevXr{#@ z00~ls0u-3<#YyvZK-Cgp&v-ZC{bi4V{$3vX`6d3x*UTy%lbEt#6l9Yc;$a$+BkLne z4fxRS;n|?I%`+zkrSwjfWJWo^A@WxXG3yzR$30+0*zIj}ul+3VcjMv&ZJH0izSEXH z3jEx*n%GpMbPBSk)-$ArElL=8y76HMA>`^ZvGN_uOw+sv^Zura1A*6%WF9U4=TCUv zkhU|J8SyJwPpCTD{xNO$qI2+*!k-~U??ajgT5+!6Kb%V@h^j?=*n^&N53U|>>0Wq# z^^LTtXYQJT4;2H)1rLB#Qb?xm;el|y=*>7q;-~I`P+(A#yELCiF7FdVGUl;|)MR%l z&+g^$34iq7qE>0lYHT(MtdWNr;|RUWG%bvI?9{7Xsm`ay+1u~FCk5al*={lU97IS*)d;Y0QM@ohyib$!jzeHeM!Llx*N zD0jsFy+G>nT)aKO{C#J<=U^1~I>^`)ye*aUvbl3>>i1~N1;{4-kx1G%3jvr%KyYEw zmT5sDDjNM=x-uGmm3hNTcBOel;Ue3oKafVxVVJ^>oKbO3-D96s@NNZ~;bdx-KI07^ z;|ye%xqtGgWAi)p0?{MYaeSMkZY_s{#99Zf(DV&XOlyEHk$E<7_Rm7Y!eX(Sb?!mH zsA!!qMzuG*K_*;uMA~g*IA`}Jpfuc~PGx&e1%^@lU>a@j0G4&Figya|7{>!azvkIP ztQT9cTlKb_d1%ijax}W&2xoW$UEc}}k3ii!hk1%u{}y3*1$PiXSD||m3*bua8vv9v zD$Y>it#NN-p6FJ%jY9jeie+P~;9UgFV;xD)Q-4Dl{$UW!&ZzpvGW^3ln)OHV^I@bN z%Se{K+8d0~fO56NttMRC%`_|VCU6fG!}eB-3cAf4Lu!zIU|`BVs=sm#t~zV5Z^98G zF9ZgnH@FJBk$#Ek1mg?~LPKLL-l!mecxAv4Vo)d@kRM_Su{gjIDu|KF3fEd6Njy7X z8R`vN11C(^%na8uH-l7>Y}4xh(7Jx^dFGFI>Uc2JN~mE*;%|X|7#Q9`m;Oyzk}ERRgj1Poc|lLgG~6Z zGR9ctbM5(GE6(S(D1vAo5a#Ns4MdhLmOX_7fx4CMv_t80%LWowLW_R}S#&V~sTa1d zVEn;tX*ZDDzRw{1$+vJeTDY>63)U>hJjWNlUNci}N3U_8JDw^E(gQ>6sMI?0d!Ov( zJr(oxF}7J_MFs;xie2Pi-Qeh$iVx=8I_XcJD+l{>S?$S_fAqExS~8Kfy%`V{N+jml zJPyUyzY2A@(!%f_s$rKF)nXn^z_pYTwzp!zl+j-HUUw$1v@SH^3&cMvG=WX%VI+7r zM4k7pCww8ER=!Wht`f{M2rDmO|kOwRn`pd|9XA!XZckFM%LHd3dLMg z-9XO#B_mpGZ`F)!xT$$2u?(pUvc4J!HT4pluKE(lH3$VAQ_7av8kq-3<_8WzjU)bY zg*!IS8AhwAOBlj6^o{c97XEVW;F}#~p*FRL!X$RzF4KTj8~x))WR!7J@UIe&fOyeI zz`z^yU-tTUtNc%U-z$iA90BVyBdvb$U2}F%mddFfvj8+)lE4X7|>&=p`vq|{R=_Z zM4rat2^#~4XA}+~ou{xQrA~9(iS-n6dh08e`?FTg!*wdg+4U6evVu&mrDi%^n-(tR zoQhnAcHe`+ylU&GY5EPcyu4`Q>7GJmLDIBhq9ti!guL=NaU1Yb#?FErJ+%4qdR6z# zX%{~9IEFPo^+<-BrcGyUE9WX)-XqZ=@>^r5P(%x_(Zer6W~}y7{SWke&I3W>Ce*V9 ze1o57jtHSGBiVPzS1jFJRl9_y13ZLh?IJ)B~V#$y{Zf8Uu?JynkGp+X@6eNE)m;W>*#V_0v ze?FbwGCT-~-2ZAwmY>sXCp%ll&(0;ArLyzq>63`W$VAloAA_+^>U0xF3xKtS=f9|G zdepa+mBrEi&M}WQi_dH}*XhyCw<~M& z<^07BTq!B?4(%wo_`BN)2kU~_2+X)F^eSqJGA zV9%!1X{keTPe_0Z6CHG>*u*kimwHs02QrI5bpKX9Zs*pR!b#Pci9Pr+n1}9r{mxYGVg`YPkGwM?AN= za_y$E-VXv(#pz`TXVSC0*uph1xPHJrb60PrlLqe3H-{LOnaSuzK=NQHUKSjMO=-&9 z#c~6bJdBw!B_%y8_5uomQU?S5K;RKyLVK!|30yK*TiBGjSUltd*X-H8a=!AeYiQse zneZX#mwZc+3+61q6G=gSdb8)G_ujw}6ef=zu+K$8np?;I#7$=)J=g)7GJL){kJ?`e zMNY~+wf}{1a*ds7iqud$mw?aI+;yEK`t{i9qJB27u}G!M98poP$q{;;iBcbjI&;CO zvVew~;VQ?L^27cnuiuPc6)#qEH!GJ$!K!Ew1+mOL(H<2mpg$`N^HV6HI z!NOOjCKVL|@sg~M$J*>n+dM}7$>)GABUojq0@PO6Tu}W{fhoim5a| zd=-3?_%X%R{-vTaA?$T-M51Z*MV&4OO8(RJVOFzK=unfznX$l85$409I zZI5`8mmxRw#S0lQV?9I}@S&&(9%d5kOK=NyM?4)q@*CM`h$#+sfO}<9V67jRoAK5; zrKHJ?5ui!aizM5np_4gA8=v6!g5f%bp$^I`l1IlGIUAu71X&;PGEIhV01IOwqb|_$ zvv^ICTdYUr(nMYHCdNobxJHO?Y)aNt+oITXN+HT7R=aa(JWvO%nhZC@`NxV(A(M(1 zcrD{CENr_*emM9hco*3M=0iwr-#d73VFOxxk7EZf^elKe8SR%9uoavyY`n3Gutr%1 z6#Llxe=fZ!iiB6K#p_pAoJL*?T>a79AAY}coCvnAwV+$}{X zK>H-G`uPh?xIYzLrUoXS2=jOy=QDb-u-@)u4jf!Ahx9TQOCQRMb?e5?5_^s+FZK zWG`nt%&R7*T598BDXKxo)a!p*%s#$a4(27sU12AQ}+y!+N|F{Irw8U$R3Ad>&z&W z(okR$la)h1g(~bB`Um`NhPrF}d1K{@Xu(V@b_+HE{w5U=D93}Je_0B zjOkOM@KS5IA3No&kd}U;gpMYm#$hyW4C4d7o6376n-&$!UVIJpVUll-W#Zs{pFG( z0Z7i^2?W2Q4s@-s^p3yx18oO(;1@yI=R6n?dssgtQhVI1UsAyBtr@+clyL&}E8+`& zx<^IUc=#ub`GfdQFhr82Fg~G4iHRJ=uOTVQH7M=}Zp|;af4#21zoCD>E|kv^n>;+I zq{U}-0D=Mng7o?MN6JQT@|OyU6N9^xagVyL8;}FZ=cz9J#o{R&WX*=qb0MD3+CP;( zfN$41OB{eGrmKA?F@nmKyhllj^ZjnWHmmuXxsremo+KEsh zm<32;``RY>U5 z_qg)!Fklr#DKLCcB}|dCj>2|{D2N)>NXlqpoL@@A5xm(DAXfO&@4<+HojM}Du(lWk zn)dJ^DmwtV?{tyvE|Vy`fqKOzNH9jF))WWq+SCM$aAQIWjj*}wd{EX1iyzzwx`o_v z$$L3dRbZ`-HB?+dKcpshjqW#t+?EIGdVgR01)jmu5mG~A$Itd`G~`z zgJ>%nsD&yZ;8+{JxCWyk)*oywModv%|KOE(9i0RK6hF#jO27-M+N#ER%)8u;$>91j>ws-ogs66~@!r57Y=8s-%xtt39H42uG z!@QVpe8XrXavjxzQI<;sUK+(m1T!?_LTILTZ zMXh!!v9pYNU#;16LK5fA8;4nfS0Cx~e(4VN<_y^An;tUU>O?9?R;m459zmxpOT?s0 zrn}hmu|N-Han@zZ$G=(9T3R{zD0~MEhF*NZ`g0Cn2JuH6zt|ju#Zwy5^{SiPcVL)< zzs-{m`;E+}S0Z0Or8sB7e(6tM<(X`M+5Q#Fpj_r+UFI-d}Dsc7m z^o`4K?HVixAiJ?`%#yp*ToQFsUV3V2K+6^V#K-4)F~}zp;D3i?0_^QgY>iDE868dB z96#~wjIscGrGNe^*jZZ`{TB!3=Ps^0+99?trPmZe5p;qp8d`JJ#&-S#s3HXD%lMn435gqMeVB5m)b8OZE5zyU2cL!gEZuV=5 zFo0J`3`2Z?&8VlzdeUgb-Cm}v(XT8QDz^q$qR;u+J`$#g;}?L0TL5}oC=)ng%AOI6 zw~nYAl(K^pNM8IkrHMP8|LE7}xxP9si3cFS#NDVn1) zY8)rnSCCoLkI7fY^f2E0yNj8dEEURHO-7354-Pz5+8nshWuD9??mW6)YSFf0BsSQ* z<5(4HgO$zEHmRprg+wC&Z-;XP&IgV_(w9vN0nfSwE% zoTeQ5P?w19!~;18AMOImmGe~U^S9EKQzjemma@vcv@8}4U-eS`QI`@*@IR+PBGXA! z<}`c(Dxs=dYNUrMv)GIUpo9Wym_J-P?8bM`M>cJ4dvj*AptYE7Ny$1dUBOL?SeiSxO828MmExTf?TcooB5>u@xSC_w)3Ld$Lfo90 zDtL~QdjNEOH6;5_x)U@Rh8)&SI&g5;sKBxMq!LZmwX;-2{Va>MSWpwxDxyh>Nu>dn zUmrwD_R6RB9cg)e0StOp(X|hrELPQvvgg5jY`I{x5{sO<^kQiTcTjE*Hs~%>r*P~v z>6`#kY9S3x#3T8)P`X`jIu&CT?~r&-6Xn=7i)v1rB-<+4l7-l-^i#BumF(}XBsrF> z8?>zBbn+JyE>~_Lx%LaTIMaA^o;kLsIiW@xLC$pi*!V371=i!-iExxA#<~k9Q-?LK zyc}>#nIbIuFMK6Ri9*x1^cn!E06Ofmiw>Z!N2}Zbgh#8Ah=}04LPIlY|Cp`3bPAA% zSl(!LY>nv1DbiX1~Wf=r3cIo@p%6A-`MDtmuN*_v#KV z)3RlpEmLm%ZWHxwg878SbVeCzxrXS-PMBXR1cWc zyx5sAn-TXch@I^e6Lbx&rAs@bWk!nb}(!T##ohi`OYm!Yf%G9IT`b%!^;;^fzk zTY#SIrJb*MPptXw=4JFh-E68e0#f5UQHx47YDgT zy)m!6@WMcF6bsE!aV+2L*|Z+><1{U8jh_K+W5fU-CxX)QR?JVM_|`I^A`skY_=C!D z=tl>a$*h1-8+SJ|e`%XxF%(viuhwZ}Lo8oQ4V#dQ^y4}Qc$OI3G244)u0!A-ym)=n zRB}xfmPG8k!MWyhZdL@=0&f+~XdOzcBx(Nlz#y6UkKezII;_F2ET{H=fE)NhB9@Nd z&&*V6c+yyy>Bl61IPX=+TN2l$3 z$6^vmkeexu!(53tS!+b7`twXyBxO+1^jXfdyvf1CpKu;dXV(bwiR0w+ihQGadK!M+ zRh?7tg(|oUy15Ky?5%nO@s4@j-O-r;+JYHCb8QPYnfs}mQ_vCDg&zbAol`G-whf$8|p~-qzCn0 zRtUa^{7p|XD>SbAnNvR|=3%j}n8ml3n6JO2C4NMxEEW(5HbhRQs4G?gYiMe@_Mu=@ zyK9cnD;0}9rd}<%SNI!snh=#aAAt`Kw?GTN^jxR0Z@9o=*7o&XT{f)ekx1SPcJ#01 zUS*deRC;*mFYZI<13nJwC2>ej3mONZuEng4ggKWQ%WgwM zpNYYMuWp6*oTlirSHjfH+vLpKQQu;2Y3zo&{0e59=JbJ#w|tS)$aWEaz9~40UJ7dH z;a~_w5?K2TMx3dWf*z_&D7?{YyklOa>CmivD7y;0XC7v*d1$vbp9`g;58oC&uC zS5zY7bgE_u>n*oOBJcF31Ry+7jd0on93J&#hGW9_C`K0P)1$PZ_idujH?aNOkotJA zIoyyFx=wSw+MO8Hd2XOiI~@pJ_k1r(dd+U~&yy(z2+3SawYhPqjhfEaU5``}n}|y6 z3Tc&X8@Ptv)`3UE#N52Xkg@~0yw^HXsY(af_IkEv&~8H>>`)fgt99IgM58x~6qS_& zN&u(v-D42|vj=*U3KuUIi6)>YxG-%uYf1ssNfN*num_e+kKLH#Cz-`TeKH}tBe+;+ zYTV&5=&qz=^s~&NKPmkoSiAP@F45mn%e6)ur_Sk6{_yHy=rxC9JH&0n9nrQP`Y9$W z{2|MoKgkSMR8J8Ev++*f*#S&+sBNCmn1nYlj_COxJ3xO=EB`a$1iNcCWB%+qv40Ld z{&y}%v8@)w$t_I@7w!x zHxO;A!-Nq}1W9Y-TP}H5z9>pK*1CxQb40G`J>u?C?kPIn>TU zFaE8mw&clohLwfv(X@&aiBLFEby$K3tfW2F3SM#tX|E!p#IN%y1!MzSNaf+;O5h?| zJ;8&j{XD1Ng#AQv=hj+U$G0RbzUFY6NMB7Ns)#o^tM+>}*huMj?|q@%LSO8?AmV3Q zD)S#>q8z+$Ws4O>Vz$Zj)gjw?k^%tzNIF9 zfg`w$KlemKDKO9e`IroW6yyxDsp58~X3EM20ErLtvK36*an1e~ME8>!%ai#A%F!>iv)S-ZeD8)+~d zyx?vFt0Sby1mp~O|9mBN2u*7$Eb{cEK_-9a1P`keCq|FBb~f7$x?=^h zF{mn}nuQb&Gc^VcTFam)r3@s^#bLY37umcS=)syNJaxGh_LbmnY8AOCKR=o^ z9q7p)UU$$?^xkFkumF5#aGsNK`9qdl1*5UWe}KvVejoq7slQ4{EAp{g+)prh5itme z#OICue}l>Y+l&4bPxw^WU=%U2HgPr){Kw&+lkiIo4{se+^p7iJ3Okkz3fazY&CSB} ziE^2-^z_n7G!|K@-#M}t5|v;XlhO`ak~{{pICa0HVTvFrB!*{JG=&;qlb%cFl9lGs$WVTpZ$^I{Z~emG0mTTG&j1kV8&Y@ygk9%1 zkwJOsTh=$7#*dIteHgIB&czMewO9abwPoW)Zh7vKQI8m#?ZdD12!d}68yGQ~t^FCr z2`4NUjpHO+1#MpYcf#**?L^{;PBfxshw83z|0MoiZI723uSu&4^|q zio>*1!Kc+|hH|Ql96n(LG3PqlSF7Gtwody;5mipNU>b15IbY-m#4)lKlrvX z9AzjkHC(p_VnDZlPT(KPnhuytKDppLLiDiCP^QSL$;8<$*(h(D5qRe4v69!DW|yyE zISewN8DSIt=6Ogao+d7du}|!4w(YgOwBFfTu^67lBDO8F_si?Gib+VeixA`HPKlUn zG_D17*k2yFOZ25BilJ)oGtk1ySh)RKeKh5(s2+f+Y z+Ky{?8G?qc8*}$OAm}bjhF5f^xZwB-gHv(wL$xu9~aDBuA5msE=?VzXl5u^jii)L%7f|VeE*P5{4srZoRRCQAD-mx{K=E2Ia zXz@Z{fKlf;VmiBx4J-1UqZ6KRWqfV|9*0+kFnD$zpMXpJM&CXeo3Z7q$aI^N*aRc7 zfS14mmI1j@7Y9uWG_?l0YG#`ZQOAYfrIKtw1=lo--CERseobJkQJ`XA!rCyqyX|i@ z!}C9%du(YUZEL8yHKENlRc;t^a$ZVjt%Mn^MVptb>(1KOtSWz54JK~qP$EI4g+@f(t%SPHs2`Y8e6-2YrFaWtTHX{73a5myMe9OG~+94 z#!xeGVqi@AaJaszE5KlTp|bH0n#h(`z8Gyz@;N7;^_mnZXC7R+Xz{c)z(WIF+$qAj ztLJXQh(5vvptE`A`S6F<%He@{)o{Si^0x2Wv??^YooaqLbTQ&0hk#J0uN}H< zVZ4}z1?K~2sL4GxfFn5&XWyYnJZ@!!&*F5%y5+bKcJzR%#g`#`x}7Rq_Rf*o{C2pu zY_PRIlnLM*f_m!Ci)Y4xpiW+0FOyhNZxpiSYXU&BOP1-JNBxw4eW$jSg_}I0Q>87d zg9F;R=i0a-`Hc#I$tgduT>QcTJTc)ASl142rCzd7oM~~i2)?2IF(kwo`a#}@c~jWu zk)%2r^o*E`2()RJFsRsATKuN2gI&8mH`hzNx!GA-pmtg{CB|X#xYETM>85yJ*nRh=&RVL(FR(8CWRczIKFhGG%@Tu~7;%CCP49l8XVey=1x&EW5m5 zM**moLW1+sdJ8Jju|=Zz62May?HRCzqhLdAe!!!S9S(kj09&VMO;Ecu{c7x*#hk** z!PGC+TO#uvm60nG3St;dk-}}DV?VaqGnZ$rl^eyORIzXAjRUYLhM(XrPdFNoj_u=a zHvD0FB1qblQmdvKYaOb=DsGbtW=pe*^e*3-G5@1Z1+L=g$PJ^OWuu+WW?d{Q#T+1n z%0-LW(N%3*%m6FSV5n+gsoPcy=;@;_61E2BynJxjMU&H=hHifFwxQRTsFWo`{y)~< zF}%)2Ya4BB+qP}nHfL-bjoCD|ZM#9+*tXrcF`6{VnOSS^Z>@D*@Ad8do^yU=W+wlh zF~&1I?)$UGN*yO#)ph5}xHI=nlqf+tmv%_lMU0k<)pt)u^Gs zg2|bSS+_>tZDlazTzSx^Ob zt#<{o%$R4=^BlMmns4flv|3t138WL&;M2 zG{;q5IY>fvchm<45Spfhi`(k#$UC~E+7Xhknyv$wSRj^oA0%oHs+H%x`+usalf6kq zCq8*$xPx%q(p17s%!{k4$|^oSA8aXGEpmHQ-(al;yR ziitBrNyAVD8Lo+&hma$0i|mlt5f6NuIxwmzPBC8dJNZM5MsIr5T6Ob7iqn!b_Pcn- z-p=t$WL<}yZPe~ilI7Sm;qzy~E;gmzg-X32D!EGXlah7uMqJP)+)xJGj3F6++%U*K z%BN{bwj(uhw}r88#e@71T#=Opy%ED7fJaD!?;8}%vXQZK+@b!=&*$=CE{ik;Nbz0T z40d6uLG-;U6Kf-{MWp1qw*%&-`e~l?U<&FLiviC~YonQbqV(26W;RB(vT&;(TH{nG-fu+dO^{hsMp4#V0Qrwxx1FI&!dy&JzBL7dwGeRLv;jPOU5?BW8)mhgU+@!dO!M?-pJ z=ue(@KiO2~<#lFnFjPyl=HTI?mHm;+99GLPHA?zgdNI9 zYm7S=F&F$O`;^jlrpKMM#gmv+DIF_D(*5iw@<(jD7iM!^4-PoMxND%Z?u|uilt}fD zCLbY@uL^m6)fkrWPc6HeAlaN3Py$aQph0cw9-TPsJrOMH4t^u(I}@}$b{<8XTCd^Z zj9jQhGwhAJw$G?JN#_i1Rw9;~M^O^r&;y-zNI<>7LItyw(dweeI# zS%ise>8=yo&36XvK)nX+HUNyn)ZiZIs-2$XX^Bov+O9%|TL-(;sqy_ter?Gm{($<4 zgg+~7SH@CR;|NKP3}S&;`LVGo_0OSQ%8a_gtaMyMK30x(1sWm}eP(6BPYrI;2tYzbp6Rhh3x+!fIF4ZNnAbLv)FrP{pgmP$Hx-A)`Lqe~De{ zJGE~D#^KbDLE>odYb@Np_6qsw<=tZwXXBInQ)g%Ee-LF^8FR$Z6KZ><4;1m!^K+We z#DV8(Yqwsi6E_`07&cQVGq%MYR5bhJwBLU$?*6`ErO-he0a{_dKoPXkiZ#6{^A>p< z#DBe_W=ALW6rt)nNXVn6G6e?#TSH9TeLlua&Y5LjVxWguJV&;sRXesV$rWoaWxbmN z0%0)Qs`=INe$z+r+%K9MS^$Io+dA^_%rg5pS_Wf7SQuuUyNI;BbBNJFD$Ot2$|%PwLSY6a9dF3VBTI3_(o>FD zD2C<2t{n7e3!(qMwS(zv3a}n%VPM?|rxGwRFQ{tpk*F0I!_bhUp~w7*E;;msx?9DW3A0(=Kj}VlBtQgJjUC zgem?V+Eof?O7W8n1CkBZ3Qro(A>Y!=AKfm5dAa%qo4t=P-u%*a5fo~ssw5(Js_%6PZGZSQAJw4xjD%{DHBFi>zq+5g&S0a zs1wrF6chD>D)L23w~68m^_w&mHD8Pt+&=Axk3Qh=mwZNBQpt7`?1cB3gxC}YLYzGfc@)wN-sM;~(R>Ri_7!F*rOSB{if-6)*t2m?o}hD`4|en5PXTS! zP3Oy{I`@A3gfmYVELCJ0`7v~H{CU#nYNYj=8Gf0`USB$zI9-~4CB9kU9gkdU38Qo| zjCV^SV$PY=e7)A!7xrVJTzZ^rg7L~n+!`CKi9Ai`B9@@vhHM;X*!_V$Y8i(=cgVE}6AmtK-u1kpbh%JX0G4olY_Hm<8(mvV} z{{A2&d$w)(V8*qv5LbBe+P?Y040|Bb6dq<|GB0>%Vv}`;?=S=@O`i(^Yr~o*gpPaM z#(y!iu7z!}%~$J(U$q|!840~Vb&5lCg|?1S>h(EuRmxRR%4?GHo3+wm=+z<*B3;#5 zs-EcT3Qd*7@nM^VD>?n9n+z4P-!_JT%rIsF6ZVeUlQ1m`qI;;@CHQ+B`MXU1lGb}; z3n<;Rao}=fCHjXCeE+?)wB9!(T>dSiKVQ`i?G-IFE$p`q;Z1{AFF)Ma~UF>C^h*%9&l=Tc2uy_%YqPabs}lNGD3-&0+Eo__H7TfG(Ketekx z0GnW3?SCZp^X2FD`Pd6(!0(q+#}6l0Mer~%g14A+`A^eY!Q@ZoR^0SEk>Cd5NMNY& zIIQwGH2h?JqM1zgM67;?FP$s7irco~#COIz&$w)Mq9St10 ztIW_PbNU_@m?4U6BpboKYm*%o^QJ3^AF?MGp!<)*`c56r8=9U6_c? zh?P&B4az*%M>0&d8Z&hnny8N)m02Uj7UaM51GqDp8B!EgftcMY5h6{U)uV%TK_v0@ z>I0fXbu7QpCwubeTCJ!`;j?f$NrpDgGZp3WOd?W>WYyUWGS*var_CdD#rO?#@(hcE z+ZN6=aAZw03p~sqeblSuj%Tbb4aeoFpFjp?A6GZ%XT$d4IXnxgcJ5#durosu9(s@~#LetoU}tOo zu?LklTg(@Y%OTd3h5ZVzgp}qRU+v99|Ix~$<7dlwvdu~#!U7aE+}X#^z3yV06-)>* z5yww{d-O--+H1<93SW-N%J4}z49ib{sjnJHiL{L(FJ zt1%}Z;A;-V1c(-|00Mo3T{NtZxM&?&)DVD4W2e^sOyAj7iDM7C8GVUcP9Tg3$h5UZ zb*SuQexa%d-HOKg3;gLd4MG<-zS~$KlgN~ZYBTulhwBrK!jqFgn`MJO8r@&XQB>XJ z5+G(5$2`@PXP_sa(}`-9e+*HwKVCs9veI8L)BXCSE|U`11Gx>xf|EWGLcMx_9WKU+^ct2UH@#yFIq-GE4Gr`JELSd+S0Edm`2Gmk?ZM zY4BMWCnQ&Ubbfs!h8D|r7w&%9yKPNr489i11CwkDG#^cUJp4)02J(Tb<;BW~U>k#iCsGMY1;s}Vl1vzWonfH-7{-p@INbCzW>(&;Pz zg~$cH=u9JbN59q6uTswPMOg6{{aB|pqvmYw4!NJwi{)gzyPyr_^}03DBh;V*!L`ww z%oysop^c&Tg!U;sSO2}q`7hFsL4YxXOb$z!ZU%_z@X(Uq7!l({_`&4pdnBPdA{;f0 zeG#OYwziJ>x45uByaPlEpw49XA&XC`eazrhJ?+iR6~ee&2y&xEIb|b4l>?za!$DlL zcsb*PWD6rxsl=*j2hM5BP$?if&rc(P>V{Fn^cC=;PLkzwXnz6)SuiD-*`4+YhHVHk zX5trtK|)g(Psg)P^=1=g*4nmRWhl-7zjK$8R9R<%{NjsFk%00j#cT;4C+e=z9#eX9L^;RgB+RJ5AStf7f~l&3(oyH7C^ z3BU@57Me*ypCbrv znReeQSGilFx&p^lgNSlVhCMCO*M<(ZyPz=M6a7=2Vk8rsB$mu)InmpkN%v+zCvv{J zb}q~?N{-mN7zF652(}?e3!I~q6;_1~`Yj3PP7r6u#D!df1P3~4(xU5aIchas4&Cy( zu7YTUEeDJ*_bIV-Q#a!Xmi5vQLq7+cHyx~)1iFV-lj`QhdbTpHFh70?Xn&u|pI?>_ zX)%c9r7Aw~eo+NI=`9L=0Ks=NuR!$*41kyGpn1A@!?~$byh>3-CvX%9cVHO`Tf&?@ zCgIgf8r<_D{Y-VGj;kaVRRlG5#4q}rj>nnx2zB@Q!=q3bYHG+E2Q|ut3GC&C@&Uu2 z;JAMejeiBr_u`9Z=Dwp57%Y*1DTdI0A2iKOn8Y0I-0dCSvkc&5_ur{S&ik}X7(V;a zrY3lR>2iBT0=d75+6x)!V^0S{3lMcx?_cAx^xcsvm<*B(z_pK1?gvb4@kr8Jn30*S z;2nEF2D72BZ)baVZDsF4lj;@+pxJrwNf*)gYpy>g2}!lza7t}6PgA4dl!U#P3hf@) zC)I{A?((zZkE~^`y-tVt5iJYu6C5P=o77blJ5GNL%Y^3U-iKvX3i`pN| zKmv2cpKBIu7M?y}1;Y^;b3*i_%BrCx6HCiIB)LhK^%u*d_BdYA>BBI-=VV<`=Y^kw zmnXk}x$vDLNUytyQ~KbJpPUaE`yLx)5H6|)$?CvjMOEex*^Pz>E;f)FDgv^Gm|}U&;u+CjuBls5V_ z>?TG*&58+vkqI_r$EQ-=j<E_3EJ+XZxo2bZk5*IxR&*%nha%~skCblrhN zQH8H{3a2*5WV!+8-1b~?))jb^qZnSE_ld0vz5GcAI|2U)hhu-ACz+pc?LqmUfH~3z!u-E_~XGbqEOEmpo zY1GEd#FR-E`0;O*{(DmVKm6|>9P<9|Fx;`ZPvx$awP`IlRxwqN(%}V|k zdYjLS5v@Ok=qg(4&$hMg=-RMe6SiCLjCQfE{YuILd^&-TTem* zU{EzF?QrT1BY~N~_7FjPM1d)i{zO71BBfb#!e0kZWHU1#&E6h%*&=L$)ok8 zwZ}F_By8olP$@m^fUYY$RT(7eaLTW8(w#ij2RNDc#gIt`(G~Et-Yr@)DI^QaHRKc3 zEQ7=kM;$i(v$BG9sOMK+i`cMqJQO_D;d3hmBnm{R_5S4906~y# z&$YrkeiMfTi;yMe8EW*?Uyv{ymq3wGk?)zG-Dywdiqf0Rlc$oG z&5fzdg8!VtBa}*a`0_PNyNz+oaZO@2adn?MtbbOxJ8+MJ*4BmxpUJhW_lkDN7Jtjk zt6mp!%H$p)wp=F3#fdO_&pkZXn4z$-L5=-W$DBQUr!84rPtJ6>+W`P&Zzn%>AGo6E;)7)6Bfy1m(xHT^Wor;B56t;A{;^#1aj+ zhZ2oGqI?`jjw)3xrdLKs#*Q3Ba;E~do=``iAmC2m0L94JKYCm-P5Az}V!vkzhA)%= z-OuG6yeHDb<*;2WjZK8ZbJo5=I^-7I|>>h`eHJar~rw}{#MQe&QHV=kK zAEW0{d2s3qE*wbiMP`FNntnt`YWJ;pwiGw*icWqsy|+0g&Pf3XB4xJR;>Q*iYs7ZD zz?o#u9~e=dw5eYWuP3P0q8UkR!E3%VV~%f+0Qb0f>Nv!Z%R{h|9mp&Q*t-)rKp!U`7OcHSR<*nzlgNWXb z4u_=rAAaWsZP~vM#VU2WggC*g28|(5`acnD_+TnLYwz)L802+8PvWwQ0KbfH{0 zH*gI>#?y=m^=ZsMk!fi<*wI0<$0W3YV{{QJeTdQ-jzGhVoJ+*G;IlA)I4ZRsM)gNv$aOPKTX9z{=wl@Jm0_U82)T;+N^CM{S*B z;n5Ew-)OOIqqKAi&NmFcG%F{#LGRT44w!2^F%9aKd~Kkqm{+i`I1?Dfx71yT7zdns z%P#qN8ghie70$;I^yH=^Z?iTX6zwW~lBxw|^S!9^ZYrOFz_Y(CM+zDH zC)IUN!>wDklMVjRVRdxVp(i#MFS_aT#A|m^KUeu1rWP96`H_H&H@g+_=bqppMb}Ty z$H&shF{SJ_iFMF*!Os|2)BFf=4~TjGxP}2J0#PXiv!O&^V+2e#l}qou@eZdsldbWh zn;+!&6fY`KgDi*GGr@tM&f{9E)zxA;_ zlI0HM$xIqu@(T{YJ>pI7U3evMY*TnJ8CukMrPvSJ+TjVncS3)Ia%=?g;o=W&t4kG;Zf6#OEQV#LEp^@5kaho? zCU-E+>Ibpyw^PkPlk{T)@G)HBuHVxZ7R$tYk7cTZ%^M=R5;O%w9ZG%^KZikcmY=#g)SE;Zl? zhcJT`LLby7o9FBpdZ1uFO4NJnzd^otjs70>|C!-&qhrhz0GAsFfcb#@f1eMyIJ&#N zFF30H`TO7PBl3S{cUsSCXj@V2^T)UA8wmR=2rwBd0-hJ$Kwz8on~qNMt%*qrEyirw>73(!vb56Ijft}{eufJ-*@Q+i zBjFXr^p-|8COwS`GOY%!EaBZNg$`9!qg^%?aG9(Hr{N4Ml?8h6)?)Ng&mI&iBwZc;6_+s#@6p^V5j9Xo8CJ3W)2M$T#1H3%McDPs@M&D z4~=O;Yz5FkrL63p1e;9C?8Ca;Hj~J$c9~WFUdw`C9iv@glE>8e49*&v=4QZB#y-;c z*rRWEU>Bw6brV9!Y%QQn6Huf)3$TbVD?X$g8uTuvzjO>A=~vDg2FIK)(Kx)+Easpo zk!hx}%xaF{6{Ie1cW*wRxFBl^qQ&A*~86RnewqNL-Dii&J)dxT9h@Sf_%c zsWrVW-T;XN8Z8}5pX=LL%z@HpossT4fSl1Vka=teI1J>@9~HqZQ;ZMSvN z6vhZ0ZH+7bjMhTxt(h81cp!?ju%e#Tl>PbPBdkW&C+Wvl5l^b)wJP1TYhHz%Z%lL$ z7mf0sU$Pvga$RZ%B<8+IvSr^w-2a@x@H2dyN|zL2IsXhZmt6jlKn{Mx2C=%In{pe* zG+>c0v9!8-#pKzp?qi#a@wxhaD(|s}z>Grx_sL+jnfEW6ZQo6rmqObS=l#;_TBBcg zZPi<`t=d{glB=~UpdT-5Y`;=I>P{mEjd~HiI9qywiGX`ylwIlF#(m8?TDv`KxIO{U)4=m~kwS_Bn$9XW)SNBSl?CFgbvX;i@W;hy~$n`j-1FHAw3?IT7n0s8|U zDOb3)Czk-}matOtU}xn0G+NP>!#!xX5)9`Nb((nSW>fKZ^U#DILVXb-m*oha#xq(P z7X(Wu0-eJ3KoBj8sX)bD{#dl)%TyYkspO>FP?Sfg7f{KE>DeJ}4Oivjy}8Pej*Weh zoI!1Zc5ROJ9Lk;9$6`eNW?Y8`nRaL17Txw-oAv|Bok>*r??IiC$(_WR_^)C3zwv!v zg|{&6`gP_b-CM?uRFE>`*0;A%QSUU^!7ef_?}N z4EXdGB81i?)Zan&uAkYHpP^3phffLAnehWi7^@F;Qj(#_4*(g-)1}GrTClCfq53op zFtQuRxOqZS0WDKmRp11vUJyiUkHUN+n!_CFf?$2>Ui)yDLs0g|MmL`@K zxEbfW@I}=9>aQ&Pjf>sK}d0M-T(3w|MGLZ_@$=SDk#ZoSNU2(`WDIV12S@5DT#AO$F} z>ZGr334UJ{i(Xp9H)Ws?^h_&4i&Z;gi!d*=oJJd>S+*lkD}!3Tjf6iOU_q1{j`d>I z?x7t9by?do$FO=MNqKU6X(5_Jm){>F`UPo;RCC43!u~^KR8P z6iWb|t#yvEiFH;$xp$QfM_QEllpQm5RSScfi;jkC&7I$zTW+L67JY?D4gDDqF!p+d zi*|ybs;6GHng>H{Uc!5b{YfXNZ0mkMY3ldlcDpACf)hU zSJXnsbcOJ-r>vt?QPZ_lYeyLae<-V)uzEd<2aE5`go9UkphxPAEoM+clTMX<4NRvI zBO7?w974)W!w!!>?0;A&=>Gsj9cYM8KmIcbf4v zs$<#KcaO*C`qIqv!GFQ=H<1lK(}J$zN|))#7nhEJ*U3>=nC$N|vT|AbxmIV$DxgF8 z&iwMm2&XVl*$giHvfF6V=h5m*9D_Z>R8Fv5#T-4<%fj;Uyw$ zD`7tlVgb$10{I_*%5wP^o-oK%MkF@}Fo$u3EGE%s>Qq{JnPJ`4Uo8rep}%}R+bv%% zj5FdDm-_)6l)NFyD2w09jqJ|&WWPp=A4SaxEM(MLH?E5&|NLNYLu7Y?K{|Dh@`5uO zSNlNI5t|6b3<8l9>IPDFOtX{I!-rjzvID<)ceOa8_e53pG1$fYiL1ZRYZWpnAmBsJ z2Uf;uo~ae6M9+(zYPj5f?oBF3n2)iVFkjC@$`E@r!a2p7Ljd8uIp@aG5bza&Bogq4 zBfg~2(z=u*yCo;VWBxNpXAM&|-s|6jBZfGoWI7gmsv*X8zgO>|GCnsPf3yooctEZR z)57-Q^skTGX*sTDEybtrFNCwvRT%o(_n4ljdD!S@5%b(IMCSF>GWs>(rHszDv_{66 zBPU39Nn*BDJi$M*s+o~ALSx_H^G#%e|NI1a+F8)5Xnw1(4O=m5EPbg{n499`j5ih4 zOHvv$f!DO@AKh|J{51Q zDq#Hh&lDHHCi(7Q&V$S*Z=VtMZ^YF1i6~?v!q2#+|4$aUvhC;wyP}HhJ+`E#>3DZq;a@PP~rD@Wrsb_#%u3O(R4fR z`Kw2Vn*H^!i}=ejKK75jp;uD%f>f<~+!R+ZEk8G~M6puA zw2PPwcw+4R zUH;L6tx+A31rtH`&*_helGEQq^!WsPKae%nbDl2(K|!3$n=`rW%u2v35FJngJQGH` zEb7mc0mr}sXS%cTkE=a7OpBoUP?bJb1SNrl=3UHu3>fWej=%{&>p*N-Gm}okq=V0} zS5t!zYeZZC%vaO;(pG|)OO8rL=aW{)?m4jTF}h{#)Z0~0NyrVu4S?-E^WK{3+dElT z7s|?oahQA0vHvP5H-i0IbV3TdE`pD*r}nA1(N~n$)Nv6zT-5!gpub*?ma9KyJ7Er_ z%uP^9*h~bArQ@^pDim3p=a}PY zkLvu|FRocBK;Y=`8Uaz=pZRh*J@!2S>q!_TZi4mqsmKxG2qvfqz0^W@Vl3cc3f4$X z$-iwE7Bjv;NsgBH`Bf!fTN*@E%} zE?yx4Tl7l*Z%pA28~Ar;{$Dom-mw2OGS?)_DWR#L552YJSj*vnpP*q>>tcitsY@7? z+cA@eMpI&Ax&s*dO5l?-EO@bPc4r;87fT$mGMCfaFToxQVh;6%Gn-}BmM6X(3Qqod zo6PtEq>9P=_F;Tik|?o#&?0*R94~9a43|cpf+Z=Gj9D2`mI7lE>SOUeY0$AKaw@(~ z!p~9{uc;e3{z(TO2V~l^X|Lb4fjAHtQy9bOt^2OW$rJ=eQKHd>6Y4ELI_XA@u#hE! z+$i8_X=C^`FouQfi}oR3!?j!pFNWr+4gB;Lz)>Igw?6#$O7`6-chl4HNLwWQ><(uTv6Ef33Urq+66KlkX` zGV1&w&dCDjP{+|(_jgEyOPjXCmok@uqO&%h=doOii`S3%z3YJVTiJTN4x666Jco7_ zi||e}0CsAa2)qvVcNVx8{&TTaQOIB9wQ%(J)!0D=MNBtV_HtitXZweKU9Z0}p_mkrR~VxN}C@i*v#+M8!81dQpP3;h%_xl&cMdE1P}w176Gej?%4NM1kS$w zF$w^Zj|9kW<$~_UT|O+(pLi3e))DpEWt|cfm7TPovzP3&bXE!=PX&%gmVMU zLw?TZECmGu7VHtK+z~fWp@^UHtyi}IA73I8raw70XSW1=D596@F$JH+w{yeH9vHyv zxnd%KFzP+P>}i-xc4cUgfa+-ukXWm_#mU#p>1UrLe!+UT`M+ECKW(0PLIQaWXzTVs z7xbkx_{;tMU;JMDHwRD__(6NwFQQnQoB0OAy^tq?x{%T06q1x^^1~>JYQsTK zHUv)}_|?OZRH9@Fu66^SKIR?lO)YVKxZP$6v4CU1&+FM={K!67 z0cSqX->5j8BQz8zU4|^wnS#^1hOrJ|TFnKdLzImeZlqae8UWz6V%@wMUl-k+$BGLY z>{qLSffPV$7!&Lup3H8^X@!KVuYB?0{sXA>?~?mVrthnBiSDiN@j#i@0e}88WsbGI zlN}JH)fDi4+bH4*aQPP)wT1!%BH%7^eiOfA^K2w`>i*bzNdPmN(9 zpr9&nzp??&LsZrq1V6cKVy|TuyB9Sh6`qy2o;YG{&8qUmPP|m0Y+!+lhJ%mpaa`{+ z$7UBi{;@9j_b2=7ncscqiHM10GBnU{0>OcVfzSPazwG?unN`i*UEc}UfpBLM?^tL5 z2$~Dp-frp(IBy%{imGnQmH=F}*{2#KggkmQ4)&C@kt+{0ts-@c|7@ZofP zDoA5?<09)$E=aq&b}=;U8KXn!f~~VS;^^v1<>_J!T-qc2=nux^xPPF~)upq`VD3ft z^B}Da!U-C9Tj32QcCp{>$@0{RfIsLDqPvOq{l%-U|2f@Pe)k2HDE=|OKLR}U;q1u9 zVSRCFb9r%nX@0r6sKwvc$WuwnRO#m4FsP=W9S=sAOw;Q-qU2seB-*D-*B4`Ee9!az z6zsUL5CO1S`@1&1J`Xg5V!92PCE3-4E6AYTQe~+*1yBxe>d%xpR`oQvNJuENjXN{N zElf5My9qy7_)>4NLw5mmwDsidR-bix$|b-{36L{q&c#hMUFKULRxQ4@@Wf$HUP`ks zr%rSO;AR-zO+q}laXcXw4+>_`<0#HUM(j0bZ4}5*f)Xbb$7LK)E;Z^_7`7dwACl7H z#1zLJhzK?4n<)Ww=#o&*ylkCkT^5WdXS%63_^B69SOHX8bqpBMXU|w2R?E^&m?5Xl(9P!VSticZlLwW!NFp=N#$!IW+TZS7Ca;SgG;f z?oUc$XBTf2pX9e1dc_24F`Sb=$sYE%1Ers@;Z;E$hp!={yJQZ znxPK6d9qYXg}}5bv|o%wbg>!i_#!}j1&E51=BIWR-z`EVN_tF2c7L0ieA*gnbvrM& zrzrQB*Tjk*$g$sv`B6i*%dgE$(YuNtTdHS~&nI{ievTPIw{p#cyS`9e*GtJR?WeoL z<|Pdv%dMM^bdV@ocZZd7mfv3e6_MHNe3r;v;DkyOrk1Ykg&jwoJ!pv`7{LacH>49L zb(P+Wbtw_XR3NhBEXWAEWbVe&Z|2@|Rq~r5*yofO_k$@WQrsJz%|*T5(XDmnHYo z)aIg+o2szhPgxOnp#I*~6w{2em+Gr#ZfhaRibgdg=d`R@7k5VW(^`4ZWqB5nkl2X4^A?*+auJ~AD<3Nb6}tZaM1 z@Ts0PE~&M>p`($?WvBfHR6Mmjt+485PGyR}7i#=A(u@z9B1_y4=XRM>OqNUuGdUM< zZ$AneYW*m$Ikp%qE|qRR@?Kn;nHBwUV8G;5H!d<{Ya&niJ$nku$saK}!~b(a9ZfZS zHBt5niR?24=2BjyIEiD-vD>Jzmyr{D4Yyru_pjCI=DL|*4S;j_sj(|CvyGC4rna41 zj=H*;A#wM~ir~7mB#_br1an_TG^>UV>S(5n8>6CD1 z8ec5pakyko`{8R&UD_Qei5gccdu2%_pfWtO1QPM{$L$?X&yLSee_HPoVc8!3NW*q+ z9I=|Z!qVr)jaxZ>>L5wW`@sn0(@>(xD{WzkxaW~>ptw%{#UJ1@EZn*J>rMHF6L+mU zT8SvdyNUS?snEC}Bi)+&tkMmqoUR()>q`_yxtKt-6G!l+DbAGG2LWsNBFjKaacF%d zClpR&7Nt0FtT{r2lxBz0HU&4zqY4{Ek$L(2BXU0}jzNS>Nt7BblsjCz9lcEhyMfQQ z38gZuvxScV&FO5;3Zr-@p zN7lVxBQb|mGP!!qhg9zH=(drj`Ql>uV5-2MlKumn#ICepXIflJcXsJnaPovJB>I$P zJ)ffGqv;zXHwxk_(kML&hdJB4{&UpSe!(ba0}&L4<_E5`X=n)u(%U*|sC=+u!#dLg0PuI8EzG`qp>%2o~rwb^t}e<{Tr*<8sZ`-3m~c* zN1jk2x9dd>5)?Wn)JeN|?0m)};FWQv3*d|R5#G2Q=qoKlDt_vgtgiG+ltvPz1`6{_ z$hzudLNQ7wy2Qf+5tmV@dt2|B^xyNGzcQfrMgpuXJ%ljuWG5e(1@ZsK49LyV(ax1g z%G|-+1;|W7E)PU|wUcqMaQw4WEYZ}{T9ZV6T{I-sgRWNqJxJ|fU}$wVktHrpkEdjp z$;l*VprMgrLb)~pZ`_w=?eU(RI#M&bUcJwDqB*?1{UTIxc*{!Xa8-h&5Es|X*U7f! z$HvEZeG%|-O&3VRuf-C2in6X;03dnY2j-j0QZ$fMCt?lpjTP+#q0 z3Y)_4Lm5CNq<&PD&XZGb|*y**yrT+8|ZmmTpXv?0f>S$neNmXM^BI8lC z--jQ<;MsDfXY$mG|NQgQ3>tCarVeWEPNv3|n_YNp<z*TbeAPE(X`m!%3q}^ zbeXw%0SbJ?DN0VDK%tWHOVjeaOu@!Vc1hMLG?mH zXvG4Wjz4Ewr+_akO$R%y#pc0R3RutcZ&i>p9P{v$?$Ah6@N;I(ZwG-^S}!Lu<^lA? z2u=}-f7Uoahg3FpUMWKpQ#=btXtl^E4zAuswQ4bc?9iQ|sp)Mo;gSx)5~x&;^w}G(EB>eF+}!%_Ipn{Q>%d3?hcHaF2i3O+XKY_eku+hR%l!1{=BZ7}=ov|+pjnbx zL~v4N%J;-XC7CP-Wok0eYUrqRi4qp+YX*DX#N|bDQ_#l`-iST5 zLXy(U4t1HIu}#@4&1l~!{Q`&oXnFqKAN}R2-s@BGr;v{Xz@-5Xl2!jm%yb^pK@+-eraXD=xPphw(cq%GBCaRZoo)*=vDYFpq~&422%bj+u^Vb9 zqndk?t;ErQM@!-l=UhCFN(K-_Xf-_xQA}2URnawiQ{T^fCDQg4p-q}vg~MuDC;Gov znX_pP;HgSSBbxfVtuVGDr>k{Dx!ELB8d5b%Xf14UdfqTy67#;dA<3oiem%I&WnSTy z3pDLrptOa?dTV|L{~98cj9d^zxrgaV=;x&%8i@IQxi(>Ca;ft(;U3JXr&FXsZn*xr zfz%n|%)?sVdkFcv`2SK2I#4l6D)!=LK*eMN!^nT`MgIrI$S66zcNA3rXzu@;<)ubd zK?#%v**~N`1qnhz;&&Hv5!QpK3F)A;G&DIm^3`Aky}N;GYw@SStsgx^+i|R|$YfEu z+CE2JoNP>N7ZZm|&rpG|lh__O_b{=TJIYq!U?F@-*7>5Mtr+2=OB8XWC@jg)Bc<_Z z;bNi%3kR8TYktK0ebtMaL@2E86e&Nwr%dRvV-*w_VnD;uLI?-elFL12G*>-;g=Ud! z(QYA$ZViqO-z8)IRHwoDlJs3I7k<41H_n^e4yu59im$3w>UTF&l^WD{7HrC(CuqCcmU zUYCL=jm_|lxhd8M*ixPF${a;K7hcgat8_nzGPJ&g4%%o&I(3sLh!K+;BT>NEE^|@` z<*XP4n(iWCCsLcd@S7{6;7RusHYbS=_E&q`XSTZ=iB9J8(^K{3CO!SJ^YwR4{!_<` z+jl6Sz!$F>sAJ9lGEMlOUcUEbFE<$naxp7_i>tXCaHj8J?gBg}{8z78eavA_7+oMK zLP35tJY0&VPE>3JxCp8)TCRa2t{#n^60N?Wv|hoMz=rlY2l^G3Gf?{yg!m(jGgSj| z@o1?Vi{OLd6pt$rVZhtn9bO;-JO94(Rv(z1*YHlkCn-iw1AYsq`{KkAL9td{KEN=? zU4^l>wHyVaR7frJP#2zxSxXHVVU817O&+AHjM5-uEB3k;84d-*fU+G8g*@A?GrdW; zYSWMcePXGmDF79Kz1i9V<1e@`qV$-6C{`i*iO*kX8aNnRR5?R3&kvD)QV_s)a<@UN zERInB!Qn|0WPHMGr?uuU_~T>0OluOh>Q;?{n5>OZy331tNI8A$LCzkt9fM|O=%(8< zX+7-bsb>&2r7GRYAX>PnRCqKMnV5jC1Hm_<=#1;3Lk!0C_<)uNOsy}DO=m|5F#SQz zMRXIxc6z!fjJ56Mm?~mlA~lk6Vi|pv-G2IAF`mFfrOkZ^$9l_P5&PvB98fx1-&)>u zdyr%8It(>GXNkp+kLN~nlRqZi#v%8KQp7NbJ}(~S$7x=VU}8d$l+qAnH&MH+hjT~J zB`!%*lHAA?4BNfI9vmytk6|II{j50znibt8XRzwqM6)wKx|`(bpDrh#m4+uz$0>J; zdE2ZGs2e30)^pFkg><5IMPT&0M>7=!n=fz8pvtP(iM@8HJtDk&n!nrHUsm`Y0w!&= zqsM`X>IlYvbKUzNJk5Iu_?OvfM+KmJV!TZfW^4eUJI7Q&BhkS&=tIMj`x4R7L`6kW zQ9I;_r)48HWLTLqRwfleD;BHf7oP>o7d7o<7Mf?px#Up#i_~pfHl_o$G_!veK00_rR<6G4Zihm3iWl)iwuoyleYS<_v?mJ z(3>w{lLUxj&?VR3Nipmd7x^ITMYPGZ3+DGE^6D2UM1;6q3=Z?awihS;NKF`j$-+;) zO9G?u_=um~OC`=feu;wOdHKT{#S~TdvOH2rRy#_G<=WctGnDlmc2OML6AlcWQ+S0(K(Hr1Ln*`#`8#Z*fYR}i*Aj4Lb`bz~}*)9A4wpctVu*GbK2tZANd+BluM>Wf~1*hMDb@<(_mv8q}tLz=_{5l#|_-YQQp45-@4?_wL+Play;;2^5bEU zd&t$XMb8&O#8yhoc)nx!B$c+F6L?-*wUHO!;#gd!g)Yc^_sGWfwPu=j>ctcdRd{J;nh&5 z1*BABT)CQY^5;$^I)NkaN+-w8k*8?Kt ztQQvImv+$=0%`k@X*@`$B&h44lXPwi8It#30kEobv77EJbIs&A%gCa~x?uog2f@;!C>qRIuLe~9BjP8KKb4o z5@3C4A?zgFc^$7SSM$f+0Y@*u-4Ow9txPwXR>s~LaMA6yuNn1tsV*#(50T1ce}c?R zyi#b#{-g|M&gqQ4lK5B;)EItZ_Qc(3d`b`B+<{|QVf*s#%P?}x3F-ZAxPXijb?oSj z{Gj9vS=haZEqBS%j)p6Hg<~$RLd~*Ov>rg}v^0!J_t{smI%9b3{Nm~d zT&MM^Z?cHYVlc=hp1g_NwH_;9V^86561&cwoF+$;vHpD?&!i9*M(Sx~!`Y^-1nvGE zy2M;xi(CRcB$Ln};e1-opbN)=1j|j#SzzQEla*Iq- z8V+m}t9csBq7p-oo6u=bu0A|gWT@L|%sbVM!aQ9Db|iZBjV$}}m3QHd*{FE0=z+1= z$)$sWw%%9_xY3yj$TIi*jFu4;&U|wOL7$bKq@D7RF)v{cd_KsebnTk#xaJ6J_2VDP zZLnnAXhR25RG6mX(`p@!3MvVJo?Z_(T9DzO&4tWYjzR#`_$z~h$vS&;3KWwr#5$1NA}=O|yp(Vhh1XT!#ka4xu3y`&|g(YJaO8cmu8XNEFqL z;)&|+d-_r^Q?&Cd#z7$b)xb?rGcf0jTj&wolm@NT7QTh!g!$K83cICm%3nZz%c**b zP?^p_Cxj5}1#1^mWX2$lf{IawA0vDd(yz?HOb8H}{u`_q(Kz<)hggSHD)`Dty={`v zZid&+1DtNVcKI;OLHPU&>c)5{h^PX_M|AzXk&>Vq0zb3Tz$Z@USIP>^AYlaHM%+y0 z{Jy8{eTYCA{q6$sS-Bw;_K8*|*cM1vqHW>yiaaR?d99x6XeoUAbeg;&Pj%N3BB*=S zS7v`VYD@v&x{K5s$uEar!Nu?pM<#4GO&6WsBXQljy4SF%ZXhC1e(;2ejNTlbCQ`5w zHzS)4rRNcDCAEi<4f|UB&NW&ds1l%=BlQigY2aveo)tB}V^VSk!g=VBl-}-J|6(gY zOYNa_qJ|R3oMS6X={mu(&Ju>4BAZVW3Qy;DSe&kxdo^{A>sjG8eVDUHct#6VQ0%~4 z3$SfQAMI(CLb>D;Y=-gq3%5dz^mo{~v~JWn8uS6I$ZMY^+W0qM`tt?TmV~A$qG>P6 zJ)78qi`5l-4JxYTpSyfg1a3(-P>enn^h&KVAofFGJ^ZGQ(z?AUvGuYv(^9cCqjuIa zTTiK$XpLwJL-MD8zCqJhiB#k76J`UX$P_ekr7Q36QWbM$?%ZL}1+}Xl1R6g+Af6H! zj@g$MX+o#?!1S-YB;=rw?MhY-YUtRU1>1Wg*t5^2w+&G#^Y}&{ zh2-TuzBfqBl_}eJIk7kFm8qAoioPbOhO?GAkSr#Cu5xU*KtgS+Ye;3KU7ag7{qZgq zSks9_B__hIH+`3(*pj3T5MhA7<3%E&`jv)avhY^!39{nW@Dki-T3r7lv41 zE`!K3IiS&Ib`aZ|4m&T8zb9*}v5qHqH5)6h9C9_wIdgASv>k!6OxaG@N<$RVbmV&! zYoVNGug$hR)fYXC`=8vBzH~G@u6WHjE1%$aY-qAz`yqW}7wB^ex0$;dtu&24a9Yo6 znDNTR9S#2Qng*aC4(vB}(HyoPG-H`niL`sF_7Ak(_hRd&h}doSf3c{g*_ z60|~jJKIGK~-D;&Z(rAJ# z=mzRSZ!MPz1bacAYGXh8nP_m+1-&(;4yuURB+2W1MQxySAubC8TP$hQfilY^T zx0hUFMb_Yoz8|{uP0Cp#dUzyPzAr37fIoGgZxgUf3{`om_2nnbi!s?x2nsXVc>2gv z$PO|;!r}14iC*BTlG_j9;$A_=JVdvYs=?TuiTdsUM#$>GW#--%R%Ir zk<3Yehh0%e!IFVHK|yyhwi5u9Uq^f&W9gzlL9VLifeZ0;Wr(bUaeWaEWy1$2LhkPM zI=Qlk`ifoO@V8?**e7?8uZ95nM16NN0Qd<0++s1?VX2?-Fv8G>{YoW*W=927_|=EZ zPY>!(!R$u?qAUK%9loj~h$ds^8qF&@Duh|r*f@gqY&cN8C%eHl&W4?6AH8Ro8=W6( zge-M5K~;Dl`Gnk%Dtqdsi39jvl1}ZNCVc0)>lxm#DS_G}a=9^UC5|y8xJjb1Nh07P zBARhyovlieL_yM)wUm9F)i7>S<3mZzh62BNn+@58N21!3PY15+0Fv3GLamHb=IVvmdOGj^2~S7)HgUN{73cb;*Xd32XxjNVbXKG& z*FnDPKz_z<+U(a~(X^GSu-SF(LkM$cLI55NdR!#VH0>yQ91A@TR9}v&Pl$K+f=W8u zsT$MXpWcvn!$u2RLc4YgTV1X3tjj^03e1sfB9|uX8Y(KEr^nu`*cxqfH2O2+fQk#x zIrYoAsnH94W&kvk`h`VyUdqFBY?Zl{A=AL25t0ZG6c7KigiggT0#ca!g)0+$c*9yv z>^ID@L7e2@7(EJ|G190l4^(gT_fYM|U!Cb^hGD#f;CKn2GNKe;z3CrwDeu3Fssy>f2$w)(do;i?B>VVBo|6p}k88MT&*WHPzrfXYC zrD8B2S$#eDj|5&K|5?I4WlS$KXlCN1%>gH5w(@PH{|%*Uat$}y$U|#-ud=619}DcQ z7bx#8R!{D(5C(6g0jqZWU45hqap^$w)Fz(YKfBu9ixjVE7wSscx(t5 z*uz1>0%CL&hc!bLt@J5EHiM5mau74dIi= ziFf_!Wi+3^6SQd&ot~WIlclZ2Dp~ju&<%weh}UXqSdMCbYuIVTE$2Z%SNp5& zP9v*H;hIN*fvyz9PK;k_Z|i!kk}scw1Jsk~Jw zgL{O-`LS)2`tE5`O2))oskjhjh`_San&ZN>Hng=&iMM~R9|U1=qcS1o0+HBwUXvI-_G7=-V%oh zCf~`!*QVkKp2UxOmBJ#yuwBJg)6fpi=K0rg35rYRUmI8}27#*_+5UCMz5 zye4&<`X$P|*XSr-07Vz=<}}2&fzmr_XY}>Ykj)(@io&QwE2|>odeE-f9r?`5O_`+! zM6>?G9iDBL>QR1R!S@AHaLOtk3AQSp2whUD)Y}-$WFmJ8vxSSTbpqLMQMD@Ok--vS zZ9%Vs12UQH)Wq5gTIu_`N3h5}iDfo(mc6+%n+_(b?C8PG$NAfu8n!3%?(XeS=o>~` zC%BO%$IdyY4rRz!tGyZoGAmmR&u~rAIwtPcZF`TdIK_YlceiDqR759OhtRzzd_<#T z&`v>{n*bN5A=b_vXKPvL$Jnm?4n}dNH2AG|eJ5aVwEE6^ zaGH|I78?dvlkjTzjfT+`Mfa$ZueWxtrTZRdGc+xb zAG>|1yO?*>TuadLsd+%47jwEG(ifn)@OfKUvE+>oLKnd!ZgI0xN?5u0d4SXM}CqxL)XJahbdcu@Ms27M@JLu7k>EGC6;yMw@Qy#*`ci<}E zLK1kUoaN9!W?ZD@(!S|UF!*6TE=*lb685z2thDUyZbjxLPbdx8A!`EZ*fLdai)%6|P<1tCANHH4P))eAo9(~ID2h{RN1u)~Y=$2^!MR-LO&FsztcYeL|7{#=N}#&0m;5iJF78a?YSr4v+#VxrKfz zc;uFFntbXO|2k7YlAMPg5v@_2rlrK{UP9!_@tnPJk-H=A`SX?Q-|yjrSU%a<LLd%zz{fDr=)wAU5!ikZHSGJeMjbSq6Da4jda zl;Vsgq%b0hzlIVU?T*z^Qk3C(IumQNXm(lb1+Ay!N4@`u&ex(#8MK@p_PGE3FD>%F zAN>Cb2^51zMslyv)KHIO*J}TprG=wsdL)Bs9M=7GdVfAd6sMzJT~z@Sbn_VXwTKW zI2CXl`Wxu8SLPFZ@)npr)1ygy?4GE3d=}Bf^JeXX?S*rP{pE7)Rp#6K!U{m-jtPTr z5){FgL?Iy|ZlnwG5&)7Bb61pHyj7Xu?EjQ_b9T&mD!z&P;hkU;R;tvXg&Q6+(CL`t|D*)C>yd?o6(Nk;ZHZ>3O z*VZ+aK$%pebVbh%Ec` zCyNv2xY#i`OKf0X2IXYFox8e73e!yNm@%C_Zw<`H8Qg0+lCPRqJ-{WDC#Pr%V#?wV z)8din&Gi#|VHT+T5WM;TsX&2T@xX$t6p~r$7z+0JJ$pvGRvPw@{V)dWv17jeAib2e zN=8)&(%@^XwfO@Tlhp8LCXbP6G*2Z4Y0xcuIGDoisO`e?t8whY(3#nmGzOXztP@J# z!y8I`%#Za_r$t0roD8SfF3u+A<-sBNkt>bgw1oUwL3nvSGheFw+Z|@`YB)H;H#!o9 zCS;RC4;dO0x3)5qC^oS`09&It^w-A-ORof1U6KaHpO|A%0=sDyg*^Mvz0u|-denBX z(+%QE^Zh3F3eE~d{DF%(7Za;0v+icgt_g|Y3dX&g9VnvT9S==vFDWm>Xd7@v>ysAZ z?CQs#p~)^g6h1yVZdX1-0r7c_2d71P!K#i<+vHI-hB4Dl<4~;J?x4aS#*m#y+7y-H zM`+`Z#qnk1D4oBX9zRrW$H?dmALEA*yCvzU(f)?(Wp6vMd^9|qhZ47_7uNs=OJvA5 zqli@FDR02}Hcgw+DwY-HSMJJVtc^~ydF|1IyfYSSOsz<6u*FXcIg zQYp*^oS--!K*JdmNJ08`fRDQSaL2=g^P zc|-(P$=Frt=(QSs+;tU69i(|K6*r$_dF7j?Dzs1eP0ELHWlKI$zEXA%XGnCmRqh&j zX6fZN$JB@0@OckYL2}F$?P9$a`^y9jPw#6$c1PWazE=C+?0q15=k6+f%Jx~jA`JYU zB3f=T%>qT#R=G9!4BV^!-aa8_-79&7Q4AO+g07;%U|>*3z?!(p_jS)%jAONKEjvXo zj_^k;HAI%4KEkWEeDeEyb~yEROy8U;`J4b8*An4VpPd20^Qafq@Nt@O1s zv9!Ih-91iD*VCg>aB=kY+n=}f8jb7d9%Nv;oCev+nquNhvuf5O#m+c-=~#e&{Njt{ z<_vg_rqia4HTco2%9P_%S@F758*`($1p_lw&mmjn3X`y{tHp}Me1(*8J>ml45Bwi) z!d3)Uzdd93asgxyH-ECWpdP9+xLHj&*uD^S?k^0fN4V3|bDmWsv(VQ8c{X_1;3H83 zRXvs7cEWC*ylbhvclsvIQt)U4xa(eT=-pr3+{*HP8n=9ZL`CihID#ccZuR{8iZtvp zRyPQIUjr8-*f0YZML0kC+p~5hej?^6@Cy%!L4zE@vnZg>K)~k63klMdY~u}wxSv3R z&8~@nrn3A)L9X++Wgc7bX&fSp((|;f8`j_%Zn0QIr-fD`4jQE|~ z<+@{+;)0j|pO+JWDZ;kl)RYZ*?UsqI=p;BLcXBIVbok_rA?@uOHBcY@{qD`7@2p$~ zU;JWn=zr7^b2CPc`-$=1CiD zk9YAKs^C}q#DyJbdmVwrB+Qb{uQh+(r9P-)`4K*zYi}5V^7i)(x=BV8RAyK6sdLLR zyfZw|Y74voInib}u_8fI;L|G&@ey17lXD835IT|(b~Rr?(7*$~;NZ`}A+7{|9q2*& zi<}a2g~QFVp!Xj5mz*Io#*{RUD6Ah)T-_x;yNY{o6>(?J)5>V>SHsMPUkKTPQngBS zY-SO(0X`8>oFcOEh0n-GChKn%0>ANjw0noO3k8b6((1mHWnWi=Hqz+I%wXxy=*7{# zwwIi>nvkbw4_SxXTC1y=^`M=2(1$sI5cnE3?Ld)A)wR0VSFa(n6Og;x+QF)^IPevYNZA!WyUMi@kVdql5BQJ)(|r@ zyNnD?Vo0E!52;O0bCKnY=5TF^*Q>3 zp-2I+O^735cvDjcWuxG)MH=#%Jb!&Ny5|Fr{~=NG%NoDXJ1()U5NVTxz|O^f>@Yxr2Q3`GZ!?+Z ze&OoA*-X>?GH!=h1}34-rFAxVKdwDxoX})ihB+c7ycc$Viuxf-Y&8rzeC@?b0rtF)TRL_v zrctO)KX@wgH`8K-L{VSQ5=aPEN}iD_7||xL`8CMIQjtiX9JTMCR=Ox&#He5=MN1ma zG9kHmWlv&fU8FoEr=}<0WVntNeEtv#A3e&`C9MHOqqae=jm4Cl0ij;KV$sar8s9`S zj4T?gV?o-atE%?kzEz1j)xB~FbCT!Y#%QAMRZk^%m}54G?T|q=B%I*yN{P~-UXP~A z*VeAt0@~a|1?Xkrv~jm~H*IKHIv2V;8DG9s(Tw!fX$A3`NsZA^zF!~S`RAgtuG3Qa zB(%vaNv#+WcdUf4a?)dh{IQ8dld{?2PkmFn67x(V ziDwm7?ugM4W_zu~0Bj)hDHkCtT`p+G1cE(Ovd#>pFL zwj4|hx15l_$H~2<9i&)TjnoIEu=k*KNi~?P{D={)3b zs{Jci-_iH|4(dbX?ILkredR6KaasS4j9co_^Xj<5QL(iB#qFv4>nQYIM zYUGRwb-nv(D(2;iI7X>?+nOg*wC@#Mn)D`^4gp;74!O%TH1k~-!SlHjdHJsMlvI3u ze&B24=l28i_CGp=BeZ0h>|P_08^Go9;Mu;o=gaINoj!qa^WAt+3k77C+;+@XfFxCa zm=`GE3e#eubw{S4@d+rMb&lNJu~r52;IjK#U^~RN$!yshxHm|3T5l~Qaz>@ zIVY)%_Oc-BDs(^~=@{U;xY`lZJ_s7o$%PRLx8DmEkIaP&9vBSf-3R7;4&!9r>;ss9 zL_7Zq2}=u^iyvGRs+qA1^tN7hhU!}6s+`qVvYV$xfE#F$PRQR+4L=an{&ip7`KRO+ zN<-79KqIvA6^W)YjL!GiRdde_ZKXO@q~=8bT%a*{QDaPVl8mM6D#B1&rF$o}&AAv9 z)veV3H?^H(T<6h3xR>%yNDg=Sl@6QgnkYHjy22ANas=?_ZNUIq>5_Iq{uBvV%Z zvMF7jU{^OXZyT@-Ya5M#zrU(7?v@&QOFMcLb{z0%=A>5!tq7D?zC+Kq++PG0bLLFQ zz1;ogYc>+od1NqVD-vniSrEKHp2#e-y(6DRY`ZX{k+8jNFTJqel(#Ek5i$4MLlm!x z^0=uV;KjIv-@!z8>2s#zy6v!cOhtam*uP%?9&?;(zJE;*5iqoe6WA{fZzTec-}d}7 zmj8YD{_nB;&mAb41EcxzkCc(}XEZDR&&IOhkJ-V|%*u#PSkK{~cw!^jpKjhC)grOt z&!6fx)<%M64z`whZW2ar|E(xf{FiC|uQg{(Gc+g^`7cmp!F3=d>eo^^AW?p5Q6Rm( z@C`<@5@}AhtaQhb9o-XggZZd1-TnU4WuJW_VV7a_r_GIdc-xW;kL?rBlMIiOubLGb zfWlbVJeUMN5c;DXqL|tE{Z_<&CCP}>#^}UYrhcXZgJc5L^;+@cWQE@t?My;{Q^_i_ zjmTm;&A_S}ua_*t8;roZ67B3YRpSiSU~)#gtdeMMUbfIg)8u+WByW5j0*aZe_L^hRtn}Ij13lf)Tcw_5SJbqvwEj z+=t#{pbwY$;l?Zf>NG<~?lB6Sh}Aaso=w;#x?Ea|I-j~1egmQgpFuRvdE74CH?o@{ z)O98{_C)^bf*Qm$n;BCUiyqeT8$trVg}EfcjuHO!0GG`sfRBlfe4zlB)fqj<<{&j{!hak1ce_2 zNW8BsaJD4uSYbk%<8h#WX;Oaka(UyD@`gHH({^}sBS~3qlhU31P4l+b-G}GP5NprO zOw;q4!|`OA13v4a-qiL-<&%a*jTct?} zo7z|7MC9(F{WbFC1Iu4K(fk80tJiJt*)jSI*+=8-*4_l+ORjMebaiYq`r$*&5h-e( zDKxaTt)u%M)ZH_9+In}us5SMjQA2QQpX7mfOfQz`DgCbyXg-)fB>e-u_Q^OM|Em$Q zUG$X-!6!%H&M(ugw8*#%(TlgvIJ8z$n?reb_nx?klKM2iYiYnbh1_GE+0<=d0C*nj9*=a^k1MQUY5G z!VE04WwO@g%<1UJLPny`4!cVBv?+|K1Y^oAuF8zyG)&g?j`}vctxMe_R6kK2bK-)G z1or(+ZWZZ^OX#Q0H8B*Z*?D2PKvMg%NV7wb=1GVpi!>y&xxnlRCR1yMCvl5?#VB;+ z7VIiwqhgw7XCAFWgsV|lBojNrBnD@hXgG{EZ!dBwny$LRRBuTe>5IV&rZPMtnukZF zj8Rgv`!if!yU5ZCNjZPMo9^C=(doo_je*{&9l3ozp`#zR*Ahk;M*v|vBUWeAw#|tNa`z5#4 z416^nq!*NZYQ_L^rfNAv_s#VSVk9IpGdeD2pE5mVimiaOz&iaceWbP>Jae6yO^svL z80R<3kt_;1Ypv%=9ky#|qcSQC@o0EU6k~P- zr0&5sAk1iC;rfKq#M)591#xlYN|Js6sEST98kgwt9}&erUcAobG6{bAiS%VF<4MV8 zX^#8jU|BLSd(M!POu{9?^yFfCU)syqGczGBvyFrlw7|N$Bb}qt(rmMRX|;j6Ax3FY zq^_YRY>aU~TD3%u-S zJLD}J8XX(7XJ9G1^{>Nsm@S8z;k`@rz`f~e-L6G|khW)S0c_0C4eiiV-(&EU9zb$c+~vp-@Vizj!srOtZnA^jrz7}O8rZQ7 z#sp*G8Vg!(iy1u60Qo)nw~Nwt!ZI=(qo~VjIXFn<>Zuyk%0{grkRy9@F=nk>49X>a z^83O|!IsT6$@&rW?_Pxy3k{pjR;@*hHfBRsUenl*(Vk2*D_BP{iVCdWfqr&|s)6P#IlCC3W$KtL_Qp(RA` zD|JMO%Ls`r@{b4|5E5@=3xa?3A;!ckky~;_Sm(26i8_BM&0E*6rm0CCW;v-VJnc-* z3S%mThs#suid5Q1z!(&UG6J8|{nszoe|H}JI`M)o%C2LCZ!PZJ^+2LDuSk(IsOY+o z=jzn1>8cVF!*Izkt5?h1=rERyxPv|^f<_T;yf8ilt627AnD->LZaPqU{2@_p#8R<$ zUcOKJLRjmTZ%YcNMRvqXc4D(sf~OS8wTC~e&?b^YFl=v8&>@;V^||#3*St>p8&1Nf#L`EZzle8Rx7y|7BP52G3I^22kI@J4=tleO zrZK1I$lB-o{?6p+eEcsDzttnN{NGH0hQQ$BZEoi8JB;*?!^57Oajr35+B~?@yY0Qx zLB#7pNHiAs$Fo5%b1@+^Yaf5=)c4%{=d!$-`cmd+8}^HS^XMT3BZCS{%cOq$u!o_D zknJFEy`Ci;=dH+r;*jEe>sY4LXEoe8iq5Gi%`-ONfpCh~sBgr7XNx7md7aA(&_*DJ`&LfJDovLvgbe&#>ahrh5d}c8^LTT@n zuFzig#BO@|!h4~xFGTBjCK-I%sQ&MNwR-$J2>VZXmeDe%XZYjhg8X5p{_l3m|1&)M zU!Or@4mNDR=^1q7o&J}dvPx-70ZR$_TPr>ThTzXH5DL8X=2E{u36w&X^r*n1=J-hf zR$h4%$MMwE9gYoWk8>g;cWZVWI3ssMb?>sbz#5;pCXVNk)1^K^aDPE@MjTiXO8XTu zCbvDN*BpFKE>bc)e0IJtdw0hx-ZW9lf{()tQZzTU|r zF{UO?B!UaP_i*`glvGNj2l540!pSE%dO-HqfVx)IuMoeKs&XkaO00G@r^8cVg%y^% zv(scXIeH1*gLJu?NcoaiKOmgB!A9DO>sJ{MnK4^F!C90+hBn87h`mAYe6<01lBLvI zi6t044v#+cb*G1P^V6ZyvuFbIDq%X%xfu4gOo)8&F6N}~6eK}hv{2F-3Rjj;H{`?m zTwR7x5>3NYH$}@hH?A@Gbvn|XdQ#@|{k9MYxr3&b=BAF__N38cxJFX@SVGVc*knyg zS8@B`cw51;=z-Ng1=S2u1a9!e3d&dht?DSnr1HQb2xqF)4u>6!0*jKw@+?w{lwV_p z@p&JiIsjkM@I?}pIEpx0ep>M=jz891^EQu`ju2v2)05i*xR`_&q(ZHb5aQjmYmL~P zlCwAtt(Zf&m6OBYt5;Ucvj=TmP&Y^PJAOABCn}1>Z z<;jLFQ=N5VnMQ|XT;s3$Mre4kB1DG--{ht>@{oN2`rpZRRtIZD%Gq%3e*sl70)Bto zT8j}JddReAeXYVK<&cLH5^;%a#$cL`Nge`^)Qo1RZJkAow@HH~B$Z z%LG28Olol#_eu7H*AKiSnVuf&d+bof-InmPAF##;H4qSqJ z#Yr%5IPKvxaK<5*$>7VHkxl0BloFDco6AbWd#c_!a^bsI>V9<;y;|f?$1UhOWc5v6`qx_;_xRB7^v!ab%Q86mj zaN?_i%gRXzImeU(k-``Wgj=35iuCxazZ=R$$s{(kE z#0W|J{sEqfguA_re$v&&x9>DjlT5ICACn1^JA%-d;yw60RWDlqlo{3)dpsd6XkYMzNVsAMiI|r_freBjHr^3JC?!Gv zOsMct&G3o+@ac`IF^IrQPgJ9qYb+|@$O$& zRsX&v{&TZXjG=G;Qz*{$KeF)ue}jR4tld8?ZbtT!|Fp#F{dZt{Rf2@g!XNmNZ!Au` zgH%!}0W*piWJuz(fs}23_)&O@_@#XLpoif#QY?1oLy@77eSZ*s+g;$>JopCZL~$iH z6txSt%S#($6BnQFw>PL>h-fL~yH;qNDahyB!QO5^6R>QiL}TFV5`RB-!_GuMNo|Hx zni6jOy+ES$@^(h}k~2&4d?=pBF$EWam=9oFF(bN6cg8pdfvL3HP>--sO)=hUCe<%| z__%`yHdJK0^WeGFV~1<0z^jmhI_P2XY)LD+$iOVp`4$l_gs@DAj*){y8jKqv40xMw z((Vb_&heL8T77l?y6RuUV}X1YO&`z}o;+xMr-X)V=4}ezLsmHo2XA#Ygu$J<3L5qlT_FZ8HVoNh8Z=@frl4sBI((Wpy`6Cv7l+H0 ziAA!PiC7I95yB;~1F^y6W%VL)W{CIjVJ;5(7y#@B5)Ie1q zbyVuqQQDOS)HZr??yZjIm|Fl1)w4<;(`&w_9z*Lq9q37XxKr@@tU%N2)Zg9dBp;&UcwnLfyK}(# z;>W9@{GxMuyg_k=sqwhQLwS|?Q~~{q^{wFdJ%okgid6D=M+IDx^iD%pyk|wiX7H;s zl|f;D1;sHiZGQH!Z_Kh8eu`FsY_9)5u;p->)ADN%+Li*YDoNM4Ip!6;o? zrsNN!0I2&wY#NGbtXg}Gut4R@9qq9|9`P86@prUit zU!}8No%Th%q474)*j;KFy3U zs##p)FD};8V_Pl))x|c}R^HWAap7Q0fjU!il$el$vEk*(S}L}FoTIHcKU4a&@Q2cn z;X0$KwxVA{`+6P@F4QP+K^nsX=4Klxkzi%L`TD44Y9bUBgmZ>$-MnmzIK{eNiZbhF z>3P1%e~XEw`UyM z%lL_ruOo@$Gsh8xOhlcG`W9O)tuSmAU_B;ut3`GGB80O~r~LR($}d1Jyl%vc+OvRM zEGlD$YtADD2Q=gdJo@i&ej8TMB;G&|6TNSwIg)`BJ#N&8`TO&yzy>BD)C`swZc8?HO{Hkmo0g`vcxLENG5757)PwT6n3xlq_Z+ix$h8K2%7Nqw0q zc%jVb!2>C_5`A(GIceFFE>fbUW=q~6cN7z5rj$mCIKZyGPjuB4rLvPg^PyId@i$@X z>WUm!wTocz05@{G(4H>w8&&fDSau;3U8+xZ6eZ~lIs}q8KPgIC=~2j3atF)_ngqEJ z+|`2GxmvbBeI5Yyft(V=!e0dgP8cX%HjIqO=H2NGXuZam4}( zw>*oKYkb}a`iSd^1C5zW4C-cmwXifF8>)j)*PB>2dIiV^#wyZ^42sok7^ctv7 z*(8o!=2~6jF&<% zXVmjdtg>I#h6qkLY9pJ~kTC7nS!;f%qhZN0qgp|ij90L3Gs5uHFaqd|R*aA}(j1Wp zssIRk3$RAtXsQ~nlMhg97u0EAq3;L<`+VW48&w_1u(^2 zzOdAKv=%63BbGUNjSEM~rms&8&(q?ermwqI`lQMyoc6Nn-xv~bQfnb8k{I!N0{O** zhJseN1Pc57z@&B^1QZI-2elNew|-=cP!?q6BHKZ+sByr-*vv=5o^y!;_j*WTg&`N`aE%EP&@dJD2ZJpMiV^_wY8B*mGjgp>gAj2AY`L>jP^rZDP(qG z?p$wkNeu;ftj4|Uc@>%|;6_a(-DGja6OL6d6mW-Yb)8~BSwTIxCaDLZEU(mV>kbG@ z9#v~klSEWAAQM)H6%9wr)gSEpv^=c(ro5{tV#ZCL?$9T+a({pE4Wxf#CrIc1cAzu4 zqJUdm#{*qCZC?_D00*;eKTa}5gKG*klzLQCw+ z6pze~k;xX?X1qSJ&KXBr(ZRUoMm;OGxO#F(;1O-ZS=U1#oO3z;b2FrL<32`z-nAe@ zQ(CM@R#Wcg^$-70>K%|W^?CP$X51)Gs+>*&c{IX1V_KdUm~9;Q1btR#8=}|_5v5oq zlg){+rDIrj_Bd08Q|r3j`4(Gpb*2f!wV1-ypavNL47qoH?c_w+8pa&Ugzi;Quf}Vt z^v$c0RuN0B9ouI|njCzglTJ~qOS?#`3)#_)Xr4xwc1efE=D;K4psLOkr8Yv%7 zBK%-C{}hbSECVCm-HrVKCmmz8t2~!C3jS;t8}p6U!pd~|#L2-nf{~tySdg90rYqT) z=I2xUjjRi8b@s{ELgV&q`!S?au25Ody5Q836JT}s_p08aYK^W7)uqTVMW$e*%4z`q zn z+~^Z^lMqB8IoYYtzJXzsern-Ud=PY-(9QqS&Bhfc`Xj#dJL@s!27Q8t&^RuwS8=PF zp$imh4xAp)k9PO-gA(=2Zukh>v)}hCL8Ud6f159NDSasQO<|{pF?#TrV76(t@W}rpUKm-5qFE=V7fBrod*}V_w!Ia^0 zvReEpHA|7yb`63jVlzj2wJnQ^Lp@uNnBR~dAi7)YhRH<2{#WCHZJG104Lv(2DeY>> zi+;V}6FqCH9gl;0veK%%=-jgJ`I8RG+srqJOj4|21)2v&qm>NZiqS$5*T7o=g^jb>Pc;NIru=z=q zf3mEL$mpxvyxWb}$k1>$MMpt6F#Q&X)~6s?tZjVwh!7~+QFvl%QJEEQB6CsoESP71 z;(pa7_YMBu{oAQ#)z5v(QSMSr%hyJa1GHpimM&<;Je~#i5L~&%tdo9xq13%`U+6wR zoGC!q1_X|27rQ0ga9X84q z&FEP%BJt*cuB>)`2HzS#)z`nTm2inmRn(k3eKkgI#}bgnFw3H5M+@sLaVTwfJ9Gs8 zTAx4S+KQisONl8ZWB8j#oVDD_nQoc3QAvGYWkyEdu39ImuQtj$?LWF_v1}!Ay!ARI?2D zLlA|SKe^J;;mBxiLk10SGKT#02;OP}UXrgGW&$yJR0FFs0(6c@QPgYxWHtQD5=6AwC)SUE!%kYBx!14LJc*#ACi;B)&!6 zJKh<&Zw+)Tz-IQUqBM1=!m2Eoxu#Hxen5ZI4}ZrFRXke+l3Ly6?-q~5s!yG%drNcw z1TN|URYuj+FmKx?GQNL7lWle~aMcMtk5~tK!MJ~B!?}f;-&WGUOs;6HMoh2PBh>z) zIV!N=X3i8X*u_LCf}y!o<457)Z*iOv*+7O-Vua3)yA1(T> z!7FOR(O_~>wG`BoiBwoj2im27!x<^%3guz<<1u`j&(0{%fDNjj-aIGEd%1Q3IVl`T zQSeF$Y?)<2On${e$3gx=60pTz>APjpoh97ndnD825{A`jow|I{q>XW@n|)fChfSc0^y*LRZ$O|pvU1L0fK$nAm+ z=Euk|4N*De{oNSApp0lx$AnDd-Hzj)0qUrE8s;;EQ1Ap&f~ZEbVps!9^4oe`)qQx3 z4oURcDhwXp$@y;IkFs~CD#mN3=mWrh5*!R-yDW2b$+&x*$LvM@NXXPfrC`1~`ti}* zt%JDjisb1*v3n1-_=?(>KA>FA>%JpzicrnV$4THWORO(pkM2v@`=8^T{~_!N*!+!V6wos;H8K>i{F|*S5o1U7P`Fef2<^n{`R1XN?fUN_Z>Y@>YHQU+X zxbN$9+1uiIu#B?c(peJ4$_ z%*CzqWB1Oe%=4OMx_1F;9Y#t-tt0eJc2IB$X+$u}Qc?5QaEtBrwD5uuj1$`HubS&& zArM>?(?(5n%ul`Lg&W zH^8Pjvc7D9*1M>csPEr?TNzA}aWH=T<0|Gqm)d_{gsL#qG?ic1%xhoz9sU1KyOTC@ zRQiuOh%ebmaS7$KGu4-s6Srg=*!25j>NgxDW??1@ctr-r90GvRiNWDF|2~g7Rybdp zP_?usu}2m$`cSL6KpHa%$*_`0spOQ!3yD?l)h;4$%#+7XHFQIKJf9SgOOD5Nhs$U0 zDYnPSNDY;$Z_80Wl&YZ!ppe2sxAYizD%%63;@4uFBxyrN8Ax%YhMeR~S#j5n5U6_! z+MEhuGJA{++@}N1xi=O3&kp)`Z1lHoxgVgQI{nH0{mDk21L4)9PicNf*MEoJoIn@Q zZ+F{|br2`U^zSM2TJXOJ6^jOvgRDlL5c)K8s$ zc-z52=+~buVVX=-_lB6n zM@_MZTrb0aK(%L<)j~C?ll~hZ!hfH^Yl<62sxO@~=6}*CDHvqPxsYhdpnp!1KO*@s zO$br$1qHa^8Q_ApF4{lNK@)0PaY|^bzMp{M^TACOS;LO1{Ejn)7A%C1={~w>P)UfG zbf7k3@?ND@#4ZA(fi;r-NW|Q>MUGNE@;6|z5BN$P>{;{ce%_xa@<@Qa%4gxJTBd}Ly0C_V(mRX0p1OWCm zM`}SIj9AOw*Kn%OJ^@=-Gtbr|M{3_JO;jB*Mp3n07VyGBMnvHq)vS1zCo{n8SpEdM zseCQrIQEnnrnARN(b^r?q@QI=u#45SDbR~LMdo-1eJrOj$U#xHr^S%F+x(Q-{q%#d zL2lqHH4(+9pBu#o@#$TSH|Ownw6`8;qCT;Y;)6i)U5UvDX+ruf^Jj)asA;J79Ok^i ze5L`R^$#K567+5!!}j9c>?gGRYF)0B14EWm3aEba$Rjk9o73AV6;Fv$@`TknlnkBb zA-MQ*_O?!5H?8^VLW2E9=3KZxL7Db6KZ{IDbEB6rcFt7<(sIX%<6LlSm*QM0G{Ef_ z${z$Sq>H+&)kt1>eeb5?u}_=F_2j5s!ad~AHaXLpy8^5_dwHMH+CwP5hoqrkEmCor zjAAXEnRW@tC)#W>l6kqc(Pn*X8L4ZK3k%CPwr|K!R+@8ZZJ8k7Jz#7~6S1O{ z%2hnEm>g1*ymcKQ`1nd=EC*sQKDv>=Le)_&shRcFr%s)ZM8|`_RoV1g`n|+b&sQ;S zI~jn=%Fj**r%_}jEVXFPhE#Miqlc;nksH|32@;9~-O08j*w?N%G?dJhuxmeKWKh#D z)_UhkS-COtX9JLKGneQI)h0_AMkB)PiFWxrzys$5aoEyLMz$_I&gzW#LC9AkM%zUZ zbA{r}7l_le+d68#0r6qm`+;~l+{+AP_SQB(rEZ5D!0#&tAmvvegIv-Pt_`4Xu*H{f z#o83@BNAU_HQDc+z-XC0E`5;9yW^w~ytJk&qiK!W{gW4ZeeyV1Tpe-S;)Y;^a^O3r zx-UEs7rLUej_awLd{qJoyN4X@{(UHOa}O{ZX=HhMuq181AyO%vFjtD=XbiKlB5LC2 zSd8#G6G75YYb63ziQP?)T~G;MiPLK~dAG~gj}R0Y0x~9darTqywFNfg(f%CPn|0P5 z$_V$O1_mxC(bjt3;{)itrNsm59Ea$4aptu@HaYq}x1M_FRWoPtR@U5Q&Z6FAWpK09 zU@Y9W9_8LKnCj2`c>nHK+l_#7wZU3@_faTXfmkUEA7p1?5CK4glaZDLXh z0biHe#Eb)gnh2j&5?=N8kQ@!d8x>5X%%=&q5klRxEykE8xMnb`?Kvmvf{eaffu7wp zvU0%S4g?qpz=mE1mjI1MTgtzmFgqS8AuDfCfNY?zq?=IioG?Ngrtw&BTWCZzV*I$j zI@)=1I*!-pcPDX)l`P>1ZF&;5Hw;?_wtm1Rkuk6n9QE@^4sS<-X0~k#I8tW3;Ksl` zgB$xn2BR=bT1ZNG5^f&VL;(0(LnQ1f{F6<9y#((^O@s*e+b2HKE6ioFFYWcFAUT+b zU>s+f6ymzBVaP8o`oJ>yZybmK=WjdZCERLqdu~vaGOZvNRtl;MY=LbwdQQs@pJm;R zDz&+tdCrJVY?(@GIFQji=W&C@pAyqclA=fr=gu)&W0~DNt+<>)44jiZNk`}#GVm=9 zobw8T9~fYT?0;T&2sbggHU%?r^Lpw=Qli;5p>!y>J3+hl%4s(Gi_)c&u2Tn?+pq&> z7xKfnsSR$bxuWfzPY3Zm(197@pw@v|G3)xuhjGbWi1&j5o9id>W-#1 zPxk3w)G!G|_h8#ZptFMkycyF8n7HDJWNsScyOwqLdH1a)O1HExvqRkXg^8B8@!p~s7J_tGr6$F?0br*iy2 zTWke}^n-TO>(t^V>MY4R3-c**tk$B4r*%9my-kv=n%jHbgmjnbH9peXjBM5x7t_vv zIZNjHn>NT)l$IVOx17@x zHy=E$7T}z%;-q=2&ex<{jGNy^&3AB9RW_&@@Jd#sEIQuLiw?X96U90X7p0D}PFC!3 zA(=m8@3s#ievO5!vwB@zp{I1ZJ4)$35XtFwchI1L9!eu)_|DL9GjJ-;-5mefo+*)Q z=3v;m#1=Gp54q@t$Y7__QY$FD3)(PE^Iju-x^+n+D|QqpT;c7zv4~ZN4>^LW@b84# zs^C#$bm@i1tc!t747%AsA(;Fkm0ecH>toqkZ71w$-0L}0%No-2)+Fj zlCofxH2KywRL|Cg@1f_UDrj~@Cv(5SJ032+UHut2RXX*4-ahhuM_Z2dWI6pJ3S(rZ zo6Z^wy+6j+8~PYvpbLuT=&83&)5#Pg!nZwGN<$7({v?h$idmv3wQUZ!NoCXIIaTqR zIi7N&r_f*09esK6g=E$j9E(&aE;okaLW4nyL&5tEeF!D8HNZ!s+@|yU`OWV6CWsYZ zssbc`Zpcp%3Jb}z59SJ$KZ3^?kq1mm&{AkC)JE$HnM-KQ7O+sPr6@EbO97Eqn z9&sonp&pC|@e*-{yQk!(M6@LF(GFEMAA1r(DT=#0STHG{-m~E0fwB#A(!nx7-2nY) zH9-HK-Y6c>t$foW5jsDD`YHSd`eN7&cCKQ2vc*vlCtg@G{5@tRW?bk4DFlYv3|WU@ z3&<%Ii@4meR;=hY4UsxLIRZva(YqI@!tb#vRd$PnEA2aptFaun@ z_}v<3ccLhRq%(G^B02v2F@pkrkuU@3u4O%dzeA7+qhRq@BheCazeL0-0JCVYcs@lb zzh&v~i~E0egMaslzkUbPAi#IsucX$AucTJ~|81Y(`xg}Zt6wnU}1sH%N8@`9*cRwa zgdGY5iiv+oFBo%(F8{@3X~>VAzGr-z?YsodxaMSkfFGRy{0mt~`Lv?s4}?L0XVH>A zWRPN}GCh(Y$Y8mhR8>*CX7wOU3yD&JVgcx%2FXED8H|S*D+>qUnb_0S3e+(+YQ<(RezthpbBtuv&u@pLA$Y4PSKyeHJ-J0o;Bvccb zz%0Qp)8y_XV-B5cYbktgQI0IGN{NEtJM#I9uc$FWV-C%4X0*?q$*f@6P9Um#V$n6w zu|Y{PU+301WZcj}Oa!vdP)gU!LSx2Mmgr{}{)+5sr9R4T*ni5jCt+*+>Vsy)+C!>r{!mxX|f8@tu=TvFz&t1EGYKZ%du3&rPIPmYz6?~Rsg>jEVyx=a^ zk?o#ixgChT;KHCUI!6U4s?C0X=J%Zhic6{rJU}tSqw!@*WjZm$JxD%(gP5<6e`Qu; zI-?~Ew0>w|E5Zyj-pn`fYMd6LMebS|1@xC{ltviWPZg~zIwypx;PR!Mca0CHcwC_* zPS1@c$;PLQu?vUM8a~3`z}`JD?Ccr|+Knh#$qAah)DgDZ0^2GxvXL}@eiExh6=Py> zOwBylGm~owRo_2N$UlHK2-7}R&e9^~DrOs??SNr+yF_PjSJ~WFK~k6OWbI9zwk2Tu z_2NuVf1u}ieN#g7?CN_&AEmwe{Oi&ze`5l%LSD7pquF24=QgaL1=>Y6MAODwOsQzjur)?8&73>wEV1`U?8sx5-_a<>)b^|%-k|p zorB~W3YRkcpXph>GWQ+OXK_ExkJSss_%X=x`j#r0C}sv;k3(4~v^qYbNVrSA{HD1q zt&ZY{N={*1*}zh6xxS~pMSFt4$vUX~6!VGm&+g9$2HPmvyC<8$*}M3~viqHWP%SpT zpCbZNPIWoF< zUfP!wLlmw`y86_lDFoEGD4*K&ecMOqQO42o{h6%GSgZ)*)F?;ix=!tuA$G#i1yiC{ z^xW;p<9zVlB=;%AsU-ek+&=f=-ka+)R>N$3>AzSDl@0r_J| zht+}QUe&c4ZkZBGE;uXZM%WsB;NV;TeX%H8QnB@rGGdZHE^Vi#o%LDv5ADxf!i{?s z=|hHa#0=*(l7g@ooSTLWlxLvpL&`JLK~Mr%CjPG0yP6#WIo(6MkFtqivYwQEhtH!) zY(PZTNq~Qt$#jXB# zPL}Eix8h+FhfNa{FkWq$9Y^g;=&OGS(f_$?{d+(Ad+zP&tCk1;I`>+B1-**@Z}&4> zOD7XEYX@3qGY7M;3~~or*?)YY{I8Gy@?a~e$;^LwurIo&)xx0rc40xR`_z+qtb`Mc z@COM7>HGViY{?6eEjY|L$ml=Ne1J>%u6wSGcWoF39maqdsr+J-v+ljW0$#H`UT+_p zFM$|R!g6u75L*q7`E0O%-a%CA_z~#gLt^+NKo8JINJ0|=$aj(g)}WpKoZUHokP8I= z0R;7iYii7*jL}2Su>_1$QBtV2rWfx2#RrlJNVQr-_5K{Qr|tc@t3{I%AXg_2a~%ykN$uQoAC2#(S78a2^qgrx z8)fOcZD<`=0qEQLrPlzCjM}905mEF7I}3riK9%RfJ5QF8!|m3bJ!zHj zby$@#NIoNFP$Ky;0^v2v)7#Y7&8~(&Zd$S+r*P$rELA3=5OuwJj#kStw4rTH159<% z^FZfnT6F9op8I?cv%p^zVYdU)L-v`&>MK=0E*PUs#Ck8ad_<=Ww8wN z*3+0a)aH9uIIF3nCSkS-CAPJBveNeylc=!cye{Zy3bxr$1>*<&T`|tx+B2>?8iWT4 zTqSt@V8H~;rhK@9Py2XSwafwhj>r2u9bEvvaZm&13*q#9JgL|sotQAg`a7s)W&(WL zF%}_&V-9MjDT&mkG(VKOn6Mq{5t#sxCy5QrNbZH9DG0L$cqtbTys-sWdWq38uPc<3 z1tT7Um~gY!Mn`%`V9z2rqpt)2I`mISnN`6zFU5}RVG3lNykoj&M)Vw?MBTVNbE|^P zVi<@h0e~pFpIw^$8hE`|a&<_dpBK2yF&ZKwyAp(oE%WjTv!Jb4Gs<}nChtqw6RF^$ ze-(tf6CZDY&G)fcpMR+D|5;!Ez4EY$xp`i{u7H%kDo^VFW93QP7#jVn`u?lcMhgS^JCNm|z!ghOK@A{CI$_2DR7o4gE|BztE}y>FIypbly{^EX z@*_-|g=hk8AztZB4l@{!9x@qUk1ngXfaG1Pa#;O-+%514`FsZn2}Fq2g%>~|qC2Y< z=@k{W1#>yIgL_0NK#pJt7?c`Ih==x7^-TSlQmXl@O+5QN>gbwjA;W6i8d9Rj;nXvp6e^?N?IdPV za)hb^k`#vrUrkdDt+n6^>(2k0u7D;E6lL*751n0vTakSSblg_`;GSRXgHb zDUx}Yc$m(a4~+uzns)#lm%_DRm%iQH!w&*I!m{gjI(i8-0Uf>5PR#fRJt4Mf-uc^@-zwc!m4yt_=pe z^s&18ylX94g;LOts*(j>+FJewF3)W{Jy}o;l&64ei^>|2LGHRf3&(3(?$Q2Yks6cd z)P#tFA$YvMIF~w{+j6IUHuU{(Zv*1QIVF>_NPEV*9Ta}*>UcwXw6{%u&`P_6G>d6kUll^a4K z(vY#Nq34(2BB#gb&!I0s%Pc2go;>Ft8`|^va7)wCH2ud%sE=Mnqt2Av9a>;jFLp%J zVyny_7wj7lPi@svQspr@Mhganl-CzA4M~z5MWD4_B zlqi`k2a*~(-L4+6qUK_P&`@br*+Fa3*cjZQ=&nks+!GR3sjT6V-PHK#wbfXuH23Mj zxMCS61s?OEYqELmwe`CB$+7uJBE#wPDFF1R{|^wRZFmseci8|9@fuh>=xu?g8cQ#t z5DhyG2Z17!JPlgbVYjU0o$e6Q`v-QfIxf`$Opwolx4sYxQTdLpo z>!f)8_E+98Lm;YTBB=VZklwsB*EvDKz^Y+Ln7FVxh@^f`(A-%4gszI*+-UuloFsVB z7Ehi)dY*g~uK|``^dYo6W0;+Yf{}(TC_2i0-^eK^9aQ7Lwf`uM-ds-IA*uyQu)H zLeN9@dV^pSm!=2p<=M{S(poc(+pJ3J$_Zej%GXE`VIn;ugIH@09GOAP@8andhJ!4_ z=0tTxymW>8%osD?4^0i~C#wCTBiclI1HX{sFI(SZOA=Y0MYU0*g|M?Ei4vRgj7ba% z2{Q@h0UVeHy;E<-8u>!`08O&CKq;B-23R<<4Syq-ZIN@c!g7>O|$|OMFiVWH!1PvSL zzVQJavgO-R&d$zw(wP@oii8u~>RQW_r}JQ7&;0g#H*+!aT~(NiX$Q$*)Fn-MiLk{UWH6V9k(m!z!92K^rrnK5vRVKCluNH_O>6#`GRk zoxgG@`hE!H8+YMKWwyM+bRQlp<5H-=+P)-NY*ax5d9+efx+Ut8u3|W0IByx#lh<+u zMU@gFsVh7$PBdO}{=^Q$&7)%+ZdG(}n8?Z6ogVM}GK~QSh$8@5{|W!=aekjo9+L<) ziu1cwPO~Zw7ju{r@c|U95ObwjaSU0&Y`KCpEz*WxN zNJU!MJ+(ex^Mg7@aIoScPMlc&8G@UXfW`eYebD6cq$U$Ob^~-~ok?q#6&1*>%-82s z(JlkkN@mQhFbz&pYvPk|zPPkANXPW4Fi6MjiJ6i#Nr}pe=`AQRqPvJc)X;n}e#Lk& z@dRL1#;$9ji3>#8*Cstl$rfH&kqPCP<%Ofhk=S_hTtv^?pDe`}!Mn{svs!DzqlY`0 z4Mx~xM9dId*@6Llr2*4rfFT^Tjxh>=`*qZr|Fll;Bv^?&sGdie-mnK!)Ib|+HqPU; zB;!u9PZ5KF>y|fcxy!YUY|zMLT4^w?zLe8An$tL&(-_5Pq2<4*d}=zV>^otiU4LTQ ziwe`VbPd*U@Ua)1I76I z{ScX~(eY=E5}Ht+stELZpJ2WOjh5?G15JA`X^n+D#lk_LxW}rhDe!BNQ>dQ{R1v7w zlMqC`9}TdpG8$j*X`bTv^nfJ&spPvPF}2n>NttKDiGCEB@$AfiCVljbGMUt$Jk9Z? zeqgPDetusRq^e6rn?Esz=zfRkxPb38mKGOg6=r5zm~6zM6x@?`<@KxFeT)4BT2!bK zsqT()KPjB-np6jg3c?Q<0&Y1gig~QG$m6SMltU7Mnd1)<2E8yitZHDfXI$5q+(y-X z4-`s2)Sx2EazGa|#Er%!wx4c=bw~D5Qo75?al89&P}<_Ee@KWdsE@M-Mu+JQVLRZW z%-W21%qHvVrPmr2rmVHMMpvfa#T<{5PPQdfav6~*f3!bDsgh^39cS&c6o)Fc=kM>; z5?lAjDGx@8B-=!jrZRI~ly~G8t8G^-iiH?CW$Np~TJ*MQxyrwcTnIw}^7YVcky=-p z8Lc13JUqGczalbanJ=6x2N)+n$X{b#=z6eHNs+on6*Ez#SCtLet+3-{&qt9CQDKxo z2VKqNJQP$Waeoj5f(pwPKLT>1pTYO6F8=&ECU_k7UN0BvnL;q2#RJ)ipOKtvjz6$K z`7#R7SdaESm%t9i2Q+OBH>87|IA;~OM{c^q*2r7C?Ngzaq)%I$6HTdz0QN!WLq`2o zbMk>uk=ENGmm6Y&7%bE5n`e!7u78XNcej+j4A*ZYcqhgwodsRF_9$p>$cQm~!k?m$ zhN=n)Ck;IB2&zavV4QG2^9}N;+L&9NU2M+Htj(>g^^GsEW3UYLnearjsp_VrGvj>F4F?=q4pH#OKdF`RS43`0Rj3 ztQ)G{2Sde=9A60|DF-nX3hQK7T+dmXwcu|-*cZ3zV>qow5b;VW9>H#m#A3zg48`Ok zo=yYhfdAC|EsQFdu2c~1ZE_iQ;tYr^9@Yw4hXlJ#j z;N9_~&|P$`H|b(}kH9jR3ZOo7I9hg~G3j>U|5%0HB@<~ixp%+sx;Dc{aTAta5}a(X zq_hRHg|GV9w6qT6qc(yMJfNz8iXEUG;4U-F7$Wcc)%m2RWakE46oWa3=;CGAru^>t z#&HGJ5O4=G3{uKPkI3bxaO4N&#;cR2K!@NdoJCMeV+YIwC?@+_=wzerm&-TnvU~U! zzSi05x=;YhI`8iew=?R4!7^|$96q(F2`he5cU$_0oN)P81fy!a4gfF*nGtE7D}7Zj zF#t80;&&5Ye#FFnYYL?xgacX&XF&5A4o90hu6A z=ATyZcWT&-i z4sIBZTvVr2%Lf&AzF+~I1H`dBzZ-7Py7YJUP(IejE;ta; zpP?4IJ64t(VsLKoW}{Qv2+NQ?$oo32#&HZIysOgLHNS-YXR=gm$EUPO-5AJnBO3Qd z?I&)JHNb3%`(glx(>@6aV4>bXk9+W3H6dvmLR)SaQf37h@Bv(7y;-?0QQ4iT;kUDwhY1^s8&lWiI4)tLJYIY&Y(`FZ*$y418jK0!gx09;Qa=Af2K&#$|G!@g{`xWP2}sJ6zgX!h zUoYhUGl1`3*T4TIgZ)eW(zA5>7qmVz?jKzApknZNG1PEJ;#$gf7FlQ6`vRzXNi2JsD6@b1*MPLqAnQ#v>Mwu(gM|K{ z&*|S!@UM_r?g;1h*HL@&<)~HvKYg+LdZ2%K=d_A$wts<&|74##{J+r98x^Gfj?8$44~kWzaM!JZatFO!4B+yZZx;7yIek8(Dva z0ZJMLm>`>LmW%Ud`bz2s9#5ASSWRRwE~M(?mxRLgYuUE;WVbV%LcmUiBK3@Zzr2yg ze{SC9dmq09g&iI4L%_+EwqRCa60Ga|f$*x+p<`TU1O~+fH*2kEnmP_dJb0h1cWwgR zM95HWPKdQc`t%VY?p+|>30(q31Ayxa#OgbS6PbVya-_07KM#Pa3K zLXo-iNx8ct%d!^ZYQ1cCx-JjC50-pZTr9q>H0QQSGA=e_3>b^r(Mkltd6WiXjO!}m zq?}y9eS2NyS4v?Ci*lZ#5E~W9K`p;Y3FZ$|^ga|(i~uPPap3l&mM{jdVi$0kXZ4BIO4|T{+}rK|w*m7Cb;Rn=0TDH_ zpTG~H-u73+s0v3On)n)7-{EQC894kS-U8@M9x-)dUw;XG#KftPe8X7zpw`2vsFPtx zHk}&fB=~a8x$iOF%&}j7kmaSEXckTVoPu1TG<&01ly48S2tZkFlP<@ix87BbSObV^ zN4LXX=;0RX{JlH=&xQEkmuP0fxyIjUr>QT`t?K_@OVm=&!Qua2vi}nQl(+tdJblnS z*QUecOXVhsQ!0mjlLuCS(CzM3J$>1xX*ezTpA&15?|WBc;tPHkScu|8i!ig&P=#K#h^F- z6HS=o5QT~iP_fPIyIrD(VJ+T`cBuw`ReVmYl|yWy`r_!sT&;50*ghgkWr4=zz*mkw zy9N2O5w`=*R4g@NH`~-$q@vkD06(Idq zmZzXLCQPr!QjTp`KnX>Bv^4gTpC`REDJ1+op;FLS;rcABsfbuAGSI;~@Lt6I5C5j( zBz)9c3|A?z6q^dAX8P>tW-vK`06q(#Jv~;XrxE411j^5rZ)#@U*n1iEnSL+qp-{2@ z4p)kHOX=Q&BX=X z&ZSqCEKU%{#C*>aT21pUOwL{0(wKua)-W$uF5gOsC&(A7U^fXd^mDru79@MuP`4!h z;Nlhwtj%0w76ll8jE;W~eqd{va5}*~bebp%?NnZV-$82{p02}5tC-2NK8X;z7zuT{ zugBH;Q*>b7Un-%7ALt78My;r{M5iXAF-w{JG&<%_No$3`?FA&+8{a+{&9`m$Vfke0 zrdT2~EintZ%6q8--~2rLo3zAV`-+9Vl(6wT>Pa3-+#Xf$$S#!et6A_X%M9H@jJRd* zBb$SFUI2@C*EQ5ROo&F;%qD+V(X6)6=LG1g5;T`<^aD~x=6lEk$5yp*hBM36?TFAS zoIhSW?NFCw|64k^XT)jee6cNJZO&2U)5%F_%C1}ZH}_;D`i0vf|2u|I)#2Mo$~$4i z+L|Mn(mQEV{m85(l*Cd}#M+RfCLtqh34+D_mY$L{_74mXK)@>DD_#M#LRN7`euNwe z8OCVB*(Yoo>qSl=Vj*^3KUpw&Wdh4+Y-DGft7TswzqKN`-1YYvdj7Qi^!+{{D}N$hT6(V5+HiO*rvPy4%J-U0Ag9V*{2v%V(Y}J7{ED?{P)LKOZ$IfjT=?Wbde7*yh&E*(kB84!R^7Ta?qW{P^I9*OTmAdDa7Zn zP4kv!o=LNSq-O#+!gCs%nuIjmmjyJAOB)MjbVu0YRg5t`QMQBG{}?o48DDFHDYFzWLbY}{*honXSd$Ib$yGkk5-mg6GkP#VRh6u|LYeVs7-lDaV9)zFc>^fSgGNFfL#bA)oOrx3cM6_*gfx{v-!8%>}Mlc%M zhKyC7oN__GV9s6hSaK?FYT1}T-i8=aSTV}hz^n~JMqYVT7M=o7O4F7$9U5E#aT>ws zX6vWRBoA3O1jY?%Szn(`I`-vrN_X#VUk)LcU9=}QF0f)ena!o-}F-nNMd%m;6?7P@E%!35Xjpe+@wqX)2!_|&*VT#iFnC*NZ%^fR; zy1e)xoD)k6^R2jsuaScEeBrLPBUf5v%!z;*^OZ#lSp;#b4%xe@~6%)JTh?C zk`^9(b!(SQTJ>jjJ5Q#0EgF@mVSbcnx6OqmMbxYNd^-<(ywHrVe}k9^)h^a&tgudV zAttH;k)LWIET5NcHwg4V+8$U~&4`0dBF13$;GzAnyOgeG&!G55_ew$sRU84JDprpS zAN2LM%*H6Dh;a6bM=)?6HIeYqV%j;3P zNo0s~4j3`XN6<*E$-@%cUXO^SXKDvADR-6Z+jHd?pj5W_1$Jbv8u$aoYL;o&3Ujs4 zjU$c8F-L45nu#;Cn5i8K&2;&9B&0FkPx+B6+iJB`dL;TC?#j(kBK@8MBd|<-m>XBy z%pklyQb=ia9URMfBt<^X;~7Q>4%7SZbIuXIDwR9Mu4yB?AuYT;c6GQB z?n_QsJ-91~^XJ>_FK|L;PZ(J{F>DG0^_b3id;<=c-cdRwf3@Hpw?E$Ps;C=X-H$oE zsIf9#%GX#hT?3cLNKzwGjt{DIr(8V&0d{m7Hi8qlb0O4FH<=Z%Rig|jH~SmYi%qSO znmWi5Z@50w)1l0mA7pb9*V-@|cAY_#1l|U zpX5PIZ&06$S8+_V;d5_bU_zk5OznOuD3aXkI830xZ|+QFsvjhCBV^a*ZLBq}veS<9 z=9s9agj!szPVc^pra)-aQadoQQw+VJRqQD}atyVpCi1 z?AUxJjLuNXTThHuM^b<+jt;emcps_xEhlmOA>+N2N`Pqj1R<7A`l+ynxpRf~#v|S? z_lX#$!pg!B*MGi&OyGke>=utCxe=vLIaoCdBSpK~?w_9*1Gb>ewP9}AR9NKDIsO+4Okz133X7=c@dc`AvfvRu@)A-e3+J(lyjxSzji`w=VlRH!{5 zHbd{vP)fBmfjSc8iRAfN1vY%i&pda$Qd9$Of4Htpq`>3$617w=w^aH){#I0q%M=cC z5S6e_$x7Va#LssTIKtV$ewAgCI`|cq;&BRlUrFZQHhO+p4r}R@%0+(zb2e&aAX;Ro<+< z_J7ve5jW1iAI`&!m@{I$%s$%Jy4u(KmnKHmhS62cjV{_&qXDgVsSId!`psTYZIS+v z=I&zny(*1&n_hO~0E2j(Od=AsRacx(M&X6k-b6l3Mm=zH--RK02Qfs>8Z|Ja695A2 z&5KhS?*RE`0ekGU_}$pZk>KD3+XQKcif##3KRmo)42w}aqvu1ZL@S8xAkvdVF5D+M zuy0H^llizsVHJS-8oC+Zv?W0dvr5tBFighP*QPMHs>euMf)KCBuPN%fi3B%{0S2puN_KjQPmY47~X56jT={+dDw4Fx>}gV^Hdf z^xYGE`-zcZD`ejO+e1r^#v8!tCBf;1zM{uK#2vV+Zt#;mGhFekbPAV*MW<9v=v!Su z&?)pYtbTmnE>Or!$!-88?>(ZpHg(Nn{YYW_yRgKY!a51?GZoH|Ryq%=v3^QmhGohD zO?;H^@bO0sQ$-Gb2^qv)DZ*v!{D+Z=7eIERH@8bERFFDRcs?fLCVByML^^TZnTQanhcLS zqC-#M=HHkZPn64pPvfESjmRW0Rq$4oE@eKBCz9)j~Fg@ zQM`P+>64}6>rW-Bt@I3lC&A^8?c+RB3pgk#*u3fvP73Q}RB5 zA`TPHw2Jyadh(@bJM0Fi+IS$hS`oEe{RNB#VJZ=Y3NJvjZ7Q_#k|tR0>q;sJDVo>{ zcS&?d)lEv|0)4|Z%qZ(p)fl2Mg41qzF^ZhlokLePy>`Z+H9Na<--Nr~@tD!Kv_Hsp z#woWOxc4&07EwHEA$hLEon>o46*U;}>cqu=vCe&O5n3bM+$AUbo`b+4c8_Gf05z(9 z{3i0OVI=yDNSLc4AvH*s${9j@9mnv_6MqT<`NV+sYVJiW61*Hb2R1TT7{oLX{fR(p zC?G!^0DlK>&rRqquusE6IQ7mZ&SlQw5&TSnIOjT-N7hhU{CzkjiyRsDeTYU952w&G zl5D3_T-EO<&9Gz1;`zUdQ~!kK-=O_dKgAj$1ZDgxPBnjB2LG>9Heq8EeP=5tMPn;- zeFJkVb0>EtCx@>+Os4>3}5y|9fc8f`ni=tlkA4o{;Qa+yzm8H`O-^XVBhP zT@~NqMHqJPL0s3fvAjZ!)dy%Q)9qVXiy#VmI8YK08EpsnH2*A9`SEbvK@`5ql)kB_ zX*U8R3H*Rk62kUstmAd9#d}CNIj7Ik!`{J( z7pmobS`Jy^D#k4ePMsFn%dM>>w+c0W|tz5pn zZEy-Xjcy`C6N!u?6pC64xmkMk7iG`pSvq)Tc_zQxxQKqxSf=E{Pp#@G?7*!5Ah+tP zu^Q(if5UwedGIX}6VKVH=Iy}hGCmrQ^4M$&WK-KX^yId6#3V(YJ6&|7UZQ+*As(rP z6saXU=iOteZ67Zu?8fZi%Br?@zwDZbku)1a5_pD@vtkU4jv>HM77klhe$5Gsp3`%; z;$%K!L4oNX2m@d;Yl@5{a8x`8?jH4?qQ~Hcf}Su%KTCrSzPUu?Ea9Wc7b8euiJs_*j>Cu>E-@cy_*XIF&vuQ)?BGZuhQ)V6#y)cSn=*HE6QS z2qS|X1jJ!&UISK-=fhEWRAVbaK|)zZy!Hxr)q3Fi0V=!V=sTY(icjx-CC@B`V20MQ z_5mp8U4Ha)c>LpJ#N@#DjbQgdw5@sOS%RFTG|p}UN+YGmO^;k%w5g)&V?_Jh&GrRu z`V6YafY_8YS|%2o$IAey4n$Sch7>W-rIxzlQ>M4O%1b^-w^Rl>v&(r;1l@bw9$#Vve3}{ z1D+uaM`1-Gh)L%4ifSXoPXz3;TpXz^QMdn0rrI_ZSz%73L!zU=2?E1RGQG!mAkirZ z{cHf85(r?8i@3AgV4Sk4m2~}T#L<6Clx^MV9sX6JD`McGY4^?e`~0qD!!ssLmuN(_ zpM*3;SFk}9g#=^F*JnA2IBl3K6-#HLn(}ZteFAS*D~}BMPG}%zu2W8)D%^%t-fC8+ z;h5A8$9>MGUD~PDE2h9ay`bj+(p$nvrtLlVfVK#FnTt}`vUSc*sMUfimd6^5iFkA1 zOO{uB9LHIq6AZwv_6y*frT_enOWlsFT))&FP-}T`T8GT_AlSssk*78 zC4&4(BjF*`f?R+Xt}1b%hA&~8YiG%}W?eiOjA0o$;-roR}%$@}ZY?)fx zGg+)AL-FyNzH3QHEB*p(a6UIU?aSF6k`)B%6@p=L)J+FVL6h)@^78si#QuBx&B7$Kzq zJw9o&DAc`TECCK99_1#KDbh`U;_PCQg;wpOF_hRa8~pt^mrkhj3Nqo;e#OAf^KLCM zZ?q87eOzPBP){;%f*!jw6j-R1?icuNGJwDS<1xOXfg-pA?~~pyBlLLgc+EB4BO2G<8T((<@GdsK zQOIHE37XkafXuG9PHjYZDdq|iPToSr4>rQ!mH-jA%~jo}0!_^m=>sdP-1nj5O9sR) zDK%&nf{DbNc~I(+^Mbt1nq?NT2qCwCL#5aSx0FWXPVGAP*x7#1tT4Nj=`e1XXAfzP z!$09lJ@$C6Kg;E8jPTPT?s&fvuf5QVecz=}gaSd#8M*2!L;KNhXODJ*1MLGA@!@M^ zzrNl(lUgZv_@mDb(Q5q}qsTSh9S$R%{ziA`XBcA?w-xgJTbO}!>>$fr`Vh>-%miJU zwxoERZts8$l7HSLq9{;9_E3AGo_~XwonPJZi%L6(UfwoHLH15T(D*ci{!Vz1wm+|U z!jE~qNLG(DLLqk`Lx606c;23py}kCmzm&ZHJn?^X!JmKy-V$6h@vCJY@)c$O?~4Qs z|GKel;B0PXWb8m^Zf$2p_wVRMTHoE)*-6OO+U{#(q>Yo{UyuA-(yKf!+0XxVhkMbi z(zcQg*}hP9qNp8JfT|55Tp4oLVoi20(dlbG%rCfSB%dIv-XOeR)6ZbLGMH!vD0p$P zt)@1zv`4yA6Z7N!M81T{btB)W`Z|I@pdz3Hj7yDb`e(FV8|<1*UQn8OWL3)iat#WjFok}I zuz~cq5GAogayjeEx^L!BB<5pnl-m>Kd&i%{(SFTd8oesyc-IUeuGzCBQNAXP?v-4D z9;RT!9qoGDOXiLACHU-;BP8wIDxk{Oe%9@D{Y-Wd-?39^3kS<3P-v!T-)%1Q$T)eS z+eH*RFEf$L<)fPPHveJ3f|#R95p1OrQbYi2w4d5Y$J2!qMI8bF9Y3hV%Li@x$?6{5 zpLiIgazE=Vb`*EXD+)L1&xm?4MUj(hW{ui(*?S3YLN9EY4Bo?tphhok)+m+#4i2A> zEn2D^I7Bad4$;?2oX}64OVQ_@TGSk2LXS24PW8t{{PX4i4U0dmhxo}Jcz`chw0|XF z3jb~L^*^xCw=<_xGITJvbNX|e|NkEnm5SrC{q*peK{GR8Gkm`^X`kn`;1QJt1*3o! zVUt=~!|ZWDxEyf0LaTrEfL$wu%8Uc3?8?UlxSns$PEC#F=w0D`D?%S;53|SIi=cuKgh*)r^F`~IkLQI-ZPoR;NisPzgUop)etYc8g0;8tdEqb^e0lCjXqjpy`Iig{AJLA39JJiJ%2g3fjsF@D?akv`#Ff z&GwRb`(j zXcyv$(OySKw{0jz6@#XxCyQ3uhyp=P&d*eL#i?|qxIJ*nsPDt1{;=(e(lVP12)VJUHG%p6SYk)yfp4hSyirUIqLe_nSSLt#l!Tnw^?ob zE%KKFGNa8PJ)BT42?!K}b`POm*N$AWLBqa5OMo$K_rWz+SNnME_vh?APwWinPG~Bx z4AWyn^#iSl+#LNVfR${0jES8*UevC0lk(3kfgkQb{CAOL$E>|Y*p+Gii{cD1ARtg&544O^PxL@0u(H17#5 z$(hS6DNYl_f>L$2^@t{GJJUhbT90BkNt}HDz;I-e$FP^~{{DhE7e>_Jt4nPlag_CQ zN#5Ub{>gl_CCT8mA7ZF9JatFqy@SQtadXmB;UiOI@aX-ctH1yW4q09xg)dQB1d{{> ziM;$Cq_t$1u}fZFp*9Fl`95E4kQKKKT@X%2rPPcw`rz(a0tMpIaDCmouQE?<;Jl9) zwjWUbEMlolhoVdzqPhhf1*kXd8|)Gys9Wk@QGj=0zx%M`cKc^*5)74I(Ny7YQz~NZ z4L+M)OJ>chERK?ZRLwIOj+~%peYQngo|07AlNl?py!I=3H0~dZE;3>hN-hSmU72Xd z{NUVG_L0&1WIZ_LjLZj|90PGK1erB_-1%dPil9v1NznlPzyU3Zmm+<0Qb=>2fC@V&a$;B6GK`Evy8ebKedW%Cig|VJ=0BA^l}qK2Aq|m0hwuRr z$NI9m7khud-CY)HA07M448_#ZEceG6lX}t8;W6aZW%7)_i8hg}uGiI6p*)lD=oP#Q ze0)K|r#vi#hQ)3)VSs~UBhJ8vdXVH9(trf+@NH*qacqJoq)VChs+zHw{DHIm4a@}+ zq>Zn@ur&X5Gd#@u3)X(73v~fYr{Epb0LZ)e5;K4nFgNa!EcgoLuVI9X0$&Dzb>vE& z9wk5*`bwpqdBE&2u?9I{UaITXmOO9D8cI90O!FKFFJ9b_Ebd&&T~XPpyup#6ax)eO zgwv)tr80KoeRY)LDD6yb)6rNt5}~QPAt>=_S28!#beox=IRD1;r?_VFb|21IvH@|7<{~vz)_Y}^gNCC(`dU%l^ z4e6R7p1^2TFhN`V$iRa^R4EL>4J4%Ts=ei{*WYj@Gf(>(nI^nU4yQf4F5$j$1Y>6! z_QamQlaO~(SDK(-9gJ2TOzNd;kW|OBLKRn3OPR8^QM|_y>5q8P3uYHmHq>mPw>71! z3BK@`!|}hX&qwMvILL;yCOKDH1~&{QB=9zeNR|f+yi3TCeLwz%r6W0moGXTzE5}nL zInu8wgxUQs5B|@;{kK8>c<@ahSPs6g@g|!z-@dW`w+4~dclz2YWb+s2|K+;}HNo7F zhf#hXDL;-$iVJ3Xx8TzQ5)jCOhY{)<;t8x*r| zo`lWsArJcvpng}(JRLacR<#tM?Qs4&a)C{LOng`6ZrYv)%H%o6bOh<8{~$ z`Q{XAt*g8z74Nkg!RaLuUoCmdBGE-V%0~QBM7$lpzpi`#iwigUxr!Lh{5c!Tb&PI1 zX3VQ(1IXEz8BuKh-d&F8Rx`UZ;4=VYjQeYiCc|99;OCC($T}EDNxm$$t=t(t%{;k%Q{{CE=ZymOtuau zSZv`Y3Ql>G?yvoB)+bIZL$zX>vYDTs?@pRFUuRLx@2+PRsbBk@9Gk^eR_2loiD>9| zC`CR6DkGsM%vywVaqUJrI8y`Hl%)Rp{oGa)22{+nrOjnYptXo!RN-27yYiqKrvuBd z%Z65Qb8!zLk;4jmdeL@?aVw zrwdr3%jag&M0%L^WVzNlj|uMY(js+zmOsX_ zMDkSiO+DTw-TDgfCK(7Hvr9`*vYDTP6ZBF1XH$*YYfq*bbxfd17Gg3~x3%G`O?wVF z1T4u+&l~magjh;s)C$D$MND}vbZl{CeiEfZHou)3^TG6j;bNQ$3 z+_){&l_17eV#}pw70W8s$GVz0GoXTA<*mH<^Tb?rg;dCm5Xdzl(c+~!)PHs#+dGoV zfrJ3xml?Sr5$!j0o-i?CDqi#HzHf+#+$<3#w>qEp05Hwkl2+O+fP$1}+fvW-NAO|V z-?B3no7+w5f}*t-vAYAg{E%GnQ3W~-Rvk-b%%-ed37s2GS#7!iw52dw-?c05j6I0} zk6{Y*XG=@c*Ws1JgraVMLk2T+8Q)91t)@AVrU=|F6*68jnxnHfU7LyrzQ!f^MXFk& zVqt*b2=1x!7#?J1lir+onTglzgeI|N`|6b(T2!o*Iw`MN4ZAlz|5UoZx>s#?1tVFVPq)m&p%d|iqj^> zD>%GItSM;Jrh4@BC}8b^P5tYmOXqsd&(1XVZ-S7f$ER2YzRK~k_T;%gVEv~id}nW%tyO)dhFdWBN;Tv+Df}E#q|;LF%jic{@^sLQa!+Zjzen$L z;F0Y)Uw0b{jluGw%ddfPmI?Eqy4mH>jv{<%Q6r$7>~mYh(a@yogyTVLmC?rSGKmIA zI9&|eqp51detw+8d|k&&4A!4v__(tdOORxNY{=43bz{VZD7xJ142cRXHALjrwqR;b zvleymXTwa((g-V!?YO?4QnT*~C6HCu9f$#2Xq;fJV7uci_SN;7y`kpL5UxN( zPfeMS9kzD!qfHlyh+e;e)TuzNOjjq$kUJ$LM=w8<9BFhTsJkjWby`!*3`9QUh@S&2 zz*@4%(?L5E4x!~7^pLTdu?Mr6x$)V^kBBlzpluUwre%$ga;_D*Ki*}WEsv1ZSLt!bcVJ^n`507l{Waa7 zi0@5BUDMF?vcHDSkkD_IJ7vUuzF3e)2$EY_v&dyl+S~_m{UweNsa(_iDU)oaj`V?= z^(-p3(mpH^>(02}QB!r&8nML#H~Vbr8ka~kT&d`00$5@A*4YetsLNsqUIk${t)$h}?K(vu>cVVbAi&#%a+^8xc zSK%F=4076IElIvyC-!%zzFOA$?O?3Gh1UR-ey|a8&_sBhWv?tO5#T%zNV6C-d z!3`n5kzfx)L(y8?^K&SEU9LTaLRPa&+nyjYSJ0jmcIGf1i>#Q!#y?ZbUO)PQ{1Tso z?!^+J)_X9iZK2{)sbt+18!Be3Sl&2avamlw-2KeOBc>*?QY!sQ;6hCP)8d)LmG4x} zAg-r8H)%WUwyu4pkXmZw!XmegXFZ0~=kXdX%}<)L zpJLUJW|K}#P#z7zLHG3;Bsf?4xn9%pwenN`TfFHm50H)bt`1eMxsX>TC0inB-C!xd zY?${t&4v}M`WOm#a6K(Rds)WFdBy+)?IqHu3faf)Mda2{zJ8;GXUJET@T2t~!Ry$o zOQgG4*$byVc?8E=&-^r;flODJCb!PG=%TJyVK>=h36I-X46rT2R4iOlx}JAEf@xgH z(nDhp8#HbyE4=h?gHk#dQEXGLcQ_UGbq$R3P>XaOCEnO6nGz!?{ps5=}plCg^UvC}R4n|||;}iarpmJIR z*u2Jc%g|EA8=ffhuf`u2+gfXzbW! ze0&8_Nfx;g+m1_jr{VyTb=2&>p~8kIEXml>>g$@8Q2i!FWdK<9K>31e%-m363mPR3 z_r_ec{Xn;hjao9$B;3zKXS;3fxTn28e4}o&~5SBPID6xZaY@ovB|UsM^ENU^csCwq2P8rSRXJjd3k= zE`S1}qF8aJG`%HR&keG93LyiPvJgsVB)Hb#*X(QT0WugV4UUwd&g5t~b`i4220Ru6 zpnb=p)TkLX!cO|F$3v9080CY7;C0o?*A||-L1OZm!UVbO=2$7a#5PG3vbcx`;Zpj_ z8379M31R_XK?`$B{fy*gIa_^V=mYBSK3v&bRn{(=(bnzkfvk$|0KTQ|(On(L%*p-YR?yE=NI>mThIaAw|)1s`4XBy?O#au5V{g{)t%ey9ix#3b*Pi8%3x2o&T zOO0^vK-)Ot*Vm=xHgLEextK;(Nyl`-kY&x{z=|SvTn-mP56}!x;rE`2e{*bl!-jC3 z$81}p5{}___bpu@Bvk;A^W{hxNovxNXy3w(6Gh~cc zLlQ&&lyRe`rlLc@D=AbZ2Bue;wWy`c17{@!i2%7UlnAbAIUkx76{u{aqiWQ|tE_w! zddua>e$6c`hSZF1+U73)p?r}ggC9E#aX8~Mva!nL>hm;}^|ms({rP?a%#UOGNNp!HY($STLNgNgKq%4QYYWf?zqIHH=aB~LOiC_Zk1!VwI=jBBl+?o1CxPg`{5PQ zxpA3~CJq!{BXh0~0bxLk;K8J5-{IIK}>g{t%fg*K`Hh-?Ec4=Q_|F zmu&qFKIAv%pjVNR&~|5`D>SgiuPU8tjm$ULhKFlHm?soxI|ECNOdD%hv-jVM z`^j;Fdn;9SU_v;;8hDn!G#~S?#Oj=uTfV81&#?m0)l3cTXQ)Ma#`soRW!uqP(($B< zad?WAH9Z?`J!YXAn+H}zzS=ra>(GU>?4c{^mk$Ubs`~=-nDzyuWL(iacs}bBx_}Nh z3c-txfR$VZD{JEKuM$NLzmuYZOsX!v`|ESnHyWauYs?vz|3(T~hy}VNJ`zLZEvg`e z3vAuwt`%gkhftdO3i0GpXtvt4TKdG2Fco2{u307*emaslD4vZ z1PtUxiPAOUlEkxgFG(cT^-o=a0CY?RIgHA$>Cr`~NjkZ)*FpYNEn_uw5#t#!4Q`Ee zQo9sx5NCq`)eIGqdZ-vngJ@h%Szs!igOH-as?!LX*{LD*-j#JKEYR~+E*`?p=RJ#! zkX3u2&f4i418RNI)fjbQ3xO5sp2tb%%Yj{5kh;C)tM2R~pR_WO=AhGk0h)bmP>sYw z-Pf+MK_=DGtw;E6!M%+%nB*$#ea0lfN3(RQ~>5ksPw z`fi^d`DLc4gdP!1QXNI2%yUs~gDobCx01T5E=Sk_ps)A~BqnKXoeyOB?@UpZ9C@tu zMh|~#9ipy91=-~A1b6&|gB1DRA%#&|Lzs4dOc#`kb4-s_XW$hWI~SzA^JK?YQcgn{ zmwXH^h;p3r8%&qD6b}XI4W1EzVoS4L-C-$L16_-#7aGd$nEfZQTFRU_9$E-%L|EV1 z>qvN$>@eKenctC@VaaO)Gqu_Bu)7Z{&KIP_XbPiBpWj}x!&adZKr%K7ntvRn>R_Nm zq!F1AS`6sC*^#5Dn6R%=v~rqkPvX?R7}#@gc48 zH1Dx6{BHY`3q@TQafJ@}(GrtBP6Dt3Of0^q3|Ib~)c-^F`_sH{m=p4M+agdZX+Tf$ z?=f?}ECW3rN&%x1-(w)oB{1m~(ACYMj2~wU>gdB*>`U&A3BYVQ6upmKj~T3-<7r|j zQ*r>i;n(c}xNe~o1gAj<_;h?S30@0pavOgAtAqAWkMy^%`qM!xJs`B}_-ctZekqs4 z{@a48n6Z_~zdLAu`p^zvbH~hWZT={MiJAVYuNErF$YC+Sd&Bza2;$4HB^L41VN1rH z&gJR)ldJer&H;kqpDt3H817f7>DsEimai!l;=TgC=2H$yy%Ho!4M;ZSY)@cKuhe(@ zd_F^bhnluXI`zD88)TC0j0V{Op?nJ^1Q6-Xojby5l{za)g!4|{X;=!T?itftL zQ-wSzN9n0xabZE15asVa;;K4&2m6~00TW}~YNR}!QzPB$C=0eK&B5dZHxS?MU_)G8wrjS`?WZ2`TBQp4u%Hc8MLxK*1OK zB4gK|Fc%M6ZFZ7(bd-Df3&`yTT2VLI?(Is#1(;OY2goESXw}_?pAY1BLv`Fg zc(64;B2ryh<{FDBtaG=-q2#gno_!8wjC$WZa}q)F2_GXlWy&O!FJcBLRdOMd!cc>? zTdH@|kM&2x@K0F$Ctx7f)U;N<00a5ecKv?=7{>nr%(@K{13ZuH{5dJGM*zQ&pW^LI zgz|iuErom{DzZ5NVkPCn>}DI5TE@fJnMh)_f3YO~4S*N2K?e+)iU4^TiRX~%R3=VL z=k^b;7trrem6)XV)BRpBB+NV;PuIS=b(M(5IZVvS0Zcc#*XqOw+s&dR3hnI~a+HSEOOgS?We< z#DZiqq`QPD`g*tOVhG;TtCdW+7DBP?%dH31#$K4nHfP}mmi3b}&{4>$mt*s(ktYYN zlQbxFgTDHnZiIy|+kTH@B$-+$cQKR)`E?TQ1*H>1W)Q(^TOsmA$>F2i+yx(9Q!?aw z6w867e8$!7UV@MD^h+2xw^0q=-il%%5ztbf)dLK8OdTCA?cCH19W6!B{TtQ6PM+Ob zzjh#mTo-^a-;&wZE+;2H&rZpQh7*le(Az_^ipl4JrpebSRJ-$>8eIIsqphF`OO-H9cPtp2B$A1we2 zAn?`lVlY7`j{dISD{6aA5^7{6+`?~}#E{QKvnjf3feQOeJ};y*N^{|@^!;6Ldiew3 zyT47KNgyl12y8k}@F+RKfR>Wx;CMybgW6pd!`ftnLUDyS8%at>;;F&8b>?_^-<2iU|nW)(b)AC#9Vi5gD zJsmJOi?R?vZgfvMCT0!};bUZH0DLaWknJCf{nIXgTkH>CdmcW(FMe4I;ft?@{#U;K z%VGk5?Dm(PoUN>6zSvsd)cDV;w0|Ex#dVvnnISyu1u|HIbbf+3}PR(}b2x&dFt9K+})Id;iPo>+30h3hQ>Eyjl3=q{JoJFg{M}5!ZFbgJ_g^)@c zsw*Df9P3U+Inmq@F*ATq)kTOP6%&X#rMO*&1&pXcDEY?oew8*?Ls1_86rWE?Jfh5H zlP!J(^_U5yM9D>_P~x{ck7MJaib)+gee;oVu9z<(M(6=sp|H-N!{(e8KlgWK7; zyNsCXoSNFY1j2ar=bT#>t5r@bKpM+r2KgamZY8bCNfdLD7$Y%Q8n!hmj=}*2YRbrp zRLEowY8b9fJ8erDvLs!A75Dg>U7wv1i~^o$ ziKPC32B$b!*I!5P*Ult#XlxnK&DD_@`_{N+-e?MUhi8$k^N^4@8%xNH!7;Bcl&7J<|cE$gM0F{bTwqK0?dxN`alNNcbo+btm!NRjg{2tUloWD?+z*n(xnKQc4 zzOIp|8ja!;3<6f0-H-ii`J+PUjZGlCy*b=tN7su9ceY;lk9Xjj2-QeVn}L?FM)0$* zZsUfD8SlL4+YxkQ9XOFm_XxQ39h{bFvMfoG znP&?axXCnVx~7S?Mmw2|*&!X7^Dfe_gH9G%rt0aCY$p(gch>@7`qjFbwJ6-8QA;Vg z0_`3AAwD4$B6I8#qII=*Fz1#Sx|9IDF9-~q5+FT{s^W9k_U_poV#oZ==s$-0L_hY& zx8Gatf8^!mNJXEa*i0cbsAv-;V^$?|EQ13Gk~!%W)XT;JH{0pkMm1383p{3-yo3EA zqkn?sZy5a{qw~!XDi(xq-_XhaD|v#gt);UaorKL-Gv3bDO8<+o|01ADO$e`y!K6<< zttGPYx;=8@-b7+R2X|q86tJM{I+URSISF7>9lv@$E!@__KrEioV6NB|s)DajcR#PQfvzl{d%`S& zILjb1*%O2iWNtIn^MYT}S2ES73?=-8&S7UWcVh)*GSiVc1`c8kLK4jwC&M^J^vXt^ z$XKtRcat$-IYtSX+}+X+Vpl~R>JmBjkwd)t2#Pt4qJ<7Qjj~B`am8hoCQs5ccZ7>~ znR7a+VkyZE#Tx-TU`rJ~(!z%|$~fBPlSdR;G>g&?loKmv zj0)q8RS;ean!sf>D$`jkF0mVjH5W6_Vx4766CTnRpd{DVuvlN4F3!!&$}OwcH`Zw7 zk9S|qh_h#i!e~6$&G+ZQEI>#mD=RZN*IjHZR=ON5`#t>HTjlT;Ec-kPii?O4phP@W zp^8iutj#L77xg_T(m)RQLuvpogB8xA~ET3MmK<4Z0WPZbR-IQlEH8i-so~>cE zu5E3st(2_fEMZ4IEF1%Q{9G=95cBjP4?9hHTx3RKG(a9lksC7YnXM7F58l1MUgGfa^AbvGItHxsrL)7wkOMCX0_z(w}hR>6o zwa2mXnT{Z$#0cyCUA?C|UE%|wX;e{eCK_v9cQTZ;R2bl76s8%tD}_(weRE-g5Dh*& zeWR&AFM-LRg^4zEvoRw~Hw@-X0BKO625DHRQdzcuJwfM8R_JfeEh+iJpB`kK58 zhj|kb-DL(f9qV6^?pX(U!>OO`_o&&-!?_R}$l2&w#-yh$B@Ickr zGNeZWV6sOQ-CpvMF z?f#Z5Z7NZV0qz$KC~OG7-5cXcW>5STgxW7NgsVz8(Xyl5^q4ck;kL*O&3Gl9`z7qw zNqqE6oyA$3IIU7CQq>0LxDtE9TyUQdjL_FgbV17@#R7>IURaZ}Q+!EO z+#hTQHcl{EA`{xdXF@(hanL{lFTTVv6=TMLLdO!KWRjVldeI&13(C00SoF%OHw@;H zi+P%Bq16ts1lh`jmh>3^8NQiMyWxuka^y1+nQ?ZAVXLSjstIZCH0r+VD1juZT_=&w zVs0O%r@7_VH8#ml6uf0GDkXff2cfByuM>QI^xP+-A(c~+g zq_HNn_8?GUFJPTi2@*2&L?s3Tb z+We)4HAx57>1b@zsE_18m6B9pDrCHjq_ANijp^$Bt~T!~(0Z}f-Ohs{5%>zD zXM~?t67fKs)XM~G2z3fUq()_pZ#^^*2vM|U%u%^#NUnb_Ys45&3SF<8dwLrJT{Imu z%ne!GsTEb_1o?toh06Sz4KAY&lW+FzB`vi}V^FjYW^$`R) zX?AR(L=||D%H^FC1^^ER8~3T-p1FnXHE@2g2$CtVs3Am*!7huI+{S*+F8UL6P@jH6 z!#Mh$`a!M@Vy?KNf~JM!kki3~Zj9Wb3*=QiK&vtf16p?f9c>uZ-sbv3-6T@ISEh{s z+2?a#v(;VMVKsjJFA=6uPbX3=9@Hn|yl{wvsFD*aHr%Uj9d5C_L@V6+*F|VB zxgX4_(57L%lWjbnc@opHxC(%zskz+Y@)E;NvgFQHlpbBVcl#dnC2pn+)@7Dz@o`a& zsxcrQLIJ^KV}ps&+Mx9kjf-rEktz2ug+8n4uUGu-Od7(pm(m%tvoR zH!Ym@GwAe$0z`-_N@uO_kSWA8LbprlTwxlNy6qGo687@J+I3p$P}-y^mbVfq+5~F1 zUCHIhhf1`qnpFrDBc;M6(@kodvABlLc9q&k@n;91XkAonb-iB?NTloBnxn7+IWU!X zQpS)rw-{A#P@0WUyev91e7om2xQ#xkp~3hB-{mre-pOaF95>OoS)|V4S5iJJqo;!q z?$=+drui_)R^YvHt{Tboax)UgK6LekC1SXF5m-32UyPC112-PXVu|MVhJG-(THNy~ zvbD8LjdKnV`#Q zFrlP%u^A$R))NdX(J)wGvXfOONj0@*YfDNuKalm`hp*!W37*Js>AiWH#^%lmvpNSz z<6*;KA_=H>tXNgH=8Lr-Oyjg!*ZvnnldSYU|7<% z{HqZ2K1~x6y|N-g75lT-9lMc+^YHMn>twoajLHk=l;dLroN`YBD#8k*|Er1g+oEMQx%G#{Yq7|A?YpA26At-%Iy?}r+nim;}%6H zJt=g-lsi0Qc{T1uFq=hSH|QXtR>>htgZIJag@;muhTG4AiC2aD(!ta@d0nj09zrjR z!6vdBSeow>ydp6j?Qmc0Ycwun#k(~eR$R7l^{<87*FAUnMFtXsed2g~T6rB#QpnQr z`)6s=eYkoL7TJDD;%_BCY9$Te{Rsr!SE7_^z*3BViT0(K_D%-!rGYdfbP+;5B6TrB z>54p;QM=LT^OCZ=l-p7c=$Y|m#jUMYM7JHjnx_wNW-*tg{aT-QfdR_2XJ5Y^w# z7R2#u!fP7qw~NfPYi~aW*Zz{D=p(Da>>&}cv*2kx8InQ_nT$6OrM7<_ ztHIrV(`muc8^B(f2w2Vwv?j_;N)5iNLFc6wK+2U-7J(|&GM{FxI{8(0XHT|PiHYR8qjDAUQVexDW*DQnH(#UIFC^w}LL(F>VEL>y_-n_N;X~)r*nN?x=%qXRwh(2YBmr4)emDwbuNbt&Pz$)O)X& zuh?v|Jw8y+{?nVE0{K)<`I^nqvFvkIxYm@u=2B2f)bXfsaVA#hU-|>e1svj?|)|!(_gADqZH|YFVP;bJ9BV?cJfFfqlc&Mkxsw zw@{`h5N{u}QsVJ=7tI~V4zc;w$=JU#Y3X8v7=P=6$a`CR#J6UX?5X5c3`10vy}Q2` z_(7T7l>s~Ow+TIX2gKv9;=??K5OgJP$S&;_=1>FrE*Izc$3fDrVrLk-8(x0}bk)jg z&ouHIY2uNVbl3GRq{E(MdT50)V08+nHj!C_Uidl1VN?B&6$zdZEQf-|J<~ORt>1)y z05?TXpCsXIlfikZI&L}IvObocf#jSzv}0!`bTT~V%bcE7?7r@<<{^6SSc=xnclj9+~L-`uor!V>bZ^R8_4bQ^vkq$KR=9%NHrDjKW^C zsbdP{GUl*3y*X4S-PZpx^iJ?{qxah}*ng33dKX)S%*Zp+>zuy%_Qxh~6b?}|cN2!jVFY(8UUoi5Riu#5r=3iaME+{kctTbyIF@OrlyQq!>ngqyWxwFcDxMTXf(RWRLBEPb?S%DaA^EYXx ze_%`==rB}GR$GSn78UF>dKCc?zTo@+fxa+V_eVZQrFG>7hD%K)HSwWA@G4|d8^)rWE=9Ef_n_KwpBM^fT zZVzMnNFl*1?c+1vk&>%2Fp-7d=#2BLn-SdaXa~&yi9S;(H=IXux|xAepY`Bb!i9-1 z^jK--jc#mb_;Wu=jg`tP3O}QKQL|jpC8LE>r8xP8DwM&VErLpl4sW=qlQAp#3SGy; z%B0Ei3Gc(7@R@P0NR1pwkZZV6yRRJ3J+S?SXv9tt*v^3EGwRVjlVn^^J*G=&s%zrL zm+l}FCC%zg_G6?lQpwX%{_88qPxi1=gWO#Y=Uq>Ip)-`pUGj~~9y#$0EM3qvr%Y+N zHJ0d8<{37FWL&*kQ&!}Cc2b6~AIH>zD6LOKuMzE&@2|193=6bfg=Y!cZRO^|EX9 zbVUW__3!P96z zv+^v~qd59CXyAkS2b$Xu&9hZhjHBsl>0)}rE6b~vvrela`?}wT=>~b+`iX5@wP-K< z;mm?DpJh|^W2R}_rxY|?`4mPHAeoZE8CDWl#_D`#jC{&9#=9;XJf4VNGnFKYVz;n! zCO*|7@S>)_gBpHvL(+BvT^RQtiC#=JpOeRb)3QvE1j+l+J>{NDAjc*Wd6 z6Zu6- zo(qMc*A9rJUNg8;93_x((}c?wiEuZ@Sj!uV)yK0Q2jyg9WsgM64kiX9LT~zM)VfON zE456(rSt)rieu2~8HMZfk_Z;5fRfrX4}#Fj-$bO>N?cy)U+cTSV=&x%Gc)s*5U~g`e7<(TCRCCMtqCr zG=Syq6>aP;^1`kyiU@96%EN6k#TwBPf+e>8;# z0Fd~v<7=mXk*5ELJ1t{i`@Q^dB$hF-u>G4&t>|KF`@gp6Q)*j(sZ)P#5gQw5;0xCV zqh>VM!9Xy}*QuCW5rAsKB(a9=o3UlGQ0urJT!kp&N-Amn{Io$nEK%3dqwZ1-?kM*qm4KjM$e7DCm`8P z2!oJjHIy7Q(Y6?Na@Xb83<|SAU}~k*Pm$6^nhQ7wVgx!8ZafGUopgF7#M9lkgxc(# zm~scLfpnMYJ%`S-&|qSWC_>3P7a5SJ`Ed$aLZQ=avt$asPMf+{)@X5<=qR9yx>RU; zbe|D_?CefamX?z7@H@dsW24S^=r$^bv61q~QD9+7yV$sttc$p2v|X9M`BH zAC7V$Px5vWmJ|XkTVyH*mJ#|IE~kW-2Fp>msr8d%YBmcB`g-V$K^|C3=kzSo47_j> zduS_#l!|HSu+nmBOe5R1-$E(=(PM4?xxEo%7eYU+6xiosZ(oTQv!!BaHo?L8@TgJS zo~MoMCkQV8+VvR&) z53IkWn(;xErK`LYRE!BGhFgoV-(DZ?+?fMCW4sk(8gc(swkeGvG9_Qu($;`--ZO$L z)gD^`LJprS53CC@W*;4}!tt)__jcT`eVK$CX_0LYw)`~&lTcw*LEK0nW(cWP2^2pN z&{$Z9u=bxO5I>~bty!vzgNVY!$#^`-1<$@9WcAX?m88K1--<#+<@F^bP>6*b;$q;Qs6izxnW$G*X3xZD<2IUwH58OLVqjqu*?4u&4T~%eS+V@9_oF(c6iTBmlp2P(2gX)yKeoDp4!q^%bX{A?v;pqwhCCv9*||x3~j42ij0PU2(W1zdpTmB|W{EU{oJB5((B+*?QK2!XI^In;L9m z>PXt)f(N@lxsjl|bRse56fUWO=lh>1bJxM5%GJs|?*pITjJ&NN=o9&W%FW&I=DWc| zLjhx%Zwe;jxe?F~B7Fd7ns)=AA~i;V?CbcuH2U%vzlY7a1IaLN3o-Euf#((=>FwfQ zA(hfG`~+(at6>PYn-x=Z01|-@BL#39CV1P#fE$*}ka$pH2b>43TGccDCD2O&C;=D< z6atb(3j0Xv+31-^63&o`g>b^&hB#1 zDkCwGEeHkZNa3RO7(F3{uc!bS#$U*5yP14GdaG(x0_pt&Eqn%`Oa(#Q8vrjD-A+)M zUpzX9$A*M5?7aiJfd^q^ z6Ak8yM6t_I-A?kb!#mf@s~@K58i_WWt>X&(%=Sw(4`1mifLt7xo_YNHzKdPANQPwP zkTzM{{71a|{IyGvXCGG{DgjTz^eMn7F2|HHT^Pol3?$tm6A2jc;93M>-Wfrxkw7Na zSM@-mWUG+vsW3QVidw)mFIpWm9Ql-Bo1@_Nf~=Z5g#U#Yu-paNV#I1c~02*7u+M+Bavejq&@#^G7q6RF5VU%Y47{5ee^#A@ZX{N*FG8}P|=ef z4gkQ82>^ikzlNr%h4uFekxs_I{#yy<``h2O>ZJyRKJtpk=jYa1_Rai_k< zayY;QHsUC_#?L5XdVS*?g;-ZGiyKR~E~bgSLEH6tX0h|5a-^_xVp(vWtd!QeFzEwM zi-?UunXT2U_(q8>R-XArnJo4u2-ugM%(bPyE6IA1edfKir|Zrqy`8t6ug|9=C_e9Z z2mqQ!rZB7>Rc>9_eUvPuZb$%wZM4y9z*B63hCVm#2cbne?uC;u z?zZN6L7PHAb6Bfv0SFc?2?b%&G1*sWYsPfZ7rw5c=n*b7eJ#zk_p(mm?)8i!CUUF5 zGb}))kl&*=v#FxkTWg^4`fG0UywTG9i!Nb#9PtFxU%I<=F zE$^gCl*2Z^*;=omt(DF!l>=MLcZ?@QD)+$nX>^7y*8QNXF(SPY6>(!TR*TGmVcZ4A z7xDFY>0;|GRwW6k&5J08=u5>w;%E}guB5Y!2DYS#v@z+36dDy7M4 zXUg2g zib1u$kOXzgjy)W!S+d4$BbM6)8&jT>vSX2>CP=`hp*i2(nX9wl?@m%29S9?JZQ0(_XR2b6`Q`;oXB(;e`phuV-*v5P2vGbb~$2$SSYFCFExjbrn8LiU|9WLn^-;~k~ zcrch;F(f7$rvm$*e&vW48Y+f`U|Gb6RGl0J-qz;C3_IuHbLtBxt_cek4PmOxp63Y(|(p~Uj*_rk zx|p{Y=q~SUyRXbw>`-9~Ge+EQXzEeqSv0#>MB zKy7GU#HD(c*bj=9M>#?vcoWBv?uJ#B2@k>e3;V>YRIPwFYgdM3CJyPSvd=o?5Qp)S z;Lk&tRmSYu>aMAzT*Q)f2~N-jPR;$qV5_(rBd*+ZR+NL=@+7)XnK7Q&%xboIeEH1Q z!Z|JOAjUG|HG?t5P?=2GB`PQIUE(_JK#sQ3ZACN0uL%Y~Cb-7{hyf?1UhcCv+eeI0 zoA?_Orn;cXOrnT38^abj`nnMc%t$f)KDms^%;_WdnzC%!A=)g}w|3j@u7-k8d8V#6 z-)(&1!*r=U_vw*F)zVD$; z{C^=lI?Loe1skL2Q3uxymHZ*0%NS7bPF`5B5c1Bj%|QKOR1#Lc?o-rGMQVkNon6Gv zD$_JhSFTCs_Y99P{L&?rnj2a23ST#N@q3(vYchcN`&hBX`gC364p>X>YG5l_2^vAK znGvH-lM1SD{H)V6OW^5_GJ~-xDFSY(u{~sgmF@^~TFtZn3|E>_HM`ved2VV>jVBu< zyl6EDtM%a?pBj?1xIdr$pcye@)xWhQmTF+=UFxt!)JI8}1E##j6FMiP_Gv->^?atc zrNsc*x8I^PmY~-e!vI-eo684bhg>ko$Q(II)E)7#>ho2O0RA@CFy@&@O&%q{CU6cntkY? zbAE?ozMS@tCsRH*0>_TJ>~?`Aw4u1CG7J(}q1aL@6vUWTv;pxNkw8&gh}=5fPd5j$ zOlXUPt?Fny6WuqUe#wq{ri^-9^p zGUO1CLXN|m95LnK%hkd#%rzM1yxtL^{cV`-KUBhLQTvYl1FKv3zS;~CVPHh+i{-*e z4eI;dS{HltWFZUJR73e z5p*)L80Oq+u#}*7{ZJt1JSx>3c0?hwg zcq1_5fc|2G4DM1B~d3~5pwixr8F?RdLfvSC()1?Y6db@Bm1)$ z8Qu`3X9;vy)>b4$eiQU8zWIfu^eK7*Us5+UVFq84H<0`VI{!wHhd8w*KyP3}+s4kV z2`4VHt+u&9aYMD_i^U3Qkt^*^s_WYMaeebg#EDPnV#mU1E@)T4t4p!6MW0gI@z z1_IPJ2~F$NX|4(shzp+*pv8n;dvj;>hCYJUHl5Ad^@ARv7RV!Q@pz%iwQH3pTuUCI zDi3j$B-cmkCZ#}EXxXpE>#k}aIL8W2ny*^bMR>=}onb|} zaVfYiuYQCnkY|9!%og`=I+=0~TqR*su@afrZm)j*tWamb(#cZiv2DwI)0dls%YLGo zUw|cFFh*U!VwhM$ZJvKc*(gw0JGBfLnZa*)Wz2BE?3oa?N?sTfm0rzU$HEb8z;|bO zy>?-h4_{`qDDwpA3$=>~m7qnw4*2zs604LFk)vAb)S&Dxt>-YG)nk7L~!Yw0sN4R@?13f@8aL$@0IV?$?E7J3$d#gVFXvmF1+Xd$?V zEao9HBd=Oje?=M;>mr}$1pszT5mg_0So3>!{8AC^LK|`Ds63V z6tz9jGGl+DQ58nG`&+L1;_;WGP6V*jon(WvMd_Z<9k*x~$_}|*ILK#|H0+lh>RmOA z&$yL#HF~eB-wxP`zpMBn`9F|G7@ia=p=&UQns8?+_AV?M8z~?6(Vqt`d)%5d%T!U0xHk1+YYyWgl5UAQWALzL zuAZw9L?RrecFULLiJehV;^m3iBUIsD|Zup`euu%mmQ&`VRFdtZHcC3>Pr z+(E6LYgc3N?6q@`6BjC=FF_xe>RS-@bnkX)3U{}(&-nO#V}<~5^BAM#D@;YGULZA5w4oNGMhW;)uFMs-xkpy6|H6V}&CK=y-?9&=by% z9f-@=?iogi$`CxLbpz~1g&O+*%*3|C!aCvF+pSt)yGa7`Cz@TT5!cJ!K+5gzD;)F|HD7J9G7jAO$vQ@kHQe|^OT^Bo;A z!M+TldrY9W#a6u`Va&@(3Pe6Xn!RitQ_FJXwxF*ypk4#YT^?B9qd9gV9Aleyp%^?|*f7r!Pvan8~Q1237Vv z;`;bqztA3%ik#jGukQ~1sU|XLC#k^$Cp1iC6{OmToK;gm^TrZfAubOQ4eu%)WmlD0 zIRu54Cq@zc$fb_PPOEbc8FmzjjrwcO>4EZ|>r=`+R@!LI%$JO6+td{YpSGIwAAjDU~XuvyOzwgCHZG$2}!QED_32I->_=(-pZblB0 z1b7_J2;LvvkCkJoW8pu2=j$uQw!4Jm$@s24mGfiG&%f#rA4_HU6pj}ZGCh^g$>(lM znlv9vcNp^L%pNPuL}HP2d{pO}s%|0rpCMUbE0k!iLnQRrP)8oJUd`1uARM%`_14YU zmsDcvPM*BP#CsvR$nKi$Ootjz)2SJZH)3kuijD5w_U$oj2kMR|r76u0Um{X5)sEv{ zvuvMZyaG{dtM;13WX7IKw-QD}Ll5)BaNS?rDn%)A<0QzgF$1(f{51K%*@?|mUu079 zgN@HbwPqMkhruKurb4bFp;OgtUR$9p5K>0(#1rxMtvv9DxA{FJMPJ25FHo zPP^xS+;>|P4F_`_w`y#$4i?t(EU-b{9n_Wm((+i2JWn}9kD&ICHkZ;z3t^!qt_7#^ zKdvS6&t4TkS06G?p41SugF#OIgPC#bol17)*Y#?ZfrM!-=!UY8Hmk8l#z>HY@TuO4 z)96-|`SlqhpPF@vle{VbXBZ~*X(K8OOB_a|4+0Z+FD~VZ*BUq)i!E9k9P7Xf{01+A z*6g^5+gl5>ff7wRk|SX}i1c$V_ik|&XMXzTnmo5)EYNNCW&qJj`H{U89SnF7(Fl3w z0Mvyi0_`?oKDPb}w+MS^Vl`3}#bpAvC%Oie4 z0X7R2+lU~W9=%#;VW!pil=e?`A~r_OX$9#QPK4L?p-LJOpD9YcHh{XLZsP|^F^5BY zeCKDFdooE*ZDm+KNch;=#{ScUj@rOwv~k@SxFwo~Rl7`sjFPJrq+qxE`C$ z;s?$C*oOIQj2d_gLb3!4wba>BeX8t+qM{8Y;J#Y8HjXf2r#|;Y&h#G456Ms0B|!6T zu*-QIW+_cg(KnJFxBzz$bI=Yfm~0(=4~uBHwTD$@IA&ay*8k`=elfpA53M3x%J6P z23pG~Fb~|S61PvNzhM5KVE&&l59)pX$o5SFn*O%^{qN4y_J0d0(#aawmSew{<3zYx!>HiXf{vOXZsp=>#e5;jj6cZ1IsiPT;l~!|OW7$@R&$dB@N1 z9Y`O9iPW%lTjD4roO;;#;k4DlkZ*WxbAL1_Mgo|JlruBE#YGz9gr%-!Eq6J7!9i_z zR_KNDc->_Kii|3`SJ&0}1Pn-Z`~E_IJXuQWPr^?HXkd)>rWK&|hk`W@f5kpHONG9qja1x>V)G?P)mKS5j#ERma^ zXvp2Bx7i2JMd$BMA%zWuf55lBl8Nz_c{;gTmPE-zgB7go4$%BW+v{6 zCid0_M*m9MzY{cDAg55{ulb|q(luY80n6BHPx%F)sFdNR9h$1OMWnC|lxtCzZxIixmD5H<4k zQ2`ULAZb{Jn#7(e8kd^bL2JUqr#@kj%=5m?*QXffidf-li1LcGE~VEqLpisk&R-Jf z3Egwtii)a*4ShP9M}x^DP>ZYIxl?n>)k<^vD#K(Qf@37k+`cHt8AEiU;~jww*o3PX zndNp>+YV=rW&p0dyB-C{)0t(X{mj0I(ES{!Y*wif5#@ZWYgce`r zooG`3Ty(FBtB&=0w@gIBxo5=ryrS;0o{+7_l~9K%Yt~O$ZzrCliA}|v_i$`X>D9p**jHm7J zY_DFz@FerUhOt-1VEj5NNFEME?&9WDhQu_=FEE~JjJ=zOO+|53YfWKCKViLJN}1CJ z`@IC*>5Qy7=5P|&hXu1|%cT7(hZj{E5ah?&^H6?Jx8j{!HW!?PJC-LqxOkmNM)=HZ z<1gpd#QsxiDTq^D?pW_O`&6GNbmD=JNmvG_M7Ef@u^D0GM=K&jSCOjf5y)2HG~oI^hw9Z)X^d1o`C~<^7PQ+n})b#D;o@8 ztAn0}3cDn6_3j;T*u1^N+Q8Dj{>1_PC(!&S1U<&tYs-9B5Cz|YS4#h92okY1vNQf> z@BfeL)wjWd>$eTk_g$8VlaYbFiKv~Uje#@q|HxNYDa%;@3z>8`v{o#n=UE#E-&qP} zVb(~4?hf=5GDPb$z6r%eh^3dtJgb?ut}Pvz@PGlp`0V%&qV{F%4?p2AhmzUx3E2BE z`l{6UH(N#g@1|_ysFNQOsvo=9?x#ABeXhOM@xES;v;Y>&k!#^%QRqVo)|DGER*urb z%m2h?y7vzTK}-xfASHT8A2QIyWjb(^RYPG{Qdf?;ShUSsX-PSpxL;~Iy=Q%E%V-XI*N?BD*P;yhH>M#aEb<=D)F*-l^W-{-`AVDC@i8MnmcH&i!r)?A;m(}i#lPhxj zc=W+-q(B#LDWsgYY`imFmZ(v0z$K%Mva9BqW#3u%3^g#FcJFzeQ~tJWWP3X?jy5R` zLLlGK7#?F8u_>dk5?vJzv=1xhC-`$5!0%Dj(A}GdV+2~SKrNIq--9gmc9##`3`I-* zVwG2QgwsWF{VBMl)sdz2 z^s$nEIQj)Ky}5af%F1`&WLIn*Z!ImOM6a_%XUa%+_kl+`eMG|l{)^4D11EGWBgNGn z?3Nv;`flAJ^rIq5={{>Keh<5enR3cux<5yJDB6Zn%YxOpKI=e4@?2+mQ0K@nf4;LJ zzXNp9O|7!`!nT9O3;W|;`=lfmogV_|$$mas5O2Qy>ROG#|>qOdF0so zpf5BT$JIz4v+ky$bINw9>zrBR*x~btcxNOFY@i+2Ldo z*TTf5L|eLUb(~|euC3kp<@I4ih8LgH+xlhal@95tP8h;E)WwF#pKC4sLHiJUxP57t_|U9Pg10K7Aa%J(%|>nD+=ahse2}1Dp47 zw;QzWp`BKIMt8b7iwsTZJvi)P;6;{Lnr<GX#)C5f?!w34X9hWc_7LU=Ry%?_ zSNlB}l6W)8Z5VY(?^#~Z8dISW(NIP&jA4M2TBx~U>VmqMZ@@2)P810#8gAIkFX{G* z8a@~^>_$K1&o-CSHOJF*`gClrUJs!9&%_aDJW{Ap!(xDtHSQyH#)_sAICRNqo9+Re zT&fuhOqygh6ZA?jN@neJ)F-08IISef43dyC$pl=CQ!W^cjI+JFQ&j(zKs9By#W=}I z(My=T+hT>wNOp)A$e^D$&>b(0r}ax0?}VQp>C}mB-ng6 z+=Stm{mlnIG}&=%qh`m;Y=T6cR+wd0&?-7<%)@Z_*-l^_h9j`g9-2y zY5JI=KG)1z8dlB^fK?(#E^KM)CcI#jQ^RU{D0qfs3L%~k`wDmf9qkl;B)NAPy10a2 z%N&Axv&m=9JDn{HXJBEJo_WHZEG&?v+A~tWOW76b&4%+Jx)q8Q6#6lRHBzORRQ`V6 z!ODoW!Wf?+G%?m{G$xmL&rtN=>i}_!T`?GmH79dkt}H@jj0iia_8QZ}7y9H-=c`;lLHaWRhurYi({6OZl&vZpg*DI!ZJPPpw@g4`rn-s_$ zgSgIcVgxgL)LLB#A`n!s<1oVD``>78YLe(A*8wD5;tm+8{#M2#qaCt4SOlaDDEp+g3bH0R)Vk=+ z1@vCHLgat@_x&@#{~h{&O+2;y@2R}LLq7id@4rtx|F@PFuywNd|Iz+;A*~Y0013nZ zFY;B{4oG#2FT1D9526JnM;}5!8e|;q0B5!b$eolnG_KdV)A{tttq1S}{d*%Ur>=Kb zpw9DB8g%(hu3{*WkXovTVuUcrjWog-+Ddj=cqWiQzox*Oq_>@X-;L>+#MUWwU+$aJZD0 ze|dkt;Q@ryS?-zwU81wySO7h?CijAn!W638sdHNMX0r@lN)?oF>eC~v!at-rgTI3y&o(U>8vBxXP6>Q`?)n>{vO zzK2Somhe*15UG*3-we14U7_B%Pi`W;yat|Ws+WbIu9+O4Z^U}dR4Nx-dXadc@GpMf z*6x)uwXxgMj29?2`byZ$aq)K zJe;M_Bo_XPKIiHLsm5l=*%CL`X;DQy;UF|4orYx-^gkalmitNQG`3X@A!L@C;W)$fuTa~}`_ldHQT3zN_ zK}2IZ3Oeha1gB@ULvVvH<7aOxC%qr_A)vd;Refeu1^7Q%L~+J4GQzfVlY9k=6UqEw zn5Tz`vhljHx)WYbR5Ev!l0J8w(C&sC9-7?bs>t=)nmOO`hXPIz_7l_gh|}l1F|#cZ zxe}XJ`fVL8%qqwAWluA+i(}2tL=$6v=jrZ)qHL>V(w(`*pz$c;fr_>&rn3``1=53& zggzT`G~c!a!ttJe&^XuoWj1hj4&=hi|Dh$hc5sen?At!ELfR;OqtSfe-2m~zALC2Z z_3n+=&Cxs zbx|v|64`QkKu2e$H{Lzt1Hmk2mrb;K23aZSjBb>sr(C*b@i6vex#4KsY#8OGmm#Q%SXB0Do? zOLZG-IYUbmBj;~O`u0x!pW#K4jorLF^2k?e3G4-~N)p3X@dk+T1I(+TR@4s`13=S$ zVKM2+qRl$Pw$w&6qj%NUev*u5z<2rK1wnd-4d-Ty>$b0)d#>Z=<3A%aH9LSwb=d*_ zmHx@dgrmjufm#xq!s*88{KA^HMVhM^VeErI z2I4>1rzc|2bK2cQ@D-)i`e`*Bip-*cF*mRtBP1qe#n%0f0Sn%Q!w=yHOczT@D-F+a z8)W^CDmBNWy7Vb;DOKDCk8K~*YV+lw^XL9vv!_s6D=+rsojM`z)myNRbe!|9Vmfn+ zziW7Gm3}N2FMcY!@3S?DIfp1KMRRL$y9IDEn#D``eCA}P4Y-8d9YR)CT#cd#T<8F2 zk~)rNlJD|@Y8t@ zi%@JWSqYv(^*QPpjac`CbUIj9WYRFxP>R6C2Ad=AhbkspzqG|BF_oYhDKYhdt~yG= z&d85uTr=N)mBIfE!heS+;&&||Ln!uj`K^zo_TAY2MW2%qQ5K+)kQJr-{^#dvVf5|R zYiZzW;7)5`Yis9h;QTFqNo((D_x;@IyQii7zLx*%tDU2a;*4D;J#zPPjk_dmRZ_gg zx&>Dq>)b4*BFcKX7#Qv_)@qK8=>5($69gqTKkKzm&-O+o>%%X~5W$HgO@%$B zG}5Sk2As)XRtQOR&WWg@TK(}j7*odBkHZZ7lm&rGB?PPiz-h!a_AUSvw z7q)WIXK9v)bUeGbD&~Mlnuiw5S8yx$^!CyFX;jn4k8g*FiA3 z>Ed3x46*Q$%RM(J@~A#*hnyzI2Jr|cDZrH@$3W9fHADz2Sa z`qyJmi)l7+r|F{N)8$!Yqb8wPy~d+z)PW9LseW?vraolw@)UWbUqW&6&TTRD%#2^8 z9XS7D_AAiS@a-WHRsFT+cAoDWrpzE#eIS1Pk?uxSEynFNk!-09s;3Dn$S83in;o-Z zu=Y4UV&OSj;Xhxd8*CB&-oJ=~#7qUkWwwby;g8s(=SPOJj7_&ip1x|^i> z>yc%PdwhTPFGA)&i@{I7ub7qZ#@L3Tif|3{iv5D{i>J@EoG;-lX1;*|YOd?06+~vL&Ffk7RgU zpKiZheOys~-7jxk1F#451i=eR4j6;0)LPc!r5+wgywn~VQ3f$*(KEK@_a!fCz~pdG z2LCeRj4H8LL7X;!mImk2S2<|7``~zSZ^z6{y`~Gg74epE^y7#!vzKx7A&IKlw=(d? znHe8pD{Qq3xuM}!i#}g^ZVtH)B7f=t>MKmlsZ|6LLyXCcz``Knuo$)>ORk@%c;R*A z$Z^(Y$|;F_s!*F|;hvCigIGjQk4nd7+p6sKA2cyq4?E_bNclaMb)I1%SC5=x79C}b zQKx7zFws`b-wvH}#T{)UpNBA0q^omyx~?W4Jl<(!);xK%)*kL_@XeuL$9=s^h3WC~@?s2>@Z-N_nxt{LYgODq zfHY?8c>whigUZ{@Q}~r26e^$}+m3?xy-55!YzCPU8Za90vuqEJpssTaZ{DTOvS2=tWqv6V)D2Pru zs-fS8oAN`Uzt56CRyGyNo9#Tsa>a6E4!MNF;L<4ptjOwFdO%Zj!c$bic62ciDD3w)`@4#dE-W(KSwt{w{ZG~ zt~fvJ6TtMW+=9I;jL39W@4?{s^=DG+a~{#x7y;Uyst+1rZZFpb@i{SKIp^1Bimcfb zS2;LwbMCdyxy<#U^4Aj@Dzub}v2xnV);{?HC|zfxK!+ayTl;8L{kkYUpELDNUbzPs z=NO9X@*~m3+w<=`Bf9Y(V$v+rHJ)VuF3BZqr{a*M({luiy30Ho{EK|fKSC^|^Qh8X z>P1t+zUmxF05JXLq=IIQ2L1_i35S;sVv$D4u@(`P!J{i$t@$pynmZaC$|P z7mYovt!64aU@D2wbH#;Wy_&jdsE0}GH%Xlu*IGgG^L~(LXi+ie%FQ~H{P4};!}M5q zOtTu(t;T>>6=_X{Ec)V?2Mgao?07DYWdmz$Y9RkH9j+G%nNdrN;Fin0gY`ljaC{EK zW~IieR5EM3QKJWPXe}Ors}0|o@!Mg!>>opLW+$Cs)T_1lC63Jc{K^EAEacEuFBk#k z`>jPpD->cnqq zz_<8qh@WW%@4;vK={Q;DUx@rkPSA)1#@c0o6gt8#dH)|}?-(6vyKN13x|5D=TNT^3 zZQHgw9XsjRwr$(0*jC48CtsfZp1t?8f1L5{^QUTz`(Lg5x>n7#)?9OP^G1BL+pZ!# zBOr5e!A}$GEHE!=PcQd4(;nbaX*oo$ztpqR;1}NAQ+jF;I;zLMpZ8|Fx6M1WVHb#a zor#He_n&6qjx-a$rIy{}$WUm(%{~9KoKFuN;V89-{`G;>`Wh<6gLCsp)lh|g<&%=_ z1FDwkmv;&yn?TRZVle!C7xV-j z1)#(l5_>uKW<3rj55@oofYfGYr`!v^5i9szD2ye6McT6Tg0E%ni5Ks-JIGwD=HPN! zc6k0=2@ioy3;K1a?+4^79it<*e@Sx+scEtEk4W*406E>y28rlUr% zy=w7S+;37{zSO(VqMAL}%Tf>*s);fH7uRl}m%-Wm)YWVgYM@ z>z}%<9vRs&W*!SSb@9~^&j%EG$@|v2+)o2zH}T4QN&u>C`8c=hr#a<(V(4#18YB!^ zCfh0bDNl5N6+?eV0RP4Ye@$`CeN9`xeWK035U0%l0UOv^TYth$x_@?Gl|PHu&(-$7 zrYd&U7DoTv*Hq}0{PwBDZqeM{R;B8N!tJgEe+W!BjP)m?CQ|pDE@H?;Vk6yv`a><} z56;&UgJh=G2?6B~s(Z89kt)GhZ8uH#<>k20+=xnmt=H8b*Y7DovTO=;6+Fbq&-|EN zG$&ojqAK|@2$EQZUDdO7X)H=5C(Sopfu%60N97_Q(X#4pUi_%C5V+{&OV$VelCI&YD(>+tvv74hu;jsmpLI*`hCC>Wv z4EFeJN{v~gqR1iw&vigl~L}p_?5nD`_G4~y38=iphm-{yORX)NJCIN4-yMTJQ z&qZt3Fo)XX+z~uJ$k}dE45#Yh&Te=NoGMR+*RsC(dU7c>9(~1yF!GPSZ>0hKbt7YW zdKkUMUIy;3DZS?>x%%cJjHq&BC;TbIyz&FoqMV1nQ?M=estdFtO{QvA=1#=P3Tv%N zWCJ zX$xcn0yO00n22xQ3`DFy?oW8WizR~zy;^U$%c|R|Gv{*H!n{R6(r!U{wcZS)lU)jeSymePFS}UWC3zq4V)o(vSOKo`~ z;Qe?Uo_U^=UXHa7HXNuy`a}IkJQ9U2F!#N2dWwGHATLz5{p3Pf^Yx<$wMFb!CqyT* z>pS;6z1T4a&e)gAi_FGH{f*|5%I<*M;1aAui*A1OpUKKM;a65qC@ykR_R$#1B|$-w zEkP0L1(Fd-5F9PS%Z2NVwda!ej8k(b$VY~-GR|FJ{yJ=bKT`jB*g%9##qB?7wKTAw zF7*HR!}ix1vvc|^2>zG5{wZJaX<+`bVH^)T>W>wL(amqe0>Vu5)#i^iKfi@Ms4#DX z%Zm2yE?K%Q>%@%g>&$f_9k1(0B>Y;|{!PqlDBi6OU^-03VF`^7$_87E#LD|$)q(vpT2PYfC zQ!$vel^l42$-KuRvP)YK2U%gna-8_EgZ#Wf*N~RxAd&^0Kb=T;P)LAGH*^E*}UZOdC_Yc2; z$X_M1Gn2n+Ihso7R-l;`GF44$HXu!}1l!6SM~~jF=Iw4Wk0$1_v22*3kGl>!A8^u= zLIH90LaLog?@Z~@O!}lZ7`qAHzLl~qu>XGiRzwsqN+OFvyhgK52+K&p!WRkUH>+V^zyu7O|trC9g%*H2S+MYjVe z6*pF54>l(7`22-9E3|_^4Ti81>r&(PHmg%jB|rj@idc<51H0s^ ze&36(5_24_n^5JvxhdLB8o}F{3${_F=qa{XCRW8TLitiibsu zfF~aWte3u}xM6d!$2tzKZEO@!63-@_jPX?{|Jzrm1Gx6$(`k zqyUx_FB`stqoUF(DHS$|L&J0tBCo83pUQ(RU?VO+W&vF;@a0OhB9RdS+@Yk1X>Za`eoYR- zySt3`jHb!UlG#^CCTiQi0{1;SGPv~eu)iNSW*XEhA+YWe56+DwVG21HA2E_@bOuRq z90EKRrjbqvcDsq_g6}oH7M#b3OM=5!o;5$6`?!|@%T3|A=2~@iPI}tlCc@37+H+1u zw+K=kI|>`oJv=4cl`w0jZu>Pa_!`b*0E6o{!^J&=XATj_x`?>PHsLGPQx2SF(w93V z3!i6b$29!~dHdMnZ z#R|Nw1U2%{FbwBq<;ipl-!coN)ANMWhBPMh5tc@ZPf1b>9=fq^Um@Tw{s2Z=FX!2QHEw{fOKdyq%kwC`5B6Zy21VN+1 z?8IB_zyD+0_V zZKoD6coC(>@}Qp%r4fZBkKik+wdJXENss(MEO=_eM$>qK1o_JGvE4QKQ%>}8Bz*Mr zJH>E%!=j>Q_-eA3>*Yn3)8l6Q=s)J^JviJj{Cv{S0)ZBM>;9N#BwUBCUnVOc+(c5y z5k^)9iC8QMZ4e0BK}DOaGwY!?4A90cn5#~|t8p+nNANQmrI2b=mOV2jvg9ipdXDzC z`f%8#phW2!leU(vv>1-2(*juMpynf;Z0j;6PaK7q$2a9sWRNlR6QOA66Xz04wM@Qt zVa#Fb5ze5et`icFM1Hl!ouJRGT1&)XX;y)W=BF^)SFsUeNoA_$0@F3cs8m-YBPevq zOoNnZqz;FcYtt60R4t7LKX9MgElNAWX02Z39+xRo-Mt?SoIj+q#B-B24WCM8% zhPP`cqTQWRWTID1Scy+`#dd`x)&AH>Yy9>RP<>CTQ_}gS(a(CzJeVO)LF8U{F8&9;&$fdmG(<*UD!hW=9Xqb;0GqpUc4+8E7;9iX zdP@jFaK7G8;h=9g~~Z6wjG60t^OXg|ZZc zzZ%)+R-uYHFLunz5p-C|ziJy0$g!z8<3GXLo0LDivrXu<+#E>JyD{Qn&4qf8M;=jjDh8@Pnm%|vEcnFEs}L=>s|4WH31(bJ+P$y*ddPIJ95NlgVY7SP>gbKv z4DJx}<;maOn<4ZM;d6dAOm`&+aIL&LoUQ=&Qra1c+E2lh4zE}(bK z5gsF&=|bqC;UPMzA=30v+p8fM+OX9?z=i6TC13Os}Qkv2{D9)Vb1=mGv_>JJlpSqlj-w4L741 z7hfqr+RDmpxjqM_2}@r|sN~m>X-MD|Unv`c&d(vDT(DwMYO0O6x*v|E(}a+H10D(k z4CvHq@(xiAqLWSDze}!KK4A6@g(cL|axGh_Z+O}%j@b^~?|SDM@p7$F797Rp$;<<4?>HDfwhGJ33)25>+w zRKodynaL^AuXf2b-`6ty4lmIkQa`$sJ^I?Swb6U(L_XY*I^0KFh8#=gbzZX88Ou8Rk*@oI-aGZ!*W6RjY_q(>ByU8hJkRGix+NxiN&9s7Okw z%_NlzRa*mMCT*T6Rbr`94bk8rnmw-D-(pV~DOSOmtb&-^bEEuf>&9V>OPSmTtdTHQg8o2LkupAybVAv*;#$lBlm@Cnwkac?B1CMiGy(9- zWz3eXQXmsaZd?G3d9glXx?}aE1vzzQUb#07Qd4n$*?@$n23oca9K$>2&tHTrw}R6Mg+PmcdcZCG0a7H38xgn(`ZvuFK0{jQ2?bfI65m62dr z_~g0hhU9h4=g@)6ox;?#vSl_40hpzXG6)T-0;}L`r5@0TH8pGrJMK{BPZ_B?PIh`V zbMR*MMEav}cM0o9K)LdpYX9XGyO86q`$TO7Srb-e`<}$7b4aa3zo+#~4U!GuJ!dDz z--}Dtf*qa)kTr8f&RweSX-!}y1@bbHS(<@z*`tCL%s*%~=+mpCqb^6*pA;MWV%leW z{K#@6JE(;99@!01n!R`xx&5TpYkaa_mkle@zjZ}@!a zlA(Pzj=CaTCpRBCR?9=sq0#U3)b9QkfY?f!Ap=PlV#9>f41)yQ-pSFi(9oC8VPp+? zDZTv7VAgoBy-uY6wvSh#BWEZ3Dfv6H1?y#d(*Dph=NvX_}IaDb+2g>k1LRa^pJ5z?y%!c3k2h8Jo&f8tiTqhQBG zyNEE@HYsv;)xIkWQ{QI>qL5;yAo&>`uJAe>JFo1Cd9WIkxkHLlAyH9A!GT8a%2o!_ zu{dEz6O08JW<}@wV^UV#U<1#P1C7R-HL6fy{M{T+oI|8=bUrF|>OB3n>$hS7S$rjH zCmKh~S;PQ8irN7JpB=Tw7_sQ5f(P`BbGN-KAvWuB`jeIAn zHI2z4L27h=b1U-F#%5f}dP*^Tz777$jKIkl({b6*)MC#<*4BjE=PqM`nQFs3$C^Hap&PG#O@n)W);fm<*#wemj(h{e;?jVm2A=V}rBF z>f?0VH~LwxH_Vg3Qe3ASb{j)9YI>?Q)e61A#>(>Y`UuMI+CnQGeOgmP29yqv!W0@) z*e}JQi_`U}>#s9oZgAl1-~-w{jgl~Ajt2>SE}V9G#{@&1U8&x;PMO#oFrDMKcg0ypJTEY3Vbp2UO{-j?tcY|4ti&jOkcO>J*KpLIos|q=)wkr6A z=skpK0zVR;MlY{2Ytp{1X%bE)+`6p6xC3RAQsg;CLb+a<0~#2(+Yf+(>}+}IyET?R zFRHpM>S}GQdpiBk$$`~Cofh#j>|Bcy#m!$rfnNE{y$GHVM@M$(4zxt;Xjw`9A4Ie& zizO}U`IEGS3fT>^_#lBU5Bt)@)C~ShPxgGKRpq`2wW|<3-r;G(>X+sHklD=6i7z9SXu96k%buZr&(b}|t`_Pa0lw;Syd3Qr^N!jh^AO#{l@Sysk*J=zl zh4+lJWBx#0Qz21#Ny`Tg+TIj~4wcSEU69^H(qh2=R+McA^QH&mDe}5>yAHG?9bBmrn9if!QGVz_4I3EEa%>>(ZK2!k6Y|nh0~Cg^||` ztbDb{vZbQ$5d^dfVd>{OrxIoEj*wlrw$(l7Dz}(!4xVn@bs6QaASFy(4Eg^7M&~DW z1yqDM2Kkdp#pXSwR2%UyD#~|wd&E55a2z=~(f(v(8pE-K)gIIdE1@3*y`-tJm*_I> z1XFV-czr-8Q&olS7S>G=!xI&981xPl}K=LebOc>Lxo;A#U z(28~GEVNIpvFNvrNNp_K(S`AG{q-#;;?n&F3u-(DMlCcQlCG~YjMN>}jIu;M_t3AotDvt)u&xtOOlted zE|1AXpBoiB$U4+qDQms(tMYr%=}oJLUn$Lhw$=}$vixqEl;8g{Rb?_yNA=J@C%tb5 z)dxs8LW|?huqAVU5zi`Asu=0s7tB&{L27#$#fef0@UQXHmiDFlI%5V9eslt=#R$N#NC z`YbFzM_e?{!+FWX?fgSuV49M$I3nx9Q`T2mt~+*L%orMzJYvH9V&YHNYlg%7pUdg) zQ1kE#64<#(P}tcz4BN1sCJfa$=a7r=opzE+AP>X3oZ+6IAYbTnE=CH*B1)Nf!eUvl z#r3n9iLMj#Tn%ZQDk-O9y)FAHn%=Cnjm(ipKRxc@<#e)id72T6>gG1bMujTNXK%E0 zQX5kqBhsZZt^CC0Y`K-xjdq@;v#+vaPkmK$V`mO&l+(+05jRX$^h?sZ(~LNEzvkgQ z4ee}UR)Q&+RQeg@xP_^0sutEl$%;?>H$yD)M6yh{NWoJ}uMprmWMAi17^!i1}OJ(n3vF zMqmArd5K`SJK~=_Dh0Y~w60RMz?ye~DiH956T7Ss|O>0`Ll`YPXIQMVFE>h zEN}D6h3x(w>ks+36V|s?|CAM$DBa-{3ybW-d_)x zQ?0I_=>adJ@RqmGPs7+^B7glOEn(DVwOJ;tYNENf!{4#xlo9_y*~j$yo>b?H_jqt^ zCM(XBO-tycMcN6{pdY#)#pWeLxZZ5VB@lP3P}%hc71p$w@|g{`F>X)gK&YgSm0VGV zT=BnKU9forxI`=_ngneXDXrvQdRs4#o@boV)94!Ufu#J8%)yh9+>a-Js9A17-!)m~PSQASKP0l8xganq*9e9U5fHO1yly6}T^aTIip_7h?b2iIUBU z^0n34EE~Rtj;LKArnif4X(m~>nAELHKx0CT5I^tIf+(qHT+#JN z1*I31^!*=ef`3ov|4#IO&A2F5$E z;R=L-2*(2{$9+SDt%OWFuxm$*>g_cFZ?R}!HQp}rWM4hm4}RVs7(+2vMqqrg{ncZ` zRyWse#&4zG?FHMgD_y1AW>A|*$CBvMN^)GHy*N}Tl?}ANFlg0RT3GW7KYJ+Jgy}33 z71r?5!*gI#M-!2@rp{DZ5`)D|rOw8{GacL!-AKv#(x}XF~VvdyCo-z7?ub~5e0p$kbNp@r}FUDY+#YU);%#CNb ziNspe8{NGDMfqCHC!w+9m>GydU;TLdnKSyoR?hMigRaH}!MH4PSf{+0Gh_oR9ZE?{ z2L(09GlA4X4}W@Dj~WIPyyGEC0!ZrOI3}B1ygXi2Pi#YD0{L3T#S#}aC3(5(33}w2 zAYO)Ez2K#qB}Th?Vvn;#^}`xyt5feF$J>8~Zy~d{p{?g*(UqB=661w;C>lj4{Rn4u zYs}fU0ZRsJGI2RF=24n!V|FbzfTz6|jGlw%vfenMbIRSD?G09zH*K3qiDh9aHb-RT zSO1;n7v_y>do9?&AZC@+F)Dgs58smO+#@pGQ3Kd7jNYu6!?h6p{%DN75&!8|5-}Uh zWLO{VUICexKx+}y+#o`3@@w66YiMpYPslN9jAbuE!kkDmGbqhvm!`31gV;0m{Cr%R{+OVupI+9w2xwjR)UUQ zD1463=q%fvZmA*)?ga4qeUpv=*y`)%G=uDwwuET`HU|sBAFsNUuk}>Cf5xOxr`b2F zaQh=y7^k^4gBenFFU`9Yim16DpC(d%^-?7e_IJrUs1as7^LvYAqOuoj;QTd$L|Rce z_Xb>U^!@nZ=Vhms3tN9ATAVpfZ7^7@rP^CYpc9${vkP)r@bz&CX3Ire;0J0g+U?g5 z;E4Lm`!X$6#mg&Cx;vnb+9t_>>lg)X!U@0Ly)n*mj>Jw3IWMJumAX@hpv`*W^pi9m zxrR1DEoxa}YHuPAOa9yPa45XF5nU`^$V#egVX(6S(kYPm^5};3T6Ii$8pvzqXuh4= zz`OT>pBtf0UeO2RW4+iZ_7z_Ak=jl2;}g3WRr_~CDvXP$lC6zh^zB;~S_U^^m&xGS z3ki$Y`}ite!9PFOWDFK*S0?zk6qBTWjQuVXf*mc~&aSw_P7vJAWg*(OJrhNd{sNIF zLT1$U_+@!u^N;tI8FBO;A8|Gj)bM3P>X=VPnP;O6`1=Iy)Xs0C zF4jJ2LK*tAN<7z?vLu!>b*5z)r~2b*;nPNEJmIQcAlQa%vq)C$ev8XwHIUkS`c%B* zN1jbN6*d#6gpoV!US-XY0T`xSb;iaCmA_biiV=RNC>DOAcf}o}0o5B;?Fw3Np3;JF ztM)>-gdSLbJx*x}yWhyXJr18V`j&oS`}_kJ`>3|`74Fif9%pN}6Zz7pu6^M&xWjg- z{&tx)hAZT8tTJ$Q>VdXZ#WwczX|4Cu)tD~stnkwlID3J3PCO}(#_Ctl?_ZtLb!xwV zd30&TQ1>(7Dm9K=lnFfmMs>@D4#CPijWwb(gLm}&ka;!uSFMK|p_14}ZcH(yat4sD z0yc=Ga-4~au9YD>7w-M|t&ienc5}OB?#5kaI-gXac|yEtL~N?^OWedA3#0Qo*tO*p z$cCX(N?lsDPJd0to@wIN2?up0#qn$;>K`|h;W*(v(!{w(KVOC8)GvTH?X=h+W*d3I z3$56GFCr9mPF*p6MW@tL`$c$siD3!-=O0Dp-x0=tVvlf}&hzTeK`hB9{?PyLi%ds5 z7w5nDb&CJ*`(N-w=##zWY-0S^W0QYA{A7DMJK9Wv#E(GZzm3>+wIZL>@O4Bx5Oj*fFME?7U^PyK?zch!st1PiMt(| zj>>_{lD!R-h^+`-AIIA^!!5NlYb3LTMR1>#ehpYs*dvHOZy4o$Y1{L|oqUlb7>7*o6%hBi4wHj5sp7(j? zP*yT%*tVThcqo|~W*Bm4QZffgQ8(j(%N<(rI1+=d`v(t)Wp`Df3*V&}QJ0XSOmtdcx{a%hje$J`OcTntPcp(%i9?UJsy@vczn>)_$Kxth zAMWlb`|kgA-~qZ5x!HvGPc2+BjHgwa&oyrHDg|+Vd^eYDjEFXfJa$LS4}9}`6~i=k z!Rd$QoZ9=kGkyfhvQU|6z{R!>tHGo_j4-5I7TisyUTG2-Wjo&|yJW90{FN7|Ff`1` zt1w&umFq9XNoy24rzBzr$hQTHvg?|=rsSQgDaa462&M{5{HT5j{7u;VD2ltOl~F=X zORcR=l<{;KT}F@2e0A-k?5^64glCr!t8Es=3~Ht96N4Jii(i8~9-qFBNLt)Pz!e~G z>LJ5RET?s0s^lK`T(-N{>Zs9ZqNnr1C1h}T1CGz9>rj5qY2X;M?J9w$wp4fkz9WkR zlRjtbu!e95_vn~%SjaOl&gbuBnfH{Wu-D5xg&%_sVdSlK2#asvIYDhrY$$s9bK*5r zcTMyRZkG=fV$aV7CdVsu4o$Hk3b8FFIYDO_i?08R{~Bb+*m956NHA|zZFF2@YO_G| zuXn_-NLTbx2z7+5zS#0HIp^f;?A%#8i~>Cm*f+GNSuTj&?4@r$SjLRAPEJXsijr>f zN@|ldcjv}4(`Y$cu?2iNa{)RfC%Sj>JT-RxZ77@!augHhqFaJ5Xrh=c-FbBw6zhYt z6i+xLXCw^4pzSZnf9}wOPYB7cAv9jF$#^bMZBPO_6;aJ3QJIJ)|( zZ++-;1M3Rc+Oq@#Fv;>54k12bwxjqzWN_fav3D+oI{JEqq>qeBegDDO`+JJ`&*U*^ z1tD1XnKbY}DWd=XOVj@iJ@@jsF#g);3>ef$U+_oz|+ly6_4t>Ak#Q50$r1iH7m zlg-&L`bb|K(0=^HC$$wfJEi67XY8MNz4Zo3$;T%QpCKL~_k|B`W*ZNjo!uHwms0bX zy67`VI|(6!VVhFd3#~c2`Avst*ar+zKG9C6qB@;Zo)14tW#p})a0!HRDR>FXnt%w% zbi!FwMF&FkxrVob0LZMBca8MNK8*1d$0WaA$c=D)|{ z-%iRLPpMm#*%Pm`Lt62PV_Xi+zx6#ec?^GZc>qUCZ$eG zcPf5duRiJU?dSqI-d!IIi%>#0gPEL>j2&xV5e%m6@3|cw64j;_c_Q(!&J#bODBl2s zk4ki|OYo$nSt8RId|Q-Obzs;qE0I$!5NT_Q>%D#>$kEMTrdNf04%v+QXc_;`hP=O7 z1Pp69al4VS^Q!cnwr~9NMv(Fl(mDWX6hG6P+!<*Jz%=2W#)gNX3$U>3K$!L)_TSfA z3(&P2Ug+-z=HdzDd_sIzq)^_@?^?LeI8*LpX((}uv1v=7FUG(FGNtZ z13}~%#kq|zOeSS`Q$gTY@`mBqOJpQ5SG*pb_;O#QV2FefUjp~{?Ru{+3{&ZC^>tLv z7~$#_w^$4sT!vm=c5lAvL1&AILr~#67E;+jsV*M1*1*zAnRx3PbRqs`v*RR(d7N@s zR@Yh5Mg|@R)oHE|JB=Pns=vi%$nu--XxUhdEC{I81Z175lOe*g_%px%}=?)3{0&I=%oJo{10Bpq=tw7UrhryHK{tLW~dE-CQBfB3QK5M}L9 zcq;aazJOPgX|axD)oTTB>E3U3e;l5l1JSeZc0)6q=Oc`CxsL~h0MW#heBT_$An9ZQ z?#mGZ9H*c3kti|a4>RQ-c=tQ?PZ|ExR8RilEAA5!!zu~85rD2hy76gbfSI?*VprL= zRoz?Ln|FVNUD?%+mf~1Epew2v>WcZ(l%xGA3w~=De*YLA^-X+Gkz48K=V}$$6XlPh z?IXa{uu-leUD?7VW6bj3&a=jvO;hz201jUP4sulT(<- z)V9o;W1&g*q^k9mmU@Rq&_1|F?AgE##Ax9@P?ZMA{gqjDc9LK1(*y{cPXbKy5_%jh zLi{T{f$~RG!W5{Bb<_+==9Mt%240OlItTe9c4p{vgqEvAAniL76xl2FMn@Dx8{)8F zNBU@psB56yGPAm=Oy>r3%PGf~3>CDUK;c* zDpE1#8K+{U8$bcWV6?Cd_dhuEhkzbb@;tii7NW(KArCIc4B$97DgM53Ur>c9))rAu^FGCK|zsHN3`Oc8Fty41T!m-7)zVbDLH+MZBjD&>LjWmEhQLhzP_BX z>24%HGIQkAE^=U+o*s*313FrV#ISa3!-2qP=*n)XDCC!)YZYU1+}Uq2a&9GmMF;jl z28+DeQr~+s=Ef??qB|ZsJR+~GoVHQ67`T4t*qt(TfIjMzR$m|M-Lr@mu>BYv1HaCK zlDvlRmSU++gdYh@dOJw0QSS%?r6YnHT=^K+giZ1(KGd8^`Jib34W5Kd7VEyn{|JS9 zdVru+%auqpWDJ-86{daMq|xF4bww65kx6k)Wc%bp?jn^Q+I|1Qq->zI|ILiTTsn|g zTUI-p6wi~wcwo;&s=OTRMXcY5c>#5gYta!-IlC@LRI?_>8}xF+d?dh`w6JYBWEE3J zoiLw;daj9nE(LJX9E^U251V-mtbwLuq^ZlCbUb5)MK_A@|FCq2q=S~`!DWTrIG(9N zu0~CnAg%}4+HVQ>sf|c$3gnk-=a=JjmkZ9mzn7$D6^wUOT5_9XpHfTlEvM?1$IgQ; z=#be_^c$D)wBfEQp_)ZFm7&JwhiR|pLc;Sc`@zY6ddjQtd3Y`a8j7iEs!sByjUYdV z%QNqw^1`lNW5I&k{~{@ZL`{ZPj;a{)Ytm^7p>UWSxPX_!#8n`$w>7mhnWF?I?qOl7 zBF7IH%Sang3@R&>gb_JJ_ngH-Y9r4H*OE!vW6#x|Nyc~>U2Y~`*vAbo=)_tZT zpezbBNl?;!<5S6G^Yn$sGmHx3V*r^9I;Y=A9kMw#hDpZji-lR7ux{bdphI%hlS8&V zh_&?_O&omKb)hFwB$iTbPtMUQ?{R}+*jnF?$T zR7mJ)LWMY`#M^DA*bc(7f`!+MS8acjbJ`lBkx6G|b&DqS&(FGu)E6nLqJf-CKp(0X zUK=)NJ{9erV3B)R@x{L zRJ35S#x+@p^hI^@|BhhQmAC7eulon&bU!1v(4iOqoPaHX^)8Aymb39b!4nfIB zp$TOoY3w$Gmk9?p_+bRJiK8IBvu$B*zX`Leqf)1`ePobnbvh*@ZGQWL$s=?3ZRNl$ zTb(dlib{0zbNxfQOw80!{|uZvrts#PZwMgj@jQuRkaCIFMiES!(+e z^p;cuFSXr_*Kmy@CoH;8O;!Yr5}j9rK0S+eK=t69;cw;rp+TOu#ke>LYGNyKq(js; zlQih!;Q5MUriG*JTz;=DPY=g1O@(ADU5F=of2+$Nyd0-isagq=dR_o=faIpozqIii zl=}V)8zZpT>x;*5EPe^KqHNDAh4*mo_i&zJ1q649XA#ZW0unMix8F*Pzm+1OOg6IB zs-F_Yes{FGbQ$W^KJrdHQVn*cd8$m^luMwDPIEY3xbQkW9hiN6f7?qzvkyc;myz3D zN4~-zj?8DKLg#r~G(hSukBuRKs{LMHi)Laj%#v1vGznUfc)Qqd>H)^OjgZ@(I2F=j z3GH`E2+>J@%!xZ_dj}$G1K$@Yu=wEU8m$z+eZa{AnLb>4E(Gc!DwzI{KIWncn)~HiMA(nnJ<#?Y&v3F^jjH8);L8lOGL=2eCO@AEt($xWGTBmpx(GPc9NsXJ z28s#^Vhgy_HwkK4!%>MVRI1nb63$?Kqy^j%g|n$_>Imf{f+W}aQd$k}pJ`DQsOtgG zia!n{sK@;VtSP+76;68}`Y9ZO!5z8+n=VLbM+P7AWyMJh?^Dk9{re`aX4f?CnuEKl za+<9$t0F>W*yOUQ9v$CsBX4LD9Hi&)iW+Mi(@jhQ*t@0Y}?MzPTCUj^DeRrP++FN?z3MMyRplsc7QpcaplZ?A(q#37jS8e)vQLqHqNs?@3$g*Ba-pbr7 z(``mQ8iTMNIqRdtetXb`q(<*Xzm%fMI*6pVh!MbXAWCXojCd@L&mCgO&Vk8G6%!i| zQ0EO@v}O2t4{vxrd#A}p4A5AtblQZl)^y6|j&^Q;t%v^2U3Ebn+FjW!^~XnR zrml#_(dD~XtiyPV0vE9w)|TPw3Kp%Wj% zZ(qzIy&Z6aHD6nh{ksL`yI2<=+g0~>U4^Ua&-G4u z+)rhRQe!e~8B;bfQEM?v_Ege%7wypV z@u9dsweMNh4R&sJoU7d#eS^cqTzKr%W2siM!U@Y{pBuNrlH7~HQChLlsVxLJW8 zWM;u3!N82j`-qflby0)sK=$MkwXDfWiupF_Gwc1VnHzV;EFA$e7Mf*gLQcg$>pB~l zazm^z@U}69UX`~jnM5y#6gqviJeVUFkxCsWGFbybn=G4Bi~IJhS>~rcO8MNiU`NSGI^*tj zB|p@0m^XZeWkNiS_=%!00Vf?sOer^#ygS@VMtO>h8^y?O*W#)u(qO|A505I8Kv7!N ztx2iz`VNnvO^woI%BaP}=YgK`?^D>!-HM>na^3`(lW@fr!KldB>+VB{As1cjAm?R7 zpR3_?cvq0HB6AFoTl(1twrV&Wyv>TiLEt9R(p?VL9*G%Vn7k=1#e%gw{j;EiTBocM zj}JPvyjYKDLwc64RejVpbinn}vnlnok=0m9c+q+-;A}1-rdYb9be$)A)^SWBT`%Lf zKQvwg&|4YfS6(6P4-k4z*|gTZ9eu* z45ZJo^463-gYeA0< zI^%`(DxrBl5t5h3(@^?o);fIZb&;+VeQ4H}AnDw`Q!AO7rlp`*$0u6$J+&2JbiD&z zG;chP=FU@_%ql~W=z&X(?O3<^Vu*!2Nv`YcmI!tC5*UbH{|7n#Z4C0tkE-AtbY;s8 z^*%dCyz#45Oj_h1WO?0c&)tb4zB zT5@M>C%MxD#<;E`-4Q}YJ)|<7reuCU6$j*)SnZ-ZG zNjW5Pi%<$nj)7pZq73)zy%%P!?!X7KeG2}uAb8HFws|<{EkUpq9g+&Uvt@LE>@MYa z$P&5RUl#eYM-v&_csXbx7%Bx2>Xx=lAw#!mQud1xM#Xg3iG3^&IN*T8;s7J25q2;$VC258TvW!af-0M2ZL&c$kFVJB!1BruXDY2yNmkp#vS7S!TZYBj zB9rE#PKTzZ#IC9Yt727VQ8qR3W8K6sv7{B>4coFUEM^B`gI?A+1(5e!CIgLSi@hq; zm4WgIf-;5OUx*B^*KB3v8j)Kdp3cJP)>gHb?_REj+OCZRpNsyeo`bG3QPl^^=X)Nt6|{+ne_% zYlc0`7UVA4FOHA+!t6$4EB#B$PGCV(fU9DzJ1rtVS*JlBBN?T!?VTl^h)%5X-j%Y9 z)j8~$^X=E|$2G9@zAR?njsE!@An`bD{hPvP=)hN1lRftZ(CwRsuDdT_b&PKH2!}Wt zu*WzdfSV*>zyXkt!LITDllaBk9ecQ=c)3~(+}8PUDM$3ea^r|}*e*(Y`(>^0acP95 zs(a%hIhnotaXfMQ5+`dP`X>sT)BnfXI|fPGW$nVa1JZZU%I3|%> z@T6>^XT^+1l;&Icspc<+b1Kpn3Wp2I2*o6W z7KO&$mI#P!{`)1xv_^fX#C5>Q$@m_D!Q>2jsr;LBX=~UV{@+VI9f5`4#~Kk8;fJNp`?$_UC=psw0-fv< zrle+#1ka1Fd5juMEUB@vq#xNcF8Vvn;c>~G<|x+9+AYO*RfI;5vCnOfd3ZMLpkEpf zUz%nCA4bz087{Im29+&+qh4JdO+mem&E@*}`g-#Gi~N)P@hf2mPj1U_Y*$N55myQ~ z)0Wi6SEin!pyh|21NXAT$Pn0~J=!xuPuyzR#IMA*w|>3eZ)sMCl+xw zZJNcP9m`2a44F?{?atHiHqk_(#pmspis2zpJuDD_;9i|!d56LA@X2Be5&8g9w@W392`yrsSoFL2U920>Zt8AEm@;$8 zedo5N3fiRWz_iB_-E}8-VKk+xeU)1}KkhJvHaAt*+4sr+y9Q?6c>j{(ZjFbcPqh&_ z*Mito$j>uVGX@_G&DhZy3`!$MP#YC{5R6{)nLSkFLQfQ=FwI>p*9`+2 ziNMRkmhpvGQ2rH}v~N_~FSh=DdW?5_4gH{YUVqpf zNT-)Xrx)WNT4> z(LDG<*CrNI-B=tEG(=acR)!lt6RQpGzK1dfu51oT+~v6f8Ex6*$^Iz6VcK65t-Fet zgy%8WD=H@2ecmn?I2HUt-?z=t8PTATXTq-*$?}958U8llT-<(-;GRtKXuqzMQ1gb8 zCRW2NJ9SC$SV1YYae$L2o+P-Un)d;yq`P|RE70&(G^uctl~yajw?8Tuto>bKm#%7t zN3NZe=jtQ}8P9zQdF_UMDR-_4cD3q~(EGdIJNm@&{!WI=7CJw40zH#(+62l0aXEss zGWOV_law+%s@EBI_~}0$>+mAi*qCC6BWV64%C&agttqeAV@FYZ_9A)-)8#G!&=-p5XEKsQ$0iPn!GUW=zu1amMS2zUh&D*f{bd;-C|E&<)clz{sL zZ)9cLdm^e4%P$Wo>KikdL{Y8(NlV+iedY%7cQFv*DjAfcPQ=YwC4ct6IV{W)8+=@I25l0 z=EPX=JZZr3+Gqw?e^oi-9r6@e_zoV9-h6-BAIb}FrfGw>vin7$gInHyT7M9GX-4v)xF(;>gq1xBz; zi_JxoIos+^&9%;#E^fL4p6@si+}(9aM+(Qd~s;%ssMCSYKCwC?ANpL6}QDR3~=ATL5q_#=}#aF&C>PP9wn= zk7p=VTn#K&JU%L!I5}#zv6(7ppf+UK1k9c)zh&O$D7CpL_dKoG{M^WF6wfrMeq&kN z=0483&Axp8?7rP}`0U_i1Jmm+TdYHCG5^)a16|yzy$1umJ)C_yOFdiY;=wF-zI+8J ztQZN15pgAW-zq7OJuw_>*D}CuaXEZ?NQ!a(R33tO&B(e8Bfe3Y5A-PhrqxfhksAAY z?KeQ1)B}2ZEyE6|_#)D%*B)fi%WRi$vmj+&#o z4|#fB;L%xx^Hctg*7Av3N4`OoSSRr*JH-8|Ywp<@+P4Rn_@iid+Tty8;47ie>dxPl zev{t2MEHc8!6bku)Io(ILJ$$)tAqqJ-dt^jXZfpERx2ZF9LFDjvr;o7QP? zxksNgrPc0mF>mO3n~a`yvvkHQkx>dQtgg-%tHe0At%MQT7jZ75Myb*H$&ACzTSshF z6)x)PLWN+r6he@HVDLS&)+*4ii)PILEXoo}II85KnOelFs{n<}CJF>_7uw%Vtg95| z_h>b~McdW8q>g!zp-9#ZDM{fyXQD{apqY9q6wtILE-cXKv;H<(mH7tB3VfN3Y)IcC zN$o_ivj0lKFpGsigX}?G&ym4y{l;^=sBx&9Lf?!3 zmcwZ}j6|g-iCnV6U4)5Ui0>&*V4_cjaH=ZD70#@XylN5M%dOf%_)K_e89)hdA=)yD zKE&=ptAT710T_K~#UI!sl;;q+n*1E0|J)W}#z)s)#`$VSZ1Gb|49B%cuskyiz@)_; zvKcncg&tOOqJ=dEX#j}tEhH+&NOXNK4!fBolp9sk*e!rs#1I5GPDktO_A#9aBNm(u zYX?h=kQ730{?3jm5H6<>j>$S8<^O`eVL7bV67Vu%HPysEsnIF6XAu5b=O6dWu#%w8 zn`svyT@h_o>MeFVK*U)e%&HNLIhDx4@Xi!iAjtDnl8LaMaZ8i}m2NF>ULd0Y7a zVfLZ5;-{!4Cph5>4lFTeg)(i!)P^FJYgv1`vtaQr26?^6?By}2kvxrlAn-;CnCGg> zT_wkoi(lFPc$ZxD;yuYKaZiP5K&A+nVx5$;(=u{;w{)uI9u7sFhcFFKr3)3@?}bxI3-N9kGwmG6}X!PAHP9)^u5?3e1!_;1R(wigMFmIMQB0 zG&e!fInQ{;@sBYy=Y9E*rEyiDf_DqSlC949;H^8lulYhLq$9!}VsSS#(8a8b-Swzv z2jvC8Cfv6r$V(E{5}bCCMb8S9uo6*nwAG8#sv->s?c37`N*FLCo#>^dQVl|AVo({= ziQChNy`+$}lgLq1A|Vu%&k7WjPWFHXI~2O6P#m4;RVNHZP7JyWwD2sRq@B{7j#y{a zFtm+V!%yuIG+_=;HGfcH+65v(0+&F27f@ts<66TpAC=o%;ZGDrs1tP~ls`nUY5lk))HVj_H(urr6jymNjXr_i8MQN?uQ-OK_fTZZ;z-HpT`N ztas53e8Eb|7xLDmTGjW#N!-9;gv#KaRb|P-Mz&zCx}-XTB+azg!4ypxBbWi`#e0oH zZ!n!kY1MKM9`dtrknV9It+nv;M91Rc?rZMK~t7Jgp`ahOm{ zPFrG`MOrxl)m)hJv)>MpVI4D3l=Xb0iE->x@pNghh%cRHR5!+j|NS?5YE z^{EzjEMQSlch~_QnVY%**=WL@KPP_ePM8N1PIRS|KBR^|S;Z&5c z8(S9Gx?GsWVjXEq+zxb-RNS*1yIf+k)}uSm@-AH-E>qsK-)WOGlWNqExUyaR6q==}20h6eUQO-Htw80>x zr_TzH-J{Y9h}DA)Scyd0fC6mU(K;8TY_CUtBn$$rhnC&v>hz=2IT~Gt@68O`qqY*o z-Rp}EA`?(ZD$tf1hLMla?u%s{9Bu6h8n`9Pw}~YC84iaQ`@B#e{;MK1I)eqCigi9> zzD)DGv25wm8F*o;yF@jzf=+#th`6GnrR?p&$x*oEjO03tLLZKWH%Rq(Da#=_4X0Tz z$(SAG&g>E6cSjc#Ym}pNtE@u23H5K9W$_un>N_Z z?7;~3;Xy#W!E4WyV##YMEBN-^12W+-eAwQQ53X|h)pv?Vo;V@yjk$Q_Xu(**C;py7 z5^GK4RG_%Uv@|`#RZgh%FO#G9F*i0+TFUNVHDiIxf?F`M%ioijRB_IG<)x7y3wFMd zq}y(ZXhv@u)^a^DD=B%LJHE$2)Ee@}O!YgbsX2cup41T)hK*T`9d%!6U8muA#jUJZ zi!}tk5IFI{DowDHSgz2KsyrWZnl)A_xdu8_0w6PpQJJGsaRx(G?3Dy7mTY?k#|o5X z2+Jj~dw|Q!^~X(x&r3zr@C3`Cbbp};d9&cS#6Vo2JQ3oR)eegsDTP=hnK;j~?H?ZH zjP*Pl`BVTP6j|F$%D+3w%Zfw-V}C{Bk**_qN`jiXl;>l3~7ipRl4Plpep8t5;c@uPNp>|wPV_i9Nf82ma#INJ;*`;6A$wc0nb?j}9GE!Vae*dQRp zeJLFH38nDe8YN2;ZSay#+m`qz=ZHP7|GT%yrHn{fX7@!tpeOlZXwogAL^~ww4j%iq zp@=7{xLCbHNagAn-9a^`iX(2zT{8Ko`IW9Fa%=%~zdcl^p=J;Gd;bJhg zZCuW-Yf-2tyKzTEWHn@+ygYr0!yc2`{3rr*n|VBPb0E~YvLewM3z;HC@WCJWYaoV|5I zxzAkf5e$tWQuiBs1s>@&RJT)fsi6k0d#uZVV|y+gEHSodmh#g~Q3*{8mUNlT$)q3g z9MeuMlTsLmTxpEXq+mCrlG$R*mXVt4-&mO&$`&RhxJ_{*ehDe7+)9Dw);j!#sM;ya zp*dF^uTMh#Y3*^1G9F2Sn0yUAit+^6d(X`PpLS*xX%@=`x55PN>R$9S)WB^gmY)r^ud*~O3`cT zAY60Oal3yMOI>b-{z^AK(!P99LF(nN0ph=>eg94f{|perVaBX_ehsBwe+>}x|JQ`j z(b(#1R@l~oR?ybr580fPv73|PKi3@pF+UuwAT8O?2j^`$Us8Qfsd3iwg?oH4nAs#3 zm=l1b60~QInc7NhLM$%qo8krs^#1*W%)S`~iE^%I%1~!(A`|=Jeg6=;hliz-tZ>(0 zbnr(cGHNAqtD0l|g+XBNePA=(a6oSdl*f(C&DWUeqhY!+C=_yjq0rI068(ZG(BvkH zxrB7~ug*cam8~{CJ1zPnvksQh7G9wT_k1w7xOZiM(dw%sXo&> zg(2ip^Jzb824-+v5h!7!Iu%Z60Yd`mJ+VfmLJ1eEKP!zN;(|J@4f%XU&n?UHI6k0! zt;6&mJZVigaq3qJOchH=g(aInf)bOY^F%^djTN%+Ll7DI_AVG#_W2kj>zVM*(hAjH z5qkQ$^wA-CBd}L$oK0CAn4ZQX0pTPfg%Kt9Ue@hza zOVSfe2_3Ruk_H6&_D%M`O4`ZR*222esUR);#lGe(Yy>Qi^45(3<57=_04o_4WY%Lv04^%)Y@L!|({X~bzxea8 zx8no!Gol_69RC!YYqi9kF)^L>cCFjDyA!}{cSdltABNw0U?K28RTf^hdSN0Kn1OmU21{vMX5A%=N> z`J#pi6LNe^QJ!`-QH>`VlI_PiT9DzxNZE{&UeFIgOE$@XV$6dEmRtJ34)l7XnuU6f zkR2zK3^janG6qbzq)-Bt2^lETrzhI>HAwQ7M?;*|oj&twsQUq-Hw`h;C0#w<@p*16 zxVzNsT3*zx%nv3(xliIFU)-pjqsxn|ysoi#1Sb_AoPb+mb_pOL;Dbn{-1-pdW7TZc zo)pe?#mbO`enX_qhx!->u24)E$4UqH0}C%EiNn9F_U{t=PgzR8noVAPS*+a`#HG;x zg)IM6bN)3~-lbx#h#-&TQ`1R>7niSoXF{u#w^tya5oexM$fzd6=3|l3My0BC{A2u_ zM&^U^)j%5e<@(-@x1Zy~mSgU1R!hh0{rWNOw}`R=1_@e*SXN+^FTn^b(Yddz@bfyKswN|{QUENq?B#)OJBkkpP1`b9@u`d_~@ zYeI&Ltie`I!fZ8C>?jgCYV6QeDx2pQ+%qv>1yWra%r&HmBSG8sIRzfAG}}GanXCje zJO*u=S{LPN7$ImFbq&(&f)?SXSX|vC-TKOJ+T$=#Mh`O%GcZ!b*5NO?LlUj-{cs($ z9d7o*xXGbpby9lhF)qmk*c_KTyt1{VO1vWm(}_ol$kqUY zf8(W>|MzBbSJd<^PW9$+pbp-%4xYc#)sqz3o)VgW&h57!-O4cYM1eruf%J1Jl zue*yH{}&ea2RPPA+=fV8QI?H`j$X<9ZzQe%ytSyTsfwwL^a0cMg|{joRX(^hzG490 zXlz!D`rTZR3<0V*BaEPc8+{5wkd)Ehq_3h~<(-`8uD7M8!n)x1+{<~aL)&zaK%elk zfOlHM^!e+@1JCi>_3`}nwk~%)pmrXv=WJL0Tltoss0w^jfO+g2F1j zjS*P^nGjp^Gm+yIM?{mAX{mSK(A;x(KoAfpNE-@uBXL=c+MHPiVa6dTXnX9o(sXwy zR;n8ns^fjM*FOZaoO&Bt8wR{JKWypuciXYaS|{_QmaR!AzFhQ{b8xPs8(f%QKCP}+ zr;G8O!DvlH*0Bu)FA`6`LhmglNv*x5c3O;T`HGG3Ts`#sjhB8%&M}b5WHZ-z{bZJE zwS%iP33DB?nI7*?#H6sr7k#!wa;qz88;&e3RKZ*VDX1p3-qaX!Xz`ztS_W*Z2BCX8 zW?M%-cs5%NLe!1isZ0o&8|9*4=k~*Pjc5*M7XY=wVRDdYQ#e?x2Gl96LC6W!&DgY6F=E=-r1lcM zp&Sup@F3U^K}RrY!W|lp15mJoRmZCA&cyVrtUA>au(&5`eZvquv-MH3#HPXg(F6P6 zrDHw}I2EW+&|hFJXV>z!=M*1fG?=t(7?$k<0`ccoty+H5#BTl7UUbuh!M0IzSEK|aN` z>6Gq%@^Fd|S={MfO|rop0{Lmj?KA;bToSSsx%SH7iA<_D6TJl+qWWtxY*y4X@k6IL zTRaI~8j7{oCr=txr;wREeNC`a#ssxT$}4xkD4u4d9F9;3ACX-1x5N&7C`6-Uv+ckl{SA4$Zr==) zq8~uVz;mfxXv7rMiTz4F{g3SR&6+J8Se{(YwWnN@6Qg;$mN^4Kyc{}aBE|8oTPm)HJ7fJ^ij z@$)~AkuOMGr9t%1pXb+GHadDNaeR34LP3)xa5feEK#DPZt?gLQV7tGMj2jM&SU zI8BZ+ZB205udnpKB{JK7(>aIOn}3Rmk>=pR9ANN@89Z(~hNQxoxgNv=SgAIQ^~dtP zFuu<7_m1KoBpdQU0R?aag9WvR(}hUb!^aMV_EH~?#|zo31nD-}Ioo)J2HZA!Ly5F) zc!G%(RXgbb=^lRa1{_EC?ZM}=(1YGL1X*I>vB?X*1_wMt^EK-+c#HQ(+mD4FK=(Ds zOTHEdWZ9R6Zlvci#_N4z1pFN(iz&wNvC-o(q>J`T@2&WI=(Q>c2fD8{-r!S|Khu5# zNIP0CW1assD+oiBsPmgjAg!UPwd(LCv)l2iOe#nNeew@R=$PcmHFa#?ycqRztAr4d zP3oBH{Ce_i@db5lmCnr?$GLDJhGf00&Tg8VsTF4%j^9RS?FrXT8{$jMMVy?~N|uTY z#<2#Vg)1v$<`p?o!*eo}={5}sGhhoS_Fpc{Yf700eEM$3AO0s zfJ*4vO(Ut2k|JR9>a5S@^imEZ$Bm72950`#rCCEQ31A&an={N`IUOxD+{N)BHfYSj zK33X9I$`eNn_J(YxS2iw`g>%u>~eY(wD9CYY9lA{fC^qt?wsk~S3gU+r^scXNfBU+lJLYlx*%)?%C| zP|5cVXgXo3Bl=O;7EL5NL-r@UR(r^A>jS=aeFNeibY>YUMtd$B_@auB*{y+1+vW!B zHgxqNgBmE*R7>@BY6EHm>Wx3@)En!?>dZ{zjp}oRK_NqhNh6UWnIdUWFx8Cg0z2!J^JsBIg8hOOREOLCWGvnDX87T~Jy?xyU|UbQ3nV_bah8Aq`-0hJCp>9XN`tZ2O^zbbBx zB11R`1UJ-mL4`O2^w(~+wg<61}7YD*U!zJFG$q}GyIn^Hpvfo7I zDjxuBnM|v)PI#9iIHfPGueDDlxVeud7(DnlL?Xm8<+6} zq{YSXOgX04H0+g%w>NiF6Oq*lmzza`#5#lQqJ!%0aQ;W{NHwd02_u0so^*Lmc;1hE zS=i5t-UPKuA57i!I{hWr6fC(kdbcPMx7=e#+)Qh-Y~rg{5mZ&&T>XrTnn%@Z;k!-7 zTj9%378G8v_(lF&RU4;^F42>@SL0FuXf zz%To)gFq~&!rX1gPlz4=)coM$K*K1mUoD?M~ z(&;N99tGm|xRdIHkjD@b=$tgPBwp*MpR5;~%mQHJstbN1&1a*c%-7ux9kltS3Gk%h z^Ag~{2N<+Nx*i+O;pAZ-7H`3mV{ZkHm1OjX%5}~#7FHZx$yimEXQaWFH&%eAZU)y2 zg`MJP@hoa;3U7ZfT*9Q?%?84E>`>l5>_h;fp>GDal`7Z1;VOy7SCGH1PN={hP9Lq! zk1`??GpT;(MiLM&Lo&|iN5jU5y3S{yf=cd(faVu9BWn((u(LEnvni!_4XrrHn8-_y zDW!TYt3t=_(gh^nbSaDY0f?JOSu&rq8R%&qEkSn81|E6vb(N$C9BSd(eyTmOu_q}g zS5CUU94#yl=l2B8b~(;(HULuki-NnT{YFI)m%Z+{EoA2L`LF_V&|PbquCe{=^Wk4z zXoQ*iwW>*@E=^XVUOe(N>&!p2&mJT3e{icb51+K7QLH=v;NGGW3bvAs`yJj#>qM`` zkVwRszLpwJpD-Fqr;N7eFesHcaVEqUB{#8{&?W*jh#XO#I^iTwB|>qeF**TP(yBne zEN)Ul249H8D9NxK`F)RKkV)+5-XISw53}X$j}HbK z2=I#q0?#2$5^gL%K94CB7%0#|O^l8$bP&jxor;)j8Xsd5(pvVCSyv+T+aA3YT&!h= zo4~q^YOAPrMee{m0&g%Yf(Y4n)g4zgapI!%Zk1WXeo5U*@JMjmYf!qRD@wW#$Un*9 z-@~ z_9r0(G{DPydS6V27`Hpm=P$QqzMUHo@&UU7B-t+ybK{=z;Ly2wN>n=K=6_v*8;}d1 zs5eqOC!^LiEzD^Q?L1k8(HK?ZWJgCDCw`PoI^bah0>E=*jSJYTb@;g=X31Zr?9$D9p1g{5%g$n0oxZ58vPW^CWxsSvO^}?ya&X7t+|x@VA6PlR+OQEv=S)ZRTX&$n8UwToW3G|=~(=A4d}RK7jxs z%6x3p(%d3jwn9CNf<2yEkNnjZLKCW|tufLLITaYKllZl&&>hhNzFK_9(YpdUMVxO$ zsk>xTgTcTB4;{w0z`?rn1j?=;O1BHa9v`0bWXj-OX_FqQx+Zy={hkBoRlKX;LBzb5iR zyaE-`=y0D&_|y!IaMT^75Y14t$4zxgU=H<{r^wMA{3j&0gPtj6z>kCV5gw< z3TPj#gnC~pT?O{I573Q_elS`SF+p}@di?C&4Pb;m8h$tptccVXGUFkc*#F$=cZLAF zFdDv8y>&nUVvtgU!i4G5l1bN=X89+hAG;1xQXgafMvx-Y zO_QsD+xx))%Z)zbL~Kz8w`O=lh;KTbj>o=0$76F!Bcx_uJQ;EG+|KhEjzJMo`;goN^p+V=(RZ3F-9o813QV;rsib9)s3w*`?evQ1lue-fJx zs-8I_Du0n35>2w42teNPyFc;aSg#@UM9eJAVUz*QtB6+@cdwMJJB^cIvSONDzx(`5 zM*sOV2s>4_@5g}0Q0S#UbY1xw<@0@dwMa6dB(5Zzo{{}=%W?WO$8mb|r_I{~r=LyM zts$dPg(I0!j-NYF8GXP1UV!wb-c^>0IfoI3hqhy~H6B#ta;nTn$_ zhH^v`?}aeRmox*5&M89frKl8mvvA|PG#%8zKY^ieAG|Dr3%X*BUIq2_R5%<2HAGhBL4{j4|0bb~ZSE?y zh@M>QS@pw4gaza|#0Dt^)G>V~LbimaIrYf8ii8P6>-Xjw0HL6so`s}x6NY?>-?VfT z3p&A2H;ai12@mvC4q`pVa#oq+oFb%I^}^s)ng>OE*)HRpq9WzXMc!jErf$e@r9~sy znpCz+YU>q3&h@r5&N6wU;F3lMBU)P0ni=tX8>7O5_TG~9XZ3yB1hupT$67Wc^hVUu zup&)Rluni*WBgPVNzZozP3JVbzq+!=c$(==$gdRzCDu^zdW#%V;_4+;OA%17IBDQh z4AfPVKI$b1I5A{VMIU7JyFPfopm(CQy8YsUs(N}W6l`t7Y$cXAaQxpFuOXidGzf~- z)Dv$CiWk_9UpjT9%~Il)G$*?nAd*MJ&tuWm8EarHv_Pbbu{zi(jjRT>0bWyT<%Z0& z;^{;EqTI8RuK@y4(K~}ujXMKWjXQ_Nm#;x8-4%y4-9-C37`FOfl~fpbdP0@d7r$l6!97SyOS5&_*|I>MOd9l3PYn88dF9Rh@B(=KqGU8YHlmbW|eL+LzT7Db@^&%6U3b*3PIS)%s9l;@=&B- z2gvJgVO)f*IcmyA&+i&7h8i0x=Ep@GqWSb}iH$W!1OPtOd#iPfsZxJ|L{5YW5g;ZH z692FoekQ3U?h5hA(2cv1=h)bva>&bgZIJ^4ewcv}mQ$QwcU_R_#5RVZnCpI`SEytU zUfxh?{V5kGL^w&7uJ1hcL-!N$ZKM%38uG3=CVo_XOuyix{kIEjiiCkK4|IyRi7^iG z4~vWtcA*ftZ@?ugZ#U%7W}a=Ku6m;d_4I{|CH5h?HZB>;GiwsmecX5D&A@NBeS_Et z0Iu^CVugA2BzEXEkWBXQZIEQ}BA2E-L_Kkq7D1`8j0%IhA&~zkZ!tRJVc2 zR)&URfariA1ZsfrfcStoLmiB(Id%)}w=@rRXDNvq!mh#BJ$lag%k1r_qq@wel1~S$ z0LF5!M|vBPw{F5CuaY&-X%I|2O{=Z*yUcETg5L`owBABs0C|k;P^yWFhr8rdqqc@X za~tu>OWZxq=zbtaAA5FIZ|z>%e0U>ElLBC8r_O9Rqf`6FY4hJ1`td|@Hui4oB?<2WoXTj6FSU9s8@&zZE9ImnPu} zOkiMF#P-9=!4q~?2Uov+r`ulzJe25860J2{`%1!1O<<*0oDGV9-j|$CG;B~%AOqut z+)UJwzc76q<_GPJJv1h5e$!nR1Y>_{OS9a9%n$NZLeTI)*#@2-aDg^`$PFh>|9f_S z=sYg(1$aWMNH$sFXD;h0c((dVek8%h%b_~yPc)pC;r$hveV)BdDbL5=*l4DU0(&^~ z2pj4cdQU-WWGM_nqXlt{?U2jA{KtQI2}wX8h;LwEVBh}4o3X#2yZ%grJbn3){|;65 zC*D*rF{Ec?Vpnp|H!(3c6#RoC_m7%%w&K59%I5);1QgvxU1`X9;v`3y>0wAxnQT;Z zblzX!QG?EQ=5TNH?;$)yDlE**J{O|Q*`BNRb#FkpQ;xZgQ{GdMuD+koACP(~eOj9q&qhYi`QViot zB*~pw3+btTp0x8`hU-{o6t!Z6yVUN#!csX(8bSSG+$LQ%+^21;Bja(3$I~? zq0$JFZJ=o0GFxgh5E9}tfB;b?lJHDT6j_8P1Pyk?jzI5lPday~az34}UCeOq_p-V6 z7pWc1*l$9Tx^m?y#|xGY8LT-aPZQAS1+*eZ8;16YAVce`3!q~q+=y~u4AJ*!Qw=Su zMqA8~)`k%-z=j;T#Lf^2BvC)ta`Nms)9F!GZb$9DfQ?9DIXc8qQYaFY7yQ5#I@N&L9;>3Bsk#pg*>P9pxJp5irR%yuMOKQdL!R(zCrv2 zuj4y{{R%P-yutPJSmJ|8y*NAAvz2zQQTc}!J|yZSA9{UyxTBk4qAp&xjs*}I#DJJ3 z$d@i@=ttNOmZgQ}J_*r`?X{Sc%~9cSybprA8_S+E7R7!xqFkCy?vIS7A*MbZ!X6y* zzJhKX#+^H4_q&4p)a$Z|)r-*c&e4;b@ymPH5wFYB15}VhVIuk@y0Dn_r0LLio`OcYlHO7gAoZ?97;H+4k2@NJ&}Sk9q~W1;G9MiKbE_634#MXPA+r2O^%PkTyMT30~ihvQD9f(nY}r;+EoM)02m zCUAfU2Z3)A67UKWAeR+XOB_s-{w+gwCHn-RdoN6(p~3SCoRVvhoSFlT3h3UmS#fg0 zXe#3>JAKizjr;Rk+Q9p_DZMm9qHnk%oO*a`{%Cs^Vs=p=J@h3zMHn@e`dRxR!$8AC zf@fLE%|;o$wnD1tjl!PuMqtKOKhmqa*XXiI4GM+CREMS_=PK-|4le^Us5EH$&4yec z#O2|i3(~1pg9DUl$T-`QC)Q)qt0XFuCem-n)maB;bnGWkmss$j=0!{-J5fTjls2is z6Gp^ClN4s}6VVROBt(lBoy5sQW55-w?^~gEhYVaOK!JrZ9w)MuWD{lRNQFNRBg))5 z*h<(+$}6&z$spC8#g60cA@b){Fh*9DNo{%RltOv~9kCRpu<@N3vbZ50uOP%<@1w&e%xP zz*FzC>yQRxu?6Z*u>V`TdC9W)FMirpmmvEXG>IL~Rg@p&xjUZCpq~;|Akp}o8iJ7h zGz3iM#!nDDmG|b?ux9JQIltyD%pUcB|IWn?7lQsCGQGp>^b}V1laPHA3TJm=l|4-!~r+G?#fco|=1^0i_{QOJ# zjlSTXoxTPpXhqE3jE%lBIb#u92Wx#NqQAcXj?5XK2=Ghg(gXoQ8eZr>+1>Bre-wkItUSNSCj86}htyq1NFRgSFQ27G(X6kkxig zKCC6}H8Fs9ogUbCH~uHXBP+7+@f2_Ct?bd((UI;(XTQnEq{pShZ4UP3eq2Nz1)n!Q z7zzpUdj%b%r98Y!aI$)4L>L8Q1E(YXGW%;RdCS*+|`y`4I$4fJ0 zO=Wv292&%72j7qgMo%(g+F@(@Hj7WXH5>6`^Rqwbq4W zYt7YFf*mtx8<@Lhk%IS+R=*>dP{7%eI9?RUfv>D9-b^>zw`aS7M-DOK?jE?`Tk6=h z>?B+WkU8*LudHMl7j_`<-52h^;&2>zjQ88U8&HY&x2*vHU~>PYZ4Mf!`S}?OU4KL>n_V$2YQ#bXtK)V$C&}(#O~r+OjvgxgWW?w>#b zq~m+(s!IuU(7Jp4cu!+R3#8B9<^916ht>dgyPrHTe#3?c^s1#;*)N$%cok(~WokI?pcge6NrfQL{>SBXqj?2L}0X5>lfMq>gr#_k`Dw&8znhKk$x{4aU zGHBG4Fe^zL4^<2`CsQk}D=tOthy1YK3ooi#r=S>~uPG*igng)m6ykh8 z6JRP33*BM_UQ)s8?xPr{2kN4p+lQ^b5e+=QCQ6?5} ztyLV^RhO+#W&M2@Y;hR}Q!908402u%)Ex$mOFdkn3+YI+uj{Tz&aSPeNGmesu@o#} zP_LD>Zgob7|o*bRPXsYp zVJUK*FpNDJfgHJUIf~gdGK+!~;1BgFI)az}h-eUcUO`YWv!lu#jbowL${KT1Ij%Co zX8>RrV$RCeWHL8p3?wGBA<9bE`XH0)PpP{5fh4mWl*u}zfE<$BJSn4ZPjTzsk|KW&;GFl!p-=bAOm-dy zGfptx)%;V;C!f;vNa%W4pggjjV5W=37OJtf!@;N5)BHzMvF@3djAHKM>>2c$Vsy-} zsF>fRVtTe5j`&E}VNZ7KD z>PA^ZKYb!&#IHMtTJSdnIiANon2-AeYf_U7z1_2h&!LJ_X}ckr3;LDRRoD5Bx*~0b z6?8@>5Nv9VTp`rd9d{6DYB@g?9S}l<9Xh3Ggeja*wZrneBCmzh_oy6U27JsnoLQ&2 z#)DvYNjAGEUa%QJ*^RL5gh=hgVBL%X?FNK8zs|AJ5OXEx6;X;26Hzs&E^SkB)VGK@ zYdch(y2>Zmer^jGM;_S~Gpag$i!pPL+TSH7*_FR=k1~q7LoNjA;fo?!MLPJ@R&^cB z&>0dG1*#Bp_r%5Ejtgy$y`3md_gkMnbp;o)<+uIb1uD4e*R~Y&TA@=^j~_2+NmC6` zx4v*Fv<7nB4ZN~!D%zP*izvuxYmdRS3`<+7oPQlqNxKTK zw`lmnm%3aFM@;IlMOO?_EJvhvPEgJ~9Q8AlE^AY?cv(mM63Cg>DMO(iY1K{FGon>H zS*{{&9w&FUW1@GRbqjg$q9d+5lJZI>@`^Tk#eBHuh`a--Da<vOJTqlVpahi zf_jD|q(p_J;1{__U25M_c>-ZCeH3*Xid|{X-Z#W)8EEMbqlQvO6+I+nc+9>Ro64Ab8+36?Ac`f$W!x$P7#Mr z8I-0Fo#u$6H^9>^)pg0*yyw~;@p3?`iH#nj9){$jZYC9gg{n9g(PbG;y&zbXNm8OzSopG&+5)>Xvj+Bd&g(*8J8X=R zA#}{~Oh|FEO<}^enCm%=x9mH-gEF*(>trMwtL(|W6BiVEt~Jy=O&ZEbZ2bdDJd{wI zi{agap;u0v>xJZjYQZ*;c&tb1^%& z=KI4!ZZ?%z*)KXa7M^|$Vpc)4m(LJz4TL83-B zFH59SdGthb&qFk?j-G+L?2#Y1B5545(y!2O;SAt{v~kXI5gk)uW6KDVl>_z5#P_E~ zjTj`YYo(VmmK5j?O#_;F?haQVW&wTDnp2ssJGREgCM6Qr^7-7ROI%8kytj2){A$HH zH4H_KYi2N4_FJd?ZF6j-V@a?YC-jqiv;br_-2feAtsB~fHPe8+ltT>&|FO%(cE%ni z(v!49PLsqfW4{YS4-yoI>(>-Za-~$B^Pq2VCUW_c>-=EG^<^WO!r>*+(4&v8i}2E0 z=Mu<;udW=HmQ3&{R>YhEb3!*rDq_Lu5v2$YWHa*ow~>;B9}sl}3dx*kF~c{RpAGpM zfkHYbEh3*k+lEf1e|79lc*JW`=skY49c6qYQ+KfJauqfa65UpyYUTEElpZ?+-w zo5z#>@39U4ZnzAcUHgPJ2n*jJ@(gwD%IZCZwg}J+hd3R9=lrUDx(+y zHSfvLz0vK>~_{H#-71Nm~$DMY;?(s0is1&36gGZ%S=;mPEoizGS~gUH!WlZga6 zmfW7Ta*{~{Ws**m3%ZwfD-iA_*BusTTZBAC(7vq>(QfO44T7%y^cvx% zipVYaMvng`}Tyn#C7N(LSL`pq}JK1-uAHPLzEwJ{c(3udx;Wa!lA1^ zfnCe9-4ah1ONX(x2k1?sv+EQ;%dJmpN!PZP-5Gw+lEz39rvw?jYrd9EEr@~+r%+{X zbiOvKz(Svm_*`1&q922!t@x^r?9z}&K^S>oQTuP<2q72%fXe^ZwEHGMwCwFn zuzOr4ZmZA||w|5S9HH$_l*t*vRb6>*kjH;M@b2o!#hq~X){;q|`h zp#J*(lC%q;Ga!yNsyIUs6h%d6DRJ;*E9OO^;kRQBY~5 zIl>xh)6~<@u~1vLQ{%3c!zOIE$ce(;OTG~_q>ES$uQQO(&MOb%x(X$X$W-0(nQyJ- zJ9z`S_^V5I>{816xWD;JAU$Z@ahjJJ3DGbEmO9#Q!GzYKTLJ`n7GJ@X!*!}?o3k*H ztNNq%ma!f;lZHDNc^M=5Q_e6-W_y>|44L*6!g6sVMaP+Tw{?q_+Tq9tMWrxTc({WX zWGXVg9I-6*u2V6NFoT{2b3v_-zPm>@&yaGLtNup2)LPM!+EIf@HEh1Uzw>y)LLtRP zsVnHq7m*>G(-S{nv&bj(XOaTM(C#k0sK_rQ^qog=Kt(lpTzdq` zXXS^bk*c_`KI3!0e{|7HW-l`aWXCR!Gh+OqT3hEu_%@9{G>ygCF*LQ18{3PuXX74w zPcYD}=t{Joux9X70KQuB zkCL(fY)+2t1zS|&Z4A94*9`exOk*mWv?>sYCqT^yL_PC6dRRDOIW3Iyu^bdvq?WiWnwzHQb$O=M6n4ov5qF zLgo|5be_SYTRrOot|PJGiP{4wZ$`A`wjeEf!6H+-1GR*ugeO$%6Eed7cw@P!rP-QB z{<{-|qL+1?h#w&}7D@{TYmcINi9h5s^TdDT5lDbnIC)Xrhj)ni5diiF>GG4>XS6T& z=V~ZO9O&98&rUe>#%PvCzEI;UhW)-RS6MXBOj4NvF4e=4V+KIl0dFKMp6wADY*lk7fE z;BUX@#ZP^oTI2hW^Py$1nnp$WyqE-<)=L_=`|+Nws^8X5jrk!s^Y1zEFBfp??t=kz zXOLOxRy>sagLpLcNcrfNJtE`E-aRr$3GwAu+o#5k`D*VTVR9h_Ij#;hA8M97TEmw3 z+21^3x9P~5>6Ndo??620W*;3@{ZE}iz)!7WtbKH-jaJ?~0(|IS?uFjykmk{(ts_R& zUp*?~>XKtpe_mDstUfy7*Y)3fn)vlN(@rZUHLx!Ecop7hjgs@ZRkqS$QMKVd*0fI(<8Q_cmM z_yna$m`974g(1#n$^;CM(rTx-4}?788fK=CS=cXbn8~nCs30x|7l1Mm7fl^mTIzMV zCrK}XWvCA$HB3>FsV{%x%G`ie;d0B`M3PRO*tln9Y?w8V$Rf@~V%_74QIYwY&*hv) zmSm(x`)-w|Frk|;H@pU>nvj{1IuznDrzm2jqqHC?5*w4(y)NwOBWkLBUMZ zGlT|>WssrgO6~_cG6$prW|q^6SuaG7MtcaSB@FI3S3zAV$7`a%qqQ&EuEUkiQDm~N zYjo@8Bp5RoTaSk0t=W*ItRS>QsFxn3+iqgW^_99Otxqdnk=Z0{os)9G#$*jIDvOFe z889HQ5WQ^joW9pt1JD))5JfY%PbUbl7h$%DS+%)N63?O})}{ec3U@(BKEyMQ}oq)}bac&6mmdHAKXjX=(j~kPD?!u?&i8sGObI`Uql?SK4 z0q~oSczZeBf*oE^pOQI-BM_QU%dQtQ$*~}@T#!%nx5$D>qll6Smk1roSkubLftmG{ zSyTOxZFV1GVGrwO>gWkIl&97}K6QAQGt?RF za>g|q^4rWbYrH$g87mB+$YDBCw|o2}<(^<#1&ckOJ_-u8-H}IWse8k%cR)fjg-e(e zIVmM`rfi8Z?}-{SCVOG&8SsAE#BGNc2tP*Q1K=7JIq}Men#iG?9bB{4y2=ttSI}*^ zj25}mS#kkQ;>7rng-^|lwP()Er6=&>5+f68s&f%s*?O@vvi(X&hPDfr^r;IIB&D5M zP)bZ&7_u4}O)j#U0LD$dlHpO*-99mv{rnr(PNj1d%_o(wY-Eti%91Cxeb}xm#yty< zSJ=$zBkZ0#Bn8Mw?U49$u(4%}ISry56}|{H@uu7APd9E?f_u8FrS6^z$ujcuCa&8P z-UlyyD-7_qixlqaEmHDLXrFE6Jed(SqYQ-`W8p(KTuj_?Hpk$7KumOaGu-waMw!c2 za*M4B=d`2WcO~_3&&~H7)j<5!!LY(yzHv2n1*4WP(%VdrNcrO~$GHw&rW;z9OkPv< z`wmy*WQ9UVZp})jn|)-}UXP~090tF<1ypdC)!0>%(LW&Djj6Jx(%*>IK^UojbT*KR z=QDC>W-q;w-S0K>?pw^PZcI7g8T1PsqYFE%v6b~~WZz;K4j1#xy(4hE6x65Q%z-KFvAz%r2@N_ zTMVDDU;3oq%$>7xg*|y#CW8;wF>VZ{UT{zla`y-9&bC+4=;7A#_!KkQR51L^pvXye zf(I>7Dw16|M2XVyf^K8bZL67d@zI>dXIa>9H*FT)YSn9zd^JeRU}C&-2{WF*V#~2V^dH4vcoY16=Ma1= zYc3;_zZ*ZPyd*W4n@~A#S<%q1P^9zR-HzaD*15C|FIw3(ffsYY)y!r5a;#=eLRbr; zuR3)0#P70vZ%X40QLCd`FPH8aq0RUJ0x&q}zB97;U;wpK&?p1LMZso2K{UeRMz;4Q z0DAOuL1>jzOxqom9z?kX6;K#bu4l7N;87#x%vKJifJ5 zg%vHg+*kc&iEzkcW4hJm6oWj-<#87@nMLxfxR^(DNHR7}S15J>Iv8Km`0l|$Hh{H= z9`{X0Oqa1Vh80{rhENliK^$X}Q6vCbasX?_cTR#-Ok}~r+x}8Y6C5-z87he5Ap9xZ z$XWvhh86>D7=sNqoDZ+X2ugu#jUKZDqo{Cl%>W7a=pY?@)jC^Sd$YT@qQO=8Mk<$` zTD>p2g_n}u8)2WEI`RrT`$^12C?} zni7nr&H4zcS3}>i()#X z$e;E_&Cp+8E(EJ_MZ2;QI=e#r8LNGeUn+Y1vRpguE{4V6#8LOAKD-G@!?V^hX}5X!GFRdXD&Yo1-McNP{z|%iKSY0Cc}~)QI#haJk847z>GxDy0O`ymn`dQ7QCp4-~~Sy*01ezMmgr?TuBU!QtlqMbz1%kiiN&Z zB|qgG@OT+x>W^EU6dK+qN|kRB-jG4KXH3*t977M6lPT@Y7Jkhmg# zPM_>PTM*`8g}$ObH^y*T8h6U0TaE{~+%rM{$`c~;ES>`Y1E>+dM4sz6y?H#p!c=TF zvHUvZ>u&J$z(J;8<`d*YyF5sc+@fpYmB`F+%EY?eNNU?a%dNliZUjR+w0LKhnb1H} z{W{_C??~3K5~lEGyg*LCGnN>>7)I@WfR64{OCk~&f#$JqseH41Kwq%3=n;*qdf+n5 z+!6A0;rc@6hBC{DECN)#=%L{ul6d<$LPS0$d-FjU8rj|!vf~9)I3q?8azUB#6DDei z;4yvSd}MY$DuRl@sh(+BA+*5(Qk?_OUIf2EkG|hqy{KysOzt7Vm_8z{+Dk-z7STx4 zhvmh@L*ZBj2?woFRl*0+GBCv!-Xe~D`;HS+i)`a$Vjqxk;&X>OF znQe=x4+fQ;Ej#!Rj^n%Xs=oph_M%wI-Z;{hydT-3kJzg5wn|IGV;5(~@++Gvgm#ph z`$0RKe(l7!<)QgSpy8H4$~iN3+xe$HEuw;Y(%=ppJ{x+|PR{GH2HuP^o~6d+YqNlD zPh?A}!)gPzzX0Lr7yD(__1Y6;>`mHr>iDt)+#P3ugpa={0_0x%{g7Su;D-z20K=0X zq|FVC!WH-6kMZyTYj6&%EQhyy1!`Q4YR2)dE=d9yO6xy|QCgyQ=;{;S`++I<3Gd%i zH|PAss?ZBLQMU--8>A=x0qd3GC$ei&%1*f4wkBP7Z}QHTw&>petpu=U><#E0!#@Am zig8QSJ4N~O=MQ}@dJ^W7vcKbWh>zz0M7bJ~%mr%pXz&Jk;Da^r#F+nt`9dxHf}|=n z7d#E4(c^(9wgN{u9dpp5Z=Vvov>%72tQCXa80uwu=Fy^D_5!Ranmb_39;Pl}!mzR6 z70DAO0DU7N&<5ZhjN7ly3lc+r94o*EY&-rWaJvFxkWyfq_b?E{^xi4J#L5xUIp}Mn zD43Tn6)WRrecya!LA57%F+Ea!EaMQT6#QfgpV@m8!j=0a`kt5+$^J91rC|sdX@WT~ zNx?6m_NL4_6Ii{|I;iTya(bp@r*O=|2~sx-QJs>fyZVh|c@=E+SiW{PueuzT?Sw2! z+Tw7Iq)})Q#r>+oOBPVOMhbIb3kT8?>d1@_e7#cvo79=04Utdu$$0!7+2XORes`AP z1zO`MjU~-5gyh3oOSDh0^NW^s@iv}qx6t>=+u@D4Jv*$dCx+-4R{)C=UZdpGHxo!y zRxU4S5ZoX~z5WjgitLXtM)YS+kUu`4-s%FS^g~8^rpP8rx7;WJUfVi&TJY(?Mzaf? z;4}Q^{cqJ)XU(3@)0}{vSowz1d4W%tI1+W|LqND&ffOKDi!%rr8e!luWdQO7IYD=+ zKUp%QEy&VN41Ad!-Z6~C8fR!ym?T?BVx$n&O65$=ahDQKCBy2iSw+(I{dn5GcQQGN z^^l%rh?qT%9ayL{D@7=XjM~KhBeqgX=XPm$xwtJ>PhRjx;*Ve-GVEeb=2Sql)QU*g z#ispGZyTlpye4G1(ss2({Ig|}I0cqEu)DDe>DCr>s|!LtX->Gbhm)41^u?;(;cO46 z9ZCanFRO@MbZd%8o9xM8nJStBm87D;RjDYjqLnHFM$T${2XoT%2IM_XPB~?!SUp~V zMx82i-Iep~q;|g*-Jv4v4S!iP)YY_@3!aU=T7sLhcd3a6cE$I&Nh3y)Xy`ejn0o2U z77In{c<>>-ykk+~GOBQKAW-rVUGqxwmf+D;^2utuap4$7zCfznj!0WPqZ0pm?cXE8 z)NfzZ4K8e7BCc5C7O*9xpE#s=$ajk+Q_CxHTuzM0G~J^C70!Is?WrR>N|Kf4z45Jz z)nCh`cCZU}3V%t6+uU==acHK4y7#Nx19oT!S#A`KdL_dk62<0_oz5=6;}hxGl6Jo{ z^ooz0Bldyj9c`OW@?p=}^NuIEDFW=($FyZvaRrk5vc(t=1G<1ZuGZtQ3hoU`4c@bS zCm-`E!v%i^)Ve-eGLc9O**OsYOsS_fRt^bC8v7=LtQ3+gKX8G_3_{0PMC-PsM(?6M||Kyy& zr8d#(zBN#J-$XO}e~)t#w)s{-{g;r3gz0Y{IYmiZ8e0&9H)(V9x|OVAgRMuOLXxt! z#Zx&L2@3(qR|3%|yLxfDI4OsLoBFlxNpv8P|J&F6%dJQOg;aCxjm~=}d!2drc=-*~ zAC0e*qTpt)Bnsz(F4E(8uO)~bZigwE&6MOCO}KY{%b241SAc=W)r7ZOP z*~&7Yy7$(2bFUrRmBJ{@jvET(q8d*uXv%KaMlfIAodJbU$&iAWA(l2V|D4!sM9PFc zHSXv6UB8v{lcjIaldvIXFIy&aQ$(}K9U}ix??LbeZnTI&MbBKC;jpdIS#;km(2e>y z+bwxgMB<>$j9(%xlIsT-W5C(?QpUxfKW&-0{xV;fpi*Pa((-Esd=7UrL*71j3Zp>6 z)?h8a6>Ub^$x{*?OZN%_sfOA*aLvoNohX93+|M4@O}jk9{@%$>JA=pQ}L z#`F96>*qdD^M~tq5&K0B3LjzL1Lc~PlhT+wg3dPHICu9WPv{7tC-5Er_zM&NeDnW_ z39Eia|B7!+Wc(jug7N>t#HQ4d00J*>TQpo$AlOKVvi9{8(bR7yEPBoo+zsxD`l+_B5<_eD(L`dCbK(rE5g&}Dh= zX$8+~h#?*KREF2QC1Z#7M4m2;<#za+d#?ZRtj$k?>--&;*(*Jzt|A~f_!Mn?qZ#1BMpZ+razg7ridpk2r zb9xzjb8}Ot|GI2mqarK6`EBHhO%5js8_--5@=yasN;w#|pp1|v!HXF$kpkQnvz`eX zi%ZLf#9#I&KP8gt*Bt&FzN)L6ZKMEididnc)Z>&lGk4eTuhVZsK<~B6qQDfa3614R zE!0a@8wL$yK0}Yom{(NyMUl{2d~v_ZLz*_XG{$u2uJZSdlAb*CQ+n8_>$mu6duv&5b;0w$$Z-EI@)G^4R56T71D__i? zNB;ZGs>QREEE~X74d{9E9V|SU5k)RMC>O~1p}{OYYp47E)D>SiG~}lbiH0wXMrliv z2fmG$KWX>VhHp?o^M)k>h`r&K=#CKh#Cz4+x)==r30 zQONPPYHMc$f@HzjD&a0XM(ZEb*O{kwS-%G>L*_*`Yh44fo%5=nC8W(Q9T}uE>c#jh z5N;Ap4bT`mAL-87&F`Fj0$g@?305>Y17BuA+RSZ`2pNd}p$<2RNnBx+9~Vmv1&#D? zVB)m3EI`Ulx;_e*?Px3MCb%R;dj!&XaFHo_#4V{K6PVlp+hS6}lq5}?kkCVX#*%L4 zBWb`(wD}VjY`8Ac^Y$-egMVV02_Y@UI`#{{H&!>N2AKp^m+Z_#2I+2G6>laWAryk%bXeC|0TO0?1Xk z{15>+7M2v!@{+~~F=~WvU3Wj710H8p^5Q9nh4h@+xBZq&)_%HbPx~HSH zubbNDvydF8AoKLJ%U>C25@;%2lQ%&D+-(=QyNjk5zYZ0 zEuWdN2AV@mK|P2=P0U%y2hV#?!cbJ5=zUS0$oQuWl&21MWqyc)j#2-DHQZnEdhgp}}+GKM%*^a#H75jkMOAJIl>Znq6k5%v_17 zM}r>E5ocJc^o1Cbl+)5kuP`#y)0SN1O2!rBT5M}YM}JipaCu56&FOXUF)*(ENET9D zW{?qgby-9R$5z7re9D)15+-JsieJvI-N>XhJVhqW8pVwgbLycq#*)r7b)Fr56UCa- zG8ItjAG`W&zCM%NVWfo&V|(E+)(SMuou-FMzK^k8LeiQ;D`llRqY!LpUe8W-TqwH9 zjK`XT-R6|iMpB)>$Vf)OU^2I`dt@U^B%oP|}j8hjK)JEK2 zGqe6a_H>#ey-COA)oyNJf{3(ACX%MA!E|4mT32+PhXt=v9vu8LPSB?!A`ofGpHiOi z^6P=$EDJgl-u1*dh{~%qC>K^0<;s{fvRLkhwJOCxUhR}{Q+V5##vTWWj-++T;UewC zbfx+ezlKtba*!ehEwdtXtvhRl8l+L{+hU}BK9a6gYa_6u7?z8s_`JJFwz7jq`P(4K zZ)e`w@;T%8MP`*|C@WoGzBgy2chRWPq2@J@Xe!TAz8ObqI{u@W=^6veWDS7gyX`UC z_Mucqo7=pXwvNVe=%XFe5-8PeU5j`AM!8jN_+r7sHojwCH2%Z!ka%3Q9%dC%^l<8v z4exv7%aa2Mj^q~F<Er!;|Y%6yE)qUmuD zb&sqiT}V1wUk&3>SihD*9zdOH_X z&$w$sZ7L4*3s5&h<{8;gevx@UUpoTZ?xD$Q1N9Hoq5NX1d{$N{a6$VJr8lXQqz3FA zRR?bGyg|Pw+?ak!4&*t?j&eht+@WLMQhC5zLv`L+LXuy+#!@qnN|QkfyN;8Ueu@Ev z;!Z2+p0qZW-zjaUd!N~e%cef7=(RO7E@DicI-#0sOucTdH0m2EZsW1ph_f=uoU~$j zd6jB}*}>zkp1sG4$V;{nR`pGpsgqTI+%%^}pl_q_n#i?`HJ9PGHI|78yOP&LWU7TW zW;zSG{9=d@8e5woDChL%ux2(w=`G2gj}16~^63eGdgW0JT6_iO z-R|Rt6N{+y;plG-&Y5+x*3X#vNnLDmi-onbUyT^{YI^{|Bl2c=Sw&D_^hA3O6Mo>=Axdtt@ z*#SgO>5$lBh|FU-OrdqS>VPlorb8)6?RuE?Nk{Tn?|NL1#^&kRZ$l+=1|Ut5qQR+|bE3|^CUv55_Nif<_${xuo z@m{0paY+!0k2LVl)OH0r1L_%U4i(HgDLPWkVPO24Ja6Q_o-GPk;0W&sk8cRWohY~Z-|ha2>dD5EZ}q`q*ktJc;h-(yQK z&auzh1LXA{PXZr`j##r-&n_?5LfECGx+mo$=~nfBmYig8l#uSIDjmecyEV)>Yf!8; zjiDOCZTH`}-&4+?kf5_3(UG(dIS=`t$3}S!$|~)2@WfOo9Q{iS{Lf|o-y4Fz3^(wU z8VxhQ<%)RU$}PkH>4w0;$==x1+45!IkBa2q*E&(E zYmXn+@lChA$p%y`m#sO#DrHj>eS!`KhnaK$2ZbxS z0kg|Pf{2-e4>*Z7{Ap9dL7gM%yFwxg+`~gqs8NoZecObA`PbF>n~p$1NLWI z@g8Og!!akfk)M-}LGr$rrNf<^u&8l_KPR&z#T^w4`r@Q6Qcb%$t=H5RD9CFfE#0W& zsZJCTFna$KtI+f-)R!MX$yo8BifT~VB%{z&I4G#?RhIWFG(;!%C*Yz80#Ma9Mxe%z zu`4LulkF(ov+XF}(<$FFy2cRRKJKDyp!yInJo3Zw20Zb)#0zY?%@hk9>>{T-<3efd z9ogXm1{g%ft>Vpwp;!NyI1jXNI#L>OFj;ABTp|M+Q`Qa>G;?Ki<{z)Ng-a3i}Mks;-9*LR9J zy%y*a1}p8Z)}+To-pZ-6c?)AK{MB|{ug~bE+U{oCq#C)^)#BTBU)lJhDbzB~rKy{; zX5%gwO+lioQiI6bZW{3VquJg&aAX-=#41yIo`d|fq8~bx^HhS%22m)cF?_uHW+HG} zT|N77V{g>Gj5MLRZ5hyObN=RWkBBN50G>IKM{bM55%7JKYX$L4;!ofn>;aHR;0hUt zETUk}9X>)0B)$Q3jm)*F6}~b&(=P;N zcz0d$GC}&MAryu?N)#Wl*{NB|efqf|dPh8cLoj{e1MJL#T`x-4*8#iYW|2gel0g;n zPKtfAsX}b5^&3J#8}vHZS!{XJ6Qd(wj4U(M6^wQIG%zx-~f{%)OG)TNz~#SwmwdeNk=0Pzd@dqM`% zUThrDYvp!5ztC7WvqpIpCr5MxcbR0=J0c5Kvl7tmgy`jFL zcYr)h*CyZ)YgdSz)iW<{Za@B7-7Z?+)%(1I=?CbA$cIKp(SgZ_L=S8ajt-m$7d~Drd6J@3bCAKI`R@dYdQT+V2x6XW8{s( z)SN}+5FC>TX)`y4@p$vPe2+|sZBbH5y%!vI$%|_a3hHFc8jb^DJ zpaRXIDOFOSpJy>s-L1u>P*}RwrJBvU;O7%A^<&Evn_>Ze(4f4R;h>pmdY(uawj@h} zKl^h;k>)$0wjBhie-Z$xrUQ9j4x&S-=`$Sp{vtlXldh7u(2Db~{c#c-uKvKjBf+NB zKzQS7LyKJDvCUDuts{F^AqJeR-6FH0^?Xv^dRCvmmmf$|WwJ1ym8si0KDqj*V`~S( zfVECN1n8yEb)ZKrmKV16L!gxijbjtwwDFR9KmU{eK&@4rs^y`CI%H|Tl&caCFu{jS^{m>P4A=&w2q=@yRnyTSRa~&13LZ+-H zDzk+4tkn+F{a5zoz5wj6`xdLlEsLtGR_kWl9$u8Y>$JK6FJ#Cqf|-7k1{>2~h{Cz` z`&xe-!b)l)Yu3o-^ms)VQcJdfVvuSNR7dihfXsaU*sEqn1v^p283B;zLSh7pLU{1v+E|Ooc3LQYJ zijii15+Rgdw4ymuEi>>SnbY9b#ohWSv#+} zW|?Wnf{LAgNwZU(+Cp=CvIYjkXuI`zhsG7BMy%HDQdxsO%(Xd6;gFH*c%AJ-rFHKz zaJQOmgqlsR>|*?sg0Ug@zd5W+a(C@HnG^umWdG5l3HKSAhcbu+=@w;B^~W{spa1J>~Ojp`r-6gHrEy& z4M|;`6DqcM4LSUl!*bA#@7NW8P5cpVHm#YR-X2p=ui(q@N7gOlCwx8cw< zw%u!&y4Uy3`ZEDog~$_n+6V6d5Awzj1RO&O=!-+}tn4*}X;3w^3U}ruGOh{X*?=C! z>c$iV@zoN2$gkEHiJTYjs68T8@rj`pL*08%vmsiY#@q7T3b$~@(8@OGl(eCC8s_JK;>{X<8Y4S@n0>Q5CZJ!{Fg&m59pe)C+Jxq$b8zBL zJ$q~Pbn_D*((>60=T>gvE}a?R;VXRq_8>*Z;HPGq>W~<9zFDKEAidy8qLP|4q35 z0d;_2{j$4_SxAxm?~Z^6ws3H!fY4sKE2wEMOJ{XVH-la>-*M4R|hlA`N>P{`Gy zYC)6`q$E%R{WY&SH99|veQiheu6`#(8vhEw2gSG}0xLTNT*%`Q>&xS8#?$)a^Yb0I z9}I7Oe7`otn@vfhDPhDH8lEPZRt2JiwnVjCRw9ksR;U!OJ1sb*bm3vSem7yi_w03w zh7DN#)fSPe2`?$5y^2W4Qr#04S6V*wmjM0*Ln>jx+*~H4zDR;eS&$imS1blZ8#ONf z9Zv~w5H{}^tk6%f9}2n5cVXSg86}8L&v9T6A}m^236@C)F+GsWPEF)+A&1av_9KMk z>($Zaz2RLmB)LNrOs8Cj@*01dq=b5Io{F)XioQOJsKFbcTuch2#@mw1M0sF3INxph zIhzfvpAB1O8EXtMIv+xq)Rnom+sDWv>)+kVjhEAGQ7L-|aBG4zNRE+nf9ty1BONtk z(!OWU<*Ep$JA=*!-i0&#sEh|Xi6^I-<_cb~LUn+QLc>Ga`6_!6qL9;vF?`uga-1da zB)<);=ecCOSFg$&dUFWtbB6l_eyu9Q?C7$w)#HpFPOrfW;(H_sfwpmmd_w|l4M_k# zQ8Xc0d~>{GMw4bd=_7Pi;1+vdOzzhss%LV-f=<_jl+HhZlcs&lP4F7D=yqD(KsPCM z#p**%#J;S)8)tCNxK0`VfvS$&9eNopy3;jKm4#@x-+Dd()Wp`LS$#H1QyF~#M-Xso3;{`U`0)?Frg$IDCLK=lC zDN=tG%7YZLj|gs8GN;k`wc0ZzlHcHL{u+0HJ}3vV$e@XlphQ`mFPh<6l7M|P~j*Ihp2J-H4+b1x+iuy!xH z^h<$ot~9>x7$ip#(N^JGLyHCJ@nXjn+-?|GjyS>{3s;ZGH(=Qw+6`pyITz!}!%PmF z*Fj~;{X~l+84_Tp>)P@##+a4kVkw4~w>}l;rfu}y=}6GD=hS%QnPT(Y*bHHSg19!@D_oQXY23D6dQ2DW1~rIt@JAxPAtP<;(piEs#7ksq#gh_IV*z? z1&$f-hrK7S@T&?TvZ2{5MV1?vgd?fhY#Dp-zOeTzWa4rTCH?6OHG9u;e_+8#Emarv z=2+P`c;dsraz2C4dg64>mzV5gla@#-ZW73p9*1ylp*P5r81FA&wvWEzok`Ha0Y#ug zW@7e?WcnE=IfbrpH&I{cj0MlZ|h+Heb``1FKg;#ZmRsfVg4?f|K(3v6VEFL%!m+@ zCp<1>fuI9~wN(raD^y5?fJpf@3^Ph?Zho92dO(E}5(w--5!|EONx&E)emfn<|M7A9 z2;C1ujv7lX13S}}&BGsY#w0l@3G5E`Yov$7zJl~+f-Ul;;GT5W>XO8fFEefLI*8}d zr*9=owk#rh2d+`RSTOVLcw?`c;A$;n@9+=g@41apK6S25>u@*Da8TAGPT1kal&7Ef zy5ZUP=*QsdZ;lhczbZ@Fnc8oI=?;B-7vCKY1x!=y|$LFT#O7Dgd*nG_5h3t zPK9L}jTKPw#rytRm;M>Ie@FB$$_7sNcRcO)8E_3W0D$IyH=;)0V~R{no#_8H@m<8! z%+S@wMcLTN(&1b7Y4g28eaGAGo2vP1n$h>){;MHT(^dW}<)K?Fg(DR}hu;HyQc)m) zs2~bU&Z3PK%`5Y}X>BP6;$4I$qJQ-F9V9Wo2FAkkz3<^a$aZIy`bfk>nQnA+bh+Pl zn7hx~Jv_d&-2#v?;1AehPGdw75E6&pL%b77OrUfk3re|cqn_k4Bn`?)w$mGG4Z;Y2 zpRvKXry5dcwB!_yO7rxUT9@k5V5uqckgv3KU!R#&s}_~lB*Ql4b7wXvGPQX6rliTT zABIf8xx;Q|R>7pt)IQSIW@IZk)e0K`@&-l06h!OJVbYnwO8?N?(U{Ls_Zcb9^;ns4 zc23|9wfM*(be~=`@$mI(?C3U5-XagJFu#gPv^`JNE}0^D!-S!~=*AJ*KEU2-j->$} zk=oKVw&3SEekr+V=3h#imZ@ax7VcPV5@AVo_WZpKMDICF!V@oW5OES+II`U+tir#n zDN%N;RrNd5qaePdmx&(9n;4VfB6}E(@nwQapT^`-!C-s!Jn>Z*KZbEAA&wGj!aZx+0kG z@+yPjYq|+7>_URjTBtn3#E_Pt&f^pc^HuqMMqnsU`DujiaGfR|-gY0Och#}f)Ab6g zn=u8)x6W!EunTmoY7;k%?n=6H=Kj%IFOH`+n@b&{FUi*G87&dS-o-4PXH|umPe^6- zi4?q&k`@BlTAL8_@MkK@!u$lVz9JSJGrjqOG3;=+1kFzwfrL6lo6%y8y2(D!>T@xZ zOG?x~ErhxEJaJKsb5|p(R75-=AFv!_d`9A2_qaUS$5-d-p)m{UgR_u2&*H%LZzDUw zxv+inB7+RND07bF)TWGL_e3c*WAr5;S1wxFrRGw5B>0Ii?kL*S#cmW+=f$7S8d1&1 z$Goo&N0vM|?opKpju0{#d;pkQ!7+uAg7{1TMjRMM7z;W4U`C4N6=4UXKn`V*c9s}D zC<9g#$+`*g?UP5t6%AA73O_Uq?Z=Stt7{cGL$XI%a>Vu}Q8+a2GL>is{B*xz>@{+}Yo z2{*`qfa4qz9Gc6&N2ZGaDnU>zfzsU%8RcklH7@0WY@fde$OC04gsxan-P|-1ZRURZ z*2xbroDPBk4go9zvo9z~T)BZbL`yrY>OdQP^iiGPEv0lxf?hH{JKU0@y9QwZ)d#Aw4)^%w(NyoNr+qP}nw$ZU|+qP}ncG7Xj zNhkTT);j0kd;d3Q-_3bD<{VY;`_xla(#>xPkzZ9~&Cv-a1MoQ3SB@LxS2sBys55-K z^wwM(lk_&DgLN0wxd=amX5H{|e;Lf}!55l>+Wo~0|NdnD_00Zah796hmALQcRq%Zr z{J+z)Ep6QC1e`oDnWU%=SL!d6Dm#K86+{0~-~mL1@S&p~MdqAbWen4Jek z6hb-_i3Y<*mw`u#0^_NkRFAx}ZQRE6V1eWP31^a(f@oB5_i$z0lbdeA$Gf`&xCh`$ zU8Y%Q(U1D$qQb*z@%$OR%317B@Fs3*3=jQA@(e@Za7#k|{=$|c-GIj$X>ef4sE@IH z&9dL(QP|wE5ef#Q%b=4OWpuWhzrVwHv_Oe!uaP{lrkGXnY#X*`8QFl+D$^a;HESTi zF}w>No`g#I@{M04l|m4*F7r?gB6o~_oZDbZ=@1hGI&z7?(V%{M#RWK#_5Dw%)u=>| z84TspXx_K2Wa1CgBQVMZAPaU)uTG4Z;xyP*?6;aObAr@pcXm*gVjM12-ux?yQG!Br zIMJ3ot~H{sW!ya9@Ko+Uxo={qS9d-Ulc5NZoUW0Vm`I(XmaF2IPq9<%eTm!la^!sS zh{YVQ2H4jUZw10>M)W^0-lWcO5`1haqKYx6$;hlb}?>hkUUj=0UC&XAAc-Xo8o$SiO z%*ZVL_qXr1F-I38XBWr6v-k}DN4@#yzfi5Zt%fCn{55TyNHVUt06vdetzv-%#2lty z8LmDNS{&TON~8G)JAs6nwzF;hG0E*K{7I%7j7PBRR4x?yCBh1vx)4%6fTQaqgZvu=Ts-+09{G$ZtE zn=TEVs))(>)TV8<=&2$s-6>U#7-{_psPE@5Lla|nb9d3JqmP1P^-uD_=t}|YOUgmr zko#^Y=#4fl7L$4EQECt>s1i3B>a`N-@oI1{S@)DJw&)D$@cc+_U=)qHUqQFSMK(2Q zF|+#8Trua-n+3XT5UzIsOV6ccuEG6TBU;sc5;-R7C`DX$NLL4rIp##RQJVpg z;GwNpE^x=3UbpeO3@SRMnnqh}KQ4ZpCZ4d}Q<g*FgsUb+FO;Yu?(x`tnGjpkTEm-@;1M`Pr(-i&frg+5R&ARCOltMsL3bf?B;ozJg zTPWzM2@4q~IZjaElSIGmoZ+sH3R68C*d$hSRks`5*75>QF&l&p7U4E=Vnuj<z_|1b zi61yr6wfCQC`dMM`g3j^yqfM%x{>6|6>eWv0Og}atCez9q0k0Sx%4Q&xC z^6T&TjDH8C|AZ;|#Ht{f@8}G#@Ad+o{}!f%oLuD%zDpiVzRy7aVAVgUG_7{7`5lJh z3l}FXE~*UAvLRv*m8oz6nFL8*o$?d2$W|qkK4_j8$&9qkx&FP!&b1T#9jux63gp4i z6T)WK2~qqf0Kyk?j@b;GSpy_$|O`x>q#R<{)lCUZ;; zBRrvq#athWADrXZt>Xc%(j6SQ zY>mwO>&#UsamZ^;>>UqA3(OFO!|SZ4~`*vVN!@8u^3$SS2h`D`q_Em?ONwW>VxR zJy~)0hd2XJhf12%F$)9Zj9nPMvpVYd5q!%h;F@|9bW%1b0@EZ3X)d!V>~ep?Go+g_ zGkv|J{Qk0Sd_K9s_LNNR*>N6rW86r|RCH#F@q=(`o!8)OG&FWwI&EF>w|7YrQrQ~N zVgjqqs<@)X#epD5jyZMjgzv-*u%tUCZ4x^tx9hTWnJLDkjPw{T1RZ!GomugSidk)h zm*|1!)L2D*4eazPb63qiFdR4TParW|G};11$TnwI+taKd4tnPmY(G?}OQ7GI3XdQ&DHEf^cJ2T=2k*1V1t|oWQOlkF*F!7S-?|a)Sl#!+BEj$}F zEcAX2blAgI7hH}fC@i5{P;f=9#M#OALs-X9XVnh(D@*xfxVMT>MiA`|lrC=zf+`kt zvt_a{9a>^1JILiQ1L7hDCpzk2jF$EID5z`e0y@%i91rMB4xVVemaIEgZUtml*BIKS=IZ5j#>k$;(}P z1K9_37FD>DoYHL-RYc2dxI%J>vp!gkXI5G+qg_%&OQ9P1LqLRcwWQ@K#$IL(?J2bR zd#)2wbg*KNj}5sR66k~sra~{I9%xYf$5j`w#h??iH2jMzsh{*xSlEFrKUlfBKvQCw zyaMLxmZBmM(O2Y(u$Y1}VjG;?67Ja&r8!kOE@kzABLwlFcF#NS9YwG&8(t5V@(gzV z)*zKJn|43pMzH6GI)O%{p;^2IWjuzky|RpflEoE`?}{S9tNoUnikL!V)mYxs3UKSa z?862($^n$2K>u?5{s079f&Leyd_FmZNOFPk+Hyof-V(WFzyT3iY<<9S?>JHO@CGg+ zIlPr$SX|%SkF#u+>P2;wn)5VKoiXrtL^RmnnlxlXDxVRymgTxqEewJ}Zyfgjea1ny4D{ZOm5Q9h8r`Sh0+u zN9p;yF>~n-NI*44?M58}P%+iJ=#1h7M#jcVUQ;7{FhiK3t=P-=lR_5ZF%PUfG2X=q zT*H%wCU!Siqi_HCu4yg6eFk8uuovbOR%Ef>ZBj9Nu9zsF>S*_gq%!Dm#!h|#{&lzd zcXs+u-WqfIr2Q*tZ4?#&fcwAYt^Zw={^qZLr>$l+jenH>l%@praeY`k0tk5U2J1q8 z>;M~D0xj%%lei!VV&IjF`YzLMDpe|{qn=v4I6^;sIuCr6@H{~kT#qroF+Pdn1*Xmh zkTG@kBIV^xo{aO)w~O?gZN9J94>$m!7v2bJS<(4$C55aJ41*q$p&bLgBSBaP?xNW)a= zO6T4NU1M_`^?5WF6iSVfSm zvu{?o#5qF?^a<&!*fMVI_tb%vdF*Pm@>B}n54+=gz04DPgD974E6 zY(|a(4766KET$QPuHZyX+byUugW?UWl+J`nYtJ;(Nx^EN+M3Qhah{aGbtR$+ELCI{ zr2^tOv|F>+f#{ULS4;X3GW5v!RP9+lHi}eJ08r$^>J-M;ZEGwUoyjr`FFT2|mShCI z*Xp33$p_)WMcqquC=r0~ur=}PV)(76F^(j8D}qMrXmUL!>y!q}f;$^=n z4w;k3v)L%2Ls$CDEL$%tG9_n~wd1u*8kh;hgf+M?p@lBS;|1;#jm~s<3?P|in>8eU zW!Xr%9+F%qFr{kQ-leReX(9Sd%i0BQ|@-6%U{mL|sr~GgJm70I7+fu%T=zI$+&Yz5w7=ynyFcu!qem zUk=fR)Qmc@E3imQ>P)?6?eD!&ih#`?v+2bDI)lyKA)@T*OQq}?SQUI19c~q8g62~K zhBM+3zx8I|au2KE964>OkRaOkR1d+iQjohy5su8xDCEv;>P?AgZ6BY1m@U5Cg}w^! zfyTMR3gO~wS#WzIW~{b>t+(B}5gDv>4p7Aw2`Y5brHiDw(B+#XU9mN%0SSj1Z4c>b z)qp<2yYT_jta#O!F21bttZ!BSBkHe2#1_4|b=OKUSVC&_%VP3Cc4UbXMfT%lsqnOJ zIIJ_*UK%2X2aXRKi>e{Bs);lNZe_VSSIbaA@MzYst!c&Lg)TmTNl@iB`^kd?#ujcenWUFvVQ9Pu{Fm`S&BB?kdde$~B43x^65{tzQ3`RjjO9mBvy{zGZ?K}4 zSXJQS6ha!|-brLTG~~(r)J7wl3uUddCL-P2e^fH>(Vq)CMW??8OTY64ZZz#NZQ zL)g!d7(HVekviRWMyY(ch*;JFLMav=nf)1Y05P6f;jOwNa*3i?NqGtE5d;YZ#gZM` z=E5Te{AQyB!jMDpclJeQt*T4UpV4SH21=(Vm@V*NTHo7*LaW;*^0+_RK|wpb0iem^ z?zW4)DFes#=I>q(yax~RdfTE|1L6+b1ZHIyARhobg1~u8s_!MpfB)U*{_n{CFU{2ZUPc9&$6>LdV&w0(%s@$~v)P&dPc2zp(6p`|TJ$s(% zDch^C`|vPx4JnQ)^n=dzbbsd0U#=K8)6dW6=T!jETOsUDdW=z9=@If&)LtqF=RHdz zMwzyd3r5?piE`4dp=$P?kt_C|{%lctf*HtkQleFG+J?pGvB{2Ov9oA zXr&O6LgM`XdF$>YNp@Dt^;cplhU&h=kmT75Q{AE;OcK)#9t(D<(k3{orWu(}5rK%V zvMDlZbibpn&olx{r57F3E450949Xyt8mBCHa;Y&)64=Kf=x`X^<1@conoLB~6JyT# zN8QI;B)42$WN-a5Rn9=Y^pm%bfSq(~GmWN}A%Rs?Q%IVQUYMz{Y~`u)eVjw48GlLF zHCZ7gaz-yP#xt30k2!E1Ba&#jayW3NF^uA}uUc;(6Fsx&LZV7$B+Ml(;+$0H6-t@2 zR2v{_fa10O$uRYcYq+YWo%ZwLgsHt0q0A~bp{yi;5$Y)KEG1rYaWNxag45#IC|yz5 zJ~})$OxaW$k{&YD#AITeS`pzWt8#b^9ozg(Tnn;R7rF~$a zM#Eb#F=0($GE?JNa-oyF(#l-Oi@yN}ose@<8XReTBEjGg2lCs>i;dxP`qHt+Ur?8EnWO|-*U=7Q&rvF$qP ztfz9h4T|^ra#)QcE6_b;fBKsjhY1q*2+_N+3XTiLQ2}_A_0>&$ceP%xz-x= zM&_6Rxj8Z;*?u4HxI6iNZrpMAsy!`lvV5;C#ShwFS=Xq_i74%yU+OgUp-BfN8HXAD z);SkQgM8ny;Gx9WuYCR{OH>MFeDd7-lxv|Mh{~8PW0##Sten`1R82oLR|OOK(Chdz>ow0mXuCWwo6P7hFdFgcy4*jQd( zo&nne{j@M>#7685fPsL(O3@qo9W0Yn@o?pG%K$;HtPBYo_cLG)QXrL%T^tBR($qG>`ZbVhP*k>~C5_9H&b7o%48M;;65lh1} z8nf+3qT?i!AL^8M952RvwOA5r{ejR6w|dB8lRE-|^aFLA>TIei)3wSef=K_N%iA1x3H z>P%db{kj>*HST`gYQPH!eWLxkE0j7iV6P6)Dz=~5gRgZgkt%(@#A|X^eLcuIt0{zV z?eKjGxY%K&x`wBW75$ai>ITLNc#EKpOOXPnNJ-yG`L+1n;8&Ly@Hz_w5ef~ap7VxV zR(=pjx}F%hiW{=+I%oK~Vf$3`UDbDg`z-#QF#eNDF73uYiN2@vz~9sP|C>q-{*q=LuY|Z|bX%t*cTuek=tgYqktSyZGXBnbc)kXmoF=cJivy zZ+DttL$VSFo@lJJ_!Tykq@zb`P$zP#G_x~$RW!8IRdi73)yfO+%uJa4P1|l;4wrUW z+h3sBL2AZlkeE5QST#CKLosz2O{k)Zf!0eI$C+D|)9v|4^hZ%LJ%f+*b=KR?I7|=R z`@o!VTQrkPQuBswvf0#JB{ZXuw)D`)vQA8nu>>5aE5Jgn1{{VYTbgLP$+err~0zSKD7@whOUWDwKcdYE>}QnS{7@YJ@u_|75nk|0YjcL*-Ag zliJp?1BO;IQFg%`PVVtxqqe7A2lN@F+F!jL=JczCM4>)O8LU@rc!(StH`2o}JWAB+ zj9d9DB$Q(%N_Vu7(1T`H{3v#ZI3Q4zs1A|)hE@TTo_8q`B-E8J&>;~}?uiC;2L;=y z#>|tetYLFys$2yX5E@2T{wT~%WicDAyC_YRE+s7_-npwF+v_bSoKH0)t*s!>=5`T; z1R(ij8BakM?OMha4v4QwaAf!&YtdyE%D$5^8flE6RBOvC!RHA`(Fq3Y4Q7y#ww3Dr z6#-n7*M>5~0H7GAUtd9G-~J1El{=0yM$j_SnUvDM!KQNDJ<+k8x zvtn4MLg>?LPy zBp7)bN{#gwx)$G^^BsE>lbr)Tk4-CInaE}*j0G*{b?J8APk5m zv9Jj&z{iZgAyN7OG>H(d<0GfK@LkXI1*Iq#=Nl%lL6VD~__;4;jF-<;De5+BPa7_F zwlVu0i<9TY7g0**xG1|jc{YR+kUKPziAI- z;T@zcZIxUmRSosZH+K)O^Lly~uAaRsb%Wz^9WiHi_BALYIbeOHV6$Nm#Evg0_tQke zJ)Cg~c(o8)e!)cjUCiP#EC^~;e#2;oLei3e^*YuT;FzL;uTV+VABPDquNGGz=AZS! ze}|uc0n=Zb2>>s%1sBNQdhvJ6i17b;#{CDF{)VIf)z|+D7WhUgM;H6=bM8N5`EE@J zeQlNHPg%zCOliGL*6nBimN*_{$fOX|1ZImx*#uT8p$K?AQ{4m$GNwUl86gn_1%7^E z1aXlhO3`9UvlnSyiXL0P6N z=1GA@i zSZujrpi%*iX~hNV(=bCB#`d5dSx1g^z_GkGe4itSN36yDV>i&_=K-6iuq8YE;Tbr7p0Va?L=7fzGx~iIV~@%66ro=Uc@1tWYbW zua*<}rk3f#T4gF3r(^t?*)0=GPQ|B0idm&|udbH4!gwSy5wO8quubwU%-o6MrLq>T z5{;X(x?nbiR||)U1!6y6L1g*!^90e@=L86X2VmXF2|pCTuJUxbu8^PJi%tazjMZQ# zuZ;!{L=?TX-+1%qhGBuv6Ja}oc#G$XVS^~N^5wYTli!$NA0&O!fA}cs)y$y;an$gy zM%XNKIr|l{6oCYKns=W(zdXPTR6o8y$|uV~g+A5^=8{Nbv83C3>kM;TSz%FGUTjij zWL93VvamI)sjf0JtG2RL+ga#t&S}c!X$~A!{N%%){}WG>L04hc5Q9rfZQ-b*W@lMj z>C$d#qT^)c;_?A*&-iE@ps1vSGSIpQC~_-g48Q!2|;U3aeKjn$~JE4*8G;b!tPPU9%{b5c0-0x2H)jk+x8Y# z8Mq5WmDysBH*}f=U_2W7qS7=LSR+AYS6Wp92{XwMJY`{awrAP67lD;y2%w>pa_lb_ zg@8rT1RBi)3 z4Qu zj?6gShgESq@JUN8d+*L6+gh1Ih#^>RR?QjR@ytSI*)HYO0X%?pphxFb``J;{;9g`Z7~K$Eg1b|Ew_Un%=PTX-H_z ze#~95`kSrTUz|aWP#4kR2*!qsQ8*_Hs!=^~1lJfy!H59~?9~5eiz2eKi`^NBk=O0} z6w>`XKNQz61uckYheHe^G{u|bGVCXymh~6!61&;&%Kv$fE$gt>-PvqUqJ`x&({`^U zMwPD;?R;T{#4r;N-XS=Ej*oeWG%>nw@7_d}w8w0ECe5E90qK(ymz!akP8B3~y+9N) zfvMq0eK`V=wOxEO=W`5VkuCvLvc?C86$vq;yvHE~dCrrec3_@7buYTccRKujfK3d_ zVd`kh9QbIeu3ud9p4m|t-|Vl;S1Bm9Af<;Hz=5i(pB83&4KxCuPo$#Evk}D)RL6t* zbDeZSWc2p~n9IDfVQvK*t5+>wL1+RGtrVMq+@h%Asm>wz_{rc;!Bxr!kl>!OITuKu z@Yo;T8-{?OLZ0$a!@%tE#jvO3$-|`eJ=|M3XU(p65wNVg7385+Icrg>c14{Eu^}WC zE9d)lE5iYllDY7z;fCq{f~!vE@K2pWfP7}AstI!&)$fN8DF&Nb(Mg4~m|tIY*du9` z?}J${t4~8rotJUAF>mU(Oxs-)q7TAb<+l&+>x&z|6RAUa%u#%xFMk;oVp7wyh{cKu0=*%%9FYB6AZlvFsk zs@xI$RQAG6OF)gu!^eTAe17o&Gm{(3c$+)nZ@+X)ADnScT$y95a+XO6GuNuD9Z6T# z2C7!sCK*8|EK=8%ru>A-QHX}PF)wn^y|YKt`IrSeAWBUgO0cono_lw=KAz@@w) z=7#9XGE8lPoR>7={NyO?5&`Bml-%mMDl$BCl(cg;CuUr^rJ<==v7pnG>x7#OdRHU} zHZ&2c%qh+%e-78HA7E^E(>RdE24NK=>p{6K_S|?!c3G>+YLBtRb7!Mn40bk}l~5XQwa z9-S%B!HNJ5X$Xc$4fNJmo%W!u|iNX9&lIxQhO&Y=WN`0 zGbN9JT*U+OwoDq2qgqvzrw^{H>KhMF^&Ar=57p-_*ju5bUjZLd-kcL9kDOop44Sg1 zLI@tB+bfwaSr&86$75Q%+D7cI^fPDC7i?<5MC5>3c!ScDrUcB=VX=j(h57(>emE?x16RMi)p3Xd zCPe!u^G%o16E{yI48%dWCycnEe44T18PmezM~>--@$*Nn%7fFnj-R8O=Pp>fcx+*H zi8ebIW+Osf!I)j@a|5!qKh3)O^JX ztJ#iN2ou=|wKe)&_%fqk#w)E6+`(=t9x%IW7O-9-B<&WoD7$51D<5DTWF0j*6)5X@ z$SQAcAU}kP{T6y-eD8I9AMj;)J>g5SdBRYF8o~vXor64#oW-s;Dh6Y1WmcN=t23*?u9_#en ztZGPMhBQ+UP;RL@^awR0S!?ycvL<`4gvoA%m{jCIs`Fut zTqL?nkSr^Wuf!ngj+~yZN^IpO-EbbqL5WWyFP-^-^C+HUSDD}l>frL&(1RpJ$W3DNp%;l ztB0^5N%E~5h1mgJU13#GVXirDoCWhk*YGH^PEWCkpBoyv-RIjdK8ZX7j!tI4=9?Eq z@ajUiVJM7p0hzpdIj?gk1g~c*X2~=-F6Byv$(&yT7Ua<+F7P_&UO!O?k!L&s<(+ZR z_|*09$Iw9N9KJO8#G6faR~;W>WYK2g<)e-b0z`_R#EKbHWgy)OARbK#KPDQB_1FeJ z+B6DV+c?g$gdjd=^lNB;Up?okx&tr}nIP7GnD6GEPFiVm`EA8J7&F~vJqZlUvjEE* zH%?x~zIeN&-!ym%x08qkEtq~zz%-ox%nkP!4F~8L5ISQ;m(8Y_D1vpYqvAB ze>RTHpV&S5x9rfa$8TEWC1N`X?d$y&RO8=hb$Pb{jF8U+PJGtE+Quljg07o@hKcn!Id1?P7Zaw1HDv`U~Pxl+DW1Jv`}Mob+h{)3kC){^|6F! zY}q5O0}JsYYyeuO2&4_G0!SA74(Lt!f`Z-GesWK0+X$r8+8uI1zq5Yk#7>EVcvZf* zsgE6L_Pa%AEQ+-EvxVoG>9d9TC0NMg4JG-cWw9OOJ2Kgaddsr#Lfx0Z5ZLjRoKB+; zNUsu1SyD}9+BD+zZFLL~Ol`)#GT^?&H^M=I#&yF%J(H<3b)aEw&wQ}Q6uWz4!QqVd zo)5p*6`cX3T!(T7nLG-LkK@bMZAT+*GQv3sfW_@LO_2U@!cZ5elqZc_7C?q6a0e&R zPKGV0I>MKo2;gYwN_KH;2%9wxv!jB7c87-a4YYW{q51=%I+>^*QYs%*T8}t;NZr*} z;fKKE9zOkS!kVJCwxw$#(H+w59=QBYTKP)DJ+{j?ya|1d6Y{$zKL(`)o5lsXzNt5M zQ)7Z^z3RG;S9Jx&yf3>ga=9I>l%YzXWO2pcabuzJCb(hN#6Rk0Hb z4JR8R_G&yRQ&XA2K`(kEP*qriWq<}%6TJ+PAECLKR$5aVoK65vY9`~qSt3L2Q7`tb zv4k~H7St>Px}feu<&&MZr_<=Vt%?VK9kGBZ*!)0JFxs4)suD$!%Ex{*@8{TJbXoJ~ z(C&$~{u7FG)teSRm?jhSn&fXXltBijnixTu5rCNy^|)12%H1?aoh7tbpKRJE#k60# zz9!-1Krubo%#6oo?}J1$v}zuoKgkl6AM|mA3(KKl&B3&me#7+8Np@}PWzPqO$=HM2 z7pvj4j;-iB&`+MP(s&AbjZi)F-S9M}db{_YCUHvc9=0Q-S{)E-mQv@$7a*2y2LX+y z>2H84RXC_HIrPF5PR7?7EFDRgy}@>F()&$_m@U}QiUYvx3! zq!NWq*>6nAROXaHfACxD=WYYqZ_?;>_pIYAgSiA4&)ih|3y3EYq%T=1T&E#NonUM# z)+Zt=BfI$h&zeajL0QZfnCm|!lbMHn6hZ8_6fm=x|yK_S|Ua5Wy3 zRmoTp5#9J>b{8-Ox|l=`#4pUXGivGlMuud{#M{$hkJ-VS(0w*9!xxW>bW4f@i)&BN zSxs8)z5@ebb0iGrCA1V|yuK2^wqL73{*$H$JY~Udk3(=c}L)ZM3EtEiCsa#5^RUlgOSo2dS9!y{~c!r@3{?NirUb|1?JuYs1L4FJq*!EXIzwr zin@e)q(F7Dz@aW^gPp(|fa1(MLkM#*7C60>egrGy(9f(9FfN)+z^_D~sPBa*mA3gR z3G3F~{~kNONXrUbPq7Z#=xUU%&fnS&? zR}3Z3zfWvM6P2iH4v*YA4TS4UWtxcnW-Y3(J=kxc#Rr*&>!tPav2soANPTeD+=MEFYx;_86jPay$&btqiN z2!Tou;)fRarU7V%HD~Qa%G;CI*v#0m#LX@3cbMG-^!RU&_q_|VVy7@H!CCx2tB+(N z`iX560a>&mfwTs}dRa-g(~aOA(_w5FPV7yHpD}*w;#*O|+#W5*;}8x>b?iW12vRiD z=zbWP%g3M(f=(J)+v^T~88-Eq)AidAeb63$E%3Idn!qgGWid`u`h27)+mUS9SEHr*JisJ?h`!Rtp>Xp`nw~N z0FR^>1j3Oqz4Xc57oe;IP{*uheOzEvMTZ~y?I|8lsh_^tN{x|o`NZ#vtViMW27GQ|yS zjjjLJlv%8@`uwy(6!PjNkM~`ye0Mv@rYMZal=OMa>*Z_mnQDHx_m5}3-!5s)gbbj)=Vw!44+Sn z;us(06iVc*Dw;X!?-L=wdh$7ji}vL{$3T`!#0k>|bcC~-2|JPd(UNbA@!$Vq*jmir3uEJ>t6M{8|ivN4bX{ysojfvg3_Apf{PHWZW znd{7xcY0$5SWPz7+&li(R#MM-@@b9~n|j@rqR3m3TRUao0hS0%(QLKk-7*hb0AgEe z4}Ro$u}g5#IOfcDpZC-0)8po_g29m2>xjw00k@YfxB} zm3r#Ab5H+9kK2wx7s1m2& z9pyfXx?1xTovQF}#Lpj@0;en;_-;IW`u))bGCEB%i)JT`*)kS*YbYFzX0Mj|i6V3l zHXJu)98w>Lms`ro=8Mi%6 zsxV#8Wvof+8=8FhWx57+8A^EeKq$i@p814iOVP_reGhf)T2Itzr@u7kvbO$Owt{t z3$DE%Sqq`|THG_AlOdW?u-L*F!qmqyya=4p{v&EiDomO#BPNbLs=&@(W+9*+qAL^- zMJ3YY#LWVv`)1Xl1f$$gi*cREycB^qAjCPyz8O_TOrC2v;aPWl$_(;?%h56)XG&KB zyO6{SnuqBYv6}B-AqX}1tw|5=LZ3(5OTDOJT44j(xrXi4It_VbF4%z=$FzcBp$$o4 zypEbQyc{~gl#|jPUdUQSsc8~_vMsiKbzXVyP6Et8AeBFcpo{qtHYr{6-|YmX32W4RmU+<$UFkA>L9WbCVj;sYwG@jpDZ-+dkdd%}zdFgDs7*(% zf}DH=Gm+RgqH_n4;}nZ|(QsPS=!&n}YB$FN#9Z6C(}ty{g+$8OJ|kHdiXzj&c6f8e?rbx z2}bG8xBqYbJLOmGzl5CsPrecSD?|PpfBuo0zY~7#9REjW9#*-KMG`>%EJ3z}Ixfiz zW4jfk7%QNOn2S>ewpqZ}4EXKT0X@0r+Pa=ivQOiUEX_=u@SRVRbT`$aO$p=3a5wtk zJd<_rV>V;*bXt4E2Vi_h=#L)7uE~HgmMobf0*+&$2*XWNOM`m^O7>6EkuXdJ8{N`k9P=eYrJ^p3m zA(dw7dhI9d6qn)u>|basQYERUIDH>;NLf>KA@6qlDJax$BR*NS0hs+V;z%BA%e4jG zJ;kGoAn6W+?S!^JMs+;ynCG0@Wb4G0mm;1N6K&_HV}0AFO48s&9kLecZBShIkkN0c z8<1GRRQ%F3MJj2#mu{%=O9GR(867Dj+u#>rJAO%-P%+v^s|8w1 znY_}uhFRMRbqQ?Kp$FK3IQ>*sF<)k*RhmV}pJFW4A1?IHUmD~g=aH%r`6R`;JJuEU zpJ-S@4|iey4N{eAr{TQJG+}4-5{X6IVjCjjqzhj9=k<1B-VipN=dFpvx8Mpi56DIRAR3 z{#pYx>(&w3`wm=S|7P+3_LchI&F{aZQW19}lfN55|9?!bql9IG?7I_JCncQ+^xL4) zR!bAH%(~g!3bD?+Ic$HB_&}^SJc|AH4CYY?JkJ;jJqZ zJ^>LsTi1A&W7ex@=QL~k&*SVQAK=vCH$=9v@n0d~Jt!7Uv!;b4$7Vmfl7CM_Cb z=N{(A6tg>1U#KgbR!*od-iePI!CYYW%+(Rh}qfcr z1fHf?ibj1}yYrsctn%@tC|F0g8~GJ}B|D;j9~aLLV9)?2A^zG)Jj{jWa!5v;#EJ^T z--4W z*vtVwH|d)Qs$<_}nqE3x;Kw$#mZ}vi_3bxHAEGq3-uDdkfANs9R>_M@)n9HEYtQIt zZJzam9T{LuCcsg+rN+A1m=V4m)ZKS2P}&|oqCjk4gK-@|kz|kjsvZI@>$>ivOm5V(3Fixvh6NbvCCoJdCtF###@&y-dhcJuZ_2}j5F1}i#is!Jo@W#vetN4J? z1X`-eM%Y&o<|xMp^9D*Q7pm#JnrnK&QoPDmPt(se!h$ACec*igm(h6JH!Ud6mXBBT^jyt{La48FgERRrSDb@w0ChR(D} zk#5nFZqek%b8q0WZ*ysR+DhXUPkF&wk+@6sP=CdHpar- zT&otXW_9lqPYLAqKW;H55{tn>Bu}o;B2jZowu-YEp`SHE43I!)-0%mMHk86<2V>PR zNwi_LX6GQoVx`sxNqhEHNd*NC3!FLs`tthv@Y;RwTmSm}z5NVmJ@m@lA|Pi#9S!_o z`p_?)pCwA<><>A6Xpxq-w@)6K!mpB-LMo-zhrm7}rPhaZyN(Z^CVj{*TW7Dh2kXxT za*f!gwTJ8P1>#F!pWF8V1P9JN)&*DWz=A8gkKiu`f{Wy?y$9h>29hIrXu(Z%OFcUa z!A*B7<*x_vM{^Ive;2%K?4i`%Jv?;x_bnH$uIzp?v*(>9WNqx(>Zr?c@Yab1b`MYqT8m z$d0CSu~(3ue*8CPw?tcIdkL=;8@OpJY5SC8>^0R`IcA-@a;$-T2XYjDI06wr6Z$Q( z45sx^n%qoSQX@{VI`G;=b_9V&}-SYTq!$$LKhjbr!k?_a??S2LwD^G?6gQAg;^y6JAC0T=N6Iq8$ryhD|1mibp!_*$$3t71B$G*7qf>J_VI4Og# z_D=WhxWzu{tZ1oe-32+x<+y%OXgBxP)F1$w#j>>ARXufKfyRd|N!fzQ#{Z-2or5c1 z)2PuT9ox2TbkIr1wr$(!*tXfR*-^)~ZQDu5{C1x?^PQf1Z`I7L+R3i`Du3*~>V5pY zYdH&W;Ob^y403|?Uq0DUFV&Qwyyefyr(Z0}HcVbRgey4WQiu5W2%@Se4;oO*YcYCOZu zP?I|i)snl3tu}J&qKx-$L7U^{FxY$mk246;!XsjPh;(D6^=qK_(g@|4ZFCouw#(Tl zyCZuINlRGw&U&j#SaAY6&$RWkkcKE|h;wfD+*iQsF zT@s}BWG>UxC@Y2>Hu24KQAo+6>}`t=_}EZI;?mOmZ2<>V1;sT&a-AjvsNvRPxI z7u;-ecat~TGd8CC4a}D+%I0+>7oB#VK7|y?J+!;#mVdbP7IiJQP-F7?K#sApGx$WsQ= zL$hqKkBv;}5Yyxab*(_9Lj59Al4{0o5);s2a`u<0=wqzJwu`L?896kQ-5xYzK{ow? zZ0x9*IqvLOmljbVL$yzGoF1g;5vuTv@=VZ^t4_6!nsSABF0MdEcq%fZeS|G#C8N-% zZ99aReVEztA#jS6P5`d4V#X`;>%$D6BHlb5f#Joe-^cu-{cg#}4WF_Ebjk}F0-K#e z*3g!pPQw0Me19dFb2};rYn>Wp$)be4G)jaj>fC9;Qk+3;<#(G{gM_8bGqDbOFRsX| zm^W=vK5xO#Ex^xk)0cX0b=HYkE3C7&PgGV1+aCChS9YHez9^k<^v(fk@`YNqg_nIw zyk>y@B`CE;qV~vV@rVh}>lZP(B{@?e^((0P0Ar|~gn1m}N>Tk+KpmQ9XO~P_{mh7u zq(ch%Q;dsk64(otH+>ExSW_J9-nNSwzDOs?@7Vcgg#0IV{@z*CO$~})1jI~J0M`xc z{~9|1eK?*TJ zm#8qVh(9r99`^af*u(|CPp1!1l(NYVovQzo^Lf1v6{jTB@P~fN-SWJ!TZb@hQ_xTa_e~ENsQ;mk$WcD%#Cf)3Xa z!bmnYF%4c{eRBX~SnuCG~WksxU zj+)jeT^6eHiq&ln?#F1tCgb+g9N9L(Pp_FK=aF zHp`Dd&1(w`$+!<}CGfTl3q(k?=CV0R)Sw3CrZw;U9>bc?k?!7D*bTGm z90@m6cNWKwN#f3*Y^3w6c%i!=&rGBk~2Ab6(Ud}Jp6tAIc*(G{$cp|@gyWYDugeX`$>&YSi!=;buM>43 zX=b^opP#Gnb5vp`LG8)1*#Mc?tA!^$H3dA+B&5URM#lLpIBka5>n1Ts(t4ys!HxvO%7)#Tckkl2X%-FwGoMjL61x;=JieD5((qy7qo}|tTZd1G3@%CPcBl@ z4%$)DF9uoZfqk<(X->Lzd^ruc7KCQlKC(Os4TkjY6_rjH%a|{f08zH=Vr4GOQFB4V zs`hj9o7z?_Y%(_09q?znQcKYd@uI{)H{Ohf+35J4b{F-4HI?;*Gg(a;UP~DGtp4N% z(-u?YUnBMRx7r%mKa%ex5c-)W*~)A-tT?azs{EhI$&tR_tt-|EgIQTKXE`mvfS(lY zym8RlFWdN4(?7-J7uQ``nao|8HuVPq^=1=( zAu)Y)GvrN^Xx68HEL|50MVve%kSaO@jq`!CpBrR}AI48d6wT1azNi|y zgBIAx&fcS&ljka_Vu>A-j^3~Jugp8Wk))0?P5HJvrPoa&DVoL%K8LE1K0ul=McrVn z5o6eIOX}aiN^T%H!A5E@q-EkDc)$dP!>nss4mLJ7w=6-bW#Z44kUNB;lO4}W?SCNv#YKfchV88mwR8Y-r4VdyM^w2$z?#fC|4cN zw|DMVQ7oz-(okF|9rRGQ90ErR7?n0piVChzs}rxB6K}1vuMESn|MVl9Dr5c@eR*Vd zCMztNi(@5axERILB!XH*T~S3u6G5$tssBl9ZbU&eVKJOWO-*Wv%3=q}y_IMY>HwK#Sc_F!O+#M!X=sGoxk#%zJ+~h=+Z7f~;Eg7;%S7rU@@_o6gC&-xuEmxYcrTs%?)kU@<`NkStb1Tm;lxJw6x9* z`a_~snt!^XYfM5xaBcW-LCNQQ&8@8Ouh2AVtm6CIaE5(ec;QU(9%HciU z^SXdI;}tGqPtw+1Q=p=B8}F{ij9l=WPLz0HiJ^aCZk3w%FP@XO>Kbugg}|GSI@UK? zPko?GfM3!#c2~mHW*TfukFKqD5h~*r?F7q=Y!!AzL&0JJKiok;2DaF9_En}zR+uMJ zQV$4lNte-O3iHnYHWDFuyb4}n72~D2Av1UmwLP=w6-d| zY7uU<5%amKVj_N^>Fl%Bn2|zbl8SvtQDQE~rMu)uGwJ7IsiJJ9#>jMHRvrkLiwt7O z%@!=MOSv#nt&e8%n483J z=fB85-on+*7%!zf?xC~sPn9;A*zyM+-V)E*oOBdSJ5zT=K6vG_#(vJT$Wvk%qmE(A z44hM0K+}qF&0D+)X11F#fz|Wt=8(;SK}L%}>FjGb@`zH+OPiCGhzeH@xBGJ|Whn4$DR9B;{JjM3mj# zci^_1ki#9H_5xGgD(dvWRmz7w(h@|IgCfU}TuyMCJLgzX>?=8+T{*AYA{Y`>ToK=tIqk<=v2sYRs9KI6%Yj<#C){c=Ct%KIV=F zHWn|0-^gVi_AJno)0_O`Nlb6&17%tC*GG#hHapPyyV02MbsgJ~{&zWnutalju++iJ z7CZcD&bYH;?Cr}<2AC|Mw)zaE9bZt$_)sE|M69q>-&9m~uZ|;5&^DKlSn)+V=13&Oefln`+zUN^Rm}5# zXQGeF1$7I?6cz+AG{d=q<@9{M&YLR6QYNt3`NcH%>t~d12Gb|a&^Q@d0gU849Jr-u z$=XjTD2AG0wV?9%GG{&C?9na;ZC=T$2105v2uLn;h;KUh3%qa^w;}r0V?w{@pxAa& zEXWWM@h>Sv@Rka8YV|yrzz%Vd8nfJsL)au{0XEg{M_-nI@dQSCf^rNG#wJn3C75mv z+2ejqPUrnfr`z*$D6Ugn8b7GF3Fz(-W=~vE+Ik}(!yb`;#Hx>IP2jZyWzdf19SEF0 zg?dedi-3+Rh_8=(t5_;U*B9Gr%1L>SqV(wrb>>?1(Qrh?_GB;AThTNh1kQosCxH;z zdm!i!&fO6o4F8Rl9EWq4Dlb&FVt2}N*fsqvnNO}*k1U^jCIYRuY(8DGUuDl4c^$M= zH`{DwCosaTy>O{ux-n45>eHLE?zdCe^P1`i+YOk5|B~W$L(5&1&p#g44?Ea8_WAs5e~RB% zw?C<`{SZ!6amb0)6AZybvGWaB{{mXXvlo{3BxI^AR=YH=UBj4aV3QQY0(0JEpgrh% zW58@Ba@0CcOEmTu0Xe>|M^C#M&;qUd2XY0`q(zv~1MBeex0Ou-B22Slqr0o%`KiAh1 zQ|&*hfU7^yC<^9bV+c&rz&Pjq%J+t6T}DQz)yiNrqS#%r_fEHR&3hifNG(e&q1!ew z7ZGw43;FOxqN^F$oq&_ZjWrRh;9Eb`nB2t@d!&p?X>oLZL?bJ%@B@<-LD-~K~UvB5o z;nn&3DS`2^qo4b3*1p<)c?I%!RkHD)fn~kdjgEYn!`+oL?LUCjHx*U_1 znZRu>js>(7p0J-%>r`LG)VOjez2?b{jkV(;HFtRw2i#Q-WBi_-GshqUth0aUs%xWa zA?7`Y)oENj3`R{qE=d3BW(l{BBD` zPELXS06+r0^t z5B;Qz=)WA2S0Irr@x})K=IgDb%#iunU=%-!hvof^`vZvby5c)(Hslk1X5N0x0F!=; z(MP+TjN0IJA)9V6qq_U4fQ4tnb`?BCP^Mh4n)xqttMQefvUtlF<8tfJikK82FBA?R zvdF~^M^9IBGMT`&QnR^q4w zfW|lYBUuFBoF^WQlcOsfj{;bGhcXrj3L03~pho^IC=%mrML`pvC7mf>KAcvqb{kl& z>r>YV?f0$%HMt74D|XZx;PAc6X~Mm)xZkzDtb08_av#1HYx2Ebk2e8T?ZBb1!LZYt z>g}k*Om0gA9~{zo>o8vD1z9#%;ps5THyt_l_Kkuhd$>+Q%>~aYgBU35odxf5Zc78_ z*K2I-)gLvvvrgObG%Q@&lDnLg1Vt66C?5B6}t{dJL-Sx_b*RS)9cpOUn*0}_?J^N-}@3JacYuV6- zHf3K@XR~t68|RjiT#YITxaiGw$_YS6U@TjjIntmCntFJC<@v0>XttLrPRNQJ8wn%-tS6I};3ZKht z<2i5!7TQ#rj5f_eJt^FBV3 z+BWgKzY!mN2`e_(Kz3iD(XI3hBaJ(ODS&6ZUykJxk==TSWa0xX%LW+;8MPYjfLk(u z#$c^^#*>n<@IJtwc?kiil+_WV*_-C2LkrsYCI8qnPFtsSl(F-IKiq{Rh^u}(q@I_J zW4ZXswkgjjf1nRG|9RAMOq(WUHtZ-a$NlmR z;U3|Xx+qWXzRMAjnopLEVIYy_b|KxAns$V%>roKs^)tv&-%s+?@^>ABUPNuVgk8{z zzmx_4H01v@@wMe42Ty>Be+8_U$o^OFXZJ5+DFz{cBFf(+Q~y_~hg8Je&Dco9*1`I( zfBKinS1MaOq5v2|Y&O_4Y;;RdHRUXmQk)dkOVAS01B-+}a=#yMg)pDQuN7!Ew%Y$V zeiVG&!}#zYTjJu1&cXXgh@Na;2B+35y%U_^=z$(e!}iMW z`4eNnqz=9a^1OYGlaz2(k3*R676sGl&Wlfm)nd7-?J^sE5n)$dQ&Z_N8;t_1TIeY` zZ^mn?CBoygYHI&p`Pfr53rTW(YcT1W?iAWicdT^Z$^fkfx4*1)(V)SMELNEU=FkDV zavkhjax)o^;dagDciK-9l)_ofu9ItXsjXG@_nwBhAp)(c zsybXtEly3#N>S@MSBGSV2kvyDTJRztS}Hdzy5t2#E&4^&{z7iNJAKN2_92IQc6zs* zqKhGeogo7(XpxSEq~tOb4vzCOWB|GAHaj;#GrwDPLos&Mpv~^Jc2ffESY&TOH^^WF zgOzwL{(W9>h1-bti7*LgbsMde-f|C9q^29(AYG)v*w^JA=pwkadbw^2bemj@ZT1QE z=6ov^ITpLc9_kDA=9qXtS+KH?RR_olT(DEBNX}R|Pjb86@5}Er7s6lW`bpNLCTcrv z=G(0sbiEdv%dN3CJzeBy`qisODCf&x8iPD|DO4!pS9O+7tB`~V%h|(I+}`D2I&`Y2 zD;9O@THE?WHC7oS5tVD&<kX*p93z@;7&a$$jF38K2W+*d;^{-Y;FhIt0 zX*?wsR~Y9y92!XphBjwBU39iVUhMS)vS)r|AJ^teT58Mjb91A7erHp7V>OcUvnpKr z{tJQGPNdioJpb{S=;zN%7+iY3c*-1ky&EIuNNx7;S)%XEp ztl}yQTVlmS@dIi*4Vn*73^O`d{6Q3nfUaqU$$m>GP*96Dl}7}jECyfja%`2(2S`gT z1hq;QMGDqhzj29ZLP*V}_rE5He**ju^uN<8jLm`!S-_U8Gl1QX|9|$m(nf~=FPHmw zLSCq(X^RZlj}2Z0Ar@{+w3shb{#iY5!CD`cY-S+P4jOoV_(c+q5%PQ<=PKzt+7@S%>X_ePiDz zHzhYGHzQ{fdY0CBjL!)A<0rXb$%zwauf}+NKh0$`ol!s&U0s1?bay3rO3{jJ6j75Y zJQgy8wdPP+e~2Le>RUQVD;I%XK84fhv5RzT`JRm~2QJkuu&Xwa^;?NyTUv?oAU>4% z%DqewrF}2rr<85;#)U(YD$PuwlPc285rX8!^A5(fk<7_lQw=;KniJmchn)aozK~u- zeEU(9A0dij!Cf`uHMOYe+u|-{35Dpw)G8dU?5CLkbm|e z))kK4IaGbf-w<&%+jVG*4m`J zJUXKMX|j3N*40EHpEK>`h9^aLC?YtX3p3v|K<)?*YDToZP&=MAiR zUc_@(v%u4I6Zp_Bn^f^F6I^o-k2sAAZ2+?1eh{)zqMrdWX-1#9-g~#us}mf_O*B=y zB7fiTkm6d=s!%(R<-iilO0Ir}eiz!m)HKoEG5v|DzjVl`!_Hr<)(ONq@`(C<*gP7s z>RD&eZaqb_d0W%=nRYvc>cBDV9rU;3`16eZ=jo*qEHiiqoZc!xQ6TX@pI${{duL-C zLt`0dYXf74|K~yeJ6TZDmqp=6^nwX$6a^EO=SM~D&l?K!FCkPzgk3_c4`uSyh%T)7 zd9l#ij{TnW)jy2%9mprq{$2wSED*u7IpgPY*2Bic#M-3prVkKij}deL)h+kXmOM5* z{_0|E0BSHEPq!Gd?D^mi(roT}0hdG~P+{n== zdhyBee)4MNX_N5@40K2P1t}c};gpo0P4rs27!e9+m3YrWgno9TYnVusO@zFn0`3O9 z)Rm!nx!74VWyByikU#9DsLcnkPJVbv!iG_`Q)6n}D9k&cKZVQ2EwtS?clLcU@3ia= zR8JuiOhDE(Q8xRG#6)YFQZ9PKX-=K$TM%`hm9$Ynk5h_PtHa|TJn^F_0GR`}x{gBb zz}dbpYvP)DaR5t^W zmAd=aPUuhQaj~1iBSZ0O@wo-7LsW%u)$=Bgpbc|omUTzTZ=oszu0)Lml(}wUplgqv zKnfT3B;j03dSV2SIYO6ptJ?cxTOb3>X5CM)6SP1ven_#EF?2UUX8gwyB2A4pJ1eQ`gO# zSX@6Gy$0EN!1X`kzv6LOsSlslu#snc$5e)4oxf%C_qg%BZC6>)c!0ahu%99G;5PDu zxD~|visPPkBBB+oKhx}A&K3(?=R#K-)VKKdI`Em@fsn(`B_8;uI`>C1w=BrXdGtFS z>)CgEh+%{ei`1_u4FUbfRTq`!H5&jG!djN2ym>B#Z;l^!0ru=ujS+K$wqmyV`WW!; z(yL-t0|M`{Yox1^S4{>t_-o{=!W(!V9)fGa>_P+=@)K{y>G-!HN*TZ_b5cZ2*d|2y z@8G|!?oZqLPpb=hVm_?{SQ{=NTnqfqR`>szr~ltBPAfDBKWyeB*B7wrh95O9NELk( z5Ne_Rx;0hXw`wlNws*UhyO%q%81n(1>l!b0axDsdyDJem5iJfKn-2V*v(1dFBPhPZ%-5|o?86AaYEiC z%|5+Q)~;@8X)V2DEKfsBm4_bmHPk?$KPTZl)@tcuV7TH)QymNj8lXW%mYrs0wwq4; zY&gm3Xal(2Hu3uSbjR&$tz@mHMn@Py!@f{c)vpYL!|tv^r}d*|IJTNY^PFOQ-4qr9 zC-;oYvui!u?zLw1&cAA5)oT#0&<L}$iFixkhicl&VKIvws~&9jBHE7|8SH@y_V~$ z=a*V&tIi@^O)klfBzgmzg*zkltz1+u#Hhe7*=XYPA(LPot3+1?6~h+p!OjjE3NUj{ z?6X*UR!O_i4G(=^8r?|-k@b4pHQ4du;8%9@sq%6CbzfysbEecr`WehIH5fJ4W%T5s z6n3CdrmtDV$4p)S>(4XxpQmr(Ca3x6}rvs4L0ogj3GU(gs8=4t2SlODI0?T(XC90UWF{j&d4Ut0;XvPNe|{4yc|w_Ov-J(BRc&)jbei0% z*0$kx?d@m%b{VTUIyNnaxgLP3=VaiB_MwODk+XYE*~ngn8zRaFd7%EQvZOjzXc=of zF&!0}h7FZ)xJrea{?>(^VGu9mtDuWFq{E_Fdj(iiE_vPXu2F`TqMifqz{xw#X%T#e zz-o+8#&S&f=+<1&dZ;4SIL3S8*a+0z>e@|~9K>47w2Ny2=r#RS>&~6z52LUj3w3!E zoD;M`MNWZriQP&aSKE65VivNjGCy`}?g?75Ux*2lo6>vBp!Q$$^nmF+L$D!N?~H7OqHABWfMtAS2$bNGJ#eN^JQLGVS*?Ex%V~A z7TnlGeW;Fs$2n=MoIX&mkog zKaMCe@|RJb6Nod?-azg-gJJu8m0nq*Oh3#1h=76&zzp9kfemI7sKPMAkBf=N%a6+s ziRyw)feoI8O<~#)i9!}UgfKT~e#T#fw8!IE3B>|T8KekDwvxL^ZE&QJ-p!mt^k!?P z(v~W7v~F0T@h^6DDzY?iV45R3a(;)YKM(sqX7IbJ1hg$;6#(s|8^8rX!T;F|09B$epdEH@F1oI0H4h%PRETUQN6rWhEp+B^=1fh>_R=v3N zOj^OQu_+0Ih)6O|xiiH%&MhZb*2av^R89o%SKT~@8FNk=Q{>67*n-6^Qy1Qj_nwE` z&n|a^o1Jg)df*6nS`7M_vt(<&x;+rh>V0&cW~MCnY}}DCcCCTP2e@nYcB)%aWlog& zc!jf!VSKvfP@&F#aTdtMA_FF(BHGR%?V^yV=sllVB|!i^6q49#ayT-(7W@H={M8L* z56uga$jJEw-}?AHtxJes2llDZw2LU~x5lF2F-Zhu<0hCK=bvY90)%Kf$pR?MkzeNY z=CVu0Ni55XSzbks-Tk%)wl%gitMN&#KjNgKX1<*t`4Spx9-gt3hUM^qEa>^KGuk|c zs2AkoygVI_ik_aQGu|{sn(XDC$*Et6|IULLyR1~@qVs_qnZd=dDm-ldPv&$VnJfYhnB{gFA%rFTUIJ& zsgIT!5S2uBr_Iq*;@@WyNxd=#+B+Duqm0rgR&h-3H?1L8vr0Atl(ABUeCQal&B&t4 z?p=NQza_orV3t%bM>3&UQOKf3T%~TOT4TlEszP)xlQhY{IQ;5e^hq&y1w|Ug<5^l!ab_*{j$`py- zr5wQI99^b0^v`EuBljMdior6=yhIk&g9cNwi)Lwp=yh+4o4z4L)TinoDSU&Ie)C@w z*~hx!+wOa49#h}8*{JGF?a&iFRLvaQ4)J-<^pgLnMcSLmysRg^CHvo~m zs>w9YCVKfyrrW34r!M^k&cy{Pg+*J@$Rot#Cbh4XmN(=9i_YMPVGmF1r+>K?I%I0s zUfK()kG1ZrG=Lc4E$MVp&eKEAhiEs;P5j(T$@ANCG&9;#?G5g46aLds|I>s^?|kbN z08y+Qpf&T~^QeDEvVZUCN&v#zpYcq^(iMdRF)OH#oE%YtiZuuw8ntIslISZ@n*jb? zX@V~vNMNIqI!$yB@0bL<_=hszU8eUD!col0aZDxa-B*bR_Hh;b!MM zd7k|W{gik3&D_xJ3r{~hUK|hlnC?L>s{CUf>v=58;Z$xZWny@cMcR`zuh@OguG~cj zWRS^{jTUh0@8mC4y&lGd4VKyy%i8B#ii)Qpr%P97k z=3y1V{3&t8sl8|KU0!M{&e%7K{3$xoyEJM1GES+3eif=r-x@B}siMc^bW^wxUYu5? z4ZVypYwGP*H4u{$>JuWxaZLJ4r_0SI#hh+a<$k*_)2%m%wE0OUB|=>(L8x+kSix}y z&>?}4RY~oXc8jS>JR8uj$p#A`KQ)|6@rm*6@NCMnO~N^yQ0iQGKuH>U)UBCrn<|NM zQd_y3CU;7@4IAJhx}~%DLZEdH#)@3Om-4S@ph8If^xzz|K&l4e>-~aS=PL;c^genj z!FKV}oKP4?RX)VbutmP@!XZm4b0fCe(hzt7FlOzrM^)L@?Mo3uo&73|IF z^BIpw35l~wQ}->arPHmfm%yIXYj@wwLfubFep3)nIDBa$przxQJ51vE`uEHK}GCFE5lV@3Qy>eQV_cfy$ zIG1A1H;jjJvUy;*dK5uWOi9+6ZEQ=g@ZbB1`fW<-x;1K1DEw>o3uh2r%CMiUg3yz3;%taQRD zw1c3_Qymq#H1TM6eCC8=X;0a7+Yp<}^J!k&^V=7Vw6sj`)@C_xYs+dQ?mEH#k0_A{ z2b8udjJWgzP10V0iNJ>b1_~+n(}OnESSTXN+(QmattQ(_I3&rcx*@+>wDqSLiOLcf z&6+|+8mA_{joHo!F6~wu!z4cI%|i6 zu88NZh!)TAgT?}WZq|;bK869d-O}&Ou0~T$lg8bXJSM|N_fK;m9L*tw^tTj};y1Uzd=|WUQ2XXE6n9J<1v!9em)L#wBgDiM@2iAJ;qHej zs~Bgbdwq_VlW#{?sN%o~V~18G{6P1pPyDYCKiru^E0|;CF-*5hl^aiPAGg-K83UA z)(+6-HwWAka-o-yrWKc#7b{b;qZN~y5L3RArj;C5WL#ib__0SVNk=^~Hu-~Xh6NPb zt`K8C1>LP^=>Vhfl+0iGbbqh7*z}+f1(SAepAlUJM`0<+}T2$G6GWhc%inPh%u0 zKyy1eyn*(rSQd6ok&51JhzvK~K^QQ@l6|-Md^+JNVS}T_Z9NbKI>-Ixo^EV9yS)Ny zr-NQ@l?2tjr(SNKHYkg1Z+6F5BW0A|so^=xiT$@!X0LE_+(v+z>Ws zcHekuyCM2_E8INA212~lqFdV@L*0DlB3}Am40o=5YtD9cGJoyz;NNZ&@zC!2$Mhs3 z1YpL;C0~aI&Kx9v`R39fuC{^8;n8a$5Or(5ZPwPL8gm!!dLC!TVwx_`(4E4#12tab zG@i&<{uJsV1xG>m1$(2I{PAan_GMJ5%FGmL{h`k~bH}~d+SFs{-BJ6tis;AJ_8;73 z4)f7&JY}V|&(=J-bLteiE*8(&XR0%DbYJjMUYd@W)>p{&W$n129Xu@-q|3dXLqJ^x z+cZ(kj+m@{>N+J^Y~)+>5|vm7Ni6CG*_@arA>Ta4W&pHMWg3~|R9i)$w&44~P}{`% z`J5^_6Qj%A!y;^PQwHnlNbL2y!8YdVXl={vqBGbrCrG)|BxAWF%lYjojC`B@enJc5 z=lKih-`;krOzSl*_9zVp7lyZz?BxgYnR$t}`{tWFcA}6U=u8n4rr6Vv#xk@A>oIqY z%3$1mK&<^I(z=1J&Kx!*3~7t7;N<67g)hcOC#$HxC576uWU~_2TaOfpr((@Uqfkh4 z>z^ypDffUbtUxqsf|JRNxS})fm65haN;30`yO3s$xJ7#QkJao9*jm8;GZ{Ajm_rc6p`_BiQSV{Aqgt}=%(NHGw+|zC4S4I#SIsmaPH5Rc3O#N zlDu5xa#A!ku#V~9Nj`_zwFu`(2_=8(hizK9T({^8U)^pZ)^#qoD0#zvqQ8v9o8>fQ zjguXn(w48>40E4kVoNtlf7EbdbE*G59mEfp~#*PI{0q z?vhD>RKNT4in(&&^)e0yX_o?tM7gfxE25`lI_u5i3ks}TdEsd&dac%(HYr$!9%VB= z4q0N1(W%b-nc+aZJentT4thCnzTPJbG*9##l2K|mTvbP8&>aZMCGDAa zL@9KruRyXjT$GPQ-lV&O(BA$z@qDPSuzV@kFi)CS#NR>KfiPr3v$4DZ$TG}m(wH<})Vj_rRRL8>0bht_nk@KL znCo~vN|}VqC4@uWpg8bj=x0O#9Ez6?`*5}UHA*j|5abw*lbvWXh;>OLPB51qw4roJ za5Wr0b_#`q58*wXK;%&LqI96C-}+re6&qv#_jZqgyyfznQfPE= z9aprZ9p2$tz~_6r0sleMFQ&4+Q3@U0We`NlA@tu1o{6=x*vy;BV0#>a3vox0@2kao zX|`Dx9OTHinI73&Y1XM8X%bOQVD%47Wbb+@E1gt5W>WWi{C@PxW)+)oG+zA#(cwM) z+zM}8Z-iuBnvchAE{;R@GpW3B<%7eWG9%2o*)N}qwmWKRLc1Q3dkScYWIN0##>D{R z%kp@wgK%9)d^;|K&@f|iFI~R;fHZTu5$mT9B6@i8mu5pgjYm@CnMy2DnV^|eI(^9f zmq0#qB{4BW8F&y5Q>0WHL@~qcfZ*bynS>rsB6UJi7{wBvC@>|3_yOYg=Pgwq=*7&S zMf{@LrJx_Z54wHv6H|oA3k5Z_L0v!PQ_q8A@GEmgGp0ga)&hAuUZw**QJcr9bX|d32H)Hi9dLV( zTY!<{$Dm|isg?udF$A79v#hD8me$>T;%j-jye%sD*tp1!!zX*Q9)727#1?zZb|;G9)vE7nfg`XZ4Py$drBM__Aaz&jW ziyaCGLY}vVrca!t^H*Tm+we+%ik6#|ALCDi=ufq;eTt=ac|DK6k%F|&1mnHvw-9nz9O;Hs_NK~e;2 zNQHifyl$#anIVsLI6pe=b2JJ$xLrtCf?GHL+VD4ID;58r%?Q?o#(RMe+n*?3{!)he zGnM)$$@<-|OPDs;8v`U)a)7bYe_#LlC&{w4vijZ97BY7LC=3FYJ&hFrPiz6JA%Kg{ zfZZ_Dzc)UUqWLUA_!0XzF?XMep}IHjt=0x6nE4@7A)#yW7xf(nJ!pEV_R7^CfnVj~ zwH4I@QDuH@wGY~EJUQ?HW9FyiCge)GxhQm=DHoO%2c;lvK`g8SiH|iRA+EtZk z&Dfh;$%PHeltqJKJLaw5zh$@Qu?y+pVWULYwD#VmGaO5x@7G|(hh9pO9gw#V!O_X9{ zmOQYWHa=ESSo#{HbOYgeO;j3=nNX&b{VU&~BU?K$Vme%aKj(P%F!NHY_30&N^8?fl zTps=#W3n)IPWpa&&^7L{5Pa*kI=4jX*fv*@L+Zd`Fvn~(vkBcAqZ55dMzisDqkLM^ zRZtKZj4rg35cS+lhN6DKr;mY0G+-v8SOU0L%4BaIiuRU~@7E-tD}wvfeE75asESU2 zRk_MsKK}L}<^*U1>(F{-pFu%MUN%Onok(ab*I$Ct9>C5a?=sotFl0j0Y;^FN! zjf!^B@Sw&L{cCoH(w$Tjcfpdv?`eXw)t%P}m3T_2e8hufFx|2_6KuwSGR?8769X9W zfAV3`9vh!a^k&a1D;p{8tF^e28`E_gfPh(XC^4&u^gsF}(RUKnL5J1*6kQC0X3fTt z&(&N)*zZ6Iwq8L4aa^T1_m{dmXA4a@2@HlJ2R@iTADPU~GAAkv&q-sZ=s*~LjuvcJ zi;*s4c9q@+bD=9W9tMd4^(!veoH_Dui#B1u=au2)G>Z=dz@At1ntTs@}XdWdjzcX425 z28gv_B-v4u>6EN0zOJhEGnqjf(5Q+}WJ7^d6I9#_n{m`sODy;uX zx@xI=wT;np$HnFl+9;!G)rxRR+bu4yR>o)Kb_VEDn=rtQvZr=kd5w0BEw1RJ z$|XN^mKzM+XW#ZCkoE(#OaYFcnMB^M=}g4qSCLVZ4JoacR0+iA7e27lo4+7S-?Ity z3ke9bJOYz--RAsz!#vVYffo6V?Bfq)kuVFwxT1H~_s%b6w$!-1ABgV~!>M2{uZItx z=N=Q!ur1L6;^0672?*j~=JyB%wghgGW0T@Q;H_+&kDt4L;0TO=haR8ho$-D@CxXwC z(r3);8+PX!9_W7=H^U1R`ZD`Lqkzz~M6j&KHybIMdTdDv^J`Nnxh=?#t)AD9tR}cI zt{X1HG0iKDQeHdN$`P>yLU7tD{eWj=<}WK`n$it##dcy1bt)L)_o7*GG={cyrm=c0tAkry z>C{8sO};A(7la#II6O_qZ)Sovzoe@bniDH>NR?UXzNG~Rlb{>0_MmAQ-@SwV?qmGv zH2>3`#?zwzAJX12xU#<86OQeUZQDu5wr!g`M#r{o+fF*RZQFLz>B&9MIdz_?nW;MS zzE%HPYt{a^)~<^`kU4xe|8XclK#KpL!>O>nt*yPC)A!8*VCv)~_&tJ(Vj(VsSZTjuYXl{`oRzqqH2&1bvIZ-nDW>Fl?` zuC}{k0>jwe26uPiK_}pi7k&q0_9x;K56`NXNvz)~TG=&#nQLa;J+#_+y9Njk1(+6J)ic&hY+9^kBSkK8R>$yGQ=2G-_J)@*Fl;z zKXooRBZd3Zz;ubrx-D-HvI^q3r2?G%X`zc`WtzK2ees9JiUzv;cI7qKmnQTg2Ya$K zm+j*7yQ-KPfGtyz#yt3hxh`a5t5{MaaolA_T6jQT!o&Z`)c*VRu+?KQSik0n6YLd) zBO14c%Q>f?rVQXerk#%bj@lZGWir^OcrEXR$cdIdD4b(4FKj%K87yNFiV0Wm1@&4Q zw0=$RT_>Yg)aoXkt9!v2i4T2eTaTEZ(k&Bzqf8foxCVx&X;`L47G^1S2)(S8J^J=vjZ^RYqvMu zvfrWy_ATAB{n3+px^f4}^%;Mq;yKiB7oO7clnr>12if9CCGQM%%9&`+C8# z2LA+qxz%~X=PxVGPx7nCrggUXy1t9aKl-m=S~ZU);tAGv44Hlu*(SZiA{Fbjy>G%w zoB_Dkv(EO+4feqVufl^~W=W>IFglNV{4iPGnfU_X^xnv+YFZdzc21T>`=M%sQ1duO zV_(>MW`_?TzB)`}T~cG_N}Hi}_}RWoNBxX`q(18ONu$H^(Pje0+kX%(>GNT8hTeXE zX!`u7I`^}oG>*#}XQF)K#pj~41Mt-6G!M{3gLpUx(rp#Pn)u3;NxMfE@-c;JO7YkI zM8#N#k@g!SCi4ujSwQx;O2Xb5ZAgzO<>E_O|O(Q*^0!d9W&dj&%;k#lbEw*c7C$ zBRKS@de1K_qg7X|uKkEvXsS9jpRE=_C*-T50l+abHOu8nBCttK92(w{(gr`cB@$k} zI@5C>8qqIKfBtRb~l;ew_#6U+Ex9)kUyZ zzZC@A%>HqAfx*CqGMo%CcMF)xj8aAZMdsk8L=BeU=DWBs>v#cD6^tP?5&SsHixUOn zd}~hBxf(-TQr2*7dINo(SPSG|C^+XN~-#V}8fi7;lsYWKvdEEoznh%zMHsL(Qo z3zH!ar-r1NwY$70iVP%P3}bZacik{L0vgOMQeqFPtPrE&gP;j3RqiNG8>&rU$ZexI zSOZ`UlQDLmqbJ_#I7_zb&b^Ratb1?I1w`V_x|^&M_dk9*?&x_yHFCH;f&RdMRl zkJ`LS$$k%MK;WycRz`~{C=!h==CMJgHpYn@V+c7v+2N=)#aN5GK0UwBNoN+$DK}Wf zxQD_-bMBzC2_kPZ2t5~+NF1|JfMITV6m>d6VuTr6LE9ONR)>RsB51Z__6ZM}?hAa5 z!x{C_er}Gy=SO5l@KB|Y3LtyXD^qRN2i6(us_jLFVJxS%XN1rl2*l>=_Z1ot#*VRa zPa~1Qt6rZlB>212ON}WFg&qvbVL{rY0CT_L%a_ou5#oD%0CsHRCkIbZ-O(J9*xXSx z3xX+DFl#gqCynlbqil>_O`CtUw@SLrP?@g$%I-V0xJ5j+!6mbgU?!&xe!L!?&xk*Q z=Prczg-y`7sxIz&egPLEp0GF0Jwt*d;CKR2TUt5h!RZUa7 z?9*HG$Z@&f$n=+?@~`@;dnU5vFOGl8oqsQC{?~G+h&>so?Ynz~`0gI1|NoRb4)#vp z%a8x1&{3OE!VyR1tzIFt1bRS%00llV405M52qh&H0UP$C>lFioJKPhDG7OugER2tC z93?)=l}OpHGej;m!lgiKkgm7~e+&E+qJ~XeAn~s!{5JGZl6|?__;thk>-{mx$M@@i z&yPj}J`ca1Fa%khabKK`FD@{sNet9x_}iyB@D4@?)(9j~u&vmM+D~c_RR?hwA_2gN z*9&J>?4sO92P`VR5t2Ry8&yRrYt376)btpFKb3ZIA?B+4tj=C&xiHU_xX@_bfz~`J zBQ}jDTnJr?g93GI%fgX~*Gjv9f;0irofgk_*(UIdv%P$4p#XeiR3uSs8(-^M2kAB{ z-MT}-Wq$OWCAeC3D`Q2C<#CaGswqWtmR2}MS}yjtA=2p}%|0$mE5K~K?un%LWLyxM zwM*w!@Vf4Gs-d~Qu^!Ew&Uaj6#>%zN==}{4FrBqSv}%jiU^6i9dbRoE6c7M0o^*~5 zg}b*O0ka{qhMp(^?}FZE&U#GinNC|*vk@+gOwpfhp5j;>FOP=-AT&jQL%aphO!@FWPCc-Um%uHbSoCeU4 z(Mq=-p729$A8HBU!x_Yq45=B(cc#frjLzGR&920zioV80&MmA=G4KFq9@!(CHUraY`hUpQl- z-O=TRAPB-+ddTZRCk08P@5lh*VW^aQJmo>ojNr}rhTa?`?a1BhWm&mBn=e!HYL z_UV02%HE3!M^6}MSA*z1$aw6Xz6NYDfnrd67asB?vuV4ZtOZ3q#Y5*(IG&d>^5^HI zH>9tvA5fqjk8A(8C(I3JkzmWfBYa;hW-EakAsb^nfuJ+tEUBY%uRZ zP=CN{IrFx?Vcx;loV$8~O-pdys3wUZeMx$e82;k=KfPt|4q(Wh9a3lr;wxXsm+5#$ zRIH!#W^D*Zn><4<&aVq^wZ@oeNdX|>%#B4gn^W>&yCPqtBnvO`rbcOx`m{#^ev9|r zC?iq?{^~UC%gx2+IjzEe|DRy*e-DfQ6)^vqTe84(B_Dq;hNXD^-!xn1^clRfcl7l`-$tRh3^x1(kBNs!8YrY zrL+~bD~z-;s*1Im!<>Iey2~$kcWW1{`%bQez@+O z;5y0qt9gApX^zMP2DC6l3Le@C%f(B zN_tLeH|*%d%yH13zT3~7b=nWe8mvu3t8(ab$m(ZE=J`dA z$MSZ>iqAdauWFYS?bK#o1A21j)Exl3$p~Djs}KpRs}b0|sav{B3`y_WXQI>ZbdIKT z9#GC1z@Kw1MnLam49X5@)agt9tR4%lbYQz_8ir?apu6#bVCjg_&-4gn@z}&jpKH`{ zXU`d!@&x|_W4Ak_tfLS}hhXC};JJuu<7DvjX1kBY88T;LfkTU)#I}>sFMAX35SWO< zbe;m>8Tv?H1+ByBv19Zz8R@8lfxe z#8=e2C>B|Gkr0T+%i_Q$<&9q4vVOVY;g^3nHZTD_0jUg8hE{!3_U!AyHdMgQM~K$ zWBMugrZ!6SNuXFhR>YiyGxPB|j~^S>8ft=tZ{{wz|0?;5-d8$Q4GXHd^`g(!M~=U> zfedx|R612GDu`wvU%;>D?MN(n*r)Mi?w-W*Z%u{@J$9hWo)vpq6lzQy{wD(GF4`{>``sV}+ZQ^<$VE-cp|d2p(#?~6YN5gzRFA=0pZ;uLb<^gC_+iC~ib|{M8ec_;eOw!(pE4?FrXbAYAM=-g>QR*C!b+yca0pXGv7YMOeyweChb%h~Znu@np)+7dIc^>19_UJ|sYIT& zIZ3u?G<#-ee!z+dJeAMi#WZ)?7)frc>8-(poNy;$te28^e$l>;Y@15d;WYkR4oE@B zN&Shy&l-Y&p)trnTb*`Oj!|DojCu7)4O{-$DxLq-zBFv&+zm`9Q^r3V&(kYZk|ujN z&Hvyc-bUm#E=yfp%c6=EdqT_>7E3H*Y6%ir8c-*S7$1j!kcnSWWnZTc`C&K8P zlN4S~utitzkd~zh>Y<4eBSEYdOc@z9xW4{4#YeY_e?=&7vfAHUNh58AMCa2=1kS*Mv z(-f&yy~2oVxX?*#!|)Sbj4z4J-Peq|iUN+NbqUUR!Wmm^#J@R7P+<(2TpKo|&6r9^ zkaYVc?)uv!e!-P zHiR$9$`{g9FTQCUmOX;rkl_g_w#lHO2=`%Q@XAl=WSN%@? z)f&xrz&NsDkc|6zNzk>Wcuv8RhM{(DKk*2nX9yR~H?*ge>CdYjntm?^+Gk({!`{Rp ziK=%n*%wJd#^0n>#;tE>PU>#4Zk3^xJubBU+3J0q*R}}X;hwTr_0P-*`}+&+u68N- zt{{75sgnI2P34^KhI77`WG zGo||>9>E%w3P@??O`qnmrih!pp4EWu()U{@%`aD{Lzo9E@Q*jexKst+6aj-1|QhVUCCft|TQf(dWL%*bgg z>Js*#aViV!EW`)zLO{e=J%pTM$R`wobt#Jw_Y{Ja+fHq$kQ8fhOpQ5kdj_#5BzZkq z3&7Wp+PWKQdNer^rm}>($U%yZ|zz45#fO=T0KM-cZ3)f zCHKrSR%e~_O+-m$Dp#hS0#b7Gl^v{ZsgrC!@U@I4EPLa!yI@(dT;sIDtEA$t{9Hq=vB60b(eRwKJFuKvfJmVK zxcaftUW!r3)>N0mNJ0S_Ne9vK;5DKWI`Bn@Og~IA+?qJH>A7cEG}PF*3GUI5ZxQX7 zs*@8MkHVW>%Q_E>qzutb&Fq_5u*qMbFM!xt>v*@{kql-0 zaWX4ze_u2L#~5UjueyOma*%cV#;-$~B()A`Ix|ePgr!0-^w#WIm&X{!XPcP+466IB zYJ*QFsz`#G$D9mm*`G_{Wc^@pDV8FGUrxJG49sGIXq|16^$n^>Bk?^tnPA8?1N!qw zg7PTgS;TzECikNVTAN)W;a5K>1+Q#$Q&?UFiGoQN@NA$d*P zb70IZTr*Da#i)-vz0Prt9VI|Mcwnq>I)-Fnqn4ok=tMlw*>8$QH#-|L4l$pVSMXNy zgObXtFrN|I8UogX^q1a&apr@hCYerGy-9*F69XdPEVCec6GMl*9dAg3V@hTAea|+0 z$xdsT^&^AYG88nl9ldesiNT8S2TS~}F}ON2DW9g}*Q%&I0C(Fg0TYSNu7=5zIK5iV zd|B|rGXzT%2dW~;8`t_nImZZ5#QW@)l=Tk$J&bj+~`Iy>4 z31J|s=6l9X_)O$LzJ~g^`NJ=$zr~h7%Noj_gKgBwE&=K9>)dQ_EZ2UJKjU(5emKOu z_bg(PAW=7XHhm2MB-c*Ft`ZuKzxW3>{eFn`q1C}7bqm>p)D*p3QQhbV3w?nL2e2zFmIp}hP z{r=p6*b}q5dIX~lu+MySBX!#e&g`W&zb;OP;T<6WnkeGbm^d)V#D(+{#YL@ULqLe7 zLy)WGMX2Fydy%qp-vT(ybtv~ml=^}808z^YdS@Zv^Pq|C!C?ln?1}Ke%at&3EWDBp z(>uU!Qgh)Uc7_W{ZiywuExv>`NStH0WpkQD9JNTEf7FGVy!vO&+_zaQ<2`mIe*KC2 zVxw%@)qT9VhPp~5b$dx@eM(SYIKU75jK4&axeoe0<*WtuGViIj3i*P}UsXyYVU6I4 zo`jJa^{nxmy>_e6fTQe%T($oaC`ZuBB89k?mAv;)oqmH3VJtS;P$&cG(1=|;DnXa3 zlH+L#F@^-&D%p^gf>O}QK-YrFJGDEm;=A{eo;Jr}62?vF=6%ASICVZx{=-zS zs*iBr*aiZaiQmr@eI7s&&wc~e{6GWGfu)-loNykY2Cv+;g*alD`HfqMB$|AYN%lOo z(cG(dIt~Y72`mC5ThK$8LG_pc%Jr~vBXvoCA|VJQ*M9x)r{q!wj}+9g7gQt{d>OwC zs1zhL?u+u)7#zQ7L|9-dAAeb7M?Rnf)!jWA7x+)CdyvK-XdbIFH0rals*UlR(16Z_ z6I%fq@*~w~;F2z=*uDdDR%HsWXET}Y1k(opSBkP52Q`FyX0A3)8c2Dw?5s>K59{SI z`Mw2Batt%MZsLnW^9H%;nXE3}@29gx*HMDV{&rg8|gZ;iYj9w)kR!3hy| zx7Wa_g3%o`mdnEdE92l3(UOvlPyI8p-xmg%e=d6-86SR|TBx)_=U=Ku<`ckLjIrq6 zHCZ|qj>*kMZA%?KAyd}8P-K@0k?GjcCPoy4hH$wj)p;7wHYr%HUn)}IDOYM?SAq4x z6o3&)^xY9ou41XZuf*SKwE(1H*z*hrr13ZfmO0$Dk3FCyoZ3XNs^;mso3k}rnOeq` z2WrQ(eo$)LLruC+1L~m|raT+MfupW@Y$KkI533|kRZe2AZcS13*{TU7r4IsCHSN6B+e%u6I+=eRR2Jai7 zzF*k(gJ9s|7J4&Se(&m)l`m3WQg~Yyx?ig-K!3n~)JYF==vMm`&(VYIu>WQce7_lt z-Vb9ev*VUDtd}4Ra6q~W#SoufdALQCgdzkZ zsyB#Up@-V~5s`af_qqf_=kCnm&=sj8(I@zql+K@MbZj}6XuRzryr^{hIT;9bBmjSK zIZRhH?5(fgD{z(i?hRS4P(8>E)3k-ad=N})4StHBJ}5(6gO>DTO$A*6GMlMEj^xy`P4tq2l=-XH@*{a$y}LO% zx$0{RKo;ge>ny+)@&h^jP;B+3r1j#8KjFPxhfNutmorzL9{X}8kB-&b;o7Dgyf#t1 zr24D>^Yv!MirBtFDM zPM}z$toPS&SU;;6iHt`)$V~vFZSbRn~yB>D9<6y;8o>vBd;bbdK@78bjc1$B4mX}Wxp5WkBeuPzj;m)jF%3acrZ zs+8U%3qCYi9Jw z@FEB|^$RV`L=9l90K};=0GjG3D5`cbI_9e7dQXh1vR1g$dR|b|n&w_e%e9T}cq;5| zRav6LeLGFl)N@DA+*p#N{fwS=WlB(7fFfR|1RcL*F6%XLGFlxP8r4Q5l#OMNYV;!J zqF=S@TyW;`26&wYQ^2!WM<)rPs}gKFz4wI9!$cCzx|9gItfyU^L1)O}!b$k`oLK~+ zvZ~XlYG_6?7bYdN2~=jP5t2O1WXWQQ9E}(bDPCyP_FR%t1L(_PCQ}zC%}qDSE--P2KaGm(BFOV2mI_3w;$sf6FvX^gBcM+;6+}!a2D0%cefK~? zoLOiC5%)-_>vU!XfDR}x{jpzzZcj@_c_8`7q{uk#Y+s`&Dfr}Rp5vag;JSjOi6XWj zg&_INuJ_2Z>lW&Ix7?xkKGgPi`8H{@li@p2HLzDjuTk<-TN6ng* z?ztT9yr4Q$o|n@RD3GU&h}hh+#G2)?A; zcTn6Lg2*0uB!kE%2$hCqAju%iP~;0^Q63LHE8(U~nOK4pUTL^S_l$|+X}D(hl!+r;%B`zXm>TMGdmi^ zcKKb*Yfqyz!lYSGAh*|N}q?;5g+=R&vOqJ8GeXBSZ z4vrX0fWy#E%Fi_!DNwV#L?q3FS3HJEg4%ZWYi-VreS#Fo=LyA%H3RFqG`W%(BF3MH zB#xtNsMckJjW0&wfu+bz+BI?KG=)#sblDWRqNXt|YmnSE^(`M4?<_?oa0tW(d$R2t zo_2b8EMOa5-H`EC$o0<$L7{po5AW>awh5I^C%^WEQfZeC(b37Q7z^wkIc;xy9~#K_ zJ3p4Sh_Uc2*3hR-A1h_y$9ltE*3wgO=TY+h_RT3i+hLeJ|<79BAI z)BNdgCxmmR=DNo8Yw+v>X%0A_SL;&{QvRxiQ}46A`vv=o3LKE`zN8sw+MKXZ7}PUV z*9z7|ILy}55OQS{80iiyb`(&p6#x8n3`7Qs{oP?f%7MDL2!b$C1`BjLz~S)-k9mlU@r0nShOtj;tl+fQiof5|I$m z)HaaK4OUXy% zuvR3K*E_`IAF?T!|MSVr(^037;w~z{{4Og%e$N9uclbN+q;>htP`=XgmF_-pmhZxH z7Vk#BHU!k}R>E`->-WUiQ@)aS7w>Mo#su8#d%<+iY!NWN5hW7bt;S;g2^y16|BM=& zN&f_4pm`-L)Zbfy@d?~%0Qi*dzPy5_R}lV^G02w5kgt7kw$tkAt`;}&!LNCi`fIG@ zaG$Hc#n=w89}7yE6}7lH-|l+KIL^sAu67o7J)fREN*edL6Zao~WMU?=)ka@BCO90% zbm_yI%vAc;T!RA$>y9km;r-nw!`*^vPX8u7hptbGB>kOL~4^=jr*5YSkDr#K~fa+(ty;*l^6POtDUjUd?8Wz`*}xGIdb; zP#RO;{u$B%-L=&|c&{YZN7aVmi{1ucuE{yhJ`%0P_k#IKor&y$ahBgDwS3M*k>lBm zbI8D+YEbo?UT|FAiMoJUrG$0jXOf2yVfdoYI{{Rx+)g&T+{Z3X4v(pR-b|KNS6W=K zba|TBTs0miE9Zv-TFl8Ulm$$Go4`z3@U_w@!^rUI)0!qKTdw{r7vRNrb1iFWtk_8j zA3VR)NNwCLtT;^x*SWk)dk?czZ@^YhVAKszzm*hQIW+ZtSuo{t%UC#SGfAi#U2CyT zFUa!ZO*hin4prfu-c&}DN)UhFnpEqTiPxO27^AUtc1|8(P$U|fL*+E(7xq^TMi&_@ zY>R2c>9H~g#4l%U-iMQYFU8#5?-2c)6XD49K9zSPsJubCUe)Ew0p}71qW&kuKV))Us}^Egg_ zh7^=qG+|==pet-gN;T-v@E1GRPuB52Y6FY22;TIcld9TZ3!)eO5kaOEJz*g)W(}1r z)r4;ECthII)JvmCv)mWT-Y*rR{nJsKfviVod`mFtXj`25wG2Kg<%2S!5o$ZiYK|EE zMv{IE3V-x}I}*@7TAKn=oA3#4N~billGUNzZi*KpVm4Cvc@~IQj(pMCJTVCn7{wI3 z=?DGNvd#8)j<52)Ck0U*(mFDQB`t%&{kG+i06SiK>N0o;9Th-siMr#38&md3Abmx9 z_7!pO!Gq4CL(inBtwTm6R&zvTdh-#z890p&SYR@}8Dyo-WO??r5&Z)%gT{f8UfuH0 z+n5K7ZWlS{#Ly?<*!%jf4h9C;j8lE@&_&GXL&LJ0F}~#=^rSFtCfQ5D=r;I=A-%=O z4afX8(8|H=QzSP*w2!>V&U)d^Kto4{njbHFp7r0pyC05;?m!%okoD@gy?l;HA49^N zln8ru?wIls;tndf!%TOSIX`0e!0$NqP~~^Y))T8})ySVB>>B7uJxMh6Bo?KOMNw>r zljp}N>VvyeBp%6yicx;2UtYzB@ea};fB4B0Kg0HjXwQl34O`$$Ws=XS4vNN~T4kuy z&uO1p2aBvARV1BO2UU;goq#uv5;XCvq}>` z@8*ecw|v{ZuJrffh8M8f*NBiCamp8PN;29zjO#eMWEmt3>?w zLh!#z#D5?dwq|jEiobPY1`vUOjQ{&3qLQJViM_3$vGF$`{~zMmf0!1M{$G9<`({Sj z1O9_f)~tT!rYws3S2ppOtQHX}7(_5AfbdL=l1@7?7+uQ(-qu!=HiA($**-C zg>t{9ZMWO+V-HmS6Uawm4u7ujqz!-Z0OKzfq9+A(vGjZa6~T742aDVFeW%;?u z(i+I>E7xfrP0iHvIvsufRbH|Y6?9H$= zQ24#Nu#wECwAC4Sd^9x{#ElZR{=8<)kUG~9cOLq%zZ#=W1;Bix1HXxpSPB)l!p2)# z7?9ZM1X%+6!=Py5gs<1rpTMz>gX#LNG7sQH)601`kKuCPg@1jLA`Wt%T{X}t5lpTW zLBj-?dccrC;-d5S)$!Pt+Q}V|rhqU_DlqpYmh9DGHn}Y1NtX6ODk)|jQ%;F0Q3f5) znIbKrIyLa;j;Th9^@u`S6%o||7yQftI6T9CRY>=g%K0?Jo~0rA(ge3xtD5<^hR-?7_sN>jVp8JBRGf7M%9Xs6W_$t@)cC+lc- z=%j-=q`?!|1dph$o0o8)yPmsXr;3b&tx9Q#jr!5c5464_40-L8xvJAO<@=Y7{aZw6 z*|9PT%IdVE+NPoz!#B@!uXe|&L)cx9Y-tnq@QM(ye){^oL?YNh4{R4|v)0Y>zb(cI z)a14g%KL4i{SaHcmNlH0f>hKA^RfD@2F(A!aHV9qA#)Qp!Pga)89*OMvi8^fmD5D% zPScxtE#RkZ7hW5`A3Ib1YLn`p`EFIr=N0ob6+lbC^aEvn#$5R)7eqUQXgjmnIbGoq z|IT0L7W{as<|B3{tJCle^gSjYSeM}SmuuT|6OC+b?R8a;3nNs5<#_z@H+z<$W}iBo)P23Nh4H={%M5k!xI@^zD|H`}XoU_f zs(PY(;BA!&4tObl9u&%Jb^P|bz)FoHAE-B7f>qV`umab06?Ir)s;85WAK!KO)KMN1 z(tM%ub0-o91DM=9X%aO~om5|8!mHD|MIY(t9b*a(0onK9DKUncFO=Rx6Nzn=0p0s( zBHmIcZWQ(NrQYGH2z3)C03cz^VH8hDDGZ!5UPy0v#2UpLoTS~KfIF}KcVM@M#qW@@5yx9oia`de58Oxbi~dlMSGXaawxaYc6zQw+h|#@-7*7v?0FMs- zYe1$0<4Utym=}J01Qy2Xg+s~i#o}L0HiuxfbRRKpub44-KEWcQE}JP8RwXPg*6(Ts z%Us^qP&%BzI?$FIY%%nQ^+telsE5F|yag|Lk-qeft*8*>Uhs;{SM@S+qU+ih_#dS6 zzvqVk${PO+7J@xN6_UQQMljm{6Vh4P-q_mI`9B8>q=H6H-#lYuXCW6$8FfKRn^J-F7jx)_P#I}QBT zi77h(QRczOAGvgtIv_4#m<>x(=m>G|`UsqMUA zm1RO5k&jA|Y!{(#%2XBZA8x1%*NTGKgn4FU7?zJsqFm6Xw5}jKO{+?L79ujRVw2q% z(J@KeQc^p~5bS5bPNnPp>dD9vMH( z_82zPl4NVl%CuQJJ}(jhRajgi)(43-e4vq8z}zkN2q(4<86xAZtE;i0#F7OT1crQK zj-k7b@e!WW7-Q1C)Yw!>o35U0K$`If50g|YFC!~)a8WbFUabrn+mK3vBn<1QEa{6b z0FE)H>vc&szprTtOD^x2mOGz@8&JuY}!=p}C;C zGQqc+UtO2f61z(o$EdXHz(w4%G(3qP<9&A#RHmu8*0IQ+3;L5%e3V7fa<&;KA|F}@ zQ_2iJBbj&e^1ZZni5HopDq-QHQ#7}-!5T|qk%Dr(0a;k8bTw6FOGQ;llCUc*vzUk& z8(c>dd(8+lw0Bh{Rfz92C5h*WHOSX;zG*KucAwHVGm zPoaXn%1_hENY8?Z)d`t)O%!yPH47n}d~*f9EJPfv<3DK%@Lx>RXF-DTDAn>Bto8JW z7XGCUz8rfn^}>w|Lry6V#I>`knb3-*zkwVqU5--?)xTrX)jQtNZ~LQH5s2g#1rIgq zi>Ny(!=Atc)d0b;m9T1SO{(H;e0_xTF!VZYmO|!MWSglng{tA9F^AgKiX(lV?<4jm z#_fZ>_KgobW+A8BjRQ{9_{KKZxAaBenv-kSeO@KcWmReyik#{}i*| z&1|M~j5~`H@JYgtMD7lwZ)L(qDIRbG<%yMU?|QXr-8^9OR4&k&2x=c=?H zAlcyZv69aR@xm!UE^H;`e&PQWcRGoWOdNU_T88lrJz6B155G+gQAKs)KSqexm1Q<5 zq>(ltGl9f=tDAX?e}ALfQWTH*w4LWwS;2F0AsBqmM~l#KUM&cv^BgQ7Sry{$h~P~l zz>q>OuJea+;0UP$aKza4Nuc9_R*{~=8bess3dy3JpLvlMBRbnCnR7Qt#y{3BHcQUw z*DXoP8}SGrM>%0W+?qf$Y3CorjW!=VqGtDdcL)L?Sh_pUuu^FwH7{L?eM?snT~5nL zbasGOmcUk2Lo@Rv3EJ!!vhY#tBBtMaUA`{;S%mv#KeRAjv|5o-u5o!UKrx=Q+&D;e zQp~(}QS{o}g!+%X?b-KTo`1(VoScC)DE8`(Z2EJh<8Kvdyd$2!Wggnn{Fpxe;C%N7 z<<(Gj%^#}OBC}5<)lJYWou(IJ7k}_E*#b5p2)HZ+YS4;=BJKoRGu5&n{z)x0m3wI% z_X|Zp?Sfa(M4hnnoM2c2Xswj+gVxWc%@h;k&j2PO;RmjXK3H6I6P$5Q&I7D5tKX$` z+%Gf%HR~QhlNCamSFaQ}!Vd_O9f&wQtFtu}-kX!PZlH!6f#+X9npd_^#M&X3+`o6l zQ=kYxkWKi(q3|1ya z#ti?_8_1eETiBa?YslJtYf*g5B`Djw0F3`rFhTu89rXmuhi`RDGeyw=4Haczc+l0Y z-NvRlTEZ4e(Fjb1u}H#}`{&QzUFOE=No;sB*-X88>x>fFg5M<=e~M2QTcC$M*B1!x zmH(DxwamOsIq1(Gj~X6#cHO+_<-FWaeSPrz{-y8}Zj0{+#)MyuEr4JN_QaG-IwSmb8<_f`rz%QY?8mcMLm)@e(j9yh@>n+z2 zuINh}DMomU4y>?sW%QH0ilOWzeb!pOszoI9WcRz>>cZE;o>JhA+(S%++-P?T7`;Bu z&fYQki-+pkml&wPIW1EsZKY#vq{koRxA!xur?{yQsxpHZZ&rJjkj=95nCr0Dpnggp z^|R1?99q$8cAu>!_qyWwHyP0+!AIaA@<@?M7wouR?xyvg+1OHLB5uvd*$EM{pQc#o zF4SFV6fV6L9A&dam`Y>sXNY<9-`cdtup9SP$)bw2x^6r3MkYlZCDGO@P@^A9i8g-k zlR#HGxsAXZ?JQ@>ib|Z_zyl$aL3petmBp>}97SPgU@CH)uC0P2@mSRAJT(mD*)h1u z<}}D84rBG1=z_~?_q;&Hdf|Veum1M7;2pFrF~{<6o@4hX^wL-0vk-YaixV`>5tzVE zwvsjzg-Q|_!7ebDO{J9;f*@xy|klG~rxUUs!x_TBHG%|Cyic-9wjQf4K+#T+IXkc`^n zAQp{mx7g+T`;;YQBnq0=K0C%ZS7by$fH7i8V3^2fjZ*#0XA=%I{*q%tk!ji76u7uQ zF1wCQ;-eMbx>iJC_m-kQykrnp6@{+Sh{U#O+~j(?j0$$0M7>b8<(Q5Fil%gJGifCn z4T6VLH|xNaSG#_8F7U+VFwWf6R_3;}(lz}|S}G|OHeIS&qh%_Jp`M+E+b4`*Y$euG zh&@$v(Gm3zcgJk?!GpWf01mfL0Ede=wx)k#p`92}M!cM<4#N*}r?y9$6ifLHH7XWa zDMo8kwW}Es2oXq6wojE2?bq~>+zWS{o4Qn62^GAX{fyokY&Jr9J@eu7S8$*51NBq$ zf|c{SAcrS+sEio>1CFX%s_S zJ|*X`OHxBmAORSR&k09DwT};OAc#$plFDIUH!h#RzNnb*{HBPge|if)r|?=`z(?;I z2Waw9Ry$QwwK1}e#8RNxU>+AOb~9`JDElap#nqRP=(lW1Ri~r2EgsLSc5h>G}H*1rqI_Bb?_ZBtV%c>NjyL({~bI>>}M4 zpo>R01wQxeMrW@mC|69~87$JX9Y;l}iTHB!lHDn@x4=ridwbkG`KW`h*GHXx5Z64C z#t0QVa8kg0fioah5ao}*}%-2LL?X9ok7bbvObu?S@~tHQKyHlzLcGzf3t5esa@l`E3m;oq_M1VTMA zDj1>G7Vk8!MQ+=I%6NlxN*Ur_9p``jQ^<qM>JRS-2KdUY>aRn|1v8HF;k$tNy6e#H`cC{h4#kS76t!2WEaTJa=-HIA}3E`cuD*4lq9<^EQ}gv-2xmlH2apW-M*m zv2j6B%$|W;BVV+*2U+5a%*i7=5_ggCVshY7FqRv}SWbS(>wt+{6)Lcf(dFazh^=WjTO*1FGjg{83ITXlSJ4LBUNJ;E8)MBZNDfzY5 z8fe`jK(QR9aIqpdunLHa3dQJ0SSMScS7q(DU1zRnC);41d$#|B#=m3k-)Q_(CD?6m zWnluL(E+p*{eQvz3W@=p?QKl|r%V7EM{qH<6?gi>N@i+k`%mVVgcZAaC1l|H=>8Cv zwv225}+NZ>^rKuyKj=`@!xkYp@5j5u!GD<0dj3GP8PfHz!A0%wQZ zno9rf5?IKO<=S8!&-EdEeDZa*{cM(pBx>tYt5OsvMw?|sebl)EnBILF58s>a_sCQm6r&p2i5! z_^HdFHzS!6s+hgWOVp6(mw`e1$2}y*iEK)UcUFw^)>yNCXWwa*>Vl3$FhNQa@92Y@ zLz|7XN6~x2BK*=0AGbn`Tn1uSH?f%*!Mg#jnzYg_aA9NN`Z6-h>J4+l1X9VC4smX} z6I*){@9hEgj7kaxmF^k=O~~sR_EYTA{)NjKA@H^UwF>I`yon~DWN^ZJJp-X=6ua#- zU)HA`X(mR@{k?t54st{C3LXrki~tW|VsgVu_T}z`Cfosctw+(c%iRsc7(I*Ep|UTC zg?8a*D{A_?@lP%X0gdjN;$%_@7A48DDWY0r|^S5P_c1fA2T# z?42EL7!~YQ9c@5F#cr1WQ^YD#6jtbGLe8YOoyQ1A-bS&FyDTbU6OoGJA{K%rWa?!J zqqDbO7x*^punEowTPqzbv<~)C!@HA}cDMF2PWzP{5e<(l6}5P2AhVOxwBiREgV_x& zqWV!I17VbtjqRSTYDyywHRNIl1JhJHLMLi13#4p>d>s@JZ&pd5}jRBLmQZP}EwH`FhZ@ zxDNSCZQFS%5^Zjy#E%C#+D`%zCYT_7{sirQ29wVM85oEbx!Pqsl-l6>{+IUj-;eL# z2m2>C)I_vGZ3P`D4d`Gc|NDde|F)6-#~1udDp7vi3dBfQ!Es!LOZ@Ut1d-bu`JO?R zX_FZG8Dht#9%(4eRN{>b$?q#6`stvv!clSiVO9R|Z|_cUs>^gDX(mz=Z+}E!x6XL* zphEi?p{z02(3aXge|vbpc?o0sWs}>`^N+UY5XGo!RFmMj5bY!V3}DioEB)zL@sda+ zx`}y_x4pMovI)*9$HzJziRfUTP*wGa`TLn#ZWQ%*xzP<_tSv3ZxmfGSuuUx0l`=UB z9Gp*{&wr6+|NTt<^Rzt1=Y85h4znC|eT)D1r)6tz%V=$AW^KqQ`{(<=dT}iO@RWav z5h)}8Mx?i)j!1;v&Qhbfhm1h4-Xmd4Ermc6Miuqp`bn_%?JV1@9Ubk99NTX~GziA9 z7=g!vNarRsC8hzkj4W1G-h+&jsRzQG?hmO$B8)D&;rWC+%8^@jKofvrq-3m$xi&Q` zib)dFY>0F!PBEMAY^?F&)ps{i=0T<}iTZ=Pu6AnQjz(k#-Dr<9f3eXY!91&A+G%;1 z$uCXN|F((9KmzFPGgLz}Dk`xyS-&{LM~ouYs+_=Y1=7I*1M<(plgui~I@tA{q|g{; zB6v^M>yy^ifoeGL&-}~i`n_9GKqAMydM;G%F_{!Q;ico~OWPxs^>@8DncUyA!b46zraHXOY-SIdC8Whjcu{z*)9{FW<{EwkWSOc#3oDKZj;hJ4{nMJAj7MUZk5uADU z9YgkO`jeRl?zg=)R{_b>u>x%^5a(Rv@j*-Hk`0^ zz?-%4=t4JTy_Cv{zm=y^suadMgQtM2(BksIWg{KXF8`V`$}@h?^alKqgH zf}kC*^htO_%>?rpKkd;2Ja{qIedWim5Li5LJ=nE9x;xDrA$pO00P_|OIi{gl z!kd^5aZ^lZtDhtSg)H4arCg!?i7x(b68|=qKhZ@I-)NQ~$XGf+r6=wGJ7cjjb+Wg0 zWRw9tAK+)pV@?$ayI+{A`i7wXt6GifFR3YlB5eOq7B7L{lbE2vy%=+>QPKjm|fna0Zc#ozB0J~w!c zht1|t%0RTgIGW1NqU9)|nazZKmu(jYPN&J(do9?4W0`1x#!ePB*{X>&=eAwG>|VUS zf5K^!UA%-i@$5mAWgq_sKWHefY`wF9e+yc+yqt+&qm!c04PUZcM)KAxz7mIBLkq|S z*biXisWM%O-ZL(4M=;+Lv!wo~|iMX#rSUpMN&tZQY?)AI4m@ye|$r{Ir$t z9Cu#nww=t<9XTR4c7fTiV<{gE^LO;{=>8Eosf z|00;7`SCMZ2Y*?FB?ToKwx1B{rs`mf96U;Qa!bl~cCS?A)hjc}MJq}#$vftUYg~mJ zL3XAd)MV_@jeUn}hI-|pT}rVW%y5^;AMGe%7Xe~s1{gArmF$^tLkV0laG{0nnr{4w z^tFxl)dz5cjG_KLeWk}60Y@Jf8#dYiG<+tJ!CJGs6-$ti-J;<;ELE2t0F93?@Kq2V z_~uy4Y0HnY^=N_zYC{pd9RrMiVElKm{u{=BZb%(W^0Rt)Ffb_!FfhUY6~>mf4mOOR zEu8G#4UKF}K|zOyr^zU88^zO<>Kq&{lx6T_p}9=eLS^uv6GFHc+o^tD;Le%nc5NHYo&wDlz^%V$ zdOIh?2R2z8_`Tizy2#8Net7GCf5^I6*Ymzu1<#eJ^<+ZB<@*t8J+PyVl=;{ee!}L{ zALQ7g-_T7>kiq8j9eQKP{j-lozZvtRH-Qf!C-jj7^EL&7Ao4{9`+EMC`mBFYIK5FC z0*)Qp#hUm5zR^t9_H2ovHA<6VyTv*=fqTR-68o!EKO&M}q&M5^KoE}2@}(+*;JiaM z@P+LZG_3@L;`2am=ktI@iclk`H-G&Wk=F>0q|<15>uMo^4cVr1tl*w%u$ zPv&+;_sCF}oQnMHDzS~Pwk1b{agmy5ASOzZJtelCMjkhHUK*&3;EWN1tH@=0UN@h< zKVfU5qJ*cvzTQ#FOy^avCyP00X?M;!#?FcnV`}DDU3X0mi-!>AR;#T_N1!+Ja}h_r zQB0e+KqO2|r_foN3?0q3em+hMU6wX=Hc`s;vv_=5liFjpSEz*=Cx{3k`3GsU|7+^cH!-Kw?;l zA)f8mM((*Lia8YW^T8LK5~1l`>Z)8bs{MGt(RmWBvGq}g!Zi_|yo5@eT;NG-A@~`r zkEgnJxDzO8V$({QP%#}7Xq%!7c1R`?AsI-U7B2IFU$8?0p&f1*i{Z37DewT&^!`1=ou37cO@A@>K7a0{>WYKf`eIy)A!y3fEHKaH)H*|Uesdv+>Uloikj7|sr> zk7ZT^%pxL12xN1UXwScbul4d}!kE^Xt&TY`mZh1)VAt^W|H@W130<@XSAs+tw@_MJ z7N`YP((r+N=-o5FP{t(!B4QO)PcO_vw2Ax#z%AKZ`0?XNdC<`AGdiAsY-+h?3Dv6P z(s2KjKR>y7@ML*iBXU|_*hPI6t`cKyiJ~s$_E~G8jml1-aH}cSSoe?z#bBbB{R-69 z4pROUPfK9w7bdidc`hGDS1O zk{=avrFpW4;dt~1>|K2DN~pNpMmEe+o1T^GBc=~qK4{Q5K<}x& zst;dWh6k3t{FIvO`5MxQ4(>0^oJiK|lIL(y zRa8cqR`(A&c7`X%7Pw)qBVb?b03OcZyfG7O0uOSyZ0@N?y!jG8(#}@vu8Dom=2{i9 z{dQU=dU7&#hlHz%*o3r{yEeeol=vT!_v|G4l$gAg#3y>BWrWDb)o++sWC7k)EOs(UzF~w6Vc>0id1U3)Yp6v;ADLLwek*6TxonX zRApk8B^D}qeVB=Qvz=xU;t)}7^Xu!_Bp=odIvdhc|BfH)TkyxnxmNx|RLbq^#SKM?SLaO1tgu3sqoUdgnt)}nb+RU!2hOH@C6*f)nXLgi zFvQ4V$5aUYq#t#?)Ay$xO(|#Go@dfF)05WiOo58onx~c~(=J_U+new<-|EB>x#JX( zHhNIj?PwGNxwv1LQI%S zOTO_d*btEv9*qM)q;&TSee@8#T*1%9R7E(<0!Za9jVnyUiBVvm#ddY<+y}Zu$f21? zMX7mX&0wZe6)R#tL~8ot-Ce(k+E21!dzADR0~4m1AU*`>AClARwcGe|`)E1wrGDwD z*FtPc{p15mRLXeJUY$Tozhw?QlF0f4&rQup5#Q{&!Q{C?F1kAV4VoejHIf=^b>grS(8%^!G ze!?uQ3o3M<>m4k-{uJ-Y;)>`XhF{AQt;v4X8LKNFS9UV07O+XuPXO1e5BfBy)=5*3 zd4m2$I(!vWO`f6!5)?pukIH0!orcj-?57%0$MoDPvQj#rTywV+diY~iC33F%0!Xw+ zGRv&m`DIJ$qAOL@uw%iHSZ8v<8YPHNZk3T_5>qEx zfrNuO`YQB{F2kBW!@3s7x^S`)!`g~|X+gW9jNU-Laumn#Na{zH_m=W(8I?WL7c2>P zM~$T<;A~SI%Mn=no5DU+w=*xIY7O}OTeMg6MrXm4aW(BV`V(IU)9l4Py4v!IA3rjn z>cM(VX;nvT=gY6id6P~j0#>K(m;U+S1z(14YxUy=sR9668o%4 z2b5ubB#kv<3cy2#QXM$uiyn7;dxzww4pq5U6Wro`?O&wyS_shZ7P{i&sDcMYs?5>T zdy$*yRFo{PK7`ZoOeq4XAbz_c3*MxwCg5pA0@XnrMPLGE?SYERwl;|ee|!syxdCmO z58<2#JT_m1T}NPjVaar{;#innys=CE&k;w~nK3?T!@7 zb+VT9OVSq?$&n5+(oB8iMHr(V#4r*To{>N3v9}TG0n+(LtY>_g>D-sa~^^=J=Yc#xP z(2DwqLGa3@y2)T)5M9Yl+#Gh!!O)3xn7);Zz?cJg|B(nqeMIT|;KCKEWk{S!U-HhM z&s-%3wW(rhjjPDFNi?fgvOL>ulk=gBWXpZm;@zw6!(Twc$*>CgnUi zHv+%1_hzL^sNnGnw&2eL=%8&S8>I-z0mZZ}Q0#Znu-yenjkudG>kUsoQ%*Uxh`FRu z@2#3Rkl&(G1FcKX8cRtq7U3E4T)%cJ7^?pcTo{^k;MrJc1U7UCX{(Ta6d5h>i7M>MqF>}NEJ)RhatIk4=hNbnMAC}ue19~yW!7QU$6H(U*Q&UFV$ z7yAC}`En+g171MFGWI>!Jvb}G-p>_q`@E7JYn$RAMO6Jd#w+vj+M*?GbO!@3Tu1BB z))2uJH@f$XkLkj|sx85?EXJ^oy&CMOH^rk=NJi`8UQJ^{ zIlre`0xpLc)RO!cj;r>>N4?}hByYLbzCOHyy3CPXyTznl8$Id(xKB}SPG0~JM!E(z z2Akn?J-hnH9)#Gn2{5mIPKV$|^%3m*qPr9Qbc_UfNiq9|s7*{TI;p|*a)^KuhUl(L z=No321H*h_PbgKjA#DuQn8yz$LpN%=vK8vYsr9+}gw<~0cvgd;P^PY0+1x0>{eo9}sKYsu4CqMdo z7WD7@=uet|o~c(F1WNJCKpgTS|8;(3YWQcA{c(sov$p%Qzie-^|vp1$A?qrXR2 zeOp|m_~cN-Ow3>z97>-)ARW%sNRJyLX2AIvdd7A}gkUsjrLm%ig0{>*PtiHu;F_U- zzQrN0O-K*f?mAD)FYpBSY|eIekPwpr>{>x5B1XjZo0&MB$av_w@wNZO_qLPueHonZ zYxj4Hei(H3tx+n0uO%io!VrWiD3B?W4ghQu^iXY7JZ0sG%y8vHScP(|AmR)k00rF& zVE1>)iS!+-a%NxftB-oGW$RNvJ6AzI3}M)I!DA}hlOuXg52YGkh$8i4L%2F$*`_B1 zBh@3ksCABMNk!iP_)TeL`}RyJy$6SBS{2tG;^l{+CHwR~1?+Xl;DXKi-^p+51pC~x z<`L!eumZz1VJ7$CDEe&cR!MQU0dFr4{8J7Zt98yW`kQIWaZDAu3Y^Y${+lKw@?ZKC zSlCQnv%Fi!kye*lveBFRXA%WQhduKTk0nS4PMJ?nfNdTy>jFwd~YK4|njaDamfl{w*G?zyEub7VslCzox(NL_YZN%5eCg#Ky6AU`ecc%jM-+_gITeyxC4gdDwd4!}ph7Zc#4+?zrb zz+CvHiJ}uzd z!RUtVnvaN=kSOJO(tcOvCNGYDpF1{zEhGNg0@ zV5^f_#b;(I71NVCa*nQuIU2%mJ$fZJ@LGllKQ0YKv!4CYHOJd+b~c{)30`u!+;`N- z$k(*Zpk-$uUaP`!7GkXHhUZz&(0TeJv82Dc#|0n1gYXzpgW%Feocfm$cru8zN?h{w@5B23t}sb&D-1t*?7aO=l1P|R^kxk|s@6?KAf+)f z<7;#$Gu9IWke@zCJQP=-cF_3jRl4nP+mMk=4cU@`T@=XI)Iku&K2pD{l=Q*mD+|p} z4a41tw59xl%7IA~!F8lE$>Ly|3W zMrfaH_71uMuWG+h>MCkU^zJyvkUpzy3Vw}oV6}!W`I#cekO4`i3YtgM3zqOxE7s;kz~N+gGs9PsQ`4>dB54*j1H6@LbKgck1ZYoLgQK36@S{2*9gLCukf-NI`c z(kVuP-DD4j;%$~E5fL=SVHf7ZG&nH-O??*3$D1*Nddc|gh35Lm$+08&=|w*9F4>${ zfi|O-07P_RLMvkZQ!3uIE{x#xQ-?C+FG(!-Ny8-T_OgwgErgCJ==K23umAwF=v}V= zr>39<8aDrZ9IF_;Kre{d;o{sP-s%hZdpk>RsM*%Nu5+cgw*48vlA@8QdkZ&T6c4ce zFuq_73*TAKJ$OoAaawwp#tte;7y%r0W_vQuk`2<~_H_dHV0H$-D>&-Toh^iNmM=

p^9{@L>yfSX|4PMy;yXv;b5MW-3+-A*tTnz>krqZ%9$Fh%_GW zZ=A?K3O28BOT8mpo;CF*?*9Uqz+GQMv@rkW@ zk8BL{DGkpmys77#(*8_ySI%9Re`_!64td79^Y1$W5etTqO zuY7dSm5&v>SDFE882Wt#12gzvuY4DKdmCp)2TNmnV;f7xKVmVU-84B%J5w@wLl1RB z8&^|jGkYfqOH&&YaSvltQxns_o(_M8O#cxOG^&hS0fYhk?q)3V6s%^aSOr%BG8hyx zUTDZ^n`UxEhVUXT7`^gE2gRy+ZC0hnaW-!NOg|wEVTUcKRQpSfz-FD^uYpXP#Z#54 z2kV%3XV>EzV7M(CBKXZDbdoKihmiN$X~ZwNS-$Nz@j~sv3L7g*R66iUX_phdo(J*)wLBEXVk^VTZp>h*?}{j(6FAhNjDQpXcbhzA)nN(|ukO_7J#BhQ8x7*?aV_ zh?rS*N6WcxVsM}BG}2)lw4KOD-y+!Be2@j^Sg-5obwT=6xebd(Va zdfdW5qK3K|ha{|YJv!65&nB#VLEKs~+Yd5JEx##K9)+k&NOBuWkh}$WB7{DuNwq=V z79j4p;85?xkVlK9F=0C)o7c9fH}U(ge(B%g@Si|o{%yKNaVR z@ukhS$&$9ew4&;^I8gfmX$3_(!Wcds6}ODG#`JSjwtBw#ctO@g?Xg^^*4G#q#^qta zk$TQxP$X;XaUx;=pcZY+Q_FNnYVe%FG$y?GwKG1qMlb64g(eM;X`-r?^EH|mT%*f5 z39Ib2^NvF_FRwk&a1K-@zUz->qW=YBVbs1#N~++t@D2|rtvCdK2WRI&g=&~yP76uN z$AjZRB145LT2z+E6!mqumdI{=amd|cpflUy!`aJj=JtKmjwNZP*a?vv$&n>vtb%9= zvBpof$zz8EexMK5i{*$QW8|qA+|H;)X~TKQk2!SIX(($enm~mBe*}=!QbEWeZ5+t{q1mVS*NYbh$xnL<+nFeUfFW$-U}0!v>H-q-v$6T-5^JZLt>S_Z zvfq7+b>8i1Sa$eDkD~*liqfYoFm7cZ7?BT2?ai24dZ{LkZ{%InE6Hv`ON%Fe7hVK4RVO7 z48H0pm1U-K$PynN(sti7;T-93)tps^%va;LGK=K$YfM4F9Gnuh@B=FZRnZRGVKzG7(^Qahp1C-BZ8Iz(tUrRgmJ z5NMptCfmuV5iPdc055EXb5#b&1Hs#$-G*9gg~Gwg5ohjnPu=X9+;Uv-^&!Vxz|oIW zCB+pHrN=KU+m%u5UCk&vswFBvf-VV*@29mEu6|yd4`LCV`J)05J6m~hd?ck)^4VK< zLYXGyqoP?d-#(s@>K2l&2DkAX=IMRlNsz9$G+`?SK|?|AL1q0@2{rW0Vze2J%>Z)%1iyXSuB6ZTo%AHAet8$a*X;I6mkIj#}XVQ4IG z8fPFhX&Bua`bHhRxq@V=67_hgh^u;0{q(FO(GACZTi4wox#1K1BUcFAK-@P`Sr2gO zKEeVdZtWNWz5yajoZ1ah0?`>}x%#6u4ITj=SAYv(rya0i+BWLTkx*49m$Y=H(hi+4 zfSgjK`5auu!f$Wb@hr+bcb1DLR#_+y{y`k}80#%1X8ye`qX8|^An@1p!6KtK{Kw#o z;OX2O+&}jHcPsw4eFOe9`4LZly@I@Z3*>*(Ec##B)#Q!3PBEk^J7%v4~IOw3`sYR1%$JPL2aB<8H3 z%)~~Y(WF_K*c{wE)l4^6n2aB!gS*bU*H#<}xmH}gi5|rAg}IW*p4Gy04MTrwyNl5W z*yLkq>*QnN5&%VV@T0vCE_k@6_SAzst9|_kM%!MZOtD_PlZ_-Np5kG^j%L?+I?!0N zINN#5)DF{BrL$3}Q)5d(nMA_1cP2yY*H*i3GnX*thZqt$gwJY8Jq<2L(uk4AhgIbt zYcUV)TMr@z`9)g-j((UZb&prdjP#Im0f$6-qTFfM5wMAWV?S5L;Fd2nxdo%dR(qj- z;qlf>)rKgtpAGz1Z|9rP3O%12GF{@v7A|q@+13--E8k=EDOMRl#0+!YD^9?b zZn?C)JGOS#!lo~auP#*!?N0UB6n0oCh&1PIeGDun@0b2rYjRe59-E)lT(C?Ta21H< zC5_+?p-K|iMHufmDpxIw6HLfXpkjKuW(pCTEh43hp26|imdhaz2lV3QIK(EO`16S~ z{UX~YKkq`%=7}y4R^W-Q@JaaGK!+uIg+k786tdwU&UyszJ|NeiNW-GR^plfEKBGwA zp`|ZO8~$KBO1F^P0VgMCt)w6_=l77p>Rc4lKEdR@CEL_nM(U#ZSWuFR++4$Ixhqmo~D+nO^#Ua*!cc|1{`E;u}%4lB5_Tn zF|uv*KNH!erY{bua}dLEc2gMHl$~UitO%dKfAdk`4w<_v$|$6pzihgkbz`%R zwyfBc^6yl4E;_Kx=F6UD4?dCpQr~5SGpT(SxHHc4%c<1VpgD;r?&~URkFL3V}IRU4avNce&fB!kbH43f({IS1pNR; zlIpS?dEr{xB1hmj!rpQ3MVdrl07@~Tmm3tUR*?<$EjUBL_tO+5H}v8wpm~yU@pLU)74UN2v#H_dm;%G+1yueP3Kp zuoE{3julf*>-&XXg}$DH<^2ZSW3I$Z(%~EkV8WfNQR|G>|2TDlTkKS{MXET>RU>D* znjEJ(S?pjXjFgtZ=#)mSrcS?{*bCx*pF3h@ec4tjykZuVpOY+Z4Am3nLuRuH=$ZS~ z#pYW)8JeG_bjM^XxoFMEUo7)^)Xo*RKcfkgUzNMuBn6$6VDWyBB3k*ZPJNIPSNkwE zKUquS3%PL|t(8+;1XY6oYf}DkBmKFYPTU4l1M5JnlZ8%L9uDsbh11j)LX;(CG&*Sq z?oh19i#ksKdhoqru@#=DyUn&-dmLry2@DbN*^*aafT_^dJZA8Hp&%o%r_IACOcBn(n4egA9d=kJE|Z$1lE^;ro-d8@R8wbPt9A zW9&#{k{|$utK3nl*$hJ~CR1c(<{G_UKYb2Vm0DC0W=s2b*Kk6hd~a-hr_kprMqH64 zkN%RR4t$>VYUd;B?)p;4BMJC^y#cH_Z~e_dDEQH&CMTaQ6!%;g+=yK2bhpDc5th_F zBIN6t17$L*F8h$V#z%B_hTuK4kO6>QGaY4OUwHpaOa+=SHy_5g9IFQFVjO*0Nj&fJ zu2V{T(Zv$up#i*oSGrWqf%q^wNG!MaTH^lA1 zz{+2%xphaEC!J)<)u3>ViUz>Ri9Pl+dw{T9v$6m>>Q^QX%q=kjK0Kr+?=Gu|@fr9j zOxO$J#}Q6t$3+XS)(MGKipxVp%0oAafnX_>w2~%lUORH zY(WllsPr@0PAWgkufG@+{{Ei-69GS6K233f5O4tc68m2fU}x&W=6{LjXQ62D?U6M%2NT1i_Q7J!BI<10AhPa$*_>W@)Ui(*MU#GEZ< zv}gqbTmH<%%$FY@l|xg$eu6_A=ifNG{q^)qP=5pLw&sf@%o_XYLe2OL9)h{wraaKS z*M`sJu!Z)DtOdhyz&E3mi-&T)XP^wdHVZaO8cGk+obT#`{bnoTJytm;je66x5|2O{ zOCr?1K1+ix`uN(ZAwz=DMB_wrhSFh~)aR-0!8*P2#H~4Y>4Cul=#+SCG;tT+oKAEk zc@j@LdPUXAx6i7X-@@y}G)=c@TanY6sP`&fC}c%EE3X?v{IRF62|1L8Aw}Q)Ik8s- zT|IA-;OSi*Sg&DxHwICbN^Ot{awB0&%K{fedAlEZIyJLHYlLALxs|F7QEzj!VFL3i;V zi&cYaD=MHUlRxVd1q`W-oRUK?dOgujU>#XqD9J3C`rzE$brISs6PB4u0s%c0;VaC$ z=yx&Q@>ejyvFm#|cu10bMuCajvw7zW{)79oZ2JvCe+Z^PZ)KMql}}I(TAfv;%W4Ru zuw5A9P*ow0T;a-*u7-GMh9(6gTR@;Rf-1aTG5PMqbsg!kEAUqzjejpfVB{-DwkdSw z57$xTo8|B89jEDKJ;q>J9Za7 zy>2v+)mPWyOyzDxBDpw{>QQxP&;>oqwi;$RyQ)ZGa}}L*Scn)>Kl9twQKvrYm&20x zFx(uAo~K&<0uyx_B)i)2AIasKN<5z1GSzArpZ=!1iBSzLx!AL94WKr#$8;=FDpy$C z8DVM>q;KG5#8(aX>`nP5itg8kOy4@44O3!a2c1+VKIwHecqn(rL-!vE9(7}m+}SxG@>HJ9vW z!GoFL-6$(N`+GZfIG*=jHGqGO_+|lH|GB2&?GirBL}2k8k#`0)j963kz~yv#=nG9{ zc-_Rggi1Rx(4#$}XGWf$S5d@W-SimKE5s2l7V;jl&6k&=1{ zpkRRG8!T`~nnyScHqE1umS&!nOS!2Pt~OH-sE#$KHp9IA9_gNnt*pgCGoGgBv1&`sf#o(N|2r9%sN*obv*xyc6Tj zL0dR3^1WvzZH4zi!1hihs6P*kg5!_p;hU4GJc@$=^!q9{)~st|F6 zFV>neq*3L-JvNs_)kldt+H%j-z5;-{sz=4IY^sV9oNP;vsx2MhIZpG5j+tH+YYj_( zQBgAeqU8$c>fdN-l?vOq!?ziH_ zeC+C)!v|LS`EodSZJFhY#==yC)OUL>##Ym%H@t;NN)I7DWo@1N5I#vkHCs{>@HaTmK$ss^s%m|ST|KzGZ|6G3(}!oXJ7O- zh#YrKxc5Ckcv=;~D387p84=&A;y$NnMyNduXWvpm?JIzvZ~6fX`s1TfnRvA>fkqRK zqCDrcBGQ*;^Can0do;MOPG&rn7Gm7Vh}HKM z7hUS(dO@uGvT#x1lJD`jj0Bg(ip-WN!uHVI&bcBqfFmZ+A(hf{%R05+^cClw80gbU zYJJ#@BoimlveG3oG7Y#^)1>%X&6Q||HzKw{H6!bK?6@2$^eM>xe5aQ{tA;{L^bhxx zirTN+VyU)+MJig0maV{4)+CRR=>C>6Ff4&5L6ZD$+Z-Ab_k_)#9Bq+L5Kz0)&@su%^b(V+DZWYH^=$itTKaURIe&M+zLJ|#f~#r-{i{=4QlivFGeos~MVARRI_ z>U;jr<%RcfhNGv1C+m*Xhyp9!79}pw6=guNRBT+Ix9j}idE=noH*v<(v}hQ)2O;disn;Fu@{+2M#l+Cr*3-;T(l`1>!_)0dx2* zDZW-d@qw?rBC7c3TesJR+#Vk?D7$MxzeD(JzL*Cs z3fS21WCLSHelx$>z|>2wyaSA?0lfrz5^=p(4wpYiHg)29!yGQ(MnKfCY|sqx&H2=6 z-Pg47hGUpiX0<`ry8?ToLV@r(;>LshnreO80v}GSzTSDVsgp$B#nuqu2e2a>%;KXO z@KX{tzF+Yl7EaEuWaDRAMpSTSSjOyFW!lD|S@|Rn@p3ieZ{Ju#v${U+h0qwXqpkk z!CEkiMydVtSlY~thQvUL35n4Aac{_91@*Rf| zVQo6>Z+y+z+IX_Oo97||_Rb-6oh!a~S>>tgYU-9N<&DMI>8|Hy^xsoe8$SZC#8|9X z+VU~fY-4C4WS0?CF<%C{^0hb~JOc3$uxY2USL=YI%d#QdcHQdE5ImOY>~j5C#)s0G zliPsy^mVgPb9#Ato9|7;N&*eNKUt|>X2%Qb&AAyw&EH~87_~W8uw85QkX(YdFd8>= z@DrfxkC=neq_;zl*bl3So^47rsOnwsVvkR_T=wxFU=fva!BzEz&tJ&mNiXV-|CT}_sZx{9 zG(6)AVASog(4G)G><`tH7-W%f_JqN)+D}%iWA8Ev4G7PvMT)S&reK_hViqZ;G?F!N zBS}AY%1Yn)36sH>9p3X_B~tcLxD z73-)7MnKfdg$Md1{51Lg8ab>Mr zK+!v*Zb5>A7p~C9fgGQ}nJLcTe$yJ#>35z=`G$`{1H$|dDE5b>G{K=IV-`|bxsK*F z&5^~7vC&6tyIb1)G0NKn{pgVeA-~Q)E42jZGaBJ>I*#we>~Ls_-mZtV`vJbW8CuKv z0$o0nSCO&pp^TwJ<;24D`dp?WMMGa|hzUSkva&x)p(|=H4@(AJ9UO04${p_*3%?rS z`v9a1N50QntBqJI?|z!(H60NaPL_@zyAhpcanavRHrV~yP1+nZfPa65OBRm>O-(Ll zIt=d74W+22TP`D0s4gxIL+W>pS|%uAVyN=PLC%9ZqAa7Zo*HW2V|SC;>=y~WN-i;U zo_tNCBt?dtqdGP6;UawfhiJt5u%1;D|9)#sYTnYhOqhHQ2uT@kva!08&V3t zl?BL-SnEZgb;vBIg;_5qyuE*|)ol2@Ur2%}Y}+djFwaN6dB`&??>g~^FB{5QEeQOf?h5Kzxi)J{9ThQ314nR2Bbd_o;|#bOZNtS8e4hp*TD`^(}Ch zPWD&=K%RKJo%&!NKemex)!5nQrdZ)S}saFgCL^TzU6?)iGmra{zjy5|ct zCM!-TOOz9}a2s?#G56|1FW+MA7VE*^ci=hCQ(ObjsnWRMMSrwGw$e4j4ur1i2LYzF>xDd z$lvb7h6%%`auJjIZVW&@&I~Z)VIDrs)h5#e zZIk-gY-9X3*e3Eb+>D|49lZ8|@zrDNRAtmKQUBc`NeYUEos1=M4c8$%6B*5yi)N-) z4-STmV{1Q1dUCA`ZNrMQ8go|PUr)Vzs!Q*HW z?LDe^1td~m+}W>m2PL)u<27sk6|T>bkLQrT`NJq7sApf$rWr%}uK1R%Be{MOy%KYO z<##H_4JnY&VEpdUhPF0Ul332zFSFvVnP#?jbDCtJ+f0O$q36KzTdBM^>Dt3(O=uc252geLCc13MM;dA&dSu zms#Q3?oOUt7k&6}mBvBuv7g8p%5nBUb!+yA0i7Ac%X?L8guY{a@dQ^J^mO!jjXWJ+ zBxG&zM+Qj65CRgGM&N$ap>M0Vm<|c!K2(@v+a1E4rpCZDc^r63Q6lFE5O@z>6fVwX_$XXCL6-h$=FI zh4V;ODJ4$0B;=b!vx|??oeX>+ne*R7Wr<~DB7x65AZ+=&7*XkYN z+qP}n6{lj`c2cozTNV4H_Wu5}_j_)>_dhqQ&GkI3t(!IGoMZISdmrEAf_iZXelnS7 zb;uu_Nh~ZmgOV1)Y7YH~C$B7T+`HgJQuI)@EMFJYu0&`JZNHQ<69FQtuA$UbmU{p( zv58y=ok;Jh-q(kEhIB zS|+~G9u~W3?`nI1WBfX*(Glie#lHsIx6cvT`Kv~`zG53IgGn?Egv2x+f?Cc4KzJ5q z7Pr6BSU-pz-PBbqqq*!EO=S0wb%bM3#mL6*1zNTcfJtCk-ih4*&)@D)AQ7 zM}w|mV>`z9MXB?6Wje+XbT~gBahLIPAwZ}r&_Y{3WSk%G{&tA{_vQD`wfF}$OE?6j z|D(><`m!?k-%&GXCvz)WNn`iF=vs36<_<*v;R#!)WNAA`hs=FRX^pDJI%L=Z7TAbR zg_|1WXI>(OSA>E_2`R7}xt2CgEGe=pwc3p_tA{A|f7w`l#r^oS z{N-Sv+XbLD5D?B_LP=*Qn2`Z`D1|J?Xs*DjhndQ17m5F=b51YC((d(xlLwBgxR3zd z4Gyh{HGyx$dS_Iv$$JJoK+c}HAJ4>X9hz`zhqI%e7>oCgi(gpLo6C*i8|1*S&57b%s&~ znQ5k`-}{HC!c@H;zqRHN9G^SH2Evg;ovC- zxr+@#Qx<_33!gwOJ&MZ=JMC$pT$spf9FaRR*88BqT*AuTX>4gNq+oi?7}U(6=FcuK4XX*$A~+3%$CMrRF$_V7l!fBvp}V1nTzE{sV&kfx&n znk#ywr~~~yB=7*NM+?yN9jqo29SvI()FtObA>H|&64Le@h``nF4L{=5o72nFD0BhG zpplz3pAehAD(ON$w`qyT@PR_Q}EJe+!vylu+#E;4doccq;{u+XLo)hi~$% z4}!as9LfK5BX7eqG%<|gMGz+ArO;c9?4{9b8n7JRs^XRMYTEjY#hL?0Fq+Vf$B$i& z=8{{W{($g~C9POgs!154LUU#e;qYSi;s;DljL)RNG}dIYs+cZ6UTXJl7lcJSJO z2zA03@$A(*?zrWf9;4Rg=q6I{+)h{g7>!!VK7ktMvQWlK$Id|~G|PJMfOJ9>UnSuC z@d-801f8KJ zjM^U8!v&$RVzo9>*$I#|By2L3cb8m6lJJw{v29GW!mO2Mvy{sY1_)8ZDvcdPGqXY{ z!2rC4+mWSmehquSIG2Z`KvK{|1otjw6wc_f#wGNDA2_6ZOLo#V-)$AV)|z9Aj9OW5 zZM=Z7bAW_fn~KzE!+nPhOvlbFbwmJ*&gk;dG5{tfI4LC0wu02U)~`MdQp3`DYUSF; zArNrBGi_UC?t8QIMFOdHI$tCi@Y1u2TGlHn*=W$T^}_<#k?k@HaI5!< zjp3r-Oy=6;6o?vk^@uL>c8IRmVJb~u!}v~!+vS+Rj%SODfj2Ik9Oz72R0nr@XN(v_ zu*wizoL(BT4TXB8Y7GwVW&ksYv=lKeO$<(cTBFsW{z}m(uhqL8b$1; z(f^zv^DX$Wc%^$iLiQ3Iylo-c*<_^^85BfQxsmpg9BjYALHSx=2SnKJaaOz+L^Rj7 z_LUP#3>tf>4vKrp4no*4Jaq+CDwmr;IuZ+3uc{2fT?<02eX8<_AD4yO_D|oY(_0-- zI_~#lp~IeMofsrBN7Y5lpj6B4i)Lw3pex@HzNKd5l(h8uJusbMdTb6T zypf!$WxRZmql50$qu)eNP|s|YOW*Re;>L3wRXN+o7^0Kl>Cy8F)cy7k-5WJ=I^;k)vC`?6Vc^gs4~~Q zDr_nqGdrvj)^+B!9DqZ_*I~98&_2@}9DQhua_d=}%(#^CNGQgwEUB>~m>-Ha2Ywtz zD-c1OON^<4y5ouPTe~c_{Y7EdTD$X^&P@^jzWwW6pp`wMPd7 zbVzZ`E0oRzoq%+hH^khEYSP4Hq_m1|*7~rA0<2H={jfL0#pZ34pu~?bUv$?&PsC2B z<+wY}c7#vK^61>Y^BG}z5 zw0`8q;rQWxx)P0)605r1P_bYxZ-=XX@KV9i7Lx55A1rtgGQ%XdhOim@y0X|7*o1LH zqIAu#;F-LJBRkB;mfB~mGW$GpbHCAEh^K zT^`xGR6|oC9TCbEX7WcOg5S(mM2f<1oe1s#&B_zA{M^^T5L~kOcgQTe0dlUt^moZu z#6{8&C0r8hi-Hoe1hjL|YTFpHU?B~kED7@Gl&PtA#Ua~DaEnrCtiCr&i@wc=?yXhr zJY3un{)}91-~i7-*?z&+fYVCtAs+Dg`T%aJ0i!t&C>MZS0y!g`&+cj0BB~$Akj{f7 zQpjrti1-d1(IR-1E60so_8qJY6HIxyGf zL0)6W)#X0|bRjY}86u}vaFJv-J{Suld6x_``BB5z9#$2@iCRNh>&N-M#uLG{6Dz(N zej6uZ5y~ynGSz!uZhJ||$X5{LT6y)II(cbH>}E@z_=UT04)<5DZ%_48|){%NLJzTh9noWR3ag)XFgI(KejTNu_N*p07o+n<3K#nO~Nmjuo-(+ zNg9Z~X85AWyl+q7D|-a2M)44u2yWPc1l6Yfp8{bKW4tqsvc07j`zZmcFIUL;&{Y{W z3!msLx+wSU7)X!s@q2S~Y=j!WmyJ zD%t-PANng1{wKZAcXawgRg`lu|I#u#5Pe}qUwD#~`PW+C>VJ4tiEB1p<2TlT3X6B)QI*9)SVy#PH+<76_$%_d^>Tn(Qui=Mka1py7er0btv?@bzb8*11|J z>JL~CTT_gj4^z5ZzTcLI2%*@Mey8?XL%G^D`zfz8-t-KlhcgJ;O#ew=QCCIZQvXVf zkwh7;Pa9r@KpA{SYZ@LN9a_iYtb@QB+^eX8YBQic2v(1{b@v2*ylUf!qr@hzw9tw| zGm`(LHbk(`>9qmz55wTWjRvOfwg`<1wAW0G|%#39Qc|)`J=6b_aUUSQ8SEBXQofYA0Tf}#S0u%XuFbLO_1b@J>tJ3 z^*>|SQ;{ft`HQI1^3{J3`2QQj`VNj?A^d*~{1nE%!WNl3F?0hXw1}2$3YBcS0R^;F zff!L(fIOKX7?oW45y{j-cHgb+CaBt=zetP<-jWB>e)uMU#26^DwVM5LeR%vUX1jpc zdZ6H7aXiTO;v(S%LnK6DK>8JAi*}6|aKOEXz#xQG zJSg@@*q3Hsglh~8(&(Qym{8ghuc?ssn>-~%0lN3~sRD$AL($!+Lxg8n;MDjGo_rJhQtsL(%zl($2UEb-AIhi^A=BfjnjdF5+q+I^aAkiW`I}!-UBkl{y2P0XK zrY#-sC1fUfbbh6sd*@EVIa%La6h^S7L8&%zg z$t3*Ks$2zL)s9qjV^E~(YR3o1o9{OZcI@;*hkx*2arEzK`6rJ42)hu9Ui%}z0D+7z ztX%NFiz8KiCquLUq0kWh^+mzi#^#Ut)&HD-s%Nf9%J83Ga+RWyl&+r|UhuiIOw`g6 zP~Z)N3L4_#kceb(xGfu2bJQm`8&(pvi;wwvc?3MC8L~dtSW`Dx2)hWeIq!*FIQAxq z383Xn%e02AkYDP2{3pOF}WCLadDALVx=hm6+|g z^8zr3wxp;oS?fF(Mq3*?3fh%`Q>Rpl-sGIU*!$LopW}Muqm^dkvP`t3hOvJ;C+V-F zb|N5)zF8Gb>K# zFQ5?YX?NM_QJ)G833rh0c%$ReO-eq=4H;8`3*9yWQaj#K`#VaI&?&nO1I&TTp#?bJ zR$lmYWoX?h?mbeT=DlqW$4I}cz-;kpkdxcCHd->BEdj(e;djXY2o(gC&6N=NL zlu$pc_8TUqTPP}0)wLvoDK(E8h@xt3g@-mq;XW{R1+2;`*8SQ3sR z`)lG_X`7ooAuBI1q#ag)vv&m>eJnVQOC6977IB8jHP=xGw_8YF=a3jSgUz|eO47BV z4~4g<@{O%#T3}c#)|EJhfZ4<=Z2^1VW)%W=$V^F_B^|bHI}8r&vZ(ao*}tn)VM-4C zuS1;o0F`5axd zMsQR>)97SMn`ImV$`jY9G|d}oVL#>yHlokvWXlyiAa!yZw9r=FACw{# z_Rrd}!@?=nL8WT#8y*|w?4!#w?pJe9t?jnS>Oi4WRo<~2RR2&Qh`#{rx7?qhYv0#C zEe)Hd-S`HK699G3W#_l5k!^DK+7jT#w0_Ja*6y>~YGw`Is2xn{1cQ?6@hDr;0XYRX z;F6o%#e<4KU4n=oWJWt@+!ny%G%axv1I=+dK>5S!S=pjG}RUkdVFyB02S)`R=;+JKYhHzh!0M_$_!ccjZ)tDnMD~p3Vw1lo8 zG&x_fG|h;elYCh1YbU;PToQ`tZ>09WBc`u=ee{e3RDpqXb*34^WZ2{y4{yZmy~<0< zIK%hRwFv=t<{^O%x?p|RmJ?!~H2^ail+i+Nw@W(~uEkUx!0{sWxb8e2q|KXxP-CUY z)kDi#mQkXGc0#BI1j{u5bBS-Hd9l6*e_(5Ekq1BD6ezhh<#t+>%%ofQCBVzQBB|v@ zd_W-Ik%xFkd}#O2C<&yT0{!rdx$;UeFejE3bklZ$5=T@R#1r|)0IA(+$0?q(bMMQ|vkLFxt*w?f7{7z%E1_~Q#+gHYP5~Sz zyz>DL_Ugx;7?|19q(zbMZTssNeI(yKw2qU@CupqVX*3TAcLnBQ{H+~kNO9M+-DbnF z0Tl(Xt!J8g#Tu+Fm43E)RzD=6idmGp;Taeql|EtkN62v`Gd3j66cgXJL2-htt0=V; z3-Z;TPsCq0#ppn^)=27E%or+qwh*rCyQ?JSfwuQ^1Li6A%w&oYNB!h$t*({rL6v|z z161A!Pufhx#hk5|w^SJ~ zvc*f8JoWF07X!^xr%uKcHyu`!FU*cKNB0h-Pl>Xy&z|0HZ@wNHX(5Y@X1IbE73j$p zGyV;#h&vh!KHfIm&7C6#d!`SW7-WGbCNYF>ZqQ^$amJ!m@l3v#?RVm(!|*v(&rB?~&*LY>;=SY5^H$i{Or+y_9_ zkxIP-Se7VjYUs`xV#LNcypH&HA)xeUs0l6Vu0APf$8t1(*Kj2FHhSYD`FJG$fYEr( zcMg$`ut2FbjD#T!bJ7BARKmAs<%5(W^LwndPHHhNg{ZKI}c&|sH_4;UXF!`2OWqMWrb_G zQ5kaeW469)92g7Ty}NUx%q=lpCi#@=zn|z(j2xa>B~|jz3`EPXl<@Mn(;Yqx@TIQ_jgxFOCobcwZBI* z#h1TF9HmLEg7NZT3j|;Z;Sw0LWbX|XnY1an)&vU^ysJfOukZ=}oqt_E8USczyr)(| z0h7Wkshmz-E}3-C4e+AhSbkKz(aU7J-}qtZSriF60OX(=j?93vfJ^l z^$HJGi)XFT(;xaArDD3sB16Tdfe|=q;ey2I)c(;r5UO;)6IV9vqu8ql?x^N z^*L7RAQxn%uygk0nN>@jK#QAtM2g%s~83q=$FV;ZFt zG-DbS6q^ZJ+{CRaN&BZh-&#M^lPsMtEIgwxqSBsFU{&oq^qQcrD_7KdT2|zGG_g>y z5)@X_w6OqU=o3|7eVr={Ito4mU4hct{d*z!&?%avAkb?4QV`?n{E86c8vWRbduseR zHB3&ks2x*S@hI=MziA!{H;wZ*jY}q7j9H}$T7{|Bq)FFeSL=i643ll@d57w6OLK{S zbt?`!BkFDNtj%}|oB0$2E}7o_vwT~Plczfd%D zb~3VcwGsT1ha2b{S}GWunmal(>6)ddids!QW$kYhTK51!R zbqe>PYs9mtQ~teiI(^_MU^?) zf}M6hn&3vq84ZKe0qPS4tJP%^47tQmCK&`dmSPkg(?MljKesL_#jDUSxC-QTHt|GF`&6RiPm&<`xFz4At=X6M9|UQr zjYTIpY&SLZ&2q|rl@s*+l;wCMTpPqyZ56 zM#{(QBHDBFK`Jq9PFsQ-LhP~CrH)&o#WBKkEsOS&Alvf|A?GkI8Mr=lu}#f3hH|K> zVe-+mk)qUOIWRYiSP3lo#gTh)f`k^$KH}ObWt~_HlnIr#a2(- zn?|j5$5YTeER8Fek@h}y9Pg&L>d~QJ;RQ1=06DITbt~%(EZituI8V)Fa|0){oDz(N zlS%6VQrPQb)D8)EWkFfwnqyv=+rslB7n`;>7&UU{XrDn2+`|R;Pat&n=wbkSPtcy# z>=at)v5M<;ZWmeFAiAbfUUywCRdPY4E>R%2`nT^7D@t^gOAVMQ-H_aoTnrjOovLri%lW`so zIebfiL=wgmCz!_k#VxHuxXkKgc}&=jn+EQc>LN^q?%yr?TUuCB(C$F_MpmTM5Dk2h z5g3%{SY{Y}=BtDMXUG0~U;eXW|8NYprs97TeC^n>ue6fszuU2YwQ7w7t-c1){*50b zE3Mgljhodbb>W&cN@$@$24`Xx?|EPwkiig(6f`?6*xw~mJ{NHyRw7BvH=4bXV!{!8 zhShNw+J%7dkQ640I|f43owelytesp|vdKvZT{&ucTs^DkJbJsos_q6z?Y{tk-b2DB zA3ytYJF$2!4XFzO!G`ck8OV$A@v7PbO-X7k<)Rp+vQ(R4pR{Z#+<^ixoVYcTv#(T< zYywtrwV|b5P`zAGbycw_Ut2H+s3oCOy6IFgbKj{tXflQl>x38Mn8~IFkx=GkBhwg8 z@g|F`^0nJ`1GC8Fq*(RAi@cb&k3?~9)3x`0^+}7f)NFj2RWUx$ac-}}kE_B_*VPnW zGT49EjBgO+AWn}tPlW8G?A3Jab*+ucqVG=2eA#Glr;6|UX zdEo}JDcfwN*`$$JI9t)9b=fhpgd(yPn83hTF&S{- z!aQr~!&!4cEvn74fW%l?WxcK4VY&^;fUyYe6=V+dgPw%W8x&Bv@ltGvh7EUb1U)&q zK-80k(Un7Z#ECC?I3%RZU)l*A%et_c!hoUki$VA8=Zaw11$)=k>B+xLVqCUM$g6Y=Vu9Jss*l#?*Of$ z8_`DsRv82o|KNDKQ>YlqojVdV!Nr@h`Z4%;w}TmU5=zH1&KvI?mMd}}dug$c+#ih; z#l(WsOUCtyFf!41Te>xogU&3qPDNNxmrsv+gCUyWlHE~d@1osVB$h8l1I49Dl!1xB z8u+{yH7>mV`)xMtJ&F z_bvT^EbU1F1mL+{MJ<{0XwxeLcW&G4KA|stibP(R0;_J?z5J-zVKQxw6CLL)Y2NY} zH=-r7&Q8e+mE`32K;ozFX{2~KI=2Yq!E?_bd}YxYpp@J(t)y*31rW-?BU;G5zwYgS z@AZF9fj^+47WP^E{8v#)#QNXNJo{TTOZ3%IartVj{4J*Z`y{wXcXv`+z#i^?Bu-=< z8-t{nQh+uehzkY=CxQhALLhPy02fEwV~a_o3-Y&;LR4CRT-7+Ma^{yuXk1Jl5Q)^Z zK3!a0yuXWGY&v?9y>NJuwe~zcxq93j%K|n@kP1=eVn2Gk^y%K3`a%~kgPXg(Zj8Sj zJPr68X!Y-Cz%H@J2cNOuW0TtSxN1M)*zBJ_X0<@@+U=UG_pNBMuMZhFJGKO_ZItfP ze7_um!!8--#=1N>_r|(Bs!8kz!ou0FiR>4|!a2MK58c4RIj9jGG?dxj_29%gIzqzo zF&a*Ed0UPtW_xVFo?5=4BF#~}>F`^e+1SL1n0IouhHQqSx^og;l?>$WZJNkcsDgBD zysh_=G}m+`67pY5_7HK_Ac$Kuai-1Da;-P?C0hP|d71aIk}vEguqKEN*m@JnpdrWV z*-}1bL2V%(%pTE`389pFYVKDdW~S-OhIo4K^u_o$`{`)*vuk2!^Nm4*3dS|~H3dRT zo30hV*ud9;aB2fDPGhct|@q2C-G7UcR_k5hUeqj7OgmOgx1Gfo31XI-5SCM zF2x17w4;_*U_tV5whA5r#nU|RK6mp27EzVKzePFZr&m2Yn=T(( zxIc|{H>@WmVdgMj1FSXA0=S1l-$6qA1K)u}-@DNSSgGN{|c|A%oz85w}Y6 zUKXiyn|K66XBl<%G@>N@CqmJFp`jQXepilIws#X6NO9haPv^oZ1OeoX#gV>IqCs{$ zG*dyBb#3iA8&0`&lR<^>va8?>KeDdvG1cX^y;)ZQ_p;||i9YI906)4p;l+uc18Krm zB4Ex4j2Gd!3Tj&wxY1QJ891}A*~)}%;8pqMCR#NziQ3F>TGGtAj6+e$m~*3yEaL<1 zv2}IE!s`M!2X#2);i|0p+K-L-OsvNH(<4}2xH7Z1i3NkHyQ0GC?eY0(IHeUSCp#Hx zEKhObsFb3J1x4S1#pO|SRp9Pa8cg=biWLs#yqv!T%xx`S|A|^fZ!|wlA(`S$KuC^W zXaqhC?JhA4acc2yF~-A=F-o7qQH$59%n=?{p%qOuw;szOqqFiWEy(a zW8IJ9RO!O0SuEdBLB}-+XK^HQF*Ll>4S=0{-5jI1&$^QCP=4`q+mpC4|E$tpS#R)Z z6~(i5m!24PmIi!{@yoUMO+ak8+l|+Z+h5w-$QSqe?c(F>v?ji}%^SlUD6WY*T5HSh z4nEf%0iQ6;aP-uZz*RE3hobcR_^Um1x!ue4Xqg)N`+mE>KZJDz>W9#$F#Ylz(&;Lh z9OA7K+Gl{VlqUqU&ubb;<4rj|=HM^Dp9C4S^km5stXOyBJCSgEt?&m!jtHojQ;gryk0?&zf+e3&ElH|=`txSs5}uVxiPPhCgO?JaoxiUl-m0u%gECpbFep}8piFmAm9AzJo_o*NfHdZv zy3Zrv;JPPtLpHJ@=zvSu8k@LIiWujK>K&$bX)&+i@Iw)1iT!K-I+~GCv5P~n8>Guk z1N~sQi6DD0kma?tAtc;s#SRZY#yh}0Q>Ha|nh=SyEVf8^wgj<;yuJ7+j}Z($CyY&o zjVCO7d;G+dd8~l+M&NuBX=F&eptUy9P^)D@T!<9CP}X>Vz?WT zmya@Or!Kqk%fY;RQr!r5Cd&uTrWyNZ0Ex?VJ^pDXG;F?-swn%?iRldy=eo;=je9fc z={xQIyW{T<)o}#hey$tWm&uRfop&uny5ZlGk<)mctYTL%vz~!>n_o+{O?H$#B@B5r zV>!8eJk``C@4_KoMk9KdJ95@kTs;- z{L_gOO-2gT8O&3p{@-O&svU(CIp;*((9gZFS#{LFNz}+msnehG;j9v&=WvGcmt1}^ zmuP(>G%ea~W4n72NwO?ABltXXaurgdtqy=HWQ@=}oMIxigP}jhD4*SkajW8!l*38#kr$W>U5xvlnK{a#8+q#mH+2*&|t7s zM&d?A!&1&sxU@2izj7>3MMi$c)jRDh}_(;{Mwj(tc=@}(~MLh=-~`bNMDm6?8v=C zm3u3x`YnuGd#`N}>w64-L7n}8eox5NWw?_J@fn$>MSmd{>^3_7KMysb*&Cx3FbbD2 zndb7DR0n^e*P3~V@#ORX$)^XIqbYlcXr+6+z?&HNWtEz0a4{ksw5Gc)B2F>iWgYb@ z6vA32IfG7xipjJNCjMZ@a|b1w^4mv`;{r-B<@*gSmJKk%_^*ekvNHDy6j>4(&~@nY zb>)U}7o1V1WQE~uEJ(vJzZ5&}Fg;l=Y`2iN>R*w#1#8zXLg%dg*0W`80{5Ge*PG(k zq!pdkI8d6u6YW1F?XTP5H*1bqgSB1|HEZv?tRZjcq?Ty*e!34iycRhJ*WD2BH+A@} zWanje@OzDE8f_l!dqz6QV2`Ygzh%aE7#zxCjlZ5lqK-6G1*>KG!0rWeT0224lw#Czw^;lT6PMNlJPtb+3wkV?hPB zWk7M~;0jb`PJenrYNXxx@mJ;W@A}}M%HdB-3cs0V^8SmKb^A4bOZ|Vv4-Ee@UZJ(K za{dzaInuhAJDPu4$~)4^{q^8~^a}h=Ulc6^XD4HozhD1dS~UJ4DF`EfO5?7W)ECOZ zt9dD)%(B22R;CmL`8ned~YX?-fVkAn99r|A9(PUg_9&8Oczdn+Vy^~?L z!Jm}mVznKhE|#Oa2v`pNzRNz$Y*u?TF3@2F;ZSn|8<}nKY!CfBD75}E@T!yw8=7+!=qL{FdkE2S5+)@nIenU z()baKCeeU}fH@^?LM4T+yOivH0ui*=T!ic`qP%nK+bMK2VBWb)bi$ycNSDhcmFnZB z34rpg2n*RfnJX*FzJfV1xhTecbY-I>^vKB@G&V%Y3@hKzqsXQ7ec?v629 z>0VIv$5*;Sg?yxB0QdVZY5*yV2=X(dX;w;yXwS6eVKlcK5f8G-w_0=hOf-vkZ&K#6doEVKESrW(7uWRMuq03_Ecu& zFKu&aG#m_Q3n{c4+s|&Z`aBf>%8$vP|}<~Ii?V|bk7L0#PAFIF1MTNgI8~C zlqjRmK4~C_xSsZEMPz&ou>9*)Bi2N$nM+2)NisL6AWZ;*31g#1cFBZqjvey>I%D(~ zRbnu{4h6bP_KuvB;pIYoW#la1A$6y{AgoGa+R!q^JO#>`hk9|}7h>jVw?{V`gmB`X z{cZHwz$a+5k=VI_w5iIDyt$Xk!O)Z0C~;_ZgtBplEC>l*O$&M$p?jJ*-+yN) z5#(_Armq2~kNGtySQL6{hb(&-cw&?(#4hUt;>*beUPh;!L%~sjPj(Oeiha4}c*cb~&b|6u6A{k@>xd?xxe_|IK$T`_${1953*q-?;CZXpno6Kq`*{`J; z>6cJ=e5f-1Du*ts_t&c z2k4*Dbt@}YA%p+~^6|nwL0aWu8iJ4{0Q3pKQpmuKE_IwM&}rip_4Pr?28|1gt7Vm} zixy|W5z740;SCQp%9fV4o-3=bbr-zv<#2GZ504Y$I{J$4e6R3_?VGQUU0aWr<+i+^ zfPN@Xs%WO$6zI4x`OvD$1^`v4IhGVR^j=&+mi;ZTIp8~q_*%G!i^Y8{06D10IS_{I zHWhu+Ev=9_gGU2LsOZg*0c(9Fy%)-A0h~tb=p^^r3@)McxT?YStUR zUI$(x8M=tbuD(Zt4eSIm;2=tn@djiBPlgIE6UyK~?8$Sf1b4b|MQM1cpL64z$U@p? zL+a8Ei4oYzU>CAgRw} znq8L_PgT~lsZQTl?{F&)il3tlQ*R>az?nso*9|5$%WrR?OPpWDRBhD>F(}I?rs5Qw zTXR-)RS{2JvTLa`&L9GAt7svyT9B@!<>n|^`Cb+nLPB6TsAQOEab|E~3!15)mFR}HVRn|tH+q9El4y||rtUN((PlewhBDtDw$4HY~#cR#+Qqm+Yd(u$X&qOWi z>?Eltr`eNrgn&5j=9Q0unahk=K*W!0*Fr?mRj%v~I9h5+=2tbw08LH8)RK}yDvAj0 z!62%onXZC`JeU;sJc=RdkR)Y*J|%8OZY?7Ys=pf*bhv*jB;Z?W#a6VA6qbHUW~_Uc zJ%;KoJ>bAYH?ROR23ua0Tk3hG>OB$VjxeRJxQQ3QRSb{(_=4EJ&{Z=jrCLQ{DoaeH z-elrgK|gV+pcrMeJU`^XVFFv^+<(I2h`F}4v0^}dapiy8_f8x-LY-FB{2L`+j+dEi z?$B(Z#DuhAQYt4yn3Pqjw^_+*Oq5B4vEX7G6hvIjxq=-_232WfM%VGV0^1FjZ+nhr z=Q-q4w5}U&5o%lDg1+B3wGT*THOBnt^fF)ZPND(w0J5zo@w5Z~sI*j{qe72)Qhpj@ z$WWk{DEp|hsj1sn&{tE4OA%qXE(&~DiKBFdoVsd|Fc2Nb9D(^!NGPERWln*7Eauo` zTnvg}BdUd_5&VaSF_zplN=5wi5;qgK>-ww$!lmdCl_wFyKvq<;O$-rCbRm|wdHNVf zS-SZ`7}1G#Mi5j8Ht7oL1Zdqtq-8mH?f1EZO3pl-NZgf%i&JZC7m?^e?O;tH^f`G~ zvL}i!-XAlF?l3EIW_Ufa7ZUC0Q%ZpC9&r~oq|Oi}WLKc7JB;)M8psxk)mFbHWLGS% zm>Dl>3(5dJ(N0SrGJ|MCOKeUQF2xgqPsKJVn$opmM<47J+AAak6d69|FDor=h)RKg zfTgb%c;TRWFpqz}#b6Nt~qQC&$LvKPG6{Gf0;!9Azz0@6_fdhGc+%8j(bHDw3> z-V&rwAgl44O7GRRCx|aRz&qhb!S>WsWI*?>FhsG(F2RrUb?3BS3JW#N%-Q-8M2S)Y z!+Fbx;2FA-c>Tcv-8)x^DcJUKRD0AQpFO;hew%bH(X`(wscDPWW>N)Hv@_w;lJcW} zM=V(3jNe`YY(&@;FvHdhD~h_ePmtGAYv|Q7EN_6gF)OP7%+*wSpEaLxzPNUXqs^!& z<}e@l#iV_vQq6vbbBZQ4^GL3g9Z0jVuE32*i_3jvXDvS#2NQI>8@iyB)6{Rj^-!7D zZ2#S{{w}!8E%c<6XY9th%Aq2FwIh{qsVAjAE#6LoykC->?a1sbPgjx-NoY!5IC|r9 zDjjV?W6ti5T3v$#IBZ;2$?m4RwsM-@#^s;!MIRHg!8uk#Sw3lxEeMkx zk<(S*u!}{5$u%9YC-Fw|8P3(0EFaZnkJ-WizGV+xF^u;)j1Qiu4QFY@q95gA+L>lm z(I>Ovo{?*mEK6a8?*+VrFaFvC53l`FqGOGb$R(>POXBj62{yR13{Dg`lFsVn%G?0w zf^}lOY9(Vn@&0;`#-g<6pRAAWT0I?tAZtfhZpLNA7^Ziums8f+R)#Z*fRdlKVmMe( z%HM)n_LHOyCVLkcDj!ew;T(2|p^i>WCC)82N31749}Ot1jl|}IMcM#z3Yf?y-@_Ql$xIq;sIU36kY@T^lz_os znC4_8QH`osxS=wys&CjSKDG5HjX6})JP6dvL&q&B0M76%;L8h^H_Qon3yoOxpjI_& zXHb0_Wihfj2f^ffNwqnAc9WDrS`Y*sNCu#pmHx^hV+EY!Q)jxnH_YveM#_vc8~PIC zmy@X6` z7on(aoXq|k!!O%>^$_y@-7S2f)K4(^E0jL|1}uSO)*B?65hDYj^TNo6baG*4x^x|r z0WNrt3~%rzrdRO!hsLP6p+OcsN7yhie7zpvRZ|j&7X%L{IgBSVl5W^ghz# zmqeOxl)q||9`z%3pyT$W*nn#S7~0gy%pXM<*5UiJDqR46g)Haej?Kg#9CJF{af;Cj zcmYySz~cWR>x!;7GFsO&{RkX<);yFTXlGO%q_%1N-Nxp3P|-P;gWA}%Yd(MF7|E)*-fKWXY8hyXRC<}vI``SQnuUh)4LBG9)o|I%`O`LuqS|JZyn zg7m*+T#mF~CI{w5a<&dme}e;A3evJ`eDL0wJkUv3vkDaW&|vd8J>PA(g$KmM#KWU7 zVKZ4w=rFBa^6xRiyNCR7r*W0(p{)Dx6^LOs)3P29Cyw2HKi$0m?EW^FR9~0RvsSNb#m|OL=;PS!UoT@oKS__LaIgKX{F+pG zBSV37sN1P|XltRJ9OWy1r5l~hd4)nV^x7$ps+NQ1JcBFOTi98;DXr6!>&F+^jqX!u zprVKB=#_D_CKVi(3nGK5Hh?%x7{Y6(Wikq>k7B6?cfyPj1Y;GlN7y7#+EZ-$r(XH@ z-~FF~&}`*Ff&CQ(BVTxt*8goFeEs`>Mh(y^x!e6ScEFKH&`jTf-@)Pk;p`oQB;m5I z(XwsZwr$(Cv+S;}>auOyw$WwVc6HgV>i+7PnTUDj{qDUn?~Ta(k&&4{GS52uoY-rx zwT!()|3?&o>c7NMTuuii04rjp?e9tnXf_z;{yOR~7*bNm;zbci`tp;za)(ic^{R7* zz~K%*;HBtZfc_Flg^MKC2`2?#r?1 z1ldnRX>8kBfTj_n*aYnHWQo*VN6tgBZ8^5b)k=bIaFcS}xTdRbszcZ-#+|euK`7aj z*FJNKW<@5r>LDVk5D}E1@+@6B^jx96TY^srat9V{vpt?P(Yv&X-WO>-aFvXZH1Yg% z3H3!T<+SMJeE7+Gdpq)XB;q!<)Z2w2krGZ6r?Bw=jym=qz@{li(&I>;Ms znqttHcAJ(~pSh-%RPwgdH!nNi;s<-ZMkEF10G_f~$B9;an5XK}j2RvXy^-wRh1|0n zMI)KyWX59{RwpPd{d$+QtCl)uyKz&c(}-!5x_A^w49F}lNQL{7LD;ApzXK*q%lBig zoxIYRXgDg(t9~S(iMhm^gd79skBzT{QSwgR|DHs8MV=vlqq|EQGf=p%HDVvCY?II` zSan<93UfkjHQ5{{@xs5;X$u5L^Zkdd^xwhwpD-oy`B+8zg6Y&3O#jy{&HopeiaEG_ z$*uk`jLJKF=}y0Ia5I%06|mRAXB$HOfGMYu0=1qi~T{@ z19IAhyg?M&uO+g`7Ro&Qfpiq-m9zG|JsESrC@An9qR#&t!JXElBWf!jmzGQY)qYGQ zjHt0JO}ZWHA`oU34-V1vBbKMnrnh6HtKu00=0t` zI}!zQNdAK!wJ{EItf_F2raV9-_u0#l>O(3tUoC$qx`xn-l&TCA`|XpeIB~UPd2~nc zj4*T97FC}EdlNa)xO@KM4)~c=VY+%yDRAm6d|pWw1!JRA&gsuZ-O6bM5pluugFMk& z_#%zFvN=_YS(#@7j*gUvjw6ibPDamY3w}|tDr%VJd{0F2t@&0fOh|HSxr~`&lR2Gq zOJS0NCkM~KKyT)Sc*x?ia+f4L?0__u1!zu~QYL9gdp)s?BlCHIh6p|^c~brEK7;7F z;0Gqwcw(fb=f`!lRqaSm@6NkctD&tUB%jRCHn8Xc8bg@+o5Fn_`vPPZX_2}LoysvP zOTW)0=qj&wn!jXy9D45_+|YcS5SQZU#hK(6Dp{YZej~FwP!8^}-rmJAp=^|j)A=WR zj2`1Y8)mv|B%7!JyWq&lY8$ysVrb>bZ0)Qq(G zH>y3Bo$YcQD}6x!RXzU>zJJ5=uSvZn9nKYwFIXCXiT|Yj|5i_NdpE%UKw)*#KTsI5 zBR`MTSt6gApaN4Itb_u2CfgoIg#s@u5;01wejVeK9j(WECkghcPIOC-@Ru==35RfmnMkpAkZNI}0LMgwz4MJN)eu$J$L%E-0V5~P6Th!RgR&z;z6<5@$ zCVqi~)r@u@!>SitjM$@0WMl8A5SmOWV>CQvL&pi6;ymG^;U+QOEM^WQ^jstLx|Bw~ zpD;w_XhQ8i&#NukY2s9zdee-N&Lt_!wRO@EPxs0w$hXlw2I`AKp+c3cX!!Y|!N{dZ zSQp*K_9g6B2rt(V=+;a}^Gi^cX2#K;Ok?pqAuj~V8Ald-6Uv|EiG18YhvIaDEt@Pj z{j^isRI-c5buABRi&>)zONJB+T7)zZOMOL?TXb6T~O80{%n2du0rJ33)7Z`Y$ElRPg)jExd1|aIH1y+maI4>HGw3KUGq(@hWlk zW~oE(rJNMkb*FMHJ_7$P`ZmAW05@{}3}~(WHQ!?F?LRd1`SS`lyYIf5sG+*kh;}mu4s0{7(A7@ob9Ufu(`JRrxbkH0Fdq;(H-3c=ciQ?XeFJ z8q;u;g3z;JAZ8jNCjLZH1XxN;K++Pvlwq=)u0V3UW34`VY0iImK(b{ zzO;iJR5k~K%(B&u7-zyUX^zx|6<4LP{s6%L^t~Q;4YblSl*6N@vj&rVj+wYJ6!eG^ zfQn=NUL~72RgmD~yXqiK! zwVQ5nHy;m~3(Z6Yp5#pt&aycTSWG%g!`q|=%N{T}s(>uU*2ZSbB-O-*7@8AIA_#0~ zMtCQ~!uhutGjOe4lB?YsmYd?f!_1y`(gAw+fRNeF-;e=X2ry2^t@^jQ{!!% zr)AMLh+p0shOCbhH^z(s+oSpv=tZyV2!pj_PaAqml5lN5@EA-Y9EQ}O&9f-@V?1sc z8p8d1sh6at)(O)##gF%jEk|K4h@M?BUsv?<^*7SK8_bxWzdHA1yKY-XIw4Gy-M7oH z4>yw?;&_}7az{TaDFN@pO;cbq-3rh{<=E_t)?oWIK{6+2l^&YPOcUvP3-^J;W3uTj z-as3Iq24043Kom_OVSjn|CYsOVgJn-oJO23@64TAB~hSX;+mta3uW!aY_=-9WAaM= z*Xi{4ef{qp|JUhs5m+*O{uM9o#|Q)@_}}jMuaoHCIUEwkf5nUcD;ls_8`>vnsacS+ z(I;_C5(*kD018-H1VaR=8UjpIipaPjO>QoJgR7nFmvP;@MZJx%I$-~IJ%eUmH$CE-?l0b>sgLY>;)o<(cs4TA5 z?bIB((&j~4P?I_&Z@)bW-+!Wl$!XIyB+q`~ zIUlHg_EJ}QayY8e*h1e|<1O*C*%e(ygbw~ujDJ4nlf zW7gL@;Ft3jr7{z<3GA_23}dl=6!4?NTbpRAYbkE;F;wsEYmd@z<>Jvm#O*!8STK&)*ChC4VYGy&1A z_Nbl~&LCcilk`tPr2Jpf<=oztGPsa$-hItJn%7kiKrAFk#3Q;ZSK!$lZy~U0&Ya6j zE3Td@6m$|T%gxOPLYRg*X}Za2psme08BbqPAt^X@4c*=DF8ZqY3v@0m&BLAC+^HKN zMI4S%r!6?1ljw45TjNl`%u+e!N1k*@RS#eV%uH!p1izqPO>UtcHrOn@E^omfLP;Tf zMYjBN#&sUUC4K6JxXjXhrg-Xe+lf!XZA*j^E24%y#7zCQ@R$~`6K7#U20Hh@@5^2m zTIHEMH!a#DZ$w8#n10?$4MGk5INCuEe*EaHTdH3>2LL>7DgDVsF%8GqMlfR^MY2fPj85{`78bO3Fz$7!d~K~cvqSNIZx=Nrgu zWHSA}hK`ktC`hXrO(Wi*bpVA}WLu@Z{gFd%@`=*o3p!9^7D{rebB24|?+uc!SQ{Im ztjpP}(BFS@X%v(|=%DX{_fV}8KIkLF<|aGG$PhS7AR&a&e~))0EYfxQXq4+%wGcD8 zxkLETw<6!VQ~8S+{qiZ;hu@?ugW6@wECI-AN(UV``b{~pR&lu>8Efg62#a(phFJ?8 zhZ{!F=(xfweGcLc;P}GEp>Z!x}z-`!08e6rQNN|*< zpVaT+Qdf3V7L#Or0KDo^KeoDv+%}ke9#9&4+BmK1P$&vKzUXKxF5h8BsMIApAT5)D zbm5Y)dVYAgg7PA9lSf=%hu>u$R8uiJs(S|WJlH%S0$c2lQ(MpqWC1lQemqb>y;+nl z5tp5lwv)uq5UX~mjBp~)1!di(eA(dw%ZO>8rJAQ9)5rK5dzX|kD(;*HL6k=defWN` z5v~wP*H~+!ph>uxhRhaYSMi4p{5XYa5@aaNWl)X#eEUg8nM?DwH@_=SjP_l~cexu)fqd?kx#g3D-^+>4*pp8DW# z<=wBmdN%4|$eDjBWGMD$^qkjTwvXaPKVARc(_~aC%kXtx&{y`)-*d!F*Y9l_( z+cEsfBRC0}KAmAR0GHdnKfW*2#Dx}v{w^|v&6$ijg5IldaqSOba3WeTK{y*(0C(fH zUe@w~Jb=kcG=kM+gB(qmkLi>u2<*=JQUL5H;XWu2!A7v?6&9)tB@vsl9@msK9UGA@ z;p!VjC<%f)V%+DgONHQJ%F9r%8dF+K?fVI)8e`oQkw%Q^TMEs5OOtJYZ0MVSc>aLX z%^>LT>jB|YqSUW&=j;RRQ{kZ0%~v8RsSu2L0>8$aN062vv)ZB<`&OmlIlXo zu%z2>;y+R+C$A$of5c95?_d+(MsFuz=i8?l?_^1~CU|=LYsY^z50-04{~%ToR)>x! zgx|4W`{c>;?FT8i#pUT86I^&b`GAe~E5EOOp)W~*CTL!Viz4k&k~3&cQ>aqA2!jkz zqT+yiPigb0}D)o)r^uNBf7SX z+18TVj=8uKuU248kvk$h-j9{AwzCZgA-)^}bMr>C7h1Y2XGu+9@9vJjDL%$kf?>ah z2jXUPY4wj(8peP!_h^uCZ@Tebl-gRxkiWa5c5pZ&eXdd_XR6NnRZe_Qo7J&QZLTd_ zH*bxd(G^9%pCyOeT7h7=)u4+S>*!o93(`2hPI50lO#rWFZ*Y$Tl*9&wenRkC2!eE6 zOkC7$HaX44$T{-Gk}SlbN~Bu$85lNcZ<$^YKT7u&Q|x?qPVCZ+6$H0_N14gDH$>}B z+}UhsGTV%i*T&vcG73lYsbT%t_E&^a7x(lA+@ zKhsJi(^w`mF^-ZZ8!g;}YU=7Tvn$L>k7G*3M7%`s0Pk43uS!Qri4vWe_2fMuW);HI zACBRg?`uGvkHgbuar)50q)xWC2#S(Ly?&+NN(_~sFVwq>GVb;^U9GYoLLrftV2j{D zm7fg#eh+psp_m6PefX6GIe-CMs?hJ=uZ=&tPU%Rk^u-u&rR>S8AEk9m)BO-IpA0`J zBrPv>DZRaDZW{M~=|57}PsbhE@+x)WUkbL%jQ3QR2583hHjtOiBNpE5{(E+x5 zPRLR>-r)qhHg?VuN4Z=~LeO3p&m9_?PSW9xY=mi~6PFWb9ZDh_NHH|@PLk;qS7yZ? zJr)<|!NcN@5cQmoY80t_jE^Nl<}y9)_x*p`RnD3vMO{g2Yq8?!m}1ORM|4{Tl#F0T zvzIp!`yB{NTjR+CVMCK8EmEObBuABY+`Oc(uA27s;^UrkxZ0V}d{eTt~is zQ+IJ*2Kx=LR}7CZvn=4^=`lyLtoKCor^^+~M~an;qO?O{F{-U+EWutB6>}*Ib61W_ za|azS(Cf=b;f#HK)FB{_$MWhYM_&17ZmL zl1S}{KUGSrx@*ywE90*V{ADZD6M=J74|1~v(-X4kY(C`K(q*>GYq-t4_)JUfX$bBE zfcapb{aK84ATp`1$hrG0Aq0Qe7iMLDO5}73W$qReSM3sa5qRhsl!Zup=&;L~YWD)5 z5R^qPTJ&xF z&IQuSLiH8dIXMMUc^hi#Y;uOMDBw5(I3xOxOT}eF@2G%Wuv{Qp>pJm)m)wBbpxPy! zGs1#T$wrxu1SKUgEta+-$$GPLlY^bz#5Fim*;ruUIvjf1&C{)Aj0t zcnq-)k60-NcgSfITf}_=TB^EjvG_Vt@&)gc!YLBHpqS1YQZhjS3%L&Wg1~s?v;vU$ zn&P-LI;8awllnT*bA<1&YZk0C9hwjZKly7B)9bHx&q@tjSE$19wfmi- zkz1Xqdq?>S#~y4BJm`AEloFKm&NW^Xog|Sn20YdjYRA30JNuhJe^2ZY$GORNh1?3C z1G)I%z>DvjQRO;d(DKIShcO7eiL<%!%|=A_2Ez09Y|norJ1QY^CgbO`*LkVC45>Dq zag3L9$yH`N&Dk+OoH{Npfw~SeWm|)ufKRc!*0W6J6n9m9P@R&xx>E*Jb(D7zT2AJv zyF#d0tCk3=*58sAr`f$R=jD{Q-$STvG$d99=ZpwZF3T>l!n(?hi0QwNTLW5a+e{7YdbL>dWy&E zqt0ZhM4-j-*@Fav^vQbs8@%zl57sYG>P3@0i^>Y)E-EaEylIbCk=7T3X2$eL*McCS z+46=zPi)#In64w4Jy$(Sz>?X!bm$j}vFjF7wdPvBP`#Hu_GH?)HG&Cq_JRlVv*hG& zf{Ndu3ZJS83+X9$!3*Nj3Yh*2yz~mNiMBIjD_0{KLoSWKcJ^PPCLNP}t^W6spFJ8ZQc}_YPcp0^iqMbNC~&L^zv1U z@QvQCquPY)*q4!&fh_y&?(FC{giKR~RUp6gMDmV2PEAkSfH-^Xd!=aOMT{5J2Bu>W zqoO0h+Li^=29oRuj_#t)f{8{Hw=L!ychNk!Zy+Hk*<-~1RxGo|@`m0Geg>K3qrDa! zG15v;@CVd|VJupjAo4;oxY4<&ImDM~!xJ}ow-Fp2o82pnPlYFT){f~K?4GKB9oZSf z`V%^k-?<%QsXIpD*qbMqGe5|_gvLJ4#=hvWE11JEGNBe8PyOJJ z;H;nsZYhzEFT6Hhom76p8ubT-xxL)@W?EAFT!Oa5pP(XB&3WF@lmTN>_nZ{!=HoO;2Zei1yi3IuWq^`oH zTqdRL{8E@tvD0JMEy5jTz3o+cRSuYt<#_p#!Mh`s_zf;WEgl%$5T~ejF2;V%pwdr7 zmvIIY4uvG&dK-ph(EgY#KI%O3Bl6pZ`J^~5jWP~y-6RrZjCJ2U1AUlLevnGxa*Mg) zQ6N6gdEw;)@QRT}%3_~qle;vji*U#2Gna_~e+-I$vBow1fzqE0T={@DxXJ@4rE;H% zUVKn~VoDGUCSZ%Z^~tL(Rwnegp?|hEGB9w0dS}3OF5|QLKT0YC zDX(bkmL0Is@Th(4Nus077Zf}?xMpD4=8rv!>g*!&1PB9;*LvdzrTxYx%=2CuO&+G= z9$#aJKE-L({Y#Fpu@C5=13MQ3S2Tac|D4#7snby<-)1iBeaw$FkR_{VTg}HA0W+qB zo9mU_vUFs6j5#BniiY!n7?G98Fw_E7ndSqbDnb|;iRdO` zl+eks9&V3IQQ*QI$X-$Z8P1NA^gkf4j|y-GyvF@3t0*zTaxy17J26xg>zYv%xr^!; zKiMOWE#CIXl9*2bgfMG<*%(*SywL^5)?3NsQlhokDvMpkwQdBM5$d5sA_yM%%5o7G z&+0yQ_@2GcU_8veDsbA}8r<#cr2jlLF6&|K()Q+R>GF{qYJ+8}dIU1UxUd&W!eJN&OUvlNW6J4TssgcsDuqF+)Bk#*7uchl zT-e%LVdCFBvC;O>wqD?^(DZo1c^vkCE?4%5{dNAngzw7v5{s0XCzPOoTO1ix(b!?_uvmG_ zl*0Vb;UC4~@1XflIQ_8p-p~Ik5?5bOq5rm6{6`aB?#p!PuZ;A6;wL(W8Kz$dP3&YO zO^nu7F)w!wRt_>mJ7}3F6sW`T1-LcAZ?>C_cYok^??dms30g|G*pQ&(E-mJs4?8XIElai z=zsqmf3c9jZoUOwU%Siv%iBitzx_K*+^p@)%$*sn0giTz|1zig7c==aV+3$?us64N z{f}gwA+;&{bs?nR7*r54G9oB%xev3VAON2|2oaew8gY?NWc4BfOsz?hMq2=Y%ph-k z;&4{A81D|qD|@pr3LZ}>Ttr1P*?fjmkoV1kk2iJY1QV!Yb!yiOfx4^iX1<>mwibKd zt-NT*28FTi!Cx9doO`g7$h(zL_lDJ0)Cs$rW^nh%C)5HI`e@>o6~ab_D&_(G@f&%cA9Q zl3<)5);c2P`;e6)mf!p$sUmIu2e&bVEym0Z_pt?%(~zXHvLBoO-dtKIFt=TJd z{;mWdJdrh*7!nM|QUpJmLXu9axsAT|z9aQPLLY8tRfuI2dc$Cx#}_?ldgu>Ty$5X$ zs|z4$O4cOK0{t4NpOp+<%kT_c)9{i9k1*SP zoNC*@`ZG6ohcnxE=r=tpVI2-sS~hcH4TmooK45k>_xgF;yC#A?T)bjouaEA&z8yPJ zdvx&m;wJG4(c3~w_?3n8dM97<92bDtxy#I{7qp{tgN*6B0k3*%fhjQVz&ET=oe7&z~FXXcx{p}Xp_cq;UGj!%|;pFA#bK4W& z%2VepxKF%;;r{xB-nU@eTIWmlt2>^Ro|$IOwkOb<&p2Db{q;<}Z;`eRv@bERev{*G z(5jxPxI1nKino?NuiW>)4Fq~(dzEfd?X~=SRc==7Kj43B{M>0bW;dAG@||f$Y}+7A zyCZCWqQv~2KGAz~RLk%&8|^m`tM}r8>3b1yqW^-3`8)CPi4n8wFrZuSlXKuRbm_y- z=QYUT&&0LgcSyf;kVQ-osk_J7J%(t*CpZG{#wEV*X@c!a3K8CG` zQICNk5p^+tTn6;u2rB1+BR!1HJsIT!s90Gzmw_dbqY203XHfAd$8Z(SO(K~WmITI! zVJgl|8i{*zIKyEYlPuhp`@~!Ow!jH!`!-oQHL-Nul|4!OwordWmx1qczigC8F{J?s zx^ft*oBNK;$zHj`AjzFWu6ycY;3D?l7Xms;G{6)GuzTox&hi)+4Yp7s!9*?_kzs5G z@~tK@BdTw}JK2J&I*uWNE~L2dMAH_KVwyDHdA|Ra*KuRo+*Y`Dglw@8dNq!7K8W1uQG9V85 zCnbetqu>hXR;Y)H*TN}$gXX9=PkmS;wR>7Pf-ol_1NeS;Oc7^p6XL{(=5CxuA{l2O zMomLC2lf&5_xr1+9~=pLAGm06xG+n-aa{gM@eNZmmAetOf|Z4crwzI^6e6AiZtE80 zKu63K<${n8oWSbOHk4DIif=0?yr55dokBto`OLdr6ja640fsDi!$@cItyjwpDg9mU zYX#1x?x)+!O}a1}qVyRZIF8wmZzv@Uxesh%@<;sc2OHnx3}}c(pTB1xiw-Md``g?O zBjadaCJD{^36v;fEjP|F}6gCV~a+x=%(I@;;oNPm-3rj@F!*ap_(NB!BlC#1pd z+a(x+w{l7ja(;F&Q-6q|M~dM&8$pLxEa@&R#B|Bt;1ZN73#$!+2u3oDL2(!j_)dN? zHMN3`9(BVG@=&onE{njVhV=+^amOvSEOs?V1}dQta#sQdknWXcT z$yz}-kYVIw&aAV?VoRR<@ug8f*`kg&*qL#X;q{s2uevih4u2PO|tLY55bKuca2KrT~@ef1y}Pjk@KjK?jSqY*|sTHEa&gDLRwN4 z(E`WjUO)Q?)sllk$6FRi+@GMGl!719Qt%XqkTVcDBrnKQCAGX~sZDCh2C$cLKU;>Q z!m_(b5IW)l(G*xrxTZ1#8Ny`TEo3z{5MuNYgb=6G1uJ6>tyz6ht+N%eM>q40RVibT zusVW`A`G73nhiqKR8R0a4rhctYVp0d;LACxOYaj@(PE0RQ znCRn62V+%B-z7?hwFC$fDe3l zA@Sg?%T;c>Uvcxh{kCJsu_dq5)GcH*YXst?HUDTA!xm&3${Q@cm^f0x%6%v&GS1!@rpiCi)cr+mJ!gT!)mxZV;Y}WHv#jTp zApMIO4Pd_GA6+|o%fjXAYY^2{tSH+kRtxK4gic@HqF3MygV0ctPtvL>oU_q1$1I(Vh}$=Sv&_L9wUR{ojkCyv{w8{V zM@_c2>MHpSEGTQhAwo%Ic^g`4rAZD~IQh879<`?qI{OWqm-)Pta!^E|qg~L!J1(_4 zv*F_WX2OLYO&44(Re=mTtXMV;Mud0-mp1yNNj*tQS%ENH#SIN#K?DUy)c2bznv5Y8 z@vMRf^8)eUlNaqut(yMlww3_f85aQg^Nu2Wl+z`+r!snJggQ;vprU3ZJIzI~r5c}V zmPEM!z>09tz_}=z8z>;A1ov|B!#^5$%VMP>4Y8Ki1V6Ig0KF78H)6msfrO*1e};jh z9WnP@ZH|I1FapM?x zPIw)O82PyIhUJjDAW>~{xcXP={A(suu5@d*(8@wYK@sY&3NBT#7Zi0T76oN-IoEQN z$kmE{wXBke#xT_SXhzFM%xuxkd`w!ks{QE`7LVvaZ!28kq~!8_KBpcM1}60MmmwK+ z%>80$_pu6l632H zbE4w}W82_I$0MQ1Aum-UA&6gX50(Tnw(B*iLVRP%#NEfaEMp zex80LZ6ab$ns(1;C|htiz4T%f*!MS^pbTJ#3Ka3~h<9s-h$5`R?Q13??!CoNs?um>d z>nVcL4B;M?ur}U|pK>|$3<~GEdSpG6X6`x$zD^NKU0+co`)u(|+x7gsG&8j-LKUU7 z(aJKKw*AXPRj|$4Bj1CUx3^UTQ}c3Zq64%$xn>e?!4;y`v9VdlT4bv%xYg!$h9}G8JCd0X5O?_8Xb!Vwqw5 zZzT_9oAi8Xqa+hTYDyB~AvKAjZ@{%B0cgNw6 z0+j>1me5b&fJn8?zpJwZ>cvZ3xerdY3VNlU^Fg5W>`m(~0?axK9~|9~T3QAf;UOYT z-kfp)5&I+A`<-b`AZsIZV?%QENyVPAxivQFvas!YQup^JJHmlW(~C<}^LH+L!qV18 zmWE=M3@Nc6>aLuK5k~A=)&9427!*HwZu-5s5EMdRcLOa}g%m$$5dcWQ@C-kq9nrV8 z5HfcKpyIZ&gb%v4X&U7;WAo)|PFr?^arf|Fn9Facf(#tAyL)UO-=H78Q*|PN5RpVh zz6Qf@Sl6N<|C|ioe7orpAeogWN4-~zYoPTQ@B|b6Em^JXp-T7z2~Bi$xM;*=9<-Ne zKwSHs{A1jxL9OSgKJC!5w}c}*a!2XU^KL5yrffLLv->wMps-|Urw2W0Zi;xf413r$ zc{V@EnFEazjvLpc9oZzrEG3z2rIupxS5b&0L75~$?))fc5pF^H@m$ut5AlMJC1~?D z)bSx}Wr4{bcbwsO%DKulQjvGha8!h{Nq$`UQ7$6w9Q5OYU!RsO_}CE2w+^8r%u5j- zUG*3c3zA@YWeK`uN~Q@Vo~o@WsjyEwOrM7jbvTi>KBJjwBB0voJm}+vzBqLeqCT8` zq;L+;%tx{JH{Ijl^5@%dO=LN{C3Hq`Pt%FK)iL?_gMwAdj^(G>V)h*d9L7iGclZ&* zpJIdD{y%WaJW$EhF~_H~x_jvcYw!lAor8XyYDF(s*-R)`4X;;Lk;!v6>2L;myh7~8 zrZ!FbnTtQVXl?75a%HX(&!?_J#t&~hW-zdwRY^qcLAL0mIdw~EZKT+6$mvMtDh!Ac zJ@G6qf@nHuN58{VXqtP)SZOC;ayOW($BZn^!%MQOE5FZGHk6IXdH2`OvBnTQJfv9y z;YxFlxDPma3vv5$W)b~3YkU$FP&{w!Fy=sac@jl-@7N==uL$Q{ zavkuouVDYR=so~Ka~8GHVXq}MRM4e+wTz45HZZ2P$O_JoK4-5r`AEJsTL&7EVFqSb zapr&A4L1)jJ7NzRTu~YqpzTDMpvsPu(i&Xi{sU6j-$6yo7pp`Sqah8#k$xzVV_Yb} z%uRWmkAY~QH;N@Xld5x7!R38L`VvvK$uq$@fvz)5(eqc0KezD8q1v~JJ5qgAOx;IUwzMvxMgReWtM@3 zVJvXh=LbP9A;FjUJ3g^oHhPF`f8`5-&lB4<%DO!-pOdOG1E=S-;qAv~f67V4h^o}0r7=l7U? zrXXpsYx6M6Y8N4HQ0TD(Z(EKXKVV`VIPIA9Tg&AY*<)00v?6N6& z?GH27)JQYe+buYj#!KY&SToPeRDal7BtDq+a|NDv8a1vNFm^(Gy-gpF&)e1lE7Gup zGNAj@#T_xo+`LVj`Us{NmW9D>KH$Uvi;~b$cG;dw^=2_=3p5`8p>O-vSLrc^qMX^n z98X;;T)7j)1C%~*pZda$twD%eoT1$ZS^P8p@CkJ^x*JV1w&=wR1-w=qtwM(isJaBG zDL$(qaDR}aD41<1z}9NJC%Gi_UD-c$wE5fUYwoa51`W&}fG*^@9!!8p^CJub%ZV$7 zc;eQCnjpH+5h2|dKW2!W3qjWjq-Hq$mMYe^>eMv4i6fJL%+d*S>^Uayw2yV3b-#C( zY1}y;-Ap~vDPr%BCJt<@butT>tJ5fBb&||xzZ>UL>s6_vs`8jjjIC6S=O`EDzFAsC z=!VHJwu$gkY&_>n#|-yNX4i~pO_q!Bc4#<-A?xAsUw9GU+8@j`X;d{mX@{Ttw9#ET zr9J#%?#=-kBeg$l;2n$8S0~2_vH?XL2W=%M9F5Lh=!GuBmbud*uDh5#pCBb&OHUm| z>6UpipzFfrA=%-L@)UHtMdrvU158;6g>$fp^&lmtC# z(*vfvGJF^{BL{mET(DQeYiMxCeWYBe7uGq8FLLwK-j1kCBj)|h6Z4-8vd^7xTP^?| z=uC6mVEq(bp4uyfQjHNAbDcqTFf6V2B2%JRdYdN$ju7pG@o>EIJR>N9ff zwu8Q%eUNWv{VarNRly`Ql1AC=+Au1j#bzP!8)hAgCLL-GHk@fHxRqW+0^}(Iz=|M| z>M7cSvO(H}>>b*T8i{0S*!U0C3C z`Ln_z_sH~2q*<|tcj0h&mSv*J<^Ot2eXK=4{+87KlyAS&t|8$Dl3XPd&A_z4VFr+T zf%cYM`A2HTS1W6{N~@%VPhpr=@g?GWoyj*8CYbY+(2J12dz1YnQFHMCi6!k^U{)m7 zcfS7McceDfc<3`9i<}8*+x}u5gDEe`8ET5>*HI==KX_6 zXYKCN(eftT@@NzMm!Dx=O?2|w50k9uHX9zv*9h7Yet7Rzm}POC1mor;6*0DocZcvv zm2Qi$z3}S<>B}$9xyU2xWx^rV0i$UFfrk(|{Q$ugss^r$NwCxq$_E!BzV9##ij!9l z#t_Lbt`N}^I<3}M59X-i0X=seO-74wqq|!<$3F^RpN*hzGJ&nuvj4p{7Xh$>g>RZ7 z!~P~7jt}SxbhKR4D;o@;t>2Y_ec_PQo z{r;f9k;j3}f}x|N0OC7Fk$3P5TkDw1f;+~PUp|QEjD%ZLdZ)uUdBw#PaWe_ds~vD_ z`<9YOxU?{tVR9;l#?KjZ>7SW6W^iD4nqX@wTRQ>)YShl$h%WsDh68f{BgHHX7l5?< z7Hwk(>K;adD`r~ZuZwhmH`qoW?SGD?ChJscf~%A0-!h3LwKRuU+&(}N&Chosn}MT- z`+2O!yL`$U?(BfWyKTAd6hU=cuN_gU)oHj)=3SX3<{&%#Dv=@mFvylz)&pcfp{xUk zrYqN`9t+({Il#Agot6jMBGY#Skw^by#|G?%k&;wk*%nA}4sO@kWt{rQ`Dzwl)u5^> z=&rl|YAugrY2XN92!DoNEOL?-I@M zC-UM9r@Us*4q!C4kf}zAIeNPo6!ZiT7@D z8R~M`eE11DeUK1rw4wT8UZ^MBO!8IHWM~aDat3i~r|wY*TM7ma$WEQ-L$uf5vyhOo zCu5fy>n5x&(1&E3hTk$VtBb_tkr@PhGpmZs^W&S^9zXhtEnint8q+MU%r-NtvW6@+ z0^zG zo5qG^ExUnydpnGkD*$s28lea^0j9nK3(!X(C-!!rNXuiLtU^n>1!EiqSJt>~ zqiPgG>>ndv*n0A9Np}*vgaO=wGDrc18HsO`n2R5{Npe zmq|~f`9lAb_&`JJ-WoKjnaR92f`5)ItqSDYaS;#$$(n*fVgDgFrE<$X^f8Df`n0US zHCb8-8`I2VML%q|v5kt64pa#{{N%HDaC=zF^6^E&2J*NKu1rmE0__ax znzD1X^ohy2ZmYzir=x7tbt`&u=ibk%#d~TKd^G6ymXz=FY3$^LI?cVkCu#{UntRO?&?PaI7EABy%_N(${7bCG<`PK^x)47795t^s<~UP?|* zj&*}h-o13CU5JWNUE}x5Mnefyr@1uE)oxto!WR z8Q0vL-anrQjQ@wSZ;Z~YOWKZY8y(x}*tTukcE`4Dt7F@?opfw>_@l39_k`lOLKu1Gb|6o-QYiR39gcuyUI%3i!MJ3u_y z;pkFK)NnlE=|pW45nov}`ibq85BpzS7M0yGIi zZ-gKGIWdlV$hm----e;BzComlLvAx#@S2?B&VzJ`g$tUI@#&TR=w;L-s>O;~f#vDX zPhW34?3xF;97JX@iXgD#?fFuY2lm2kaLKzg_C&Pw-xdnRuK@T~wg(%fW=myIDIV?S z-0p~ns3s)}F}ue{RGS#x*H$DsyEhZ16-7g|^c02R8P9-=LSqPW5%ZIb(a-r19=Qco zRtNBhPexi!I!8xI+8mb)QvK+RQx@{h=!1x-({CnoZ6xK>@hKL2z_s^z_X{NDdGk3J z8;~#-bDdBC;gGmqmZnaD3Rca0oM{|R3bZJF0j%a=I%1FpfN#Ia_nM#2_qOCVVqhp% z2xjUhq}s!=_xW^|?SZQl=8Z^yY{M^rh*MTC+b{3-l8TNn9tety)@bM9;KV^YX|AYv zy|*}_qe(u$VmI{UfH$PIzkl}E8QAHEe+FjNIDXsz|W(^z?~769aD3mPP&o( zjyU~e#)=bVeB1?~UR!^toW9kOmUHwd)!bfNhSUxSyaNn7;t;X=t-i72^HFc~zJWrT70$Zc8UBqU!vg;%PeeokPEn`HJav{siBy|vfA6I7iC)|n=9SDa^zb&*`Kk34rw zNxn73Y{xxo?FRxnUKs-eyb1nRk@j_{7@g{t$02{ z`OMtQQG9a@_m#PsrucxiTRnPW*rSqWgID$Tg0;^(c{-DR7D3htB*FLfcf$Zo7?;Y^OdEts*9|O@MAvnn_u&Kj^P_?1 z3IF7C2K=Ixi6Iap_c=DL-D|t`3zd?Y@cZ>6#})8?2c4JFZYpHcCv#X5Nr!fjmYku_Md&P@w3SqHH|b^IDjC*?ZWt(#((hSz1s8uE%h(Ng4F@1(w9^K<6l3?l1< zkeE2dPjfsZ&+=@9tL!wn33_+(O!zC)SjRUCmfo38Fm99mfsVqk=h_#y#=1{oEjZz%aY^Rxf1RHJd2KVc+;5>}z`xKHa zPJQiF<}8yl?ZJ;}2OEsL0XKz|$G_wy!?ZD!6`DBOY$XIGc*n@rB<(Dz>CQDZG?pPc zgkZomGX~Mzj)?eDryZh#Pd4lX#|zXD)nX3MUl;H7xT-ZysnuN?8?sHvi5}2D3QK6ttYPwaVZX9AWCC&8k-i3j&qVzLb{mwMWY>)(9Xy+ zL2rhKP9qF$aoXCRiR-w1_CZ4=G&GSLX&tNbN;wh>;`ytR+GhJa7Pw8FEt; zSz{+X#DJ5+;BRUa87>c^JN^u|J%-Wm>eSEJH4Hy~z`07YFZwo6Yuf2fv~LO{&*>BC zsaL9&-RPpM0Hi`k!`WNlrkeU@Aj0B4FhhhHRqpQV)5ux-@$KQ0JT%YP`lr0jRQTTG zt&^0vJnlK=l2-U)sp}Yh0@QDZT!{UN0*7#{)zoR+9M&kw{HY6@rYMcQ@Rti2vA5zy zL>O-2P4)T9N97Ml+{jq9Z1F(~%X${U8y)F7T!)gB@Fm^~GfW;;K;;15W<5cE$MW~is0cK}K8mw*>$0!7$AzX4 zddk;5k`+hmHvWx`;1X!NZQxH_T-LpQ%h_Ug*Nt?!PKY03c7VqBmyY0L+^%vAyQiTt zEoYmv!b*={#B&7}`CE?2i+2!OqV5N*7GxYY2K~C;_}OI%~4)w+Wkn}&JAB{{iEj+Hx%m0weCfL#RefIysY_^En$k zKbw(BH1c_aYTf|J#NR5aH%@IuFe9=+lW?@P zk^1YAnBgBANm3*~R3ANpux~@U2B;?pdNpj&79R@AU=Ud-Lm>@eTrp}#IyC%F-ar|x z7H9v2smVvj(b)$;tl>m2y9mtaY;)t>*_=i239DOk!uM^~2nih$YZV!Fd%a~%Wi$Ow2B!<=n!sC@Djt9v!%3##(IIwix+)lc@Zg62gajV=5{Zgn{x@-H zQ@!I|Y;TDf6n#D{eKGE0iIIK|L9Fh-P}P4Q^}p@$2L%c;%w;n6We4XkDDi(+UH_*& zgl!CMzhK1wFa_s>?J^G-7#K1bo(mYQ3z&@v*cYhh;4M)}B$y92r*fc9=sk0w!^!)z zuyWx5$uj3H-|2n8f8Zce={@u9{$453RxNSN;~i&;Q`oK>!$bO35T%_UVJ5=N`{caiXDnN1oy z-?+P0Zx{6(FoluP4B;529CsuP(D6_`10y{nJ%b+r5i}7n6EJk_G}HkDLoFaf;NVmb zU@`k&mioIr{%xs0Nr+oBD(mK#mB7Bf{zU&*&k;4YGWnrbdHk0r z6)9@}rSq#O;i_3dV3rjAya*mQ@H4nM-vBCJT7}_9?D2Xn%sSzE*5r95qHhvUoY@}y zwJ7ElwQ}4-NU*rcWtQU=x8vd2@N~^KU}gS%53`Mjnpv)YQ-~&>4b#GsQu(=K@KXP^ zm=^*UqWOetrM&qDbn+8Mxwkg~rinn(*!Mv@-E{4rIS7pCr((pOedOQqe<*Xxu^T@< z&@(YkC&{?RFhMZ~Feeq~gmR@M&cHW@wT=ie$8ycuOP#T|dkhd+Lm&;e)p|*ihUlNT zOfk5$aR<8?71lZk;*lCnxaimS#k)}i!&nyJQcO;Rd5o9X=_~i~mPN)?kY0w9rd8db zz(h^P#7$6#jdD}ZdWoWw#@8fr2Bvk_;kSDTu+EduvRmIaHUN9i2*J8yCVwc`J@B}B zy5Ocb$L#(JiW%$o4n{{W)KC5N#^`;_x$t!BL5TF^Lf*D(KH6IE`>c*K@Dh*+z8v_r zl#?sLJJ<;IfW<}se85fO6<+yiW*nF0=S{(MY7AGvz!xxNa`M^|NM&?#$RMd+{eh{> zIrQ=c9IndLJH2D~uO&9iB8`H`bVYSU$sy~Oc*L63qNCDmkvEVzH$Jrvmoh}0jN-^! zSn}SmcUk%eckJK&=082^+_iQ0|2r1_&7=Nbu}BHzuUJ(4Cl*2JOa_5p%k3$lS7+%T zGBNpX-8uULj4&MR-~b03UC}kpjeo_W8;SLKk*&9)H04`L^Lo3n7dejlFVVvo97w@K zOQHkyaslYGs65LGcap>!^9R6Ce9Lr($fc;V2w4CBV?MZhWvLm8dp;a2O>);v?zwy)0{P;Im_ zzBBd9b?x!)PxxgpXKHt~$LoQ9#o(9ZIm#>gma0a<;58W!YRqE6qF=-L+ewFfPRL^u z!REyAg8GS3<3=>R%9sJoRQX&iDKNd+OLOPM-^Ph?J75)&9qmc;6-N`8qm!a(s-N5v zu||bm%7{MF>aHRZkj?v;KkR6oyEIs>n54{q8_Sxu&LF~WSXC)oiB}zlZXh4|llimd zv~gqpvWBOES+6P=&~2)+oEn6lQ|ScnKj;c?9Dx?ZU&U9&6fw^s^S1AeQ8o!@Vhn*F zDU#Pz);^iB^5vzGB6dycoC~_iKT?tL6Mu%OshEVMkKlyK`h3O3NH3V8r+)9p3jVHq z1v-AO#zoJ3%(A$n22GxxANoZp8D^?#*EKuD&u8f!yU|0V5ugufV;CH(4lZ#^Ro-M8 zm17rEE%(aNxBU^Zjd7cC70Uaa^^KEMWb`|Xt$*Tl$^ooEiPDsf3J)(edD8kO(B*7v z#B0C{xEouKXcN`2RT5 zmj{{tYghZF3F)P!y!e@uGTLEuTjylD7EemDNoqciE0)VDJs;01y-wT!GQ*hFK`Kbb zq@PR+QA)1B&z~rKI`&O@<2bpAKtYHi1B!BwHlLi9fb#kW%JWp~)ntZvx(R9C^T}0! z?pFKNWam-#S1(9sO-zUTQ!~KCvKL-uk+=gzf@G@}siz%gR=#2oxJ`Qev~BSz^JIWm zIxRet)1G|rgB(Q)W$VO5iMrB7-YT;w-jRnH-XvWvXoDP{Y|^;-ty`O14dPrQN7imH zNcuN;)3J#Nu9nO#l9WNbFTo6s#qqNu2lLo*##ZW-arL=8c?~MAhWK=@hVb;ev^9&? z%D8cj)`pQH<(I}$Ez|K@=ihF;RZlbQ3$!sur%u^2N1k?A(xU~g~Tx>~i zcxz&S>H;AM3_%;D?&lLFv`}O1(A*7a0s_^VJ`hLp1A^R6aZXVlc^Wa=g?A|l|M!dw{)d&Xok9yeJW%JQMFA&-!xYfzy zqQ4%7L2fLejx}Cdq7^?svR=3Z_YBe&mHa@Dm3SRg=c^Mf^aq zv`HeO?TSJ0J_VQs`i;~eAxT(KuNw1gK}-2)xLuZ3#!ED+L$4h{;xT>Dpc_3B=}c=! zW-Tv{d>^)wpn|`R%%f@i7T|3Cz0HlBd)2YzkI|T|y_lDRtYNcz%w9YCuF&ho6U@U} zi1l*i3{vVPfJ+U}x7|$>>ccDM3RU$dV;}jEivXCBz|Tl$5LNHOfZudBP{EUjLQf)0 zYlqtyd*6vr{m(v~Q~QBI!*_9U1LBdNdgI4`UJb#QUvC`(_x_ep;Sf0uSX@ z;)3(`l?us%W8+V^P^_eduBE$KkcxvTeV+34qZI$vcdU3wruStNS_yMWzd1}qoyg`f zEOns|rwFxW;GFXwnTrgpvjeHTlxIqY_(`3T31Ja*egK@I`r9)x*>AWzYO5#TBgc$kw0P_A)6)9Pw=|K!l zF(+gX!E7~eJ(s9fs!`Vv%m^D{h$zw{O#arYfLo=~+;**$`UGG-p^;1dh%CsSJ0Y1| zCfBi+Rp8BmSRX`F&1au5vn^pSbhYf=gtI%N|fR(HN$%8{C+F^D1}>g?(U#SFsF@s`e<9>vZdlWAh39% ze!J3DhS844iOb2mf4p1#o_T)O5F;0R&u^j`SnJW!Cg1+8lUlt~KAeIiLCd%$a6VWv z71vJ62o;VVufacnv0(BRhovX51IKqP!!h2tq)@`2o!tFh9#d1bd$!8`|o0 zA=rn0zlma5%eY1+Bz>D&ME;OtL_@X+sR|QVSVxAnv1jxt*^-0wES3hu-n-}jHj!;s zIQ(_!v?nQ1xmcRmL4kohSaJ45nV`K^U-`4tM)h!|VjfWCT+A(sY55D|kn~=O!;1Ir zt{hfX87#*wM7o;U9Li}d2y?4Tgd7e^cR1|NXF(Q3FSb>*Qri$S4ybbnmu0hbqR>Y| zX7NK%R0n|~-h$E_@y9Ne-qLuA$NISm|3s=!B@<`1=)*HGAZvN}YP~74PYQ0zNz#k2 z{#d?s22BdPLmE|zyF(gX3aEp6s(^8H?(GgF|1Vy>-BIPqBxMr(!%@L4%pb9xL`h8A zZ8}Md#gZ3%kiy;PQxaxdA_l#cO(ICMey!Bx;!@&RQ}sqgVA*{-tz1?+p$*YuXC@pY zBo}_38Mpf&!1#m1Y?{~>(%(fz@EPrhY_NuoTfumOGGM%LmNA{adn=ZB!oHyCnAlp+ zcss51kX?&sU4B1azxR{bX0RjcGT8Ch(A!bjFqv^Z;RklrOW_wiChXg5&hW&(r{^}< zS$FH{=>*#9bW6WlE=@B#DBgYq|fUCi_^mo9Aek}!}D4ic$!J@-tbaDc1{+?Biv`K zD21Pwi1f*kOCmKf-qw)Z$mK<_?$egl3ObcrWtF$On~+umz`(gB@oTi&j$E z#Te|}--jYa7xUioB`WmAJj=&&hUuOY7=I`U>^(c1<=T+Te1}r2Y91fvg{YeKm_0pr zJ_qK7=~KWruN&(bp_*XA`W!~oXpJ$rN{Xb$_(R&BNn?qaKH2%Vp)s~JlNQ>U#K1U5 zYL+?&x9tq{eZ!BdJ^ri@lbMKnSD9+q7x4Fl#qMtO6r~!6q##8=e0IyX*<@_m~l|0C!3o6P9N?$W23x+GQxrJM5Dr$E0INyb84qR^z#hFi{@%tqHX~wb2xDEzIyECR*AdK`4R^K%BA8K{ zWo1^hM%>r8tKRuTcXv5hr8wzq%}9__xMHS}BA8VB{%8Lh@PP2p;27ENn zZFYU#glGb5%?B=zT2Xz%{DYpdJ#rjBmvv|1r|pM$==*w1C^29v?|q?YFzO>k(zCnt z_L0;Pc9Ym^9LmRC~u~wj)-| zC6*a-0S2ZSRnuhnmLulOKIRZ}WD(gMh8Y(z87UteCO&7vd|vAo@CXTJ)8UB*6q@3u z`sNz;yw~0U363S?%IbA;O|ldI9wtj)1fulF#pfLB ztS+qBth>aQ9b5RYcP&j~FW;fHkii9tbFPB8+}jc?M%@4sHUWj#L|Aw4!7iz)XQebV7yNAJL`<<7aCt0& zI|KpS{G>8y*Vu~z1%A9_)c%-K$sFd5!FGvDSBB-Fb_;IJn)$5H&dUmkU^Ft`AAY9~ zS-d_s`Mpu1PoZDLD(o)4~&mQ_@3gJ{K(j3MSMw}X9?ZkT~pb|9jc>5WM50kHi_7Rqy zEk}RHdwT7;iIu2Z;4=*mF-g2c2wStzCN#yCt?(8I0O~S23Eo{dA z0nq8bqA3$$zi9!muU?LRJ3A_TCP{?NdQO>&@l%?`E%G7^q`Ply!fFJQV;rapWrcdI z{l^d96IabZ2xoO46t}nOC;8~c7MQ@N-hdkiGl1*&{uYHz*Bzo$AJpo@S26bby{=_D z&Hl!>H+!w&3lay5!pr4-u*EBpjl#fB0yRsp`PB;E;5H&=ZUZe zeIMRXK=Bu1WE(g##!Hy=ZTbyYs{+Ikd7mLFpQgN@HTjTBWdC4lpd{E%vtLekwC%ML zBL}<_N`lk*;Su+WB@=?a$fg&aNmz2-Mkno;<`8L7?hSc-N&y7Ek|K3o8)q!aI760( z?iWvN+18+gUde$Xb%_hqh5>t<;S%K2p627hm9h2AZyo{CqcW>YGL<;+vmUoCjv1*IW>ByGWqvjjG$q`D;U_;ESJ)OjD z82Dx=7yctnc_>fGQr99#=gP^j``Nsx(&Zam(sykxvjm>3t3D;0U+<}Ji$146>7*@M zr_vozYZ%W%iAu1oOUE$E6)iS+YSz(~0F|!$0j1=Z%P0=0x!L=exC7ry?Kz6g2lf1PlQBjq*#?SbRaw2rJUX3Yn4G(S=oE_aju+p9tMnet4J1|j!?TMd15@ti;7d;N z*Spye+K=-;Yc=mD29(|_UkajrP9Aitzo}08)_XF9u&1_b{_N|1FxV>RPSstE0Ik0~ zxS@KESpd-!2SR;QwY}@KLr;biaY8RvYo7D8vv}oZi_#uHA+q$4A3vBr9!vwTJ?>ga zPq~)((M_*5UH`kYhoCF8?3uH8HzzeDWhPkFj^`u9`?uwJu#PDe&sf~4^dq9}F4Q-# z9}Xxo#!G#;nKnP|(}&?6J)e2{i9=EQxG%`do!)vBPw}Sd@Q0C`yj<#{!oU($Bmyyy zCaVmL9XuZb+?FS})u=z3(4F5q*nSnHhSO(XkDsUP+g16?eHQ*V{9<%1ru6(Gxn<%b11xSV&C|B^j%@37e2p>yR zrW-SpNVhKr&mwOB1=s#7dM$<1Lie)NyS3^u-OEy+Y1M+ta~5yms&|evw_b+%e%>kl zhu3XhZ225>=g4khX-zTu?KJOD!Xt>KwWw-e1nwYQ!!1Gbg@440yDSGylv9{s+dz}` zdJG!P(hc(EtBCYGp=@c|K9jP=mwO44YKcrP%xa+7|dWNlMtgl5Za;A9?TjTa% z^$r)M=8Ow~RT+7ut65agC#N$+FV!t*&?l|Y2Q2NvaDX4(z5{u{x1IPi|AOX(hUJu@ zK5tp8-M8qEu7F*yX2mD<3D040W17iLR2rVv55hld*1fg`(qwRmHpqt zEw*R%GC|_mtau8dTMnjE-MKq`udS%#H|%i&q>i~kTG$X@D5u0#%?VypIz&Vb9rS1e!gVsnQYa2cJRvaVxZHBO|L3pafhXrZK`%La;Wre8HsLS( zSPo?T*cg1PScCKNh~H0^ozpnp0_MzYL zim;UcT(e7aJ_u$Tw?TW|hTFU=+ZrX@ho?Pk=L1A^l90-`T;OlhBh`ioeL_lIoMo0f ztq1CjMsv>&a)S07e5ECQeR<{r>d$V;Xe0 zeuFN>`>aR;!X|pgo&+PyaK?lrnrq?!L}wr_Cdf>6?^=(6?B!cDkjgqL4$tR+zgq7F zucH}-k$z5CHzVrqFL$!>)?jmWb(y;S6>^u$I|hd&ros0kJOKiD3L)y|Ms%=?e&RJ> zfjVs90`~KFY4(|6wrBM*`SA*5&`o{eTY03>gcDeB4b)Z=tL0;y=0Tszo~X8l5pFyM zx>}r~`f1fPtnHuBj&q|IeFxg93%oketA@aj0z=47bWUyXcpMWVF1%k77~~~adKBED z&iCF8^ZWECkWRBPwQ1P{N%u-yN*>>SE! z%L)44nW#&m=;p|&JG^Y3V#Q(X;R6&+v8wiH2CUOw2*0}|syV;k?2AxrayZ615bu+` z%-P0?PTRS?aEr{;cMKiTr+pMI?beHNoUsiqopLQLr(84E6vP@%QDrtAu*vj#+);KT zMnm)2hAO&A4|lh`o@FkYNnA^|2KXiJgf1;+*3T$Ahr&WbI}W!D9c+c)l@GPR?FvNc zuWRjRQ_Ml*3N#O)`gx+uBpqE(rs~nKIzVs-O1Qhr)8)6vmZY<^u}oFq3s8gOJIq!$ z+te6Yhd;sdO%tW)>?D0gU3>^n6m=T{z9$sDA+^t?*zxz+YFn@H0IE*9(=RT}gxKMrvy!-`XN*;sCoWu2{YMcX3iF~i_QyW&49ZM4yAFxta9-h-= zQQAgT_1w6yLtfE~T?zCh9r1}qS{I#ck)Gfft^cIfW2Iq28xgzrL_FxBL7_DknY^&8 zYP7OJZA1$S)UWD}u|C#Otz#w2j#Z&oAxrfR16>}^MR^c7pO4r)-tbLV<76KzHT+j` zcqv<&w*84-YuPs}{o(d+Smqfzh*5RYHKFqw-gZwGlGuS+25u=!H zJ{9rbGk?RH`UD&`Zxr_4Y1+)~{HFPCe*Jb%>b{f!rrZ2DRkO~y(sqKY{{3vrEnRQg zqZn(LWR+j51KkvN!1KxAhF_}={RnrU$Wy*s)BSS+PmxHr%U{`)gtul7lDa-sjI6?w zqJ+rc#D*0%)WTlA5e?rdtWN#&*ZLFhoCw#^)X~c=V;gw&KPqg0Kk)x|Dd3NA$2P;_ z9n6=k)cu!SkJA5G3Xl*~vbD8x6tJ>2wEQYA$$y~_jQ?3uB39KmclsCUATjel>fcq0 z(zeJ92;Ni6#p}}PXkzC5qJDDmcxrI1KL8LlD3r0nk&>vUh9okn&qmIK$3Dvj06~;+ zO4;m0-pB{eNkg(d%vI}hOox1I&(q#tua<2Aq|etz49168DOqiHn}RseE;U+)V?9ZM z&9j*b&!P;2r6gfN`!z(t^0B=!AU2PHbGWc^f7ySgT4JtCnhr%8o9zMy+(k>yGo@oQ zq$jMx0p)4(zzZTW;y5SbwR#P8{r&Qp;2t~q@2rMN%<+? z$#;4a=zDMvT=(G1MV-hzl<{^Rvh42xVb_sC zVEt#~V-4svjeb;BVEr=j4n~EtN5FJ*8X!Ya(?PV(lMU#TCKA}eNtny?wD3w8=$8bS z&5p|#F^xNd!RJ~~IoE?E^#jO8r59y`C-`Esxj^xa0#qrnh$gPS{#m5@8HZYXZ;{IB zS%YAGNQC_ytjQrH7ttq_NzQNVKdf^IA0TCln7Q~bVNN6t-_fB;kjEJ10d&P*vBRIE zzrqu#4>8g&&`E`FI@$$n{jeIQv6P2l1)0RnVHsgHe0Nw;*5N2}!Z*Lr-1q5ZM^){4 zO+Uf^6sG>}bN}g$lHAbIVqY-E%P$xs*Z=5^e=AIVA;+DJ-To;G+No;&M>)!;3069T z8e~pDIXB9HP+FsDgcGok=5`IO&=v(`!^UPFcGPC$T!3otYDRYlJ!=+I8Yj(usOE!w z*zuCqGCjEI1e`3P{^^2in*B>TiuLzv4(|tu9oY83HQ}Y`jXMl(%XR1iU{QEph0)FzE?!6+FOhE7E!EIn0W|)R|y(wFIL_;O3OD{iJrMX zZ8J98r!HYVJw$QRW~G_$EZ@=dC@<}vX^fXytFIO$Xx#+`jT7gj3w8NYPKi|2L7U3# z(#lUdNVGmK0^MYA$DnXg5rAbK9is z>^z=J?v=7d8jD@9?Ejc`YAj!M3YsVVI*r}N5BW12dkc|}ebv0h5=vyfF2+E4i?3uy zX&sF+R3(U$sNM)3bS!WDLdx-c$`+mGbE!f6_chKYi?yUk=lHg~oym6ysK=Ct2V;iu zp$(*>@Z9nZNv8eZ4La_cn99r5WEWrT~->Ir|a6*KRb$9$`Ezp{ke5f9V&7=laX&zqdfo*{-Yj1mViBIcnQ zSa;PXNr^JfO!}B4-F;sfwTl)YDt#;S{cA?%$tZD@l(qU|p;Cn5Qk1p&QSr3%SZfQE z+GtgrY7T5hO3ArU>8|5#E^aE8Wfhp3GUC%@5X$I5%1~dL6nM)FqG&XacDyDzs8IEPl~pu)pxbCb#S;&MTD(d^z0766 zJ8TzFLcQH{E{|~16h*jnQkLEJe^=y}B0(gL>mBT7yE><9O&op5Qor%FDNE=j`X!mlY_IF2#g4a}Y)!YeyA#Rdi;( zYWzL0@GQ0fx`lkR4du{Z#&HY#o3DYS^FV?HtY`hb^d*tJV1D%bgp?$B`g=z(5k?7y zG;`swoLQe-D&9f@a9f3g4CH7m%UBPGM~3{B!hJEqaD$NY`yC*qp*Cc#O*|UY5PQ_C z8je-4M(&$-Auk|2HcVs)*wAREEM#TCHag(31wzb^b6vK3?)dHk-rqXK!B3XYJKzIA z^=T!Fx5UO9Iq{>@5W2(i7_eHvgv)$AEHZ}WU4mY&_W}^My|UFl1{@PO0R=2L>Ju;u z#kks$Zy0UA=26Ac4-62&Z#wckUIg2Gw1!O?9o}2`mP1JA8&Z7rSc==cr(C^;KCN&WTrpTKkZahWf&QEuQM3s8Q!0TS$f zqC9AOWkZ9=YAh|i71^^wm<2cr;4t4JY-z1$K%c~$CcVfQp}oWGSB|Ib*1MO-H=x`Q zU}&&%w7M0RpQiaH204Vj--ya&G3zFmVtd(Czx(GMjEUVJHD`y`w4y5%?@{K22;z+s z>yW^5$1?>Rst*2`EZM+^NMNOwD_1eH_Dv z)@5>9#uEC*YjU6Ai!-j=J18KurhY~&67Vq(AQ=6@CMaf0+|C~-Jp$o)K~@{m&>_y6 zLwZ&_f|d-s@(um~{b%PlPG(j?vnKT;#I#r2dl88m8cmh^0jj)An@#aos;fUU_4oPs z_e}l44v88c^EG_!sr+BFMgL#-R$&JRTL&?H8zZZK;XS-%+P~Of5i(h3pUoPs@fZ3m z=hQ{1LHGwhkWwW3;u1(syVd{9OKNCtP}?Bf#MJr3g-DHWm2%p^ z+%?z+{67}?`?&vYkw19FB?|YV1xNsZder{~2IFYxU~cC`r})?HOU%XiAAVb;3h9NT zjQc^lI(a@N6YrA2ic4K<<>D3vOMk<0B?(8 zWvg&)(jh#gX}nQJ5ZX-P#(Al54cDRAYqe3eqwUu0|D;zF`9wK$&4YRMvN9p-FQQ(S)X5Y_WWP?rz4(uB9T=5zJ z?sqKuK|c@7EB&`(cqq6RkAaZs@TcjpVIIh?52LY_!gXMzQv=TXEDz!=W+HzK#03?| z4_UXNM)*olfq7oz9BGGf}#@SINEiIV&tk{N>WE_tXT^yM7{M>=S;*4 zL-FQ@hBmd!wXA2I6bk+fOw}bGPE-_I&_XfXu@e$4^d=f%q1m%1`ozYhNDHJxsGQ&I z=NZ4Pwj@og#L=3Xl_+k+lU2cUSd_H#^9@+a$l7V!8-K@cw}N!&tJTgtWMNJgEw9Uq zdoHyfpRw*|A>X~kl;^M>)0mgS^zZ;`xdGf9!*Vgo;%s8g286iH%^r=F?JHLlJ32R_ zoNF3qom(wTi$=X}T|+G?wg40`&%zV{c!81Zqh2=T*f^0Jp+a14CAkfbZql|VGE}TA z71dkSch(e#bR5&;>xRxqv0Iw(qsL&+%P;QfE4rM5{dV6c5+*YWgth3gF?CYrEWDW= ziF|fSs~NLBQpF)owoiyDYK)U`PEcagaNkFhM%nMViHG zt!)+U-gb*ZFg)qx%ZNBy=%6(!!pd&Q*~wU?dAyxJTK@e6O>u>_Qk+#KCoGDE6}kGm zDKtt4=Yvx8^|RHyw4h6nL6aDRg}^D<4DO? z%z`%RfkLH%nByC1=S(jG@5QKC%>?_1s4;sCn7Z;e%3jh#%gSEB+e$YyUYbL$N?g%b z<GgK-qW=bSm7Cc$06CQF#ZaL2iy1 zeew(tx{bmso>8+6xT8fq@BECns3imjYi=_3<_^M>XBs?Z8$brjH$D5{7N(38TI0U$ zH&gnAlo-G14C2S4<$lHulJb2fMDkX+f%(SS$+&8$p+YcnyI>_t6AxzKAw>zYorm%e z65jeY386KFcN^4)oBre{s4Wj&yMIF)mo0n7o~!g^1xB6Ty`sjqudY4u@*tOzfLOJalD0if+c6jy=k_# zoxRS|!+M_IQ=Z*gaXRMOycBJg@)!;RV4cQshJ9wrJhigg{*;0_A|>*1G{k(i;+x{C z&BhBCoZV24%JLRt?;(qEoSRQdAVAcBgesLR4v|D`(jb;4j@Ijuyi`mgZR(hp;2SpSQfvttOY(NRcu%ZOGY(js?@lPU zM;*ass-<-|PeY0(OLjK7+MXrnM#|wo*&)(ou3je)SfDZKH}<79#;Kf41cKw4F3F@{ zA3#;oxgqV66L(6(=kD>1Iwc8qtT2?c!GJm+gW1j^HvWi--q{Q;}|W- zZ6{ybFW?1|9pmyVgBAiy5AVY2qT&VPJXmb$Kj$k?4*wLYz#0^&vcUK#tsE^#tr+c> z%jcQ=4%K})PJ}?DDQBh-z(Q17B~(jV>>l0E8>udMZINB-1ybJ(CEO^AaBx6>2t%0b zepfmU9TdVqcbbwPE)wTa{uq<5sVE{}^ZPE9H}GNBuh{Gd*A!OY7?3rnIbb+Qw1_fc ztzAB!c0)SQVzl3Mp84r4VJ7YaG%q^D*s6QxJkHVqVy5H{9K@AHLphf~zZ!X9Xis0M z?j62pR;)U4hc=i09p$JO$dRq}+}kA0#sNPyrhf@Z3^en$J~NIU#^oT-c}Q@3E&4Fj zJ`qg+en%tE=#!z_guCob_!G5GPfzIeW-l|C;y^!fnSP}ygOPKnJ|3$9AV)1m2Eq`F z)QC*6Cb}^zQ&k)0TGheIPGYemBxf z5f+Tt5fKH8euxu=P2yLf8s)?hzDhS3ph|a=Q7zg-qa`z}9$hli=uy61CWn=wF+1;* z_JVz)#5b#up)+&OkIB+;Jg}a2iZW9@aZ8n>-sawJ8rsYgTBk2jo4RTzx(RU@CHpYj zgFq4pei*D%JJ?d)%I6Yw&bu_{*E@Xjc#F)?1HW-pB=%5fs%)^%+e7?ewWB{2zQS9S zJrfg?a+?(6o}pS`kCYc&k!&zvSd8BcI}shJUG>o?#=68qS*m0?w_)I8EntnT#jk1aeaA>b?j)&26if&G+?m{X9M|hlq*-{| z17FHG!H&b7 zIj(O8KLoFXysXUObjZaH#tm1|Xld{V&kuK?Qfynt9pc6n(uO0N+2eiPc zdFm^5uqA&cgiK6s4AUNdR<+=@XHljfy{MS=@m!7w1!vp3YB&r+QYYEZe`8dafuH6e zm?R017CfsP(Kk)DaJBBI`TUC({_n}*zthG)iF6~SE!fpp0v-O9NYnh+L|V$+#8}YX z@L%a-QVhQ&Fatu+_R57#`_fuD`j!6$f540;od7=q6doFvTf`Ygec)tWnEwYe{0D$< zVk&inDfWohwaHe-!Ryf-bPp66<{@S@BMx$KP)asr!dD}{i(#STIRw#Q*OeAcvgSG^ zA+~x~ExihbcEyM?iNt!{%BksAM@sNC$9Q_|nT97#)CUA$z~C(pwS!Jmb}XAMcAr}N zH>kG-Sg!kU>-5rtAa85Qu36IO65rn`NnQzocfLF!^buhCMi?!gl`Sx@bS^KF5(MXj z+02B6BYr)IL%4U@uiRv8$81qBUH#Ql^e_{Ga|9a)FZbww67av<>))3AlYr-DC58TJ z@A&+>*#4^}P0X#FzLXgRoE;pUzVh#{=YMqwB}GZX0rDdRf10E+5FbLIEn%f0BOpQl zwDVsY>s`9~- zh`VgIZ=;tvN)Db3$%%&E2OVn~Uv5B+^J=f6AKo&6_Y|V&1lBB6{PAD?9e*G8e;UM8 zX6Dla901@7{(q6tw$pd|GJ*}Aw2`6QKOVmhKwXR-zFz+G;9d1h7iAgK2hKCi7!z^X zjlai$x#g19MtMPq7V=wa)y6jnhQeNbS2eH{OhzV2B?AM+b<#tFgkp0;&Gq6YuPXCF zHD6xd+q_TF&(K3v%N(Zm++a|vHF(D<&ZCZ_POht86L0U^zU|<-kd9D{`Vhy2k>l)C zA&~4Cgqe`~%#m5C)WcwzutXtc2vY2t4#pY^HIid0JAv%&s3V5OK(;$t5J$hpK-nk8 zlD_x1gf>Q!7vqmRw;7lJm0PUgvknSf_49F@V@SfSmGIcY#EZ2r+n59t9Ugj8+G!S z%bGk-Vx^)n4r|^-xE&GEx0A3(;o3*wHA(dv-(<^)o`hra{Z_mOceeq6`^_*h`5v}={cnF0PQB7E~ zKISrYd`Rgh$p*}%L0iL{?KH?|ub2V^lC74+x6-&)QsT_SWCp2JQ<^STL^HoQ-8#&y zioDV+5}&ouD3z1OsT(V>lY!bHN|;_!5pgozccMNxg<4n{4ZCkP?~SjFkmp|w$SrDj zKLJ^T_kWzdRdkyT&Mh2lm>JqIGcz+YGczX*rwuvG+%PjUqr=RM4MRgs8fbFdd1t

A#1Z55mduhvTVS+cn`Ag%wF_Bh*7RZf0r^X}PRl2? z%!1_@il+JbrlT{RiISVcIQrURyLyP!Sm~;Axi0y*QdXN-fe~IP+sL<~$qe*Q9Mx!m zfUO7Hh!ozu%-B7Awhnn?hBPy>1W~A#DpXu78N_+-Z!DGj{(i(^C>nktm9FQdv=79? zIeGhLexidIv;hDmjSES2;0(nAn>DJ}m7XU=`C%u#pxO<>YhrQUzMH;TMycEY5 zcxzw&Ot}g%_TG^A2}9M|j6P3v51w68&f_3OPu-!(tobtDj$!>t-JOSw=X08}_OqrM zB3ohZIf0d;gqp8v!=wB$Vrx^lK(P>nv^*R;zfL7~+2onyNTI+lVfU0uo6u>A=2#bz zM_#mQWR)Z3Jy9EN$cth*%KDD!5oOO*-2jz|Z4gBbvPnN}MZv8j!-FcEJE}KH7TQqz zeBJAQqpWGsHB4L4`ZJ#klDOJOSB0tT66c@5L)~Ey3BCF_qA0$n_A@E*mJh0EYxG?i z)ggDBI<2n&dvXInH>|5U%I>(JaMNv39N&uR4KzPSujj{~o+OGpk~%|NC|@>PbIq23 z-cUzqSz^Qm;-al8ibrT;{FrxJqUrh?5#H+hBYU`~;kqDAG%^Po2J8l6K>Sy9DqO1h759tV-pUz zs6u*S*Y5GiyL_IF)@j;DZ?Db!sO5s0TM%qelSCEhGtL`&nd}_TJ?k{ijp()5I26;J za_>mJwhP&l42?y2GkgRyG*_AziU9Eo-$T}dV!XVf8jJ$?A`O1%S- z_UY_%#L|Y`!8>JdM+L@OEs!_H>Z%hEG(78?5v5+2-k_7IDt;T~Ka=!HsQ_It;fIwY z*lpwc7iKezb$FfPtrCxNByhes#txESV*_q@c^u?XeUgM2V7k7Pg00ZPzN?hreAI$FuTI-SLeEr8+GCU`C2JQU)gtr0e^+J` z;~$|rpm7}R=TKSM9msIgAuL&P@!*v$#1{7hafU^roA6V>i5;XEn10@y4&b|j{SlKk z(za<(*VI6}IMKEVt--@<1lGOJ=Yhha%PRF$mDV(Aj#svG5{+xpkcJm)bW-UT?_BIb zy;E<5u5a z*NLybwJ+cuy*7AgOueG$Io%dx^sRZ0o;t?G`bFVk< zr|70skVVn%ccJ<{yW5a-p}@`tL*cf5E&s=(OAajq~Ihjy7HjHum;5Zjw%}4*#eE{)zqSbBY)u zm;!3+jP!KG;jje-1<9&w1=a?qpv>g z$RLgozDnu)Bb(=O)7NU|;*rRx7d(BK498~EdC#~AgUe+C=n&n}7Tk%53X zHZq%vw_`5Nc#>#*!YECld7i?6=6GHGRnrHdV>DRdlPm!jc9NykGVZe>P5Zm*hrlX^ z)4G8eG?L)fs$^Ik2*XM^h-xf%?Fa7^9M2G<6IY#zhUSIN0F|(TT1lI6qwkVcz_%bx zUs7_XCW%12Gk-pK+#E|q60Qc)R|^d`{fvy80mhw!fIhfJN6{ekG_nH&z@|!vWI;e84)zz8nbFI?( zh){w%YtBtn=w&Js`Zeoh_#(nSyRVMK2WN%(rn~R@j+%}4`=g*RU+$6&p1m(24es;6 z#?87D-dN4JnIf+B;vjCdG%(LpcC=xjP)6#e6r6X8n)0hli&V0TbMDO3BTIXhM#+&(OF>kQ1D-2nOJqtXT#Py{_-dM*5F?G%u7WV`$YZHM>_bRhd%B|c#?)`Ts{j+xpxZ4z2*OF zS^qEh{?|}Q&E4DHLea#*;(v-+axH5c_kXtAr_}!v16Xj9MWct;R8bb02(y=G7EDIX zlqA)Kt1l5mH3N8PgB&|^O-K3*;LFfS(lE?HqtLjQCw90flDIds0?4u3K}WGbYYi`P zOh(}J{bOb=Ur$LJ(&>Us1mmCqlRm$n%mA)#X+K;>j>p|}CFKs6Z~^#%@JL!EQ@^E| zzo&xELx!4^d@GWYd{$HglzeXRYf;#Z*=1Nl;wnZzSFw^iN%Nb)VKLZs?VW0lJ_rUz zuO*O(JuJntW2P=Aqj&7xF=IBp7U5aX>=|5L!H%Ht$4Q%ZHl4QxVk@Q*kTtoU>E+LD zaxg610eOGG;+ra2uV=ROv1_^T&3?>OY$F?yG8qk1m%BzZ>wR21|Mc*Duf24O*SR5m zab^P9jI~c-Eu-XuVFMB1_GlFt0e%vgS6Okp9SDZIFkHO(Xs~f z{CYn|k%cJtWr5%n$K5P$=;P%A_2~{g>1Ct_9v#oqF#!8O7cd?rjkkv8fG3OITcd9L z3%ozL(PQ-|**aV{l3jUdG%0Dv`OBCAQ`;si)2u)TqSSq9AyLk$${5=m0-Qi++N+7y zj8r1}2j|)lcx=2+zv;*a2hU_wrXO;;-kaxp5dG2LGhg%v{e3JO?|-q%6NmAyK}gWN zkQA$s^GVayCWw5y=+o!n=)HzJjl(QbDcIqLwnv5596$xC$&fPck{WljO2W}UFrrDo zr;RavtV(8)+-{@j7IlHvqKTzB7nd2urEPSzb$nxE-RTot9ZKiKfvj_p<4Gmo$5#M9 zHyA-$S2CMFQre?jgS&N{d;A=3GZ_L(aLH<0P*FIN7u1tEBh0iy|4_jAyMO=N^Zz{1 zhPhRfuYs6UJg{J368~$@2i+Gm1Ib>}xn7I9Z8vO#+{0V9%_CP zt!Q`!VzJz19cQ`y_szthO5RBv;i+TW-JmK)DWb^R#rA!mo5RnM4wt$ zWh_B)$cB|`rUArhE6f{?H_|mMw_oDy<zJkah>!A>{XmY zk$4V#XeH~9zptVkoOPI}AAknj3=AHqs38H=mmCsbPQM+7|14`}cva|eK*#`cv~BJ7 zQ2dN#!4hnM0LV`LRLJ(-^dfiP;7|}vI^V2uZ0ng7_yid6yzlsdPYSD<`LiXE`wA|X zoV2RV&>GDOFekW(+f=f;m*B5G= zW>Uqxgd(uCpDKp%s9@?mj3TYGk2AJ8*dNm(Y>u z>Z}Q|MqEJ4fj_1&R`F^Y%`!Tyq?#~JetM;lxq3ypDj`lz#j|)(%dhNMjXtC+jeBud zI*xvUr*cdog1A4u*ao60V#I@sFBznz?c*IGYshYtBOd$@_3G)y8bH z2%q#UJm;YZvN$FPv2vr6zRExyp9-my7^Pi@t_Z?#J4ChwiXERjwdGAfE0YE( z)8lRL?jn)2fb<*OB_06olxEv&9$L)?x<RML=f-z zi6)9Lrz4g$qiF}EGTDzJc^|g;F>!ZtC08)S!|KhyGFK)Ai#e9~ed(8Xz)|nUQ2Ka>4|0KawtyR+Scj3&DkC!_5P@GIz!tcvDLl(%)lLaz#Uv)&$HEh1}jtgvk#NhuZ|%f?Tu`&r`vsb(d_Qg?}# zV(%=%LZQ_@pQG&nR?qgXi}ABCl<-X1udCi`IY!;+170cOO6NNe7vE8JA`6CTvGek$|O{O<40zfTFB z>^a!=8+2P3ukfyl?6gkF81b{GsumS0Wvtx>%5_qxgK$;yC0HWssfS%OfZ~`*qaCJ^ zCO2OAQ+3XSeY7v^8w}n`t*vMZ4)EQLB!^9mXZ`8l{q@neu2iq~gA%#B`=V z`!V*F6KimFI#GzB9gbrFQc;tFYbD4e3*Qyr{bDvKZmKAX7&rC&S9{2oW|%#OdZwaD zh2xT6n&*hbVTZi&w}Ob^PiJSHjf8w5TaMbrr9X^9d&NwMXKM~6IJmDX3GJ-@a{X`6q5-$QJtma}7eC8*^Ju$XUp zUfpU!eorLWIR+9HQTI{FKCqeo3KH}Kg7uI@{E$vi7(|hMFHJLwC6$U7=CU|^Jle=O zat7E>68zk)(vm{%4ml$GPXBD9(a+N$x%(0fYxcVrZXoQ=kPHO$Ho$X(=r?fu+&*UB zUBPE6=Uc~BI(#+}bN!D9Z~y4r|2=U29a4V^(+uSOvwl!0$^Ne>FrXj-v77(Wrur*P zVw6D?7-md?R@+Jq5l<-?59TO6poB9m_dS9sY<)31x>~=H+co4XHA@RJP=xR**!L6R z)q!^>q_znzG2$!=GjWLQ`ej09V^heO{U@u}0i6U}$}_r`Jhc3@qKe%X_C(Z`p)8!p zOOy;u&d6q!=-f7L*;Kn?Rhahn@$^~AhIAtjn-wGj)0hKs0;`Xd9qgi4^PAprc6r$J zJAR;LZ*MgbTz@Mv`FFTu4A`8?)EA6qI0yI5qyAc-uZ|qP|KM`{-3b3S&!6f=7C}D6 z1e9?WK^#;JyMULp0GiL&+9eLWaCC2gbHt~Q4n~f(u!8|Z`h#0zM@lqQ3 z?zj`J#c7E4Q6~0msq4-*75rxrCig_c%(v{x`QFpb=SVr2%~ z;iGJaBj9tcq*T7U@|nTPZ2Wg-OSfKWFfapA``G&O{XFMd36}`TBP)@2Nl7!!oF2mMmY0eOn@(~LR)zlGL@PUvU z>4Ger?m+5_src$40j%(q{7cv8#f}Mwx4=%^5f3^_+#LOD)Wf#5sE{ZauM^{bAZe;T z{h*old)&FPHr#$}>r6A+Ssg~UI9L1LOZ}PifqxNUZHvmomr{Mr0<86r042nwpf8+q zWXTG(MD0D!hMPvclsqV>ThKy6Lj4PkW{0j8EoTUq!M!@Q&*YFC1~PnN&luxx~)p`ND0? zT_T#~mQjaKEIyOUC?;AV*@z04q|27Z_6t&}sF61o1$uL{2Wi2!|K`>QHix81`u5EM zVe7%3_E`XtJMk4$->u>j1P87SZxAG7cQ1bLWy_ipCFqlHQ%ugP>%E!gn)Nx&A#KXr z9wm^mC+FFS(hRV{8RdA{mqt(P3ExOu{R2V&?zR8v&qxex2vZ<`-U1=0;{V#8|4AYT zbz4kC+$0>`UA_NYMOU+MwK1``@%i`AsapLn=WbzO5Kt=r`YW;k+Zw^O8lp#78dZcu zBASEz1ZK-H&Gpbn>Z%4R`pZDBDTFCIOTdE^o>dxrkOZ;Kx9#caY5tkXi^;dwpFjD& znnaJ}lQ0P3Az3jK7x&{{Sz80+0ob@K<{YX=rfmd+-M9d}bcuHzz%Sm`B)iR9Kfq>Y z*Lez3&+rtM$*NpCOz;BU$_^?Euz^>x+;cwHl1@ zm|ZxOUq!Xbx2Z&!AyzIMK1}=(JdQk?pe6{(68)^2RjQ$RxO_WB|7>b2;Z2t&1N;vx zru8D5nNG@99G?D#o|@=US>}_*Sh6mf%$J_LOZ_BP=_7NKHk-)iulYhLwbvewt68(~ zfl_&9Uu>`=u}nVDhFw>zCWF75P0xyI8DYSnoacn$o~;if-UMlU_ENrstyt|l9euS6 zv>=FM7~ibb2;~Y$Os1q}uijneSDVysIO`t4a+EfmrBLK6xqJ@cWeUP-#T*QeRoPr| z`E<#<9zQ!52*W$QPdGSx+95F_#-I3xX|V5%&0DjNKPA=pybA_&)WKDys%9OOcZ0}} zdVIIX6@0T&)qrAxW@6xeIC4}db2jr{sK%ezLt=(Hu#(^z@{GhF2N`UHx+PNOoNgMjDTO65Q*-x8 zg6nq;MpLrmtPM4bj5*i2`Jg$&W%FboN)vK`q#qGaMOOp7hE{{7RLpK_Lq|-JuJ2rF z({Jg$hK9mD&5OTe=l&ip{~1Wj7W=kjpvPKi&||Ig|2mLl9BthH88dF=Y8LJu&i@Rp zzy0tRu4Zd&sDf}pKnwzsB$9qxLIgS{uZq|ZwaZu-sJmF9Ox=Z)$%1JAxqJ&w@_mTu zdW}ks=oL&z_9DAVAIh8}<-*;kViTSC-@Vc;ew>OJR6;|)bLhG7E~ z-K(TA5CAetTg@sw69tDzLN&y8Rb>Q&Cv~8!r{ju+wM11Ezv3?WVEbx| zfQT)AUOTS;dXmQJ!UxLvh#opO%_XZ>{*s&Id@G}99kiO^;!ldLvSgdWZ2GHQBMIm8 zW^EbBi{e!2knf6f6||>*DrlxQlJhxI7`au>hdVNg${B`S141%mf-+u(_pYu1gjm0I zF2A0YpMA4ZT4}zYXy}rLa~Muwaz@wCtOTJ1BY6*JRV~7A&FAv!^x<)KH z9%7t_d$8B@b_nI)y;3#ljtG)jc?3u{T4c1RD-WY~glGu5A6Ya8Lf_}_Tm*n?jgIfquBnaM_lcwy_PNBcu+R0e)QNEWa<6e( zmFyKUuxTRDFh+i z83^hA{|2aygR{Mbf|I$2y~Y10K&v$zlopgR1FkqV%MKiRh?!{5hWgz#(t~0%a2H`e z-2-jK1fhI@KR18DDj$*Uz`jYX~68oS_sOG`2)J%OdDjl5|whW4AE&jh>40`BsgMM?81nJitUt$ zz0~}1T0k?W(CI2!9LNpx6Q(C9_3s;(`{fj+d-(eqc({Xm$&DO6gBa5L^n+e?EA)z? ziN`DYj^U-LWeAzhxt>}|0?xlZUL&qUHjdPtnF3$Zwd(qqJ;~2N3tC2v{UMctD@ zMoqFpj%13jbV2{w3fM^Xr6hd_wR3dF=Rd$C~=PtWM{qUG5Rx-_>VC7p8&Zru22?(CzORn1C@cgU|_r;1XGYu z7h#Z5lw@)+0V$#~fi$ie|I)Z-1Zi9U(YXHe4$`>($1B4>l&+nf92mVE>@NxJ+%`CG zeZN3YuWUErB}Hc6Uws=tqYfzg{F_(Krqp(ocx6)-Q#o(BuyEvO|bGyg7bE+frBOlH)|N410MWu6!wf<_`kPtIly zkzhUMn*kUeEg*L%#*5M^NKxXA#=B3`+FBSin?FV)BhhL>iGJ(*IZHe*Rx=tL?^%RW zW{vAgm?;@THH)ezOHQC1LD=7Rs(st9jByhWwjh@C{6PuF`!wtO5OvgQG(y%JE$fJM zpcPDqTtLe_*~^<-@VOn-x=Z5v(~&PL;ELsAlDKsujb`7JB)A+0Dnc^QX2=G;j?|4F zr_IS)n7p8rrcZ4U0qr*_WsT{W?0rtf(PY-`*wdxoE51*FX*qR%PkWeBcxmwU*(A~8`hIM18niNl95VzF8iMhaoc_$&phJ4cX9s^9!dA%SHW+F_Mv%`%@}q=!>zDIluQ*# z|M27Ou=Dsw&I=jVRnym8OL|dk9swsjsHtIj0*GSfpAo}CdnUvZsW||KzKp`SA!9I7 z;7(fWlq9mrUio5|5+oARm47}kh?{O{{qfQ87t^SF#CnqygpTDsf3edhLlyIFGFc?F**}?!EQq$$VkWwv0x->f!}EqWh(hN z2(ce9*%#9J*es?b(N+-|pigp+#$r$yF0xndThxFf;uYX&bT~%MANA6}l zXfKKmj3&S~?02@^5l20$zZ{}Yl6nwf%O4+p^A?i zXOs6Q6ZATYr(y(&Rz8wb006=}yu z8)wuL`Xv^(l$tjC#hl94<;XYYsC`s5{e=yrFeMMQa8%+igI{KXZoQG5CLHU z4;Q%~KZk}dlJQ7(cOtQymVICBPv(u6V&f~!v&ycVXkNxr)Xb%g#|goFWAI|2KyMAG z;I9ArE|n!rE9%P+mkY==+Q2!+aO^pfLA9WqVAkjTVS)b5iE|fAr>xvM$wZfP(iqQ$_`D#BZa zp%JD}B*BDo6vu30DXdvxKtOamwKqW$ilJ}>Y+;79d@12=pOJBXM3@gFW{e$?s|f*f z|2RjecI z5QT>$ml{QePk)A}3Q_`lEOt2!_rU9eVU%%sdN=MKw@r?vhH?ntzEiFD7Gfk+5t!|m z{E%ft3c(R4WO#l!zB7`KjQSGK_R`2nK$K_n+T-($aI}SHWFBi-Z}z81i5U{bs)Sn9 zoY<_4G*xsVuAjE2E|@3cLrEeN%)z0%eXf}NHZq^kvEUCHZ{^3#M4{qd-_6s+!h`dJ ziNb>kv8rs6LujrvljUq? z*Y2(hS8Ivr-WGoCG`8$5m2c{urE_8MZdz%o?BKfwFCl#5z-p4H}U3)5@-dd75& zK;@j*n_X*cgKilda2_`n1vQs z2$gZ2sV-?0=CM_oGE%K-}7KSPB%PGZcS~^Y|EYiwqKtBOwz*0>< ztOJ)x&iqCPaM22_meF|%@&&r_AsOleskzuU8ljj~>PqAShVU>z2Y>2z%j#r}UvnYX z%Y&Zl-S?@RCmDtmxpYp60%1!RrKeVH27`~A3i&yzp9{HlWg>&UP01Pevo#fsb?Yd*tg+@K$1py7C|5&pU)Z{$twyvZ1)*ldxNDu=4p^;2dr~3f~5$aVKk6 zMRc}rWF{c<30;eUU;}Zo=wA>IAkz&iGpc%adQda9DCr~vyqP~MSSBn! zwN-WO8aLN!W`B=`V}T!m7nNPL(V=Du3333{`^oRNM`gY`0$N9Kl-!`GgIaiMKNS3U zo2iE}xA_d+hv(Txs@L-Q$nD`!%5!$clc6_d(kkC*4ZNNQm0#c`>if6mXJX~e+H`jM z$TAg*!nM{YHCq&eK3DIDs+&o!4#;mwT+?Ein?4XRrmjz)@#;q1zwMn$p~l1?1Z7P& z+z-AYjoN+s46Zf(jueGkR;i0R`5ic4lO0lGOWid7_!Zk|viweUNuma4*(Be^)&jrL zvSj^C{?(4&5$9mM9T&>tM5HW{^;Bm=ZDRN0DQfArR0aV)AVZa+N?zW{kDLiMFY!-kL-|Ha@7~!DulW1gA)|)wByFm)zPXZ{>}eP0=jT?yk*Jb=;b{ zt>i9oS(jwRO_khXG8N9?GeiMt@ye*WsKr!?*7n6^&|@o@E-G;SWJV8W>8yBs?Azo3 zkR&1SHd9`Ht2s>y_w%F-xoXRqP;R-z4M^UvwaHL}5|5rxv)eE&=_nm(C+{)c%v&e^ zyV&Qx52B)*7e-3w(*{*p)Aikm-fA&e;aI=5clfFeE_j0Z`*Fi^Eq_RXY?XT@*5xLfvBL z_ua7(Cf$vNxzT3@Xrp2>JHxHQwlrQG+l(oYB@;Kcca9&Nz`GEg_y%QjjsiVR4g%#~ zy`0-~*)}i_v&UzRzRvCCOfY13XFJf1jc8Trvqw^3n?)sjUo@_zuS)g$4Nqt=+EOX9ac(lqDCupaWUI3U_-yOrC!KM$Yn2e#!{jdm8;}55ZUq(f z!}k@Pk9Fbsj97@Smk;LMUeT?h?s&k#3}1?ae%)4a@^KtvHzKce%L=p6Pt}e>9fA;)=26k;3hIbsVZN2`mmk#hAKl0TU z6L+@<1>TBr{CesV4+u_m4Wy%|^go`=B87_ip#hClGG@ySia+}C(tQgfANMbggj!r$y$&>URop@l z)g>mooYSQP4imxC@zCSS&Y$SKP@{LNEp&r|0_S&VUJYCHylXR1o)@2IzUc1SS4$s9 zBiD!eqX#xmd-By0j-+%SMA=}+MDUE{?2dR!r>K2sr82E$C95A>_}Buq@5_t3t6+Ju zcno=zb;ARRHDDarbM_dBdmu>pGX2MD30|!{*4?uCpj#Nz4yJk&229ZMG@~Kb#>fyr zB=h9@VIut=2Lp`~l7aAPNrU`3_+mtB83+J2KPD7$^PxG{t&xEywI^gELIEK*VLk6j!_I&wp zlU<7W6q4yilHH17Kx2Y1Mv2zg{8oJ6IqlQ+*-u1Cz>=#&Jcds?oVDm4L|a7pJitKfTdKAxf8d=I;+jx>f*l zdGVgp2AM)pKOBD?v=El1dO|(r-`_|64Z<1D0RL>KIg zwDXKl{Jir1FoYee7~Ss}osmCW7I}-$7WS%t zeXZlK;aj8*J^&k2L?UJ%opthS;Rh~ea%pzj%CFS6sg~3LK)%)d zR&b&}%gg6ch7rO zet=sKd*Xi}Ma7NYB?XYqI?Kc`rkUYtvFmFj+F5vE)k<9RZigE;>eeAi;!#PeC((~k z7k&GvR+zlbQ`5i5j3>fDzhthSv~*qaL610bx=3~YilwATSYsuG#esYtkRprN)?!nv z3k{(rshKyQJKk=|JLh0d!$iQWmb!Oj@7Sfx?b|?SR*EjUEFC)$!u$1``VN1>N#X+Q zmactI%=6D81|+Qqi+M{|5JBR^)me+EmMWvZIIdJ}8WHa_>w-o}Wl0nX;#~|fg{UC|m z*^WH~d;NQ@T!xWJg7HxJjBlP$$hEl`fprwMo^(u3G~xnD{^5RuU+q9wFNa^2cde~w zci|Twj_Fsj62(f)TuZhZSZnsa;YDd{!a<_QvYN$Yl#6p_A4Dge+&!~N&QGmIZghuM zydY*ucFr?$7hcLtTYKUOk@0BVCeJpJ1`+-m5+pfWu;HO#&09b)3*3c~$Q0Sw8uO6DRhvveN3LsM9G1Xu8gkI?4g(naNgQ^4 zV7!tN-9waxX8_3-IJDC;)}ubnf~|?iYN{gRWdkOg5e&b8m3)e} zujawaS5nR0(Ij#5nVt4;jstQHT_x#uhIncgUHZ=^Rp_}qPB=A8GxHmcKSo33JHQRK zMU58D;?QTcLS#P5CPZ6>YtwMmoLXBxFWj zehI?~E!KbJbH5m3!xx;tsUL8~$fXv}J^O{2i*TX4^##8NmAi*m+l@9;6D*VJ6JYF3 zjfYL3Vmv&R==7LgZvCUppi5EVtbh3donQ3Pr9ODbCvLU(Ft0wqaVA->39%g zac|+VdMw4Vw+3^p&NMYzSuAJOy|(h9<0w;EpnYr$p^+|=AEaKI9DZulr}e$S>l%tP z#D~WRI|P$#5_c5 zj1=e|uD3d4YL9f2^JI$! zvTyO>BN8Glh1doO74(!-y0=kmY7^v$?Q#ZHpw#yUJA0;}@1PZ;-#JDJYY}waYBm?OuxP4ORh%5*+Cez0wyFeeJS-MNy zN@iDW_(*~B>pO~_^}MsNSP+99^V{B4a2AT&2+2d(Q)_bw(ac@#T0h!nso#4n73MNW zVf%Zqi?n(C4|L;4sO>SgI&pRW2{)(d21T9$O6fIJ#f^AkMc+MTkA-c zy%4Z^l`*du)#vPY2{-QUMW|?J56i3WTIc#W<3eO-+y)3P>52Q(sL}nLdZgFnpeV8Z z@UEqQ#O#O^_xamDz|`;5nIIE<5vCTD8>8$Ap{}s*3a&tZ4V)5CcvM+m{FU^rH|lKf z7r*VdqdE&@J-wjj{UY zSMb6sg?lBA;T}}^>I-r210$mnP;KlN@nuQDBej$4)=?;p?khzJbR-0Z=o5t$QkNq-hM{dr*BqtfGUbSp zi~@IW%iDLjnM%S$_m+U;LB$qm*#TL0-rh%(5k{Hl;fFSR15^vMhpg5rMT+8_&c`o3 z#Qfcdle$zp9-C+t+w&AoI7B-PVUYQ6Fr~I12Ee}D7{g@(yx0j%&He2)z5#qhINqTD zj5Ypln*TIfBMORX7-;TS0)pEA&T#oR%>L78APFwetwkmf?c7?+#@$-P9mIGu^>DXv z`zOY#zx<(Zy_yrT_@mv zd5B}3cC-U_N{WF_kxfqqu9OLO*MO^ zE?$hwvPgT;WWuc+2H)|ljUr|PKb2$CWOOmRY#7v|bl&D|VS?~A^4i>{bV?vO7FVGj zcNvPq#YRtG&h9=XgnNX0;?#A9ztY9&3ID{*-?DBYq}B5JDdm~E%o*^Oc>Sd5r+u_n zqxLXrmI|?Q^N^)1-FZ4G&LJWpLhggpC={iGPKs-B0_I+8`>B1d(krJ9x7XRx*O^>2^xnYf&81 zF7G)S?wq+S+`pgB4r9L6aaYh9O?$hKBbtr>w~?3$?k|Ihs9SJPGJv97%|u>DIN2Tt z6YM6=EmuA4ljg1yFlVIBG$ru{c&~qFgIeubDEn;GG?ri(YZ(;@=SKh_59o7?EjXS6 zTt$lEKi?aDmQ<84h)ge13X~y=Mowh6otNhk;$_Pt*@qa5GKX`YN5N&v3c@;?jEy^a z1x&IugnBp1;jOdWKhiEyq)>{v1{D>h7i1WYSRAU@I74fJ7t83Du*+-$ zXf-B55~R^qk6@ROLd;b@qL@kp{t}ImCcMFzl==l3l#qF2k4pQOH=Ca$f>1)#wcSkl=)_Yk3SC$z>j9WlsqogUD zU0%R!bD5{NHg8QrG_){#;;bq_gDzvKfCk~)VA-XQgsg@<;a0Ls(?xT#rt_Uh z)Hk}H2$ofe*-I9-gvwKOdO`4nZ@JK_Xd?kw1}B;>gxFS^Dt#W%Es>;z&=go)&T2qX z$8zov&>oCteTWinUZj#sb}^pX4W1xX(!Nl>Dar%9y?=9fFvVb2iidUW^hXzjPh)zD zL(7etj7nSfPU3$SWcKAYHLg=4eShg1Z}_C(tm;8hMd7$qg?D~W@UszVjj2i|g!4t& zffZl&$ZbD70d9u}IcfNX{eb=~QTpilvAv0j*T25=PBk>{W1Io~XYsV*R8_f%)!iH0 z0y{k;Aj&Tl;wIg&`^l~xkF#iL4L$OE+c_xY<(A9YEK95Va|(gnr5Drpc_lgnEqBkY zP};ilGe@@eX3F`~F`O+!v;FI9+jctN`yvYr6=OF=Pug#2kJh8;Wo#YTq^VVL#E)jv zEwa#o408$E-PtXr(}L9=Ree9Z)vF>E^X8gv+f!mjhT7Y)3c0(KogL@0Jr*YSr5R_C zSc=BTOys)DwHdxxbi%rKQ>LczW|BY?R(3ct%yq0a_a41k_`7ekTzCW>fUm1a85L$^ zHCAUf)EgX6dz2oW@f4GSlb26#jUHCtzGU=$!DHxTv}3^BJSgu}j3=`rXz`KT1*>h_ z>N@kYP8xw}=M+aPYzg**;9;bHV6(3lSEc@7d=aRFGRxE=O={c#w1ODY7?uJG7igM- zVwW(doX+&!waoq*zvtJW#$S-fn-xUCx!i1CxzdJjr7j_jPp2EPf`rAf9><&ASA{2d zzYl|8u9LYmgv6W!)F9m#Z0G+=|!%ddqbtO zM%aaV)Oqror0ruEXF#tG9S@4)U|@EU#RwH8e{Jwj7Q32+1Hl$(+5t{Vt2V1noP$EQ zGvto5=op#BQ;McU`3{W9ogyIJ-YFTB%#R$mRQWQPwwtQnjatQvgxOcR#sF}W5Z{>Q z{1qsa3JiIVG~N_TYuLrZzsUH1Gt_^YP~b(Zh6aRdsGttYe<$PrPignBE!sc!68UFa z1gsZ|m>8wH#;h4VbZGA?T)3@Kch%Si z^)lN5cu3Gljfm@Gvkg|EGsamSgnK9(UHaG-fL~b_QEpx2xVj_Qzeu?pt}v$}`dYL0 z!Gfo)a6*Z+Eoe5lj-Dlwe7l&L3$ncyvm*u_i?7L+#JJ{YC? z`D24$fZbf1YFPI!ubbvv*KX&h2zn%U1(qSemd?2RUHW0Tn~9C&uOz==&30FW&7A!n zirmUD1uU%m8ORBbqI8IlA5tA+-Qq+)A{;TuKHp49np&3-{^~+i1_LVpRIYGQ?`L19 zeMUT;vWOr*Ql~tVQ)iP5)vF-?O46EruYu4V)Cr{JC3kuD5%FSG#Y9WBS~W?LHC^5h z#H}B^#d4NKEaLir{VFWobtm57-(brr~eT?mDC#NlC=Wl+~>1 zgy?sjf)hbrT}Fy9unAA3tZ0e&ic^E;cbNQ*qiNcP+BSW~*oJ#3K0QzSj`)7;Tqvih z`yFrMs3Ls#P3SU{9zG>#+;1!8blrMjcs%f&#ob&|OC8#VE~H0EY$2=Z|4{Z$(Urd2 zx^K)8+qP}nb}F{5ifx;fRBYQu#kOrbIrX3G?78MTt(~^_zIn$t+PE4QU+-_n^LwQC zkl{uH=*yMpeo-ts+az0Ymu@jNE+d(}aB^(*PSYKq7u7h3aVP+9 z*fAV$P;vmD$C6;U7--3DK)|^svjb=p0CfF?Ids>LNLFXL9$Ccv(saANc?*-9W8Tqq zRlMA}^Lq?7GT)pAZuI8e@53{G+P-O|WnSKizj4MJvpV@a{5*|w$mjSsQQcnEW~P=i zscDuv-fTq*EntvQEeV=0Q|tS(>8sHCH$tQ6C5?P+S(7GvqGT#~+qqXR zb(@7a$W~nTUBvTl3%TP183LP$Tx{xNcYXSq&G|s`|PJtCX%Pw=*|alzgsP z`ExygpJ2{J7c29QpI+y4_!XdMWtkphFO1c+@L4bhYXK7((M$+?l6A_L6WB$B69 z*guA_QWL_BGIJlVU^3)}RNj~qkv2jcQEq8}^JQ7JMv=F-N8!1T>H*#@_@IK86lSBR zp&sR2cAV2+Kqzj=#Bb4x9brAaV=7)CKw2zEH~XSUcae_Z-%4fzcfmx}~Obb}W#?pt-ToJ?K33UkR>dF^M*eYsN ztITe!7S$1Ak++!&c#vMBcFwWi*Z>xzmVdiM@fO3Z*)unp(F2H%;tq+72>Ym2$!Ofh z<6)r}Ef(!niR1%|rSLr}M2yq`wGo6G?u1{MaCZsi?FuKV+&NQQBF@cS99{%;^Mzg` zB8{UlzQfFJ;)2grbvjKC7fOb&3Ay<3PkE({zT`eV@y0#WfS+oL^G!P?x7<^dsFvA9 zVB#7((i)C+~D7F`Tr-S{m&46sqOBevxxTnL+2@}=s1HjK^T3IQ%}e(6nZdtja=TQvoAO3xK0N>Fa2^il$mkO90V>|Q^?kufgeO-Vn zV+VmCNKD?*oe}`P(M@fj1S)U&jyZ_cPr_eeI-lC41rlJ%sinIFO9LQJNCP$Q*2e9E zTE}*_aYwh-zqS`=1V}KLrd>X-6;|T6bbQ7*iqpT4#-DP;j-(Vw z-woVBhItaOmRm}j`v`B|gQ@F}9ei5`n$KV^^Yhu+3Jb4t;=PO;noNQXDd{ArC-hqbTripC45WTThk&yE~c<%M}vDgHqRXAenKiau{xFqdNxg z7YmM3nWtL@27@=AUITrI2^ZU{T_U|p*tq1@=U2WDh! z^vSO8K9H?;W*yP~NM>JqY6{mzfFxNL{ z=?MqYLu)L*c6*^yVIm5%ZdItjr|95ohjw3iI2>53q(`0n0D^dF~_9jK@-Z$?B zi5VklZFxD#5VS=B2R6J)^%DTo_|0v+GOK({0xijl`AHNq2e|lA&Oi*?D6+3L6wIn( zZk6U_y*{k8$iwpu-_yuMR#YNRfnz zi>o{?Fcb}p(4xM$iJ52?{HFVgU}Cg<(*c{TDoO>iTfa_@QU_a}6G&?EqOhd|N#<;Z zY%`E7^V}R#W_FT|C!|P|j5z6ML<~1&^1{TX4&~^M&BmC~mgE{Oe}yQ&9HkXF;mdb^ z4>`C#i-CI6UNRCx*fw(^LS<$iRz@io=D5gI^Mbr>nV8ONq|iAc^Gnm{vis%g%T)fx<>d8+d>jxsyYK!4KMJHe=v@FN&Nc}zNVP7&uZcnD|VlnZu zg@QNfp(KyUzgq^H@&3g_Iz#r1#XJANk+)S|i;M`qe(mYnC_A#Vmve>*p-idVO7K=0 zLHQ})0&>-E&9A<|{m@Rv%e7QL;6ej?DqbMJ%J#TEWQHgKXhJjMUsZbo9(sMS8{MTd zRT5AMzxS+ke@E&Xs)*%|YJ~Ks|KJ2`Z^#N#+eHm2r`!{Z#7YilR-;9PRa2rzFEgrh zDC?(7E!|_SQ$?E?bW*ECq|v%psMvFH3>DOIBP~E7gk>VDrPDE#cONLjN)o0{iq3P> z&U(yL;mEp>;dq|PteCt8+W%&C>`9x_8AcTw_aE=lo7n3|PlTaJ_3|ih0n@ zER9jgy&Nwu1~A#qlG^fuqv3Oe!ABsj+Zvb8Rl0AUk}S@Lz0@T=Q z8x#<*ljoyHQ+pkzC8Nx|Bo3=Bc|u4n&PuDS;ty;1xKzptQVnKmti6fUMYK5!bbQ(g zrg!d@-HVb2#>Ng=WRKc1BxmGvMWugTJCXVcl8Ev<*2CMEh|=g^3!lz zA}ce(%-4*bG~7m0s;E1{d6KRbBQ?opbQW`O>nSF#$~t03{c|h(P#ueVw_Iv$O4Pf^ zOtOUVQ(E|5Ei|%E$n%b2i0`^$xg#~{3<{GLq#I66qP`6YskE{qD-KXs(P!r7_4(=3 zLojkp_DwtI%M>WPoOg1DcPe`ZZ!^_Bm!wi-KB*e*Hj393$TH>Y0|9w@=So-YE;=&b zoGb`P^j#eSuL~SMiAwl@CWGQVMWU69(wd$TUWu`!_$wQWO|zv~_0or06-85eUrSB` zBTMBcNH2%MrgDE{T2d*rvSZhxpO;!R=0{iX^pCgpCefvM*B5EWtqC7E{E)gaRWA;T zU9$e&kqBRq17B1Czn`8rT4M+4!~>O1)Dcdq14hka2t08Bs`(dO{EGToP5cUbx_JtXS({@_O2cLjT@yrYw*LKmXL#6^B+z*>tAO!=m zTv71c#C9DjHl>UOO|np_8et=no7v?kGKRWDh%&~O!L~p!lYZ02jecXw>+*^iLnS;d z-#S4+b>sfS5XdChgZp2jNr1%{u&8`N1M$6rvOzHxWJsj?a1PBudFu%#+BQd+C^0J9 zZ1gCQPGm!60mvn#%r5`o;d7fXM{VPTb)t2n7P)3JyJJIITUyuS6gr;h!x+=Bx`IyD z&=fni(D{idBhKHQw4rJvio5jDyRueNsnT;FR_;OowFL%-*!;}(L`*A>T)t3ktK~t( zknL03%~z?Bk5MY55s6b$b0a$WfYx zobV`0r|tVIL0!y%5mTsjvSA`!!aBPG2T2Bon~{+}P)g(S0~UN0+volwYpibD*vHIqDeLy(JboYA$Q-UE1MI}7P^~I|XV{N> z9A&ZOzNP}q1Cj4^sxl;`WV}^dUrHU;H$1Pr`5DJyDW7>L2+39a#d2g-^3GHSQWQC_G0&GWMsqP?D-cAT>BhDN z7e+&?r$bBG`1+T|{68=K|6LCJ1B32SouT|kd8hlA+WWs(-u=5AkTbRY>sa_NR)WcY zwzmFX8@+$T=l|8UY5HHhv#aLD$|8`zVji?w+HrKs7vM4k%*0IM2sK#`rxp2Bvh__f zcbP$ggCvB^mGqY#gc}L0Ya1d1T1S+#iLT?Rji1wP4LtY%(#MW#P7}t6S>j9HD`t{e zM$+Q_TiT5Mb|7O{N+rMK)|&=kM2cE_^gneBdDUQl0>)F9 z38h5X*3lT&CqZ|6QfZy+rVpm@Da;}jFj8)2;4vXu+OWL7#+>n;xNFPLVf-d`g$OMg zo)GS?o)Nq2NHQ0UC5B^c*O7QO4pVQ;8CXk{M!pst=eXzZo?w3K`!?Un)^D(iA^xFH zlLmAQ`A#(m3K;JBoMsyz3OJ}vuh*o~JEWN2RQKq1*^OXrXCA=5|G~KLHa*u{=LoqN zV04r^C!^96!Cz)OU@SC5)PlpVwj7mYjda4c1~9yF0E>Km47wr2220gQ)>Ha*j4x_3 zir8-h@x@Sw7X1a$I{g}*mrW?4B2gd-y5igg6OSk6jl>Bau{b1oMSaEk#8H0pfGp>q z6;jT-5S)dThJ^0=<<{G+D38oBCXd9j!j1X_h4qBV^#n$8K?P$2I&Xv0LRm6*8397> z4eL~3}+Dxi?LsPd@t3M@O19o2|)U>aNQ7xG3W9S?Ho zZ{VB|Z-;{BUWiED9rcqhGR0%4fiENJHu9Kp`#0w;m-?*_>QB@L%%R2}L@m7igF^{P zW2}~h&wtg+|Km0IxAN|vR&d>EHL=d$mjeR(|EiB^V#Hu&Vr0zlSL0*+|0$9+wcK$f z(7vRx<>H1f>sTYQM@}&et1))g5KacDT?+opd5R8CpGH{Kkr+ovQN)AL`KJ zt=vVj+aB2KqTL$V`=sSZ9C70<->u`cJIJ;5$ZkRyz5x^P4kyTs-W}NR4HkJV4UMyW zX$@6?Izefs+nlZ3^_)YQ5x-M+Q*Q^sF)K1}SD$LZ)gk2Kvgb7@tPjnRl6$WB~j6$NXqB8dp}Ys-XC8OqB)monWH3e$;^~1 zIWnI&vs%a(m5p^<8|x^hJ@!zW<~x5*oMc!zu$~$RxKz4786wMAAo(UJnXALtWH#Dx zrRYn_JO?LCNsF&D#au`YG`(A zwsD=x>l}|7{GOhbFH_{m6th5T3oQ@I0#tis*7^W52}yx_MCY*;?NPrXv7j!b|7n{e z^_o&voM#=qxd+SQu%m8 zx=oW}ebu!1_Y^PRjF%HYQchyg8IqH*w#zKdZ0aTz{+maS!ALuP(_ckex;5kX7;8irw1M z3%FcflOsQk(2#8WVDJrAv-RmfTX8l2sdZsi7dCWB`=)teI;)>Ckg@^A+XfFiU^(q> ziSlFIb!^6f4rm{N8b7 z!9Evn%|5ud)JWPb8lL{pvWqv~c41Njgn3=;-%b&CchL3e3%_q~eD<; z&;Fq&22<5O8LCALffa1a%O^MeF0=c0_{qjoZR|epS&Rh+W+}0DK*AZ9oVmGL9(qnr zk^}-Cwg7!?(;a?ztToTXyE;3Yth;2|)Sg^*r+|H%(|FwoXz_+pXAnd-ol2HlCBCSB z#+k}f5I=V_3JrX5cs0oT64VfKIt}5lQ|LK(OT?sU^J@fryOB#3(KFJ>m~_y&<_|4E z-h@uh=`WmdafLS$F^-asH3}=WHTHzl+2yS+d}}{En(u;{YL)yHJ&`<%nzuWZ3LsaQ zo569sCzp)FiWHg{-8u|72H1@sF~61d(t!Bu&LVl2_*G!{V@!A{U0FXgd&?W64YgFq zTyM;cR~;FnmJ3H+MKaaO8Ou8m6N}#5=*_U<>|YbPv}cdBi9hE399K2H&QOo3FT(bXps_TTSo3*nX~eq;M8&q|8rs`7SJTLE{} z!L7I5i6mMh&lOmRLUJPsVYphC{x;v~o-+9~6_tM^#i1whDsLhxyEV3E#Zs{i-eP~U z{*f>d{;aYbie3fO#irdmoC|_n1qW_(M*Hiu#KJBDExxe1!~eXLYUl0#;1~QR>3dzm z!St`)W62$im1zAv^bZ)GTkD4%wTnLcT7;eK{b$Y?fgQcG>wK+ehybHB>7XW5 zOJU2dWQ&}+ryaKinyR=h@#N;TMu?)vq(@56^)Q|r^2mZPvn{DDBTQBH=L*R%2SH#m zN{D!ka;Y)$J~5W_h1S8p2GZTZsUYksk;iDgo4dF>arrs3raZ=H8CLd*Hpj%TOE1TM z<{It_GKEd~Y+leDE_!`2CQT{+8_K;ni5v-ppGP2eQd`nqz_tvA=ir$dHJxOt#eatj z-_ly&a``SA1{h(IL33^)l#g`37s8-%)t%o}pOA{Wz>{E#_;LGC#e9-o__DbIj9K|d z&#D$A*yyFENX6*lEKfSat7u^HfNtH4g*a6>Fu|D@Wts`?;}!NntW(X8hwC!S;4X# zbaxC{_xl&z^gr|Ue_wU~$>gaP{I0*qfq-1B{*qw+&xgAInaTgT*BTi*|F22ze_e4e zy`jBT7Z+c+j^*#jSrCvxfJ1A+pyN|&#}aEpfIt%cgNOW4!%X}W#z?1RH8;x9nzXBI ze^9SzH&HjQsaKH~s@7@eFRm@EZLV2qR8+}a7KGpBIB#cVa2O&7hF*Vv`hG7Rb-iD8 zOsuxJhm{DtEExkas#V?hI(V~2F~p4>{^I4QPrDvHghpW9O>%mz#>uC0rg%A5*Q>HizoQGgUC-&@j2Lg4EIqMATR;+*%OeL3@ng#+7my) z0QZsd@UaHUum{V0$l>IvMBkGF+{1E1=INn@@5_)TFnSore5!!I67I)-!(it<)Y~K7 z1972-ki27U_mKtp9b1F*5{k2({MEAYg22!n^PL>#H&*`bw(kda;okW|kI!_&$AO=6 z{Ji-R02znW3hfDzAT%yVkFcN!p-?Ql6#(F9JIozo865yhSe7AwbXM`hN}@yHvcujf z*3~lpl?CBR6$jB_`B%A^sK6c8Mx}o>u*oW{j!DHLF;*l<{~L}wCZUkYiHg;ta$^LG zbxTg{4=S~rN<@~lsaZzWcoEHn9112|`Ax66WdSYom|PN;K;~X?nI3meF&674C{w24 zj4XmpiFBK)rzQHN+dQt2Sv4TfT(Jp~zW7zI94Qg50NhTS5{e;FZ5mM#y~8qsakrM2 z)^$GP@3hH)iNi#D)Df+ z;}lmbnrVaZmyfLf2Bkv|P0i=r8fgdnc#+f_2(t+bESYn#j?PA-+7nFsDKA#nnU+kVMS4DV@^S^%FIRpSYW<)S%hnUZigZS-ciuBr} z`F8{CRqAMc+Jrg|eM7>k3oAMwq}tbHmS;*1oT`MD>-c9%;M%u9w|`HM_D)MrA0Idc zh1nHm6}mR)@-x`mCrsdTT&BENIlTsEb)OWkYv!KH*tP$dX%(S&$9^zH=oECva%mBI zCQO&<-xVw*KZp|tRSG7e0iA7DtmH?mu!L@63$q4g`Udg)6SwmN%fe>2E~YLOs=u~K zE(`l`h}@4=@f_j31&lcA+^f|HpO>NPY4Hk)=-a5jj?55=nrv-vqm`3eGc0Z}%g7@3a zPfUjvvs@EBde}o!-N!*@g}^!r3^CQ+lkeOFxYE%^gDp&hw!dDt>qqYffdC?RD>_!0|D*LM{)t9 z)ZfL5f?%aZvjp1vabSn5SA&G#bhF;_cG9zQP~CR!hMNYd>~_Y)s}+C~7|!zvGO?0S zfBDyo1jIn(pq24WC>8}H>nxTfRU~`8(K(smRRXChB!GG}TL9Gj@?zm(tpEzmczD&# zh*5xKdQQ?H9qU%FFz7v26kUL3Kki#pq(a*!&L155AB;W46F|Wl^NcQIV@V`-9A`Rf z#4!Q;TAEE?BnhnyP=l%tAx-2S>`k^?xZw+s3_D@j!}Pr*s(vOPTAfA(qNzuduNI>$ zy|5rvHb$Rof7e}`LyY^5dNU1JM|D)g2Iy=eJ?+(}`{4U2j#aflFpjzCKM{HLkG2=* z(0MF>2plFlGB>Em2@;H{nn|ia80ubArax$-3!>3{*C$#&&|Q{L&c%yr3>j+E!4yN{_|{1L zc9+cKqQQh8J|fgjp~pBYrqD7tIk%BA538#(nn8bn3k>52=>4TTIZ=-$PDZiWRX8qi zt0v@#gbuLfrRL%*^CG_EZs z`T}hBGD;4HKqjk37NtFGPZa`9X81w38Bg@^(Et7mnJ&bO;oLx^3Q z>=RfL-5nun&M#@}B&8!9Wle6ClWdgDHFRsMRivd=am`9&H`NPy9qalLytu7&D?Xm} z7yQ#!4$?$DcR=RYmxTl=CM;=7C}bw{|zn}K32El(dZ`bz}2L~&6k0QSDC zjt*UObFI*E3d&|#d(}GrpdkV@T{NeHCVoxlEvvBl6f-|xyX;*{m7eXyH>lfeW*P1+ zRA~8jEmL)GWv$spOw$F~%(k!iiVvF#-Nugu5^=U)3WcH`bi0fp>42H*)h@C#YbA*< z4S~s4$u?xIpgsY9e(%0y{NrWd^zP>3JEFIdVJWNdFxE{zVPYX^Uk)LP{FF`P#C13V ztWG1KA(r;i)Lh;K;=4^D_3}LZ02PdDt1y{`&Hf6<>giKs8Z2EK2Sq{qd!qqc#7+CS zuK%}~5EHA&JS~q9>PR8v4L`~kgdfK)!A)~Sg=1y}ieq8~{U63tAumb#?E{BJW+Z@L zUkJwi_p-jnZK!nj^bti8ezAnC)rhm42S#lAg3vqM8SANzN3{^7>>E3u)r>JYUg3z` z8$6%kToUtB+zmx=dv_6H{{upXF3F$k&p&5!vzo!~F(Swuzhrsesw3JsX9ksAUJ92k z;Q5leCAQN-^4NFPJSKw$2J~e;@U|H1(8#1@vIsJ6$UDhMra1nBPECx^rkGD5A1b8; z1}&kS1&rzk%xnxv=a8uodq|9stf}Jdox#}`!1qVQM>Mp5jK!&d@1|-32jKuBDrhtX z*xLhs$5a~zMEIs648KTFG|249_+`qGV?G!s<^IldpiU&u6-y^^T@p;HtZ5hrDK0V= z%Mu1(JH}w-%@VPlt(r6T31K<)-0QU!T2|Zh%u52J(2lyd*j*=1@*T!_q4x+o@%$4n?A+Jj>>wFc|(IF?~;l~m-My!h++A~*yOS4qyV?CoG z>jj5F6zvEI*OpMMyr)zb#c67N=3rX(<2ZHA9@=OM7JNeYiSOF_#leLY4l7acPRCB$ zs?|Ai>J(w9vz_i17Kcv%IZ)WbW31`7m$5J=o+wVFc?`9BvoXzWbc@#QHj->#K)ndamf8ShZid%|Hd^&Z0$X6Fak{S zx$(#w-xbILw?~ii1^3N#`h(kOPn;LS&_)+O_ytvJbrCGCcB-shRUh_jO zDR%A|34+x4cd;7irU+lQ0>3ewJ%L_ z$G(9MV_As8ihfZJlW99$OEP*rgwhB>%v;IT4ccH9SQhR(`6bBeYLHp~t1Q_Gi+Vsc zrtQYu398Zf2;0nTFSz1%uON)d1IT|JdDxr+KDi<)1G?Tk8d8X;})*i z))85SNGLFAQ_D%RUzS*->$QvL`S{8f`xuB?_} zm70mCuXD68MyfKY)Bwk}ta`87lz)^}E>6dIf>WFbBuJ-hPN?b=d@We4O?#G_wc@H) zt7Rk9kgm}*s4BCVQLIh=b5gM>v>ZhA>CT^U9hyn&3VL7a%T%z74`Y;G`>6&EhteOH_rzlk>lVBUCf624s$UIm{m*CbwG zCgE*UWzMjDkDLMx8*&bIHN6W5g(H8;B$R)v9ejq6H$f(kmMiMN=93ZHCGlJmyT3)z z1emV8d|HopZrk4=#@Rv8=n}_V?jSB!*;Tg6AnRf%A66R(q(l#Yc}%PL6JHHI4#_2_ z8N4gTHsbd~I`@H2L51+b(z~;gO-q_=`AN)&;!)>Pg6rGN270g(0n+YOnOs2CU{&(9 zwV3DdFT{wxIpPlZ&+Vn5pi^-26q^#_kF;PBSD0fy7r=7k^xr^VMg~Uxq-D-&C z)7fMFkJzj{*~?}e2OF*QYtGWD$jG#C_+qXj(t;ec=<3D-AqiUzKlrlipIrJQ(zuB` z!rjQlC^?O58XGK_Yvt$Hb4DcCRU(7~ITIQ!L)s5O=SjFChBqHgUr;>ViMcUScN?M2 zpxFY}bK?{@(Z#*R?8R#@TRxEor^R>zlP!`v)YPdBR4f98TuEroiN00b$hX&#;}Ua& zSmAwQ=V^s}bP1LznTTc>MMF)?m9yOg+?ULxL++f@9X6aHPuc{q;ZarW(;N?7D^Gn1 z30vqr9Xf$UWZ2f0Fcb$0~rKV6oe*vBBhh=Ed z5Dlcu&b>x{T!LU{z#EQD7xw$G<^~telD{sZJ&Y@A;W}02-6ST-Nld;1D1D2v8W9Lm zQ=VA{7AKCtOFSCJ|Fxy&Gr?G*X7V0Sh`WLlZYLqA##>u@-rrD{&O<8h(7ee%t;*wH zb^0J84u?2mwdAI)zt6_U~uwyq2^(LxScUoy0r zJ|B+b2||jdx3NRJ{o_uo->^tfhLF9D4#lAjuMFtunruZe;e)1rMiAGK3hrj4HL*EM zWN@WX9`hbk!fzIrP#Ar*YhdKkAL4WY?x7$`h?ew)ETnm^YiIXKZm<|jY)u`R=75vu z+CFdzy=9R_RvUvZkkqNjh69Mx#a9j~h)#jMU;&r)5ofQOU(IuGObm0^_Y)YJ8YBLG zljvWZE&cGwYHOyPo1+b*jgtWtqof^LLSvgKljX`6EJ-?u){IgQ19lYId)ah!bAtWR zXna@1FMn-0kzAmk?`)KkkBzy7z@#z`s>F3VAWj5s@a}%S7hkl6{_P1ES(h1VmpET% zXVX4)GQ@T&9&5mOya2&=4ON}Rw%X@V^4!1=A9T4@CaoCuN+nz&AxPi5K}Dy#w0jo4 zZ5U@JzqJ|*M#)XQbTX+D7|Es@%JA&s|E<2UnZT+f+_8tP!HI8@C(*DF)3kuCbe~U| zCd^hB^8_1A##fOoHmH}G@>PaRQeuIER@z4ef>t97eW&v|%bhCtdRf(7g#S~XcB;K% zES>U2dZkYF7<<;g!QCP|lZba6nJgtoLGT5fYw?WJBo0q5WYm7nw)^KSoQnK9j zpwrcrbEVX8D=$g;YlbLTBA6rtvWP1Io8$ae=*nYP=c@@;3jI8YXp65=CQ2l4D5^q1 zYAnCR$tuz^NQx0x56qtylYAtao_@%(%lG!qwRau^h2O)coQKTz zH?aNryTGpg+n4=|g3%X`A_zWL@(|y(rAnYa)#4(C4I$?tu#TG^L4PazIZNE+uWsdOHd25budGPjX?T4 zuyccSVU0e|13?`@y^q#ia)ZvU9q2RO&&XwL2dLDEsuD711*0)iHuOFq@&4%*+dx^H zVBZz6Ax!^>R;=QEbj<*v(&KK34TxhSDEfZ0R@?yxxaQupTkqDe_p1?hxjyIgSro(Q zVjXl;5ooglV7pe{S$Cx8Hm0cebc2)G%Cyw9jJWn9s>$!olGk5^C{Ij%`k-mWzD%vL zLj0|87v=_jpbbhbPVp2ypbY~4LJ;tR2jusZ7?5jDOu7v4J6=!_{JriArRLHMSHZNn z!JeHd(Vd8I0Us4=zh&Tie}#I}(mb~<{Ejby=tI~|;{l{Z1bH#6bJh+yI@ROO%SXUt&_+k;ok-kAR}2ZT*1;u;2ol88AvprY4y z!dSGhScHz2foBRHP289khsbgfcHlwm1lK^W8fz*TG#*|o&!mvh5w}6SK zEx`vci9E;j38$viZLp)TjMRZyzR)cW-j3`lne5*(?(a(N1#}JlPP%=PIuekIJlC5h17IWo)7S{zz~nZA2p zLP)j@3Q=w%r|mcaQC)wHU(*tn+-;w7PO=Y}vqTC9>gYB|OXG*m;yJ8U`s|edO$8(U z@R&SV1n1Igh8y@dN7vxSFZdSpN|%he+Z7@^$2gZ^1zol3+-v!osa$~H@Pbkzc9z4x z6_(_dgD8vTwQp5w=HrPOI3kVR(ewf0mjENBanAl)q ztf=FbV6vnHvc-msF?WXWF$<&9hHV6+h1oIA9*bia2SsH4OdLdB&W_dOk`StUys@m| zt4z2RTu+Kp5=qvx{k^ZkG1%8k#d#A~Ob!887b6c^;ZZhk8>44r533`}qpX}@>xWCw z^N3IVp0wEW&w_aFlPjR+P|yf{ypBsOMVs&`PUm3ooYv1mzB!#4KkT|Plf20`oionv zJpvmmOku5=uUQH5gQa+V3GR=97Fd%H=^eD3ET#7PgHq`EdXKqJ+Vjeo;f{ph{usgN zf^}rTIQ66`t-$FoxQE3f>)=xd^J2r2vBp~J0q#q2txCbr6{)htOlxz=d(ktYlrq6E zW?j(7v1+r5d(l|Y?0(Jfs$X?vnUTM+#+~{=&>#K4s0GiCk@4tx{KHgn4a5H0;8?~E zct`H{=E$Y$ocG2iA=XVo-8Gdk3=e3M=;b*9pzp9jESc6dGQ>HD+e#Oshoq#s{iLN= zWwb`Ga^38SHXdTJnt%^d8eb}qZ7^{3Y(ta0?I8PTSztyr#}BmWScIP7L~GA;KS2m0 zj0;kZvY_<>T-%%|IBWSIGwqfeGA;`8)A`pmA{NgOr%ydgYxjfc!q8Y`kjp}gq$B)x z0M8vdi4Eb^9itm+Zi*jMs64^5+Q2%CI;2$LcoQsGD<$a-R_7_8%eJ*gDsnE zbwd{(Wq?+0igw6>irL^XGVyR`@)C z{j>5cxC!iT&&C(GsAbpA(p?zzwo=%$jh^aJcIfeEuK^Yx#i=x{PA!NmH>`JKqLey9 zk_DRTtQGk(cIoe?+JGrDPiq5Doe`&Ie14JRUcEJ-mRWJR@jmqN<_lFJlJYCr(rpiC(d-UK}hi%*@2DR+Tth7G^ud99H)pV4XfC*@PoCsRarSoXb z=c_&Fn$>u>;Y3zigV=8dkkhlt_0q8W#N>90C!>|(>DJLl^Q&l4kNYUsQvKP(P?B2z zU~s1M%F-$~r@DYHTi<8b`M-Jx8g@l6|f!xv9cXNa2wp$Z_xFNPbo3W zIJZdmt69~tm9DoPpX%_~$bc})_M=!C12x|t@o3Vx^?R&=qnv<15~?8kqn>XF0^L#o zwE;0VveQn%9k$Z3JTszdUb!c?>WAic6U{pfhmPv_1nF%2^bwISrfb|t=9qkZC)yw@ zFOe~T_%Yt^77;ocDU803n4j&?vYY0jO1n4;W${mEG*5uOjr~pAT{QfP z5|ux@jBxw>@m25-n5Cnz>VySB5HA~mzyo7t(|AZort{y6+x)5q6(O;eT~_SPtU{XgTLEV#AT3d~r! zA;-JNAKpN@bJM9XH6|1AE+mlT9ChPcfRfqcRp>1c6-$IagA5u4bkd%_dKBqN?nOTZ7>-g5;&XR`_nK)N7OK^X=Pbf*d+h z`DO1_Mk{6`E+pv;%x5q%RP>v$pRS#LT9%OB!puOfn9V7*SGr$Nlr*j@T?p7N*~Q1n zS~(i2T6LftHBKg&VU?H%jL~UoGR^|4Y%#w~upQZ8>77>eU{H`x2fUv!1tC|X`KJP3 z!2l%``SH1d%5O+n%J8-)jDL!+h1j++W}bIty|C5iSRCj-{Ye_lSFQQeB(bOs*z8(- zrqQ64e+2Mw`Zi0ZfL3=ltUls~NO|)WNHw9jYb~M>qidieya40GT3gXQPg#AGaWAu` ziSbPndCb_kR+(NpF4R}^0sc-Yf0(8+SPOV(Iz#?oTZhEzu9Q~Dn4X7TMp5<37`?p7 z;Hw=y{)G2-i!-s7gTuRN+rU}bed)Y(_-$9WZ}|A^=_s(FT6S*Ck#^ix$Y}P)>viZh zN;T#zb$`!q54lmlZmLx{iC~p4IovB?igLs9v>|XDe}%yq=nLI&q9MDg&tj_YAM=2t z{*6H-+!Mn0z!NK?7id2-af7%`kT1}S@*v?6dCV(PL(2TQ&Ux46kG34lvJ29wh%wII zZ`K*EgU=3sT8Ub1p-L8Cd}0S=RumxoNRlRZJ(24v1zLJK^kFEw%7aPunJMKiIMf#Nc$ zI_0K4bnlN4(g79tfNJQ#k2ohVf0%eKbV2AvF}v7z=C3DbYw{ZfVtVOhKZLl_oB@(soN^-C*jN4)9?_$>9N zms;B+AVb4)$2=~aDUszFogV9%d4Bb!6uYs4x7&j#oX)Kisu5Cte(o_vl+QdH9#}<& zJLg6%xc<7=N4bIWC+^j`|2rNzAg!3g@UQQQVVgdR$lasc%dp<)m=EDstwfZ#VQy3m z?EIrpu)K#PeM=N?Ps0189RxqEF}@UlH+el5mvf7&HYf2DOr2^9=TwuaZMlvN;~v}HqL(4ZI^<{Nop|L;7UI3zCvD$8R-AirFYO^)GsE+c z`{M2uBA4h&FmT4Eo>OgB%Wm#qEvq}f%1pO+WI=d^Qv{PQ8xzD;jya`BrdT3v7(*Qf z!3K=22JS5^7mTw&`VyE4cwa>Ikd_NcTRgpK&x9CRaA93w{iDV*TSDzvSl+M9_7~i5 zqg!*dLxx-8Bdxao=-s0A7^olV@<*o(D-8O`iXbOEqfPVKqjZR&$<4bHFy z#kCgeIRly3Kl_mlp4U51n-@FXYwUqyCPdB$Q{>SA|AKSkHQ`4C8hT#tFN4FmF6?xE z?-9lR%GL_`EFC`8*oM|)@LrK+aG-=~x`QDB&jmqZljoBapubn$I?WHWzdC)4A;$}& z2C=1gOCN2@;j5Y$z~i!y6j5mD?Sjz5Z8Z^7_ExYdCH70alRkGub18!UAWJ~oi-hLUbSK!^>xp|Pcp9qZ6 zD$^LJ@e_r3<+>?mW}gWEAlUwM_w9df#kn4rOTYeOnE6)|{*SZFUn?1g|FV+#$2{gA zE1CZ?kzx3kiOjzRAWrtKF8}f1&3GmDGY*%=m#J0S#I@7X?2 zK7Qs3UvJOP0zkN7X@i*b4@O`ZhfY%TX(*JZt%;%t=q|b`E=nV8c!#8^4u2ic@g@>~ zs*IQ?ZY6%KD?d8p=|Aksco*%TgLO+KnvyF8qzI~sbh^0uetByRh>ks4i8WYiyDHhV zHf3Hekn(kF)83MH&SM+J>Y!oY=|pK)Q?zo@xK*_Z8d5)IOcpzo_tQk7!JW>Pdrs4` z%a+r=;+*`WArqOp>w=iXTO8?B756@nEJkU;4BFQR+@Zo3A95>u5*WxT=zxxV@ znd3`IA0&5CPnLe#@GZliEjLB?5`VQ^vsO|DcA}1&|k4$iF6vW)7rYXTGG=j-lXz1E||zrv6G)+pS#tz$ts59 zvT>ieA7|cyx?;yOY2Gs!GV!C}2jYGj7s()wa<7jlX*Qq<4CFCl?kho<5ThbZS#LH8 zW7ia5E~9W(V-fEUyJ(fC%^=nt$A@-|h%K$tINfmFzh_=?`!Y9DR`X6YkRVJg*B5qe zaPl8Rl7aj|m(}OpkiyUyGx%T8*i9ZWl0T_!`^TG%5uxV%Ci14H+UYwgZbvem=+} zlZGLvFN2;;{${Pzs<>e0k#Fv4@#fU;7zxV*Q-cKEws2&9%;y|ZE3QioDthQpZQxn8 zaT}$gsP;Jeiu$N!1Lc4jZF6+QTP=~_yfSJF(^@0HVBN&K(o;F~4S!cd|eHySfNN%631=ZH(9lhOx<^2yIX z6(Y`P7jtZ*F{kJ{!jY7{gW4KhAi^)`$XRksexa6dOdZ3D0VU`swwLscTAv66ZGD77 z4hb>v9(>*)KiV!2pRn14Mxfo}24(i?0=YIxS<#N~Sb$5j?kmc&?y==LPdFv4lW+Zw z2+9&qM?U=je3Vr0hPz3n$$$donR!3TALnCx$-nGXk0xj*8PHPXT$Fo0m)&kj2^QaP zAlC2-}p>D1#*eO{$`-<2x-l1$0c|6}q<=hzHdOYSx zhOW-ch&>?#R0~T7MPW0LO@a5(ETOn!XG8-86dUNc&JQ*OmTRJukoSue-M7$gMe5z1 z6KDT@rWz+HJ&yC^R)&#~8%hzMp=scSYZKqp+#E(oq8u_>gMDv_8b)e;qvk=5obD+0 zafg?GCD?za(Z3VyUxFI~l=MGtzQz57egXin|IZWb|62g*K+Vk+X&B`zirAxQ0W%Vz z5eQMrP7BW$I+d>$sxC?z5Ryvh(UqEaqNJQ!F4-FrygF z>Ll)7;;MaOVY*N{V^e$!tI7}y*>LReYD4Qxk3n+v^Li~kduYfbpm&d2%}Kte{UXY5Ews%PqmXzKd- zet{Iv(EgqjPwze|3e0n%zwFDk8MZP#+_2Jmcma&_S)t`1AU{@)#4&G z4p5Tz+dZ)R^lU+#Zc7$jL7cJQ?V}o#*_pgYiggh*oHcT4XI?==Q;EgVW^?xBWHgRP zyI^OdMxYiS3J4c)v61CM2sEJb6|XLlCF4k6veO`9TrTcXe}KqzxG({c?^>}}uPv1x zNI@`;<-~-^OxuE>$UJV%R&$q^$a1kbV;_WIOVpz4dT710zRyLQ@q3Kuq>W38H(PQ& z)Wj(hbw&pR%xz!Yu`dQh^B76ev=t+&RW)U;n9KW^`+lbMrAy23EBQ2I`*>*`GxNL& zk@Klna&K>VkdsA9HeK5lbh1%1KDb8RwKpO^mJqRmajKx8NVj<0d85JzzaJzcB5^NH zNS{b1GtqjvSD7Cmq27InK1j4w$r_h_>`G%3@dlY3BfZO9IN-@_A0_q@l&gbpA!E{> z2O^18@=ZCPBK;;>D(9wl$ewyiRZc8BH4FxNYMpKizlYi(!mrJa=w=mG^qW8glBM{) z&W(N54H;r+e3_QUDr%DR1({FNl@$@7MeWR^ixF;TJKTYuXr+0UkVtLgSt3r2f|=AR z&L1Y1=nEpfJ=39>KO9neUsv-DO=kGktg=b?7UU_XdFY=8tB}3K!CJ-^SIQLO*6IfI zcn+wI=Np$G^7i{r9E}gf(Yu6WPUAX$o?c|FQ@dRZWHxdmM9jtaPdK%cIRy_BL?^T; z5q|3&*+$?VRa(QP2WBV>>&s(|E~~O(9X^CB3K-IW%}CNknas1cxtnEHj#v(}0c(=j zJF`0^yR5mp@>a#RrIvGn>L^?rf$GTHO7yCt$e~tIpsFfP@}a?Odm{8-j-v#5k21PJ zO1sQP4}zjDSz{tmuTp195S6||T^8;y3W~P1MZ@RWmM1KAE(_V#W!V5hK~Wv1GhwsD zkDLw-i6lE`XD$hILkyqCA2bT>cV2y7-HOSZdAA7(j^v4ujHOlT*2jw@B`8bLnAE3_ zV3MeUSJEh?_dFnJudJptA~~8_O0L`_O3N_a=bg(?4+aXU{Mx8fBCx!!?WwFArQY*J zk*Rg7VdJ4pqvrOE5k1aMaAHexyv9iOq_P7P-)cyo31RE)o9swG&H~HJLt8R`#_X!r zLvyBNtJ=YOE)M?QX2QJe+kouqC)`@N=Ei;DxkNC{?mM8Vtq)y*^e){IeXa}6*)GBK z4%RV!Cca#}rhFIax4Gej=^p0Byd3nxyfhKU>j}X8^bJ|=VZ{6l4N3C|1fomFsGdy- zNL(aOv3N%M97n=UBLASp{0tWz(cX7kyD11Bw#^Fe-nmM=WwspRWzzC%!lV%`2wqSt z*vX+H_wzA(X8kPKvCGW6HNuP)1t*7mx%cGYBm`HIB@#!;Ts+}QSCRUZ0;fuolF47K zvRE66!r=r#mHsI{h1t|fjoJX6MS(?KO&Tv!%}FYIdbn2jo@)lz9Nl$MU3rmZPOe37 zE%_qU!I5)M9&X0=We?#z?CJeueK^`8oO4=NcsV0&vkMhDo**0BooCaa|S-H%VZ@)0^_^K85hp;QaTY6r}aWRDxQP&H9cAfN~l!^2v$x>jA?Fa%d92J583>5*# z1eB-+x~oN$Zu_KAvi}hGBu>e#FUn8Ufa@?7fm(M3OL|%A39`rJb_A;SbqBg+k^t^v z8pT{E%`M!4NHjvf%8~;ft)$5GO%`E)D$U}z^1@^U-ejV1tz=^KK)t(!)*0y_jar$f zi9>vsoJ$q#WIDtpUZJTZ{0)RT<1teICRXq!zV(9+4=z7C{DFi^h$Dv|F6j(`3mPkC z`{#tVEak8GnXS6yHp(KMR14y2A$zNVHlih&Oig>NP|75&A9hCZXGAh_>mpjhUHUYE z())~uEOV;L_Syq4L@l72;&)a97SZ!j%QBQT$*bqFGsiFZOedfhJ zd@)G#E-{7_XI&}SgF6WdRY&);W7yxc64p#&&gYP#$cASK!YX5ww`vVfGV9qTda!Ka z2;r|Y1&)ahFVq?QUx516YE@w5OlMmSK~j=`=Bm&X$|?g9s_pk#pYm4W_b>k70(1h2 zkhH~KVC`3=Evt?Ga9F2ok7<)}#+zK9x9))NF2ydHRhvt*OAq4FNPng_AnLQ3^9|4sByW35 zFeLAeKfQr?w9a%pCEvQ=2^YhXHw?41SSu-eDD_@NTsC)NhZV<~nux5s3*sGMHPX9I zu3og8zC{Xa3RHTaBaD`N46AoP5{pvWI-l9g#x81vAzHrvrJerI>hbTo@~?F^oa}{$ z%I|s-_*G-J$8r`y$sTNglKY6!UCILPk!MrX02k=V}_R+yDcPmzsc6*%Hr zE)6R!&6QmN?UP&hI=)j+eB}a1@!8gV-R9xOXHYD zSu*dgP4n5To=cxSLr_12U`&UA8UUmr0L4uN*>TJnsQ6>3zsQV#-ud4#`K#7u9v*3{ z{f-ILcT9Nx=e4$#jTNngmBW8R^Pjk6MM?h^mmr<@3YA{m-XMzrxq+%sfB)8N5PBSQ z$@D}a?o24S?YseUYc0=jBtCzZIQY#>YTQ~B z2;}yJNry9q0}eZgzf#mb!(~hTobGE`UEi(en=cpl*HT^tv@ zO^m_CYS9vs7)`DkuC_K!ZqIbKzQA?Ci$I+9D^cjR;>V2Iv}WkCdz7^j#sZ_oaoSj< z^fZQ@a9AD3k5d=y6h(gxi((!kis@7NX{O4`eKZqYnYLE!82DAEAFLE7v~;9js8~nq zAj7MIu8M9*Ot4aVZ#tf;K<|ix4^*Nw94ngs;&WNgKT(wa$zEs3!_*M1PHtr4IaQq) z4B8lyr|kC}s$KWd08}>b*QD*2Jy;l6Nk zard){CNM&x1w8U+mOZBGTf@i-;6>p16>9Wl0 z-SVtCxo|#HPL-s$S~?`07d38dKpsm8>q6U|x;08Nv}>5Cb)PflL4tn`V<6pZOxN;B zR`qC%w>s6BYS$BwdPz^?B;TO3g~~#A1bG9$)o%3wo|^#F%t3ye1BekCY=g+u59Nf& za69zxxe})W!rW`}#R;^4ZY~oHyxd4T(?HcZjLm?(?>6>)s*+EtDbF!_Em=h8&S34* zOmqVwz(9dfQDLGFh5Fs0?>5?8{A$+isoyx4vPD?V3A!6l8S5tMh8?Z@iZP!qwx_hM zZez_D?w+Yy+k_(h(gc`;t$4OawtpN7u&DY29m4KWV`h#n>K1niq8Adru{@a5gS#0^ zy*##-6!phT;ZgsZ3!ckq6nkJzYYYECPUWD1^aGlp^9Vv?Hb6GF5RTjLm96%kW{Kxd z`x87dTmg!@<2JbS^qa?iv7lEW9sK$vx1SEedErsAE~yvgetn7HRDKdET%bS9|7}=Cwtco|kjhN&v`EJEb8)kOJ*-<&s;?x4O zyQ06RH66h=TLT9mOv!XG-1H>aMK8Dm_ZX(PSewK62~Y!0(Y&yP_U;oywQif*03YZy_Em%JW%>C>Fkp1|Ax!eucUh zSNPbd4}F1Zv@dMo;%`=cdfQ}4!ZRNrAf5nlR`sf~KAZP!wF53&2Lq-SLOSXg@}s3T z3xlJwqIfevO5t;rfS1MkDB7mC*It{z`|x|BEM|S-2fE@1z=omX7mE*n`4zMO(v$Cs zS$UW>k|}NrkM1qZ7H{?r2@LNw)Fd$r)J!uVS;4*GWEhzQ)0rS@C-8py{k|vC_k*pZ z-iK-ZXrE?JT8WL5W~aQK6pv2XMsc@IWcVO;e+8fj+v8a)k&TpA{O|>AacLwzVC4-s zz9n04Scv0}+C4j;^$yt!YuN>45sx8Rb|xsP$3UkP-EE$o6%8oH-+|zP=JQ|rF#k-R zf2Y;IKEs6f)gCo)004kg003P7?I-77Y4zJ3jLBTk#@f-y)$zXslm1KMS{=$2dCBQB zrm?*tCXP=4kqXYOm*qGJBs!A64_zEQHjcOt(jc+WwGp#0Xra2JeOGVEDQs>&>WpXh z&<|#{tW%e4{6EllxwwEI-{7_Y_=nT#me&hK9jSdAgM8;ak~)@kI}{C zlKY7Fi~T9nL6o-hX50jTY3>*AD;-S=qdoiCu(g!yO(fpbt}HXx(OyW-&8{2Fk>Rty z*5`NxZ;G4G&alpI2bG6>ze(qFCLZlh4O7SY;L*W?j>WS-9+dFrmg`M;Fzss{2vYsF zBxV;jA9Gj!j!ow?XWGXTX4mN;FG%hV-p6s@(*CWi{fh}+SF}&ujOzXctLL-odj=lb zwKQ*6kWb23OXqX6)H7V%y*7rIEQzO%2yZL|@BOYQ;5$0+%(Y_MR|y{0wGP9pI>1-d zSKQbXb4U3OvzzNo#FFql7N+;kFsgq_sFPxxRyec$$OevY4%axinI)3j!S0^&{*$7w zBW=>3&iN3A^pY9Rs8J>gQrF)eEmmji!lvgkL?P*s@`MbQEQ5%Gf-}#t>ltuNMYAIA zR13%|E!N&fB$^OOI~VP5&G(llD=nQZF2h}u+0BoaGGL+~&~!#a<6<0fM3qyttnp&$ z(rIbZIAN}Fh@$?oAG|n_Rq|p zCku;;7)Wp2uCZ8E;0K4jE~bwe2~S&RTRjw2p&^LUVD+F>R7Vm?6I#h6NSc|QzE=kVv)W&y8Ys2JFaqVR_Qk@H?i8!{j-%>r77|(p z4QR}V3SV^u4jrf;x9ih8{0SWiW^ABVPiHn+QsctG8F8N&iAX^0j$xa-lz6q*VoRFuFqnLh@je)pe zCbCQl8C+nVUF+gpZ7~ z-S?AI2<5neKc)mI%4WPCH_dH9K@FL}L@7VTaTUvqu$2`po@QpGJ}%S1Z1>jr8ewdU z4-t8k??@JL((!G>Raxzt%ce^eI5^4)p8IC<*q#)`hi<1cPL46$Yu0ZzrQn8ecGvSB zpCpUmY~vb;>p0*0MMlL}DxhMO$6$@)E^W0U7`RZb+VSq5Z#=Xc)F=03` z2O|1H9bCVCTb4l$DMI?9Pq0WrnBWY*gIs|y2dEjn-o}AbJ;!En3sSWn&dcta{7^|K z<*}So2XJ@30i5;TqJv9#%Hfjh(gp{0UJ)ksTv>YcY#cJdcS+Zk89FDT)$Ak8GJ)a2 z40+O+sd7CzGSiN<>RfRQQ-p+HVE`vQq;N9u#}SSxxS7F}Uch(kp5LLH9#xX{^g9&& z{)eYABe5BFd}S(7n0I&*Hj^PNcnvRlNUKMDSEv@w-gvxWNP)@?hVRGT4SS|U#;1-| z&kyD5llY#`hn2{(g@Wg+h8#6^F!+Q+RM5CE5C&#-3dQ6xl|)pNK8g62$5<>0#>cgB zkQg_yX;QZ&imO5r?#ts-rP2M35+#`B3uV!#PUg8JQH#fo$<+xiHZ!H_C1++?BCN-a z*{95_xr$Itr;TyeL|S;0rD^fJn1&_ldzr|UGjY;BG9nFU? zIGm;>;(iC!eliqdnxT$I1;}LW4uU2Wby24=MN4!pnNeEpbqK9Fo#tn>4NjZ=kU5^0 zZUW)vRCl=Yd6ABmX_14&Z)T=P#mm(56g{nW#g;u@ zj_{7=Tc=GSt>!I2;(+Nr| zVbAcQG6yjW(laW)=Q}$!`o@TAb8CBPTWx56+=6zM>3Ru*%JDux%asx?j^hWdG_38$ z=|R-bc3re{e0$5B9bcTBbyV4$q6xv$U((Nu>wJ>L-GSzKEf-~eLdo*WoF)L98pGNB zV5*R%{oYlbZ0VXYF8Li|{6@f=G@`RPJj}HP&m6p7&?POs!7}+{6UIS8ugzr!rU4`8 z?e1sIy;_LZP|E0bdkY`QU2e8T;L#ps`YAR>64RN4@DcHK|N(%6*) zQuAWxJ6Qn;iwsYeh#_pm^Zm_iu>mPU9`*Hd`@n+N#QiJCtF^h6t{ST&87fgc=K}DS zJ~%YgF+22a&K7e|+LXE0-*@V1SIR$Mz-?t)m>z!fj@Cqb!9l^?V+jR17Wd)m-1)2iosV71xdNmRv zDF#bn@7n1Xy+XHe()>?hQNmv2P)15HuolcX5f|$&jfU%*FU>%H@jcj8#?P=T$@)&I z#^}kn{M6!!MtPX3*kOKvek7`)?q_(E727zoYl?CvJ_GYk%K60P^+D_I4tbiXDM$_| z!o3m#z8rjTZQ0v67+>IT4rdGy$WnQ%Y2fC`Zx+6}z#Ot(wEZ(o`{HPrag7`j6)4L{ z__)Zb^qa)C3X1x2;Yc3UF~;B^;u>_LVz^Gidm&TcqTqV8mgbnJ_bj|Y;2JJ%^+^w6 zbIOma^Y4raYLx;HwnS~J3k{Z6^z~7Y;!lEP z3)dqqqn^%WKu47B$M7T!U{jz6>qgf^P~0`3nEIZCI$eipFWfVkJbv6No`|7bQA>04 znE_6V{Sys0TO8h{p&Qg}_UOamW&0Sl%d|#M9Es;wwjXOqYT>d5pr0TWH$>I_5RKbJ z&AZ4Y-6d?(IfpMLE1!0oAV}d!+R&bqHSTEMf)oPzW5Lm}GrZ#b+R@`G2v?kdrF#;l7AM`f^ zWHAxRiOqVUw;OQp3wY)WUNouGtKqW3&*Zm=P#wa8pzg}G0b)fwN_WPvBFOBQrv8jX zd*2P>i*2|)+*5!5Uc(mPtziJ%Ij2`yB8E;swXFcW)m_*It+Ts|r=;He2 zKwbl*i=d-put{rw-#NM7?S~?DM?t`(K+h5jwKfu!wcmSDxPyDU%X7N}c)RC?{HoQy}~dMlGM+nb79t`!sb`X99d)#XKtOT`ekl^X5wH z@y5RR@gp6>WJIy<>SLSsL|1jPdIt} zD>o~VZvu9v0S7ZzaPOK(*RkOeG z3P^L?a-PwnY?=7l2HS~cyn>%J{&>NGnusc;c{(*j^vJ@$uhD6J=GRmPH=&V2Bd(jh z=Rg<})^2zfiTWK+%rxgQLIty^Sq&3u$Hrtf4N2@O;%1dT(kzk+@dw|`DB-~{v-~BK zrUvVhEU$r+pn9|)#kAH_ZO`)70+oXwT$*yqi`~A}d#N>+Tp`sE>sm|!yVjQ!;a5c9ISq6ma`GlqQ)av=@KO6-v3sSmu( zD5hlP%awL^#4iyMRfRLgeNK=Yb2yEp5#TAr_TE?~Xfcz=XBw{ zH>(PYkW=?kep38AW{IWO4Yihm2ct>5*5f1crYMTmUy83LeAR*Y9>~Guef!o*AtsyVT%@mt zQjHd)n0|3gzSKOSVXj!ByRbmYu9n;fW#bH~c?P|^ziDpPB4@1TxrRGiX1>T?P~@7= z4Wc)}QwZcC8C+zuQ1Rn;Lji88BZ2$$+7&v>UXj6rl5`pcV6t|IZ9`ad{Gdd0ak@vj z!8JBNL9apuN6Utoz{3IbnC%^OfHWI2k_YkyE{2ki$x5kOxuy#^Irb6QOlkIVv}E(A zYd(haQeJf$#SEimgmb#pf>ud&TeF}oN)Efu6LX-4%g-^04Ymp5JI4{zO00=L&5N~; z$xHCBbi=~wekd>c*?QH=*kI%(Y5Z7FJ_wX*59ZZT^oI}%G;2af+i z*hr9IFH09g zPmfl3*k|dIIGJXkG5AQ`c0V$_5~C^`&J6AeBWAbgIvB<^fnssDIXL=Ag_335Z4A(% z2^%whPT;*@=S_is`Cf-PL%WDMyEa3=#OzvccZbHhPz)1{&>lbgfj_}9KW`D1J^yNr zp`Vgb4I~m3Bb1{3Nm3$8i=X{Lsx<&CgOiXwl?cE!KHspaaE&+uC0!3~;j~p^WiHgz?fs|${0uS2> zOX9Y*LV_jEXFA?H;3wH|#_X_j3FG9mUc-umtc=X$#OLST9U4Goe=+bGtR>sEKVNq) zAR%2-M?7zd)9I^{(nh|#mXZ#Fm{Cw{Fec3)r?Z6M7CibUBpI67REdTSlGthO`N+@Q z{Cq49QiQxr;=D=SI8{*QyuK=9ce!Sj7HY``OyzkoVc!mt?fJCXR%XAGOJ*w{LX$|9 z)Yni#AQ0c4B+1a8)Gqk?;x=p5EJ5iCOGas3|Kzdo1$O4jWkUopsv2xkx}V4x4+2(( z(`C|1sgKAtD@3dABjBN;Et|l`siO{7tA&Y{^X;{T$)o42wpK1gtr~S#_^Orm5LfaK z6SzR!2UNh^CHHCXGv|E>4}!*4%n4U2Q_O31ZGp`qGDS>rq19U6Naz%!a&G6`Pj%#b zZOO5^7A&Sf4MB3~xV41UZYw5P8NP4DgcG?J{+c~=P@MgX(DPNIKxsa5aD`KyP+Hr_ zu)HbGPtM@u55E-h%SWLZ(A<|?JW+FvPx6Oi=XGA~eKiVRKD1cA9>_G8C%PsGx3LW! za_aG%v0cTtqm;Xcua6V+3&cmT>Ob^Z*sgDp8NUmcpj^z9`{c4dOo3^zg=^F+M9RqUjD3wf3jmOuM6!_&|;c900!<{3N^=2x$X>XP^Q{4xdy=POV7&Y z^Y?>_Ilo?pmECqD)LTm^xu#-#{+E#dKOyipIQ}}`gN>onj|K+-ct`mb^Z#FfL(It1 zmPp9RSkKAQQBKcZ&q_*9-^fzouX8|qBl~}2rc>?3M@bdsYtxY7YGP~*1_M!-Ph(X9 zlY~fcMIfOzP*;iwLXwPgIc3Dab!TFC94ffExhY?}7K^$$FVufktqB!5SPr>Pxm@|I z>ubN}6Yz6dwmkceB*6&%*-z?2@6!IV&4l+ToAv7BsEQIGc?S;@MjU1=PC>q=m%rOz zkO#1|cV=CvUT~x`FUy!}4G!I4A6ul<_GJ95T zQ0cpNCxg?`&ops$RT*^PA$aKsM|0&F>OpgJ6(6*NA%12E&^cV7&?_LYObmO zNs8hbbfk#c6<$L>HAgXdeRxLEmA9Kg@k^1ea9b1d7ut2vcwih;rmI5F){F@@gFrJv zMBwkNLX-$5NY{+Y)PqXY((S;>wiWU{MTePdOh#$hRIW_Qbkk-`4p&IvJ% z4m?ozOkfp>UKi5^<5dX2PHt4j1nTBEi8OM*9(RZC85_Ch;yD zoEt+TL!!uQKt{u1LIgy=BO|XoTQ0NUOxJapAVd{5+~z7dNiIxg{Z6VyPh;k<;6(AU z(bJ%p#2TsJWS1y&^a+>Dpj*Tz83yDL#Z`yCgt6JC8HH_IEd4U23k(;VLuDi5T9}ND zZ#ZMHPHN;Oc02QClO}EA{QMlD&VKP9R8(nS!S1ou!4>wBfK2(d66_&X&d-fn7a$as z^Fx6Kg9Zl9r1&mzvB(mWdZ0Gb_E6$tJB^3QL3R-E4e?5S&3}S63)AwC;Y}$sog&EF z$OhSZ^R)}ZdLl>I?bzZ*pg^|>Ay(U0NPs--rDl}?!WbH{R1=hpHlh)Dmd%Jn)VukU zq99QrR;`5fgXeOXg2-NdL>&21sC1pBro_J@;Vf({(>sKP96qMHifx~+vVC_|xF;)9 zC0kE_HxzH5ihz0n6^XD}7AxGPRBCmo<(m3}RdH_SKxb5;hKx5txX;rg;2>a6+u?00 z*{Tdb-2e-WqR5DHt5C4f*1oD(C5tOTZjKA|g5sEI&C^Fpa%}GIFnE_5{8)slY*(f+ z!2Jnjj>K9Obkh`#w-XMqtjoJ-hr&B^!?KBxnr2b&^pU)AhFZA6;T@iH(i;5G;hqwb zlR*2lxUg{Y49WsO$%S*3r#Vb}Ly6OEjD*}?aJm_d{oM- z1%Gn;N`UH-X^LFALHUS$`38lRM~C%o$t$A(8?wy#dvW>nS{TY?=2i(@NvoDjV5$)M z9z1_>N{PwF3AKSBmAfLTn*Bx3a*;&9wB!iYb-o!BV;S6O3!x(Xq}|CRC3ESa0;FA2 z_6ny4Z)zRZp_er)VWj4farzjZ*Azir&<~1MJ)q-$O}Ub3J_Evw-*S-z=^wojWRQ!` z5g|Km;qg${*@UJD>86Q+z%Kw?vwT74y%hcvf7biV8v!oE%jWi^?_T9s@m*xG1CDmM zIYlPN_*Ty1XBfc?3_*CJo%`~~1|7Ef$^C*Y-X${O*CLFn>3q$vsCbPW{{tO3mLXbylGLy2o z2JPrC3#{QE!~nFWr|xB5lT`ZNH|V5_;zXz|1M+Ym(`b!w(8D zNcFP!tRRqr)HLsfQVnJIL?Qvj;uGWCn8u}~ZW{!3J(F>+%L1CXpgBE)p?L8`OT-)T z23J++>0Jjf=;OlfqZ1GC)&-=T%XekAPh%xy;`S%BS%0!T^eFnT1iQ=>2JP&NuYq$z~+R!=RhSkZM?4u6KsfvjgD z7Ct1&8OGln;tZ{n(WREtv*o~9*nW+teIl@C8diPAkgm#^gQ$)PunmLcmV?gWvrYQG zJYXscAU3E7=L0lkbOX-kB&m>^j=FHYp350gmMN>iLK8p5I4MNs$Tg7fBXvolvLO5L zc3Ch{?pfM1-WW0vki+0?ML#M}aD!uFnI2kv0Jgw8KypCmq>DcaVZF$W>ZQ-|S#bSx zkZ|}}jlkqluw|po{i5;5A?%%}<9OM!NuW+j4>8}F)702OlT=Lt%s@Cln3eJU``*;4g8busOsG=zlDCGQkTNi|Wm%MNtDyXbhlB zGXB_$o8>D4yM;g=A(f}d>C<{)Lj6;qMw7!I;fZQ>>*hF$R;!5H&+|fncuR~OKYSDJ zx$@v0dwfnvf%@8NxRZIN!?KXEPfa76bv($gffDsX7GM+eYD&^Um?}wd=TpVa@NE)xH%CI3FOcQ&$j{7)T}727KTOph#lRk0VzxTtZ_hX-GV)j$re zvJQ0R=jV8CSiq0 z>cNJT)o0_<84TI^BoLb%2fMvZo2u0|9oc&?dBP^KV&9cfYg zuxf$1BC%G0vU$grC%aRHL8n`tL%;;9ad=29#p2geJ?zce8-jcH@ewKb($_i}3A~0W ztZ*Q=P~IAxHnM9ZkrFjFNLRIj;g);oUM@!Z2@8ka>%T@7{~783^BGXS7O=m3$3N?P z{OrHCQ~x&=^8eMi2{@TqI*MBp3E4R5TmIh+069yz0mFjzqq4=T8+OKDe{0VC`> zHU_A^@~LS!fDl)r;Alv}lYkIQ6Z&yX2+U5FUdclutQPB<3=x68a~9&oxhXx24i&$j zUnit%tYn=N!8+GVhhl5{arwcKY+dc_r+vxn+^?S-)!9<594rq^x7bmjqc{>*Mv(m~ z4ZMepmtdJ{A$DT>oK@_KsFL^x7;y28b;Msj4bUP6JA?bj9o|P_W>ii24z2@o7!o=+ zY!G2?O)k&g99wM~#%y=$nTMO&m$p+%tn=c>VP0mz${A2Tmg^O@cD*7E;i#v|l?9V@ zY)30{tAp8AjTnzpB{soFU+Q#%A2xnI!EWW}mBhadPogk7j9lG^3YQC)RKYqq+>?bh zm;h!eh}r@pYu7&^AJYPXuwONXjy-#X<15mDcZday!IFRQ5>lmhPO>8NP=okL1=JYB zy4A+f>_MtsfX<|H3*H4zyQ*JIq9LQX9Y)mJXInH%7`Dl5tc!iv?5c#f)QPn6KcXu`c@QnKoY zd@^?iSxu(@pk9fGd;8m2_T|aT!`qn)K!Pi3Nbn9@K6;n|vOyGjNM3SbFem0^IWLl( zLPyC?S1@_7sl@7RjsZAn@FE6*87VEgM*S=*?dTxPPS-9Ls`zR{^hlM{r9@K=B;jZA zJ$hqPebzztRIZ7oW~*6*M|Lh=g!(WwddI+ow4Rzw-p>pF`~=P5lh(d#oZ;KZcqW{= zc#&0d)V3_uX<+4;2574cqJ{wq7w$Tej`{G_EtC#6O&1|Z8$SLC*enozQ<}2tTV=1&j)z8>W%4-)?Me(3quv0j z*)Mz^dt=ar)aoUSwquT8S6Q=L>Abvg>gCq4?EYq>FYD{Sc8bcM)MQXCFH^L4eX=W$ z)pI8+FcgwH2S*mhqNw#=`Lk~_6`iH)h?L{2M75$Qop3nP9mffZcJiXx$1T*R>q132 zW?jeWludF2ofxojWNQm|%A$=7(GRCw1TM+ z2~uC@L3aG*3drLyI5s-x+t-~VvB>WLNeRBXe4c`YRWI_;UGyN;1o$#$Sc1_eW#*zR~hOsYj zE~;1#?p2@@aMN(m1Vz@avlVe5c0gH+&~i{)6mR7*PMFs^wk6|>K=~DT00t2c%%ZRA zXVuz0F_1Mlj!;sZ`}rEew~>UT5G~SD=d|<@@?e1J`M=g3|B0%<@%Gm|Tm@3lz5h4X zo{;}1ereW5j1({Zw}nd#`@n_Yf^o4Kw84!u2>q?ufvH1 z#6p6a8)_yZj0X^>k74U0qDhs5{+|CZq^>DqzO7cTf|l44U+Y*ct|_#d6`f66yht?s zBNZW@24Pj=$1*45bL=yxCo$EjA#Sk(fjjq^+rH)H_2hZd|ntc|%3iAL zWu}aY)v%ama0U%3)QN$6oolc2_c7aJCc7D1z?iEB!>o@4Kbe6nCZtAmYO-A;6Qdp* z>3x_#e(tJzr>%sG)XWo@p!Fsd#d3>)Qb^P-ItCp>Gqcg5MD%5P^I&KJ=qqZo|KbYR zJ|ylht8vIihs`k3(T2cw=kbMxBasJn2%W=cc9bc~P#B$Y%myI90t~I-N5-@yMD!}K z+@H221^T3&cudAP0SK7b=WM^~wH$`nj8LWh(d((!7CIAHpS2dB=%V|_l>5p>Kn5n% zhjaIg8uGRulta4n@2;Aaj4hlH=x8WRpK#8V;YIw~Vh&+!%K z`PF+jIk!h8uuoP5!Wakd>0j#amn_UT6Ly zL-1CdsSPi-n8e^e%_6wWtGt4$s9A598guw+2kMk0x)9)kV>Pe#xAOY9t&Q-8i$Jq; znQKd1jjnRhs@Vlap)LQWiddCBBNoz@B3{D%!QNg)Q|r`2l=JxVaO@)W%eH6fCR6T# zpz=4SR*{hAL>6(*c_%s_2kv)M0$9aEnlsP_yNOMxqGq3r)vtoquC2qOR)|S0LhFwz z%+z69BCH^ttBTd!1pdql_so>rqzeq%$18Mc5B$Nb*KbQoWxC&9BU0!eW2?ZAuIh-S zr1Xyj-q{H?eZQ5M+TpfJ1^QPnm!`nj%8LV>XN>0vfCU0xMPBSPf8=V!32E%Ht z8N`4^Xe~SFQBgjdQNA{IENipwdIJ!) zj9>t&jnS@@8mS1er*6}UP~#5o_a)bl3mtAO)E{$g08_Jr0#ma`iuuiEn6ddKU=G=7 z41P~y`mv%IssuZj<{xu(VB`6>G~I-gEqDHofdSock&6&M&-}yr7&O{`%)_q1R8RbC z!~V6DTV?dnf^|jI;A%IBl-e6_*&{hDcO^m350qW4WD^P}5aBRnRO1#+I>K%!*# z#gKg6g@n+Uav()3f!rRuQ;Hs1IxPrjFphFRp1C?}2bjCVuFe6S0|MqS8_!H%o`l-^?CjmvXK~qI!gr4E$_VF)4JswWPk@+5=L?O{* zlJsf;Oin-eH6_VVsj;yb8>998Mw((AQZr@IT?al(?ol&zRjU~%0LKm97rP; z;87*0@VLj|)IZ~Y`qL_2XI;{hrlQRCO#f^bqEa=kZu;_JM^gkI0$b=EAz?3SX zO_i3jo|A^Tqk&`eGwwjjg0cNdx!ORp@6G5#z;q;hZ!;fWxQk^AgBH^4NOrm*MClVV^gycc6 zjw2l&_)GB2HJ@-6;S@X}bIgNacIkKYAE4FhyLTA2FvZs4g32HA%_LvzvJOM~uaZ)4 z*tq?|)f9W;T-0S;lTL4G)18%@;G)du2D}8ek_!0L^048Ju&(zq^|2K9G7|ZMvxq_= z#54EJd2KKBi+9um%aDtNpZaA>U$HT>6lpQHX**YTGwgr1Y~ySLG2jma*c{XI=8IwH zCqz#V_na7M6d8Awx9qa<0frI9g~egC24Ba{L5b`TFpi<(Glh(lqe9i9LQ|nRepa;- z?aCP4h+mx_y&(TuLlmz$PM~rJ%>S?tcqh^? zHU+9V9<8|bEwcl!XQtjtSUh02(XapC(qwq~T z7si}RYN1wZhcw!xXgv3-7Wjx&<_2IO=zHR|Kk_;ZMjq55!0AdUfOqH#b9h9?*c&$3 zJeQo1d_=6wLz&SIgNueyTNIN#c^}3p;C|ROf_IIcdFD3Wlcz1`Q=<77aP`QO*(a^{ zHV*v~Tj3)Z^*^q81GoRi@5>0cdhdo|evLV>J<`rU*&r2zr4J#yL0fIEL!0xCGvh^g zlQk&>3+)rDexZL0QPbGRO%zaOQZ-pwC10L2jTFm z4jUl3LFIMB9Wd2vg!T-a4lYH`A9Sa~<=(v8HkyGHYJEE7m4KFHLFl+;NiD62m_Ei}IczyqpJnd`rvoPEsL{HMhn!pUNNS?4luemN~khLszj z(iME*uR|RB57HPKz=P`H*L}7{QT%>+ts;L>x zL6j&=9c&<-K{3*QDwtP_{MOd=#NU=&wLm*~Q)k{tem%glil{$6l=U(R|HV8s+aSwI zP;;aZxlEEOWLw>Yzf`f3Q*~>OUYMc$(gF!#NkL?quzawgLy>}|#%;c_<-NaZpZAZn z`R~^F%TB*({N`4lpC16xOJG1i4FAeb3Qm^xPL?j7|6%R_t;S>{yGw7*rE#a|5jaZe z2vN*IR|-_3ps-2^CL++c8%pYCVtkbY{TKq4XcpnQ{^WyVw6Z>;h!RK~NOLh$eVmiY z$^COyf7c&~!dQD0mk5BleX1N)6^JA=D z%e6brvb!w{e86Q(ZPKpoK#z|lyOw;a^?F(twOewG*pa4dY^)=S%*1NaZu6IMnEF>o zrMP60T>}Xo*IkIPipp&??_BrS0dK<#ZkME*4%tadjXYXk*NkiU^CF8Ho<|$?7N&Wm zUzw8%uj2126|m;a`i2r*3nm&*+6=*$ora_zikg*F#uq=!$c&d?oe7p9c2S(4Z^)zu zgc~ic0~@4}y9_yTJElD3(lUQ;cU&Px7^aQE)fi8@(0o71m74xxH)wFluRdB z5-4-C*|@hPqT@zcjJ<)_9tflH1IP{ir+XhD>A4PxGbAPrvLw{0g>fPHFwQC9K+?tf zzNAPa6yHzis#&(T#?9t2LgN@8SJ;0u5r{V8^+{etN6uF!}t(b`iP$2Axw)240?a6R2EyHivt=B@0S+~ zvP?ns$Su^I12;_rAy)BZ>+65Tp>8kXkg5z|u}r)qV%8D11$5Rg_<8 zvW=1uAQUAA{dQGpBuir2T9ySGTEejk<*)>VzqFF18#B&Fwq?V)ii!aJZa$6~jzvc? z{1*Xp5i=98o%f<8=PSG9(4hupvv&R&-pALO=b5kBy@0V2ggz1|#heiz6ybLCg5_7J zMnfM2Q6OkTnlMNGekF`aMUnbGT)gW&VLqM%c4sKH!jnN>&?>`fQN{pJP<%=a^@MbU zB^qgOnmrXmM{V!olBz64IeL4$rb1>~!lcE?up<^4GC~E7@dQdM?yN(TSftHF0#nkE zOvT$)!R=gO=8gjHCZsSVT!Un55VuttL^B^n_BExV*70go+a{^BK+&dh)m0YhWA9lE z2dWNQL#z4b3Co&VRB9Ss)=AS`0n5BCIds|R66`p=2Z0uUfh$r!ixW zGO{CcZo;)`-9FF~v6Vw3$zsMKMeOa?jk26%@^aUu4V~%m@*Q9(*`Tq-D=J ztl>5rq*%|)C91l!l4_?|P!z4JY6-h2SFvDzuM;{nDL)bFVrhUK&V@wjJ z7&ClLg3F2EJ^^Lf84yO6IrZfEH_*{ zXM?D8m(*dZMHRYSkbzX&yY-qn=iXR#vcI^a);0JZzuFKHu){sG*yajxA8;zXH7Z*8 zKz-kTIiR_btk-gITFIxj^&E z`k+$=Mm@mujll912e8oUBf%+>%ptK2go0AA?UaLrl!JoEKk0XiQm>PX6;O)xBk$X4 z!4qA>Utxo)qv)hUkl(?10#nor1s19`%1Y_S%++8a$slm1AfR~Jc7P(KYQ^-8=q54tj+ir!_{~j;@ z8A;=S%zst`BB=;qzZvWQWC?#nQejWPIG(YPtC`t<30119t}?bMil5t^WCsESz9?fftovf)gzizFpMGebrIaJvlz@BVXby`uy z&6M@klkDOkWtVTcDz3{pNORb>QqrThF7lN+1R(t}l}*D|mbsXmp1Q>H6v}EQwDj0i z{_Z(;&dQ_|`n4&lIy6Y~J$k!RRHnhCRi%}r%HC0>R87mVux1EIkF6cE z91G5-k5pwP_FcBq%25}Z%4&IZW2jXLCA>FKQx{a#MwO#%PR4q37((~olbN*B*r%XD7xzmY;<6Q4cIjA4 z;H{JGDL#DOJRFCE%J1M+ugq{ch#J9zj*vUDV@J=hQe{q{Rfi3ouIduieYlOkv4BMM zq1?lTk-#`0i}~~^eFmz8H5S#>c7#GrT87a;($%FnB>aL z(txNj88cGq32Jf+A$UhaB+<3oMr=h>qzqfeH9S^Qqn|4Lz9oc&FJ&&84^r4;HJlu& zr#~y;KpQSIU`9;!#MtuWYY8>$IJG*JOj%g`3j3BBJEFA{XNcsX1IxSrs9%#!C&;}> zHZVCB+4=pz8)qVHYXRa*G4m<9%THUaT{ctQf*Cza*2n3)0LPcivjTiscp)8~IoNx$ z!hAfe&({1W)rQuvj_=lvgDI2>!8^gw>0@``Tg?EuOgzDmE;zzhN5_3Q|M*G!Z<>C< zSGR~hgdc<(1K|)MbaO`t3y2&3k)z0a#4b1l81gt@?!>7MM@$>l=fvDXb_SZUg}?(( z#8M1~9FQTWzEK@9MmA!N-zl%6SK?`IV(We1z2MBNq0m-(NP?d)IW1p4CgT+8_an0!qki z6=AXBu&W}yVov@dAIBo%PU)!KSpKo!ZkP|ArQ)d*W9b*a>v>Oc_rd26+PCeqZl&#m zyWC>5dB?uoeGYyTZAKb;0cmJ}Z~HcCixmnf#332w8-<-A7S)k3O5@w?jHaGFY!!P( z#aGHv5VvO)OUU1OT7E?s@{W$%n2)fo?UE_`Q{KGi)^T8U+;gtkM92N<64T6v36v-q z!k-)}4(WT#`KjC(n@N2VQHtiLoUkw!s|f*3om>jApQ4h2VdcGWfSXzhF=jqpAuX&y1n7> zT_-QRGzYEY*N~y(O~ko83Xgf-?6i#(v(U=Reb-rB942Lw*>Aj2FElTFnqb;@lCpzyAq z4M(q=c=F#Ofr5%4f<=D-f1^1AfAhf*Qiz z1c@kLlVN;h1PJ}FrgV1SzkaR{ljoz#c-S*q8RUk)f)vK4QZ!3e(A41~Xs>CehKy~M zI(Yo$DE=eA5ZT$RD>saY4?%0aU8dtm!Zc)~XMSMp1ihdqn?$M2DA6=YzIC%A?z1D& z05Rr}B}xTJqgxGnNJX09ZaK#Z(@ME9=6S@F&%S~DiOi2s@D(!Z^6C?^tGfgR-Uil? z-DqG6mQ7wqs;H#22-5{r_^%oausP4tP zoVj~+Gfambm4gZzRqRV!Q{&ek_-ZgJ80+p0)6viH`cMeOw{rkuKTpxGFIBJ1`2p_v z3UZ1fp@u)4v7KREX!10%LV0*<`g~gWtA!y_bfPt}#x}l4)1ppLErpABoj{#cJc7}jKh(9xt z8f9H;WI+_(rpR?N-DI|(gZA3m(y`x#DhRMZAR#6S=Qf&y_+(a2%?7xLo0@*r2}Pd- z^Y`JC?ySR#l^E6ZY;`_5U2>XVp8Gt%oH7T1qk;>828D(T6q8ciEBsIN$msdH_qNBXhkvf%&0ex)&_azgFk(4DprK%>myr^MJl4) z$G5xA!3A7%iaSS0)E<|}#I^$sV=|1$2B+K4UUYfv9BR=<;CQ1iji0h}0-b+tNNv$h z0Ue{3l(Amy!Pnf?*rMo8)BpCt-!1*udH!8V{DF8b@D2#{HGnFD(Es$op9hy7u=>T^ z)alPIH;IzHz003J{OOHuHC<(GQ4BveeR9rX+L8q}4QpCk(mA#zAr%3eFJCMu7?;XV zmy>K3g2SDej?WFl^!M-;#Ou0L?I+eS?Q?HtdKb>(_B*|ml2bkt&WynvZ~MCM)*ZjE zy*)qL_X211r;~keH!ln*K}mDm9fDGW^)dOjPqHGD@g%bSv?P#7*kHh!rehKzXF?6r zVA@89F@r)Y&I94r8uFN6zdnRX*}-b3-fmvun~j+qPn+LQ(^*T?FhtGdr1+P+$~h~@GPRp z(;jZ1#sh6?k!dAVW?!Y^iU?t}!6}0BWFKMTNr$3d7zNc^IiQ0(hX`{5T5k1bA4&Ew z4_UA+y08qg%@gItdaA+a9lH(d?vwIYdP*%0&YWnIx24j9mbz6>=_=NGyKkR_OK~_B zHV{!K+ah!waMZ0JD1!K4Th0UI-gG1vRiow~RKRL~R?<1fUqJ*_j*8_seOVO~RPwb0 zRVs(tK6E1hb8#C+;~to=I1P%9s#{X^kq)-tQ;@5=aAIQL?yG{_NLn=S#J+8nVjesv zI2se0BJ@yQoG&i^UPy)_D;1Kri-!x-QeJjAveH^UPQeRB6H8bOYg4Q^V6FmVnUcs@ zpE)AzGvjbPgdA%4c1^j*w)%DO!8w3sL_zVW_e&Q(DKJVYqc4*2lS7!sF&z~3arvA%8kPaB}YQOXOMGr zU!SZV$l(~DVCH}xDRhPyXAxx&*rEulJ@eu*lC0jA_^}+u2XLicq8DT%W#{qnH9n)~ zCFP-BEJh|VvP8+aQl>-2!}7%V+H&<$B$Llf{}fJ42|rZh1iMQff#UBOJB;Uo=J> zbDK#d2T8a3Hc{3^xHqoV((GidAeN&543DEp2v9uyznpdkvLQAnH&x56b)^auX$ zVDtBo^3PyX4+dFQeDY+@C3F_VVea zfN485#MWdifzY?fy|eAHv%99!m}g9tNMYD&lMEN8o6hj0G^#kO zbN69-yU1CG7|ll49Bp;WxatWF?y|zrKUrGB&Xz=*PTRFwq$yp#m`dBTk;bV0eBgJP zUWhylr!ck{WU<+{{wg$J;?k{Ag(?+;n8tz7+E$9MpjAn3JLp`&B!x+n)q0vra&FEi za_XDv2xOrIX%s{)H)pzsO+T}+_OGPKyt0BYQMdni2!Yk_9tqgT_ zjoTUm=;b0L2k0R11UeDE`{uJg7si~t{eA>tmsOq82=lsfvr`Gbmku*>nztyEBT*YQ z@`N@j$u(os*Pd?rA9|^3U0-}}WZa_h7H#Mvb@$R9WvoY0*~a79QeEXS;QXsr$W#?A_Ki^+{cL>xiF znR$B6U#z;`h}@w;Fz3jx4WA~Ie~}&b1w*AL5`|1J;=RugZ*KH(v{jlmYdYROyjEMn z>7GaU85goXMJaUw9hyroayuyQuihh*1Qp^%+vMs-bZQjk_a4ZhL<65yqCuG8kbA_q zMUX!v_VJjYoLXHv1ZLP69UOCzq)|r{B*a zme9}9i1Nv)-%l$O>^#>{-2{Lqo$n&TWPOU+po1hYa>W zkLZ_rS&kro#$&vCaLD!3R3rpGf`K`u8#vZF1sme<4llaecX_%Y+E9*AhXyvV!XbOF z2q}EUQ-t23?#0MpdZM8L&Pe@S(UhX0@MDshTvuySud`HVq$~Fb`;!8XX^-H7tyR-~z~y)4qPZd;S*ajskaY)Tb3anw!R^Ny%;zanI?ledHH1;{$3jA{~| z@(l5;J)&G+3aX6Kzi&rl_@XloMB_j|S$o;x_5QiZ^Y2IguVC=IH>bkT6bk}ie(iwI z|4uXi!#w^G43tcr?QH;UO;tc|gG9yjzhkW>@(pr>3@AM52?+{Pz!Gmj!iIg)>5XZtqa>BPZp+Y zSfXd{-gLT~>rp|`qFp-6SrV8pUbGhrt1mo5W*i0?t!j=9NG!CgHA<}00vvW8%UY7d zJj+paF5*%9xZQ`n!E%?ycQE7R_vRxK*vC+v@ct_uz7{5;apNC7(wG=t5af~;t|UWk zkq-%Cd5L}X!8}HY3C-IYuNX*Z5SZR;@^^nsH~!tgf0_O_>4QFdmgNSR9R|=E75KNL z@4u%1GXx9TSQ-} z5qEAt(t*Uii8 z?0ZKU13!%ped3p_E3nHo=c;3!!v{%9YfDa$~vbr5l8ov4*)E zQA2pw!h?Bog)sLJ;+!lGoZkLe%lLP9{L@i9Xbx*d07o4H9QD6n-T1%G$e)h-uZQ&I z0crK{?A%I?3If8%7o$Lt&-9nUUC$<8$jAz1H6{DX481#Lm~$=N%q3rzeg1HgIbt=L zwa*%FGIy`{Ri=0E$I}aJ-zPVsu86tVdQ?O0f@SVYa&sta{E-)_QMFDQKFF_*>)4?s z!dFpWbUBt=Q`pi_v*hGO41Mi;=?Zdx5M<7pL*X_sA)+U(r@Z~pKK7aG_i!g6*4_95 zB&19hCXa3`iD_|ukRw z*-(CVCQY7hJR`&ptkQvrt+5NCj+UJx5m)r%xCht<~my&BLTfX6%Z(CJ9)mRmT#! z+UrRWDGgg{vdyxWxG3!eBoAVPNXd-fO-oXJIHbgkJtoPkJe*0&M1-PeUQ6sj zV5s51qY6>1hZ=0)Oo|=CSKo5?o89cgfJEbb*@Qc|;6&n@O>Dv@7xozRyodE|0&ftn z9EnXjHZLQJ9f3xBrbu)#p0_Pbv-NE26=h)pYaEiUg)faYM#FWk<*peKiiaV` zA8Kni5YHOY(R}zB*r-Ap*CIsk3|z!Ca!U#!v7p$?L{=J zzdks(miar-<7bi?AF$rA;Y1TAij;+X;Z_I9;4R>IGI+jfirJBDe!kKXGn!KE4dS~a z0uHy`;W)*uz3%YH>uaBqD7`Vhg&v8CT<#&fvy6K46VcAq^1 z&DRB^vE@PbAj3w&RF5o|O(FYhH-WSYv6GuG!!0acyBX2!rb7(ss|8xSmzId4Oezlw zwvf2c(+WO?DRU12;)w*KtFa2NbXSh{%I$(DuS(Bg>0GtwR)Rv^sXd#}NE?wcRuNmV zxp^1~V$l9$ty2b%#29$#*tk8z+X2d9X4RDQPKWgC$r@mn44jUQV=VpwG5wmmKSk)t z>c+%U4R7XBUQ5j{;;xOLXjn?>JaR0uzI6t}jWQIa`k%NgH!r~;Uqp&8;9TBcuU%yb zVIJv|P^Ib4CnXkh*O#hb+_^x&JjScN+@Vm~%H7bB=3vxD7*6dsTnl#(GVrO$AR1FJ zY;ilKlhvyYS<0-p4`2TPsUsG)ytlx_`{gghmEpV7k7|;^dHymVU5hUq-!9b~2I^&S zUt|Jl`9^}fpd%!fQFj^S`$ZJ2OhT*ThC7NR+8Yi-JTf8kG&vp8Prw9oV8Gl&Z^bRq zmtW|bm^5SC`3G{wGRw@|FPIwVkfst=qTI9O9a5HGYArtzzbcN{_okXWV1o0I%$EMT z<4FJRsY5_BzazRpC)yrEZHAR>;yRW!N<^mc^oN}9?*RP^y1)4+Na`foR{&(O0Qall zzlAOUjejXS{OXAeZGr&LU77V(w8!v+x zy9|{Ni6)804u=lQr(bGyxLhpkAU!eu0-uK`!FmU5t=YF+rJx~>%Umly&hftFob~jY z>3+Ytn{)@VZZ9JW=f*@)B~h3ljCKN})>LWKnEsL#IFhiuyKWD5w?j2lMFkFNFRI|cis9FCz~fU$lAVrkcV1pTt?(h zo4={Rjml`=83{7oq%k&~OJkV)%QT~FIXg|TJyLV)D- zviNq)IB0Kg?U)UuJv%%K(4+y!mc>^uApuh}^SG^ZH&)3SbmsoJfMa!x^%LZ@qQ}js zXEvcUQ7)6rD@zs23caAm55!GM>?0X>InWtE0leA_v`8T$z?>1AtdF3DF;#7`v#QNyVd@l$nbpU5=io^H5&IV0&7a)Mwd*f=HygFbq)m%mJA=bEy( zhj3X6ZNW>L(&TgsfONo4vx{U{ef#;yG*~fvP5KY# z{1@>1rLsI_?}BD{Uf&aC{g?QA`;$}lCTThht>#xk(LYntuM%a}_s zL*)q8m?*+hXCJaLPXEvhE0Ua?8EMH$%iDKsD9+ZLf1Dm&Oq;Gi^tmy~RNxn046yq# zV;QzT4?8wmis2)y7S?Ag{eujjnr6zuTPT~+qLkILgwxW0}eI7yqyXeT^-4slP+p0_khnl=!08?L>Igk!#iUB?jK zlI%+QiaE1{UA`0vX!jdh)M3Gd#Z6#o&(tihr*Z`|)dyDc%Z3G0@>*NLnFcWGcVn() zG<-;F{<^ba*Lsdg>)|rAw#;LA`pljyyJy$;WdS)HX|OiS0CTew63V10oLSZXVJQv~ zl)QnW3rXu;CxLZ#Oo}k@)w6= z-M`F?D%JJX5(OE0`K0j^5_|C(p}`0T))2u*UF?;~B>>)|DEjin2vHj5mBhUc=!kE6 z1_jw^eylq6j@cKwvK`LK=t+YmKjKIkG{52rhh61-Kn@fjI}6l?>9jUi?6*aAcSzq; zkm8{uwqq5&4dGKt+!;$si$5Vn?WXD(;zg|^nwV2+baFJyE2FF>KXYo2a)ycIQvR+d zi^80(zTBi+nAEu@D!OS}HC>15k{z#kgt7c-FNSP2xX!6%2+y?8s@m5{r?Cd74LA3g z+)~0-j$GF=jtH;DkxOM>0Ie-Cs@T-58}zn;_=RE(@y77_%f!HukMg@F{=&51*T*H_ z52#CGd4H7-R2DnUIBzUQoGMj8*30xXDExLYd=0;6Tgg=;7m+@1AIrtj4&||E9ECP8 z5{k2h66-WqR7*$nMKrRlrvut zYD6W%_DHc}6GehGE`EVlcb2snqQ?67Ju<(+m%Q;=wIRWu;M@^LUAUxNmMMl)ho;{| zy|G7B<=PQD?s#@QCWkyJs?RS~h9K(nr(Ic06|a!}2n1dlnUmcJ8Cq2sLk~P6e}cz3 zzjb}?%<4!%E&nWAlmaa|Sq355E5dXsl|p!$s0HeZ(2Y04p%|OQ6*7pVP967+;w|aN zAmadW`96mrh8)yVUL0PR*b*gXtY4&CpYSWJCY%y}t;i;-hTxr7*YSLqVdP^Ywek=) z-FH~@o3Ln)K@Z$A(w%yd%k&h19TLhwox~IYJPKjFT7h3-BEL$*-=H3ZycLM_`&S+u zl#8u|24dS|MBDp`wg|u+!`h|Ef>FuBBe7)Vx=x(ouizQn{ou$a4xyB!}iw1*IoAh1|I-#6YBbc#E=y z*)4nrZ>~0a1uieDvap7&`|?hB!>;^`yF5#$&VB5ByLerj#XnumZV|3WnEOPJ@gz4T zNO2<{)~O3E8G`OR(y4d01t_dC)CllU29;NnIMm#CDlR{f$wAjwTmBa0h1v0sKcpLf zzjXe29TB9!qTT=~=R4p^(*C#Ckr7~J1YmO+{T~l+{AaBhKy0jLXyXbPwXp=WVr?Dl z?M&@le(#n5{P9nY)uQ@mE{|O1nuMh#WBGgzu0UBFK;PX`xdi4&2v||9g2R5Zvc1w! zGaQ!!E&dA@oQ}Zp8~Am40zy*-wPK5qrK5@EnSPJVCi2T*-r3)JO`!M+}- z9qgh;rNPcfV=O9mRmdqVYK2QSLwTDKt_KlfH}GkwBSJX^!~00VYIMs1*@k-H>a@y< z^hJdqlGp4(&)7gSC)Px>geuMjp8T2(ZdBm4P`~0v#gW0W2c9d$q1n0gfQ_{1t?J5^ z)VrFC@Xz*|cJhI^xrw!}O*wew@FCrk$-ac)xQJ%Au?iiSkI5WKie5rl2FKPAbst8qI~6V2n^VmjYJwySGRzgTpwUN-)g#Lr zbsq)U(x&9Mvn75Fb3}?e{HbG-sMrY#)}xu1nH+KJ_ zeL^p04yX185A19E%qs@V?AQS8h#VhVIH*{3jI>RvlM8g4_-+)(jN|33bULzD=q9}qtj<5_VKP-Vyg?^HJKY**&7?(46; zpKyI_Ql2LDIm1$TkTlqLoYBiPD-fBLw<-$6B$L^+LY0^K5(75Ep0@-%_R`xZw&}#s zu)An>(iWyaiwvkZlz9gP2Up`rI|lfY)6Tf#ZgGM)aVLManC$0Ljar3I@Fr#e#a z6`%#)c5m+m`x=7x^i(56<-NVDf$fQVGUu6Xk-C@T$b%G^k@|oCUegmVmg}xNnF3~P zl8QC!u4Csi6k4y-kK(F+@0I#ARA#HLql_tBgL5>5M@b zGtNnrbd2e&r|6-1pmDy}`|4lNM?@pf1`nKGztvJXWSc@sT+*4cyLG)#Ut z(I^<9$HlOQ4e~pp9s4{Xx1F7ELIbjIH%!qvPr|=vA)`-c{_x zz#OO7b)@$j|4s0N=WMr$_~d;svqRcr&Ry4R=g!;BV_om3c1-@T1~^LGQwAT2(7BkH zxIx3E&g^O!PD~ukTSK@-SdO5g#w^5jMor$0fYECY;Jm(MCZ3Z0_6YfiC(Ex7G1Ymn z`fICddWPicn4Y%sgd?prz>UkETx7PA)=ggROlAXCQ1TX|vGaWM0Z>h#HH__&?T;KX zB!WLs;TBV*2xEogGXH|OlhhocTD^fQft)<093N4&y-xOpa=E21e!zVPg( zz*-cLyO}MAOe7L3tOuJ~aUUfSnk9NfrPrk?*Q;Qk?i#zLNPA^xjgPr^+EQ}uE6JR` zse@d?m&X#1YrIrdD=n!q)&W8LtH%&>x#g-e1ctj!`QfRZ)kPwv@@TZYrZ!07;?va6C5FC@OGsUbqb% z**`op+rSjF{S&*D1s&eKNz+kGN@&0QFIun-MAo^$2QaRN`98SwrJKCK$D6>w?KNYA z;GFH?Pq0xG|!s#7_uijiCZe^aQ%0E~0YoKD5a&>zC zE*3SjcB-MdC}}=f+o`oSG2xZ+7BcHiv$u8e6Ore72VLME_YNtX6g1LPQ3nW^$m?%Xh7z;Munqg1Z$RA>R9x(=vJ zSVS>E2s&;>y7}cOf`sF0IOW{yQWGomU3RMp59(F>d6wkR3)Qr3AMTRf`H}Ihd>j}>X!Q$wirAop3Zs9*f6+HiY#5rdpk?K`-!EQa-f z#vR716oz{`!;a91_IP`Emlx{3C>Wjb{MMP(3f7ZcHRp|e&kLxa;tVIr3um|_;S2N+ zuA}*Spuuno^;l<%@6AS^s9Dc9>H}1<%o@_7Bf@s)dB)IRFj=n7cw(2KHTDO6$!Fgw z9cY~`C`Z1ju{d>A4Hf!T53@P#&e*I8zPdTNvX89amNEulo)0*}P)Tb?GS2Xv?%VdR zsYWb75=o`JeANTqQ@T9f`?_1 zpj46SED?Oftcc<=T|aZia_Qo1j<7IHs0 z(l@=|sF?~(;{PmJ%^ys?_EhT06ck6>BYu$FZ)ya8Sr%N%;4#|nm_0X$* zG|mpyIJ$Itzi$WMHxEwSC=UU@2!I_|M-oelUt6`(lxqTB^+ zjZOx8NW{5KP7Y#)vGNcZ*vE|&osxb=v%m2AWNlrzioj9Ai^a~x9IPE<;_e|G!(4I^ zDZ$aomlHE#?!1tN7f}i_V9^?BF%ta*$i8RQ6W z(TW)@h5TC{(r0y>ajTqWqtAFq+?K^mj4u^tP@zh*SPyyB(krEsopIL*<5sH^(ZnMO zA_BegyLmCCvDKE{nxp(qO1K}GZ?C6)R;$)eiDCHG9x8*zSa{|=)*eCzX+cX|36b{9 zUh;5_$)CSdaG{BjF%V}%kwsNM|CBJIu)2qeU?Y>G!j&skow;{=Xc-P?@Y5 zSTI_JGN!N;8L+f0Fqb9Ei-W^DE2^N7Y~#U`FCHX2G?SAUdBa0$5d*dJ+=AJ-RS_p+ zs^@9pN>ma8$>SHa!2VeMM3c}&QyVN?jd>bqV&qK+t;t+E@Bk?U@%>RAmLEqFTe6nC zGG~sgRk~w?;@kKuAA26n0kyk56HaW~!y&o4sS#r!b$5QU!A!;+SX1(6Q{M&|D}z`@ ziAB@o@t>{x<73H}YMyI`-D`w%-)Ps~H%eigXeXn2Q^!b%O`>?`SIgpHe`X+F$-~#* zh9r+)!>u=JXFgajcc?0kS7wUi2BJwla|LOX?@8i%*Q*cm;qv#(Yc{#^gd(Cj;>sJV zh$Fpf&baafzjLh^R>Ya#5bxFi{ttyQS8p$knJqow1zye!9lU)tsy4E z^4JTnrqzg%@Y<;vwkDP-hxmTC$&>h8fLvB8uv}KM(k^D|(^eh14tRzBvkR(2G4eWQ zpp*TDVzXV=LEKGhoFB2RnbCAvPM7sEq)H2cbIZ~8(!vTE^Z3YM+Ek$D&W3SmL(r(^%YX&4yBJ8s@;7BOE420lV+aK zY|}j&DYDLPpG5DYoOO?*Qmxfm+#eVM=2ccj_e*E;G@hM6l)ck(IjTmPXKUIQay8K9 zFCxS#c=5VL@_akWTJM|k>TD_rp+MqJZzM0B$woU7;qg4}T|!JL+hC+3*^p!y-6#^H zqn?!~9>N50^LzR_zil6RV;Rwdi6TOG%LUXfDJH%aJXu z0CaMGrYfX?#2Ustof-o-$6l3ztNt@}Dls<-OEi|Gg<37;2vv?S?J?DK;b&VMjjxV$ zum{W4sIjEoR3ZsIq+1O(_d%{h{CGO_X)5ZydfCP1;};uKr`24m1qd- z1H^6HTMcnG|A(@74AN}dwna0u(za1qY1_7K+qO|@+qP}nwr#u8c)8Zz=k9gl-FWA` zh#6me^XDA1_cr?&y|>oXry)ku>ZH$yHYsn3>Ewhg?A&*DufTep7<1RLpbO*|KVPm~_usuq*OeBDq$P;#B zb&z8eCSqgMf}9~_q;_K;(hpA1o zKYw_zgYqz%m=ako8(BWuZK2vu)UqShvLjI5#t7V|-+3cS z!Vb)3V-$shZ7tBl4lS!^le2Nl|M=zM*H!^)g&~t938fGx^gR=`l?hI(?td5U8c$1(6UC=?nUxVZXUufXI^3 zoEe#N;XEFSKS3)4hpM68zGjG= zIpCJE%=7P+Cy?y~I`KnB#BWF4FAi1TPESRmm0b1Lcc!krmGA;tf*VsfF+pWn0W-Dh z;te@wZyQv~7kav0aIsDEpTvwGxmI{^1D+a+;bnyN!djNvg5;EPz=ev7aTQz zUgyiS*Hh3! z&(L%N)~?H5D7YZ`JKQv~gJu5g2zxHDZ0$2$nzL_Kgfq)?;)pf~(=U|-xFZid zJOE{~FG_iL;M9Sft)FK!}h_;tRc3z4!#kdFozb*|E=| zL0Vk9D9y82=dt!IDkp4>$DiC3v-s%d($7N<AjM&vd!a2uzs@@gN!*~b7h)~j?5ne zbRK?k;V_UC;;EcVZN(7v=RmmdKp!9itkt$@H>i@H*|4+65SCjcl>H7=wJtX1ztr_}150m`6+W#+Nq~zbl zKjD8nyDv<%`kr(89;vMsi7pQol10vzTdq)%T8Vf^veSP=Wg`@q){nN4y0BO%Tv?*=104Akbmc;!p|D!@s z5EyL)^m;FwYz{eIkS8vnz%o2mRIZ{&zW%E-@CZ0zTW{xmvr1}{PJiAESvZXIUM&u51+N6r?~%{yCP*vth?ej_Xi`w?}$ zfCvaQ6m(phvo}X;=vuRuub!Os99tv)M;3SibL?i&?_`2+y@L8Hz)e{%M(7cTpaNiGg&DZ@VC< zgi*^kIo*0E>R`vZm)DL77G3NrbXv$ZK+p(`n8YL0jV0aKo;!G@UGN4}L0vt79CrU~ zF_`W=GFii1-|0Rr%nzc6u!=YS3w!MGra|G^eT`Y^ovMIuapTc1;5()u8RAg@nO$=A z{8)hH9nja)q7kVF!6t}8!m5;=g!g3Br8$tKxgmMPrA${ZG=rxdZ;jAxUbDffN3}g@ z&J$mW#yxSbJzVF3(#n=bZoB#$QZrqcPCxGW?6)YbcR+&U2}#eo-%ne^8>Pa=eTn5m ziWwA!X=|_O1~NSt1qo*b4WZ&1S_zo-OHyRPwVozKjq!8LjMjoVvaf{edz zw=g0Y-ZFLVB<*a!0RW+e03n>kd{II);}}~40Ae@9<$vXdk+cUN^ccHrI-rJB{s~ep zSMrea@ZXZCRQ(+%r9qyjtZvb$Ua5Y57#z(V-ThG9Jp4L!6({99jqkBLJT>uReB@=) z^>XyqC8qtd{q2XvxF_=*iG>9g2OC+~(HI#gd z0;i$lv=6&++N;%~F|^ECGPFE6%tCGlca>GxP(OvggAZdl&)^cR&D_GeSi0 zwgkXUvH=%u5DDm`fHdoYw~s~WT7kZc=uCk=E9n*oA}TgSPdsJaO_r)>09(n==?EF%O5{0d+p93E_cBEy+` z6=AX(4lMwv{DiR=SEmjt?`;xYS%^x*uyf%=UMmWGklS3)M?6Yb2zDwMLSMam%uhb7 z7j8v&N+D-q;^g}Ib7XnU51 z!Z`|&mSwX-Mr1~-sDDsAGw*c-C8wR7Q>QeQ_*yzr*256k)97=*9^=ntZQr16t%tOd z4_+({Ph#Aa-V|NS!VE7pKs>svZwo+qJ!l;vgvCZIGoP{{b63rXPt!M-kRmozVs!E? zRT4LyfU9&lqwHHSvMMBUdEx)9Bt~#4pFfI}`xR>^EZiJXPoK406vX6UG6%LO+m8yF zG7iYLTv>TDU(=!oRiDF<9059M!7RhVZcl^x=DLU~`DmooBq_4wlrF;T6V+_-P(?Yk zJvwC6=;Y?msN7;tuQIw>3>U1#fV;1ZrmlCdf1?N;uF$%wahID=cXz4so4d6&Fep>2 z!IeW?EjN5V9-7IphPD#*TG#BxKNUt*<2WJ9@}99`!eK$9#VM&SFmmvQ=!rA<{CW&h z*8aiXBIyJMl%B83-tkPOjRWai(B;UY&EgD$y#yox>|JAgsc3FbB5QY)#}FKfPC;b` zk`%8{D@)cE8_9ZO9xZejXw6wmaB($tiiw{F(Gx_U+;k8X5LPOkfVgfdN%GI^K zn1tL@A35uWR&SGTWtKuu4Uw`!#Pc@-lW=!$Pf3u!Ips>yYf-oD)=an87coRQy8~!3 zSSS`zp5&QCpLg}g4ClvbVpO;zj9Z3^`*4u!?t`P#%hOZi)2qwdn};)l!{iijixdIo zT7xPDM2Q=!Lbeia)v0gvT-iG&qYs%Z3|q`9pDnG&ix1D2Hi_7%PXPd)zhvBNc;h`!-Y zT<7$$O9e)W6)N}5L%z{ClHd-Y3_KIDbXpU!R!uQXY9nb>s0;e|?bIU5{b{2VT)!Z{Zx?Aq~vVMVmanJ&?L$I)Alfb z05%}NqUxNGj`mO~2a0RZhf5|kN=MgA>eoxN+FNqlYZLPmk=fQ}rrh5cM`4%ZMqcD4 zsLlmY$Vu%*Gyfd#v<93DIic1grffEz^+7yO=eu8*K_R8gcb1LHowwBVs&(};Z8L4Z zfTJ$6AGI$rjh0&+0v~Y)yBVRg9>qy_eH`DHthT!Y-Gh{HfSh$f=0E|T^i2gN|I8lb zU@xTJQ`YW_Gm)cEhoICy6yHgE1x6*gnF8Kgbi$p}z8%dXdZ#*^?#)(+IFLE2&il4C z_-#~NiX|d{4ptj-$i+G2u{-3oXLC_9_@iNKpD_e!VcX7eA0K*0&J#VFZ+IVkA0lg3 zY~we{sz)4`%r0_QQO0ih0p9DDS1d z=YX!{jI0I=75V2rWDlpKm2!tUZ5~0Y<36^!UFsuAoWaUcCblqkm+BY6p4$aEC+$uO(kVvl%Ob&3Fu1Pr7Mm7|6h^z7)x z2Mze^oCIncX%&4zmdvANRwHS~gd7nB%Aj=%K@~}c;g%!vp%FN%a$`dkQr&YwmTaSE zmLuHE-%j<0Qb$er8d7yk%!Vw}qK|eK^wBV@!f{r0`0a;dhKt@qdol;C1;A%@IP!!v z!HQX+pM(mOaz2>nYAkdYRfjE3>jOShM3x3E+PyPfleB?}eOItQUXJH~EMd=Kn__C+cWr`F}0slsEs)JU%9`1?A zyj{fjA{};cLE~Q?VBYE9a=30ie!prxKEK-jdcP&{ov$I%4B!7rynixm7-3v3blaAr zMkhH)8;L>Jj@vKSfp5%`Hv+*9Ya~C0@#F}BSxNkkvS~Y4 z=V-FAK#r1WZF@z>LfhExoLIj6T$buoEW(`2441m348crqt_s@SGm|7f&Cn3NE-`R9 zhMB~zr8RjzRgv^$Eegwg%rp#dk-a)40lNC@B}gmv&=2w$-atGy3|C7squ~TS!d#=jx+;}1G-qA z${+EY%xn>;p`gAhQ?AWl3T8pvormTs%%8QJxKz!Nf#8PI<`7r09!PH_H$|$BS#uegRQl?TWwpwJcJl5zRmBeC)dyd7T4s|4Uqt&oRXrwaD>(#^Wfz_XjKoM> z^dK%oafX61jgLypLC6h;)h}W7Q}qE|%lRU=F8S0lKiW zhB9^toTyif?Y1S26NMUMpYj$A8WDD@TaN07b?3ADUvqT^2w`fvKOV zwp9qKA^;a2KySGaDam-ysYA;b(7qp{x;#vP5^u`|s2Bd5A{&tp5qBH~-L|T3Azn~e zCugVH!wLi8mH8$(Z=>08y{I9x(mI0R;Zm>cr{}67)goC%80);*v}Kb_WpH}*XK11q zDuk;)H1)oHe$-{^Ft&T3s$eCYqhr0$yxtU-wSQJr?DKw<snG4tsoegW6&TP~bD=zA>MWoY2G~b-{ z`5P+#35frJ%D)bSe%A6kyL=DX;luuK2JQa6=atoS{FdbXc4zvl5lr~+I|U=lZ^2$0 zdj%tVGd)W)_y1}LcdAI)DtznpTHnQ`6Gt}%G|A@5dk@4E1)!G5mH-tlil+gU3VFY~ ziRsL%%yrz{0fG3~?k-g_SZ>zX{brc+o63n|mv>c}Jt{8~-uITF}#~d6e-i~Gk9q7a7F}G7K5djj_ zorx}{Js6hbq(Y4fowkcY0#w{59A@C>A+^ML+*QlvJnp~eHpM23(u2(;n3Rp5x728^ zgW$^lHighX2}xCEFFR~lD8ZdfIcPfLki+z-4hu!b=o zg`Na9Fcu$&HcP^HG?A|riR2X6#|DPTbT*2(XFrs`95;3<=g2?2XSa%^AumW-V5T=Hh?CfaBj%)=h!E0HwOLqL)UWOL=?skyLoeABTaHC#%sfF^8OV%hawE4`;1kp~)8Vu; zst=7_j86SA&7wy}Xchl7%v7u7xi(PjRhwC07-}9%3#BZ6&2+Gt-qOq-3a92CkPLHe9131Y68TiQ=|`4T54~n`FR0;y^yN|7{MlM-)`)5^NT6 zOh0>ydBst#))q!B8?N38aF3ppoieZ79#Ec4Rwr6NPt+cg<_JMeyRlrv+dz?zDH=6P z-~T&|^Fm^dX;$8u4t01|a{Mz@eEOqCj1XdCj#+657F{_Z9~--IqJHqP*^4Y7emQQX z-C`6$Zf?GfEBHtGaqAjG+pp7of8%cE*qj-Rr2y0`TY+%siuWWM0@Y52SM{>H<6R!d zo~Xji0%OgKUcr^O8)|4JXhUl-Ld-3-$QQhcvJUIv2g^0w!tEcq+`9|qhxYEyDY=cm z2#mxh)^s}BTsF76TR>BZ*OYFw=fZVe(nF9qMEAitQg4a_T zpo=%g5NDJ=rU)^HIAE6F8fA zVkHQ4nu7bw&+K{YQz?8xqMm>Oz259V~HZYxW?WY;P;$>l;sDRlXX&>Rv zSY|NX4>C@`#2~ROgdXs6UVmW@oOmhf5Hz%aS84j~dDkOHsaTruNTitGmi!QFx$9YM zP*E*VS-ZW##CM3ja7Sw#E~?>N;?IBzBWwg#5yi)r&Wn0@HPa$HgOM*5)S*Uj;PO29 zQh8pHqBQB&LwUnFU%^Y5;+Y-#?2~?M9$1ofJk!0Gqkoi(Q?2Y-zvRWrNeMaH5u7Be zp??eK^CpD}4A&5MJ7(RX&B_;{*N$+%WyNs#CU8e`TgJ(vlxZTu^+tc}nN~)RU<`*e zhf$kh=Wmt$3--YatPVG{~N(D;@ z**mBpm9U@?WFB*Y`2l52VhvFpCJ}L~)T~!_R(?BZl2EJdqN*K>^6}Z@b@5R`Zu++T z_<7Q25ALSK#Tf}GkU!-3SqzrL;c053(E*II+Z!-uu%1;q4}BOBci;vhX`j(^ z>{bmL#}$20oCA0Fp0%qd8C%EB6DKf)AWDhJ6q^Wk6uz}Gy^UoE{_Il27+gl3XwMnh zQDLjPs#^T`w<=S}yjl&T9wn5B$~BYmibq8|^lhGz8%Vi)EUbY37GoiU8TfKy1G8LB zhPdzwzXv4)=;iEWSX#XW#-zQWa7%ho(r7td46RwJQKx+^zI}qB`S(~wMX7FQXCPB8 zK7G(nHHj>NUn1$doa_VN?qr#x>rIRjb7W)o^&+S^<4IA?Y-<~jJ5fp^u5CuR&c?zl zocy`fY_lAEga>N}3PA_3q(#~0bB~L0+k&M99(d>LjUgtpQc!t-(@G$;GR1P)r~s|~2 zR2SzXCHY*q*6b#N!|^|iV?i4In}jV^kZLRgcOR}E)*8;qnE#|Dt&0r1M=apz+yy)y zWYu`pVjD$4VJEYaV@I<&MlqFPA0(2Qal~O$ND5^! z!wsv?#y*V*lq<=Uxo*P?D>a#3G~h26md+J<1!Iu`qq!gl^{)+g#XS|gN>VNEODHeS z5_ZPT7C$j&;-dsX6I7lMGU?4%$J2EemVOGURn_J3Q{Qrw3zT0n4>mW~v=KAW2wG(j z*+OPw%OKL$NSmejhV}weu0U(OEnEV30csI(*dRW;hl)!PT_$HXSV&0GoYy5t@Vt4G zauJQ^nY$W#uGP=YM;WkTTLa;iVPipfLYc!5P&t_dLD@{1mfOpu^nIc70&%S zy>EMi(`xeAYs;m2cQ(;(u(}^HXj&5g!H~Y7UWPV-tMYRC@qy$vjF67}2Voa9nC1`n znjDsYN$y=;^Q|OWIFu0Rl^RnioH}Vg*g~cIdKfaQu}QI*!Ze`AdA8Lt>?*&r1WFRL z3hZZIxlRVR>>Hf3KipV=5yrQ|U2;v}{@5DFU#u+U*OCw7CpFpk?QK()A0J2VeR?xh z?`W46g*K^(b^hMWCEf5TWn7HTvl>ChW2)HguaFlY2v)A)Lm~Qg^`iVn_1%EQ-(vDX z)*S-;C$#CmU*!P5cZ0c9!)nxPUx>L>0S>drqDT5P2&V@hJijo3ZXIUJcc})fhrET~ z^-O*ZD#R)>Vn_rk41+e=zN1LL^QP$=s>d}1dT|8JNV|i=>-mS&LbI>Z#$8}e)ts|V zTkk-Q>xV@CoVM0WGB&D~GMSn&+8*>EjI8Ka%eb%R4rY{_D0UAqzc0OS@r{wu8X%f0 zFBxy)XC^H}^9m3KMrsN3wvBTI`++W)V0m6dB9LLhl;EeeY_<%u_mFpKLr*$Hr};H) zA7Q(3&@y<-Jq)Ic-Kv28r?OqE|Dzvs%m8rgIX}prnYZ;z1->Tt82pLFpVVB`Io|TH z7Cc=DEnR>mefVd4xLz8H`62Hxv$EP((nRr@s!?<8n6*LT<`8*%So>L^R9Cpqtht7IW0Mkv@a>{GUMZ$V4!qyBxtAs0x|dUP^k(IH5&avn}j%P>i^Hb zHcr@n}^Z57woUaISr%Hyp>a)IV8tUVb82A``xTqW7EY=3*Q8pg1;e zA6b53_|ZNgHrTxV_h>k%cMpu1B)nOCeoOZRP zadq=*v!k=n+rlDVwrfz))nOtc70ckaFGmS37yh=CBuEz5kaj+~E^vE!lk)|g*DTXb zth5gy_IY?vU(C*JpnEw`=g?=FpoNkNp{x?m9r2Hj&#N4S$Uv#0^J46pB_v1}6%4PS z>fs8=fVTDz_^7usE~PHnl?wV_V18X?#tlnDZEX`ZBny{Y7NGeSO9F~nG{_NYZ~0Qf z)okisHjEMYKU0yyQ>eJ~=1&H&BY7oOz=eT=(qJa|L2!bui>_=*Q7;-wFxh8oLEy=H zm!ozXsE}{oV83l@3#_HmYG;hxS?OS^zfesx>X+~yM3xy)5~G&AR$+-Xv`Ua1UvPb9 zEW`ddr|hEU6XYC`*RSdYeB9yMGzfXT$2!a*m^!ELDxOPSGv_;%mY^n4O9Y=kjG(h? z$Zk4DRLi(e=toTTm{^baUifhiMwvp0q}EA*D0^k^M(dLcFI)u4p%uh$rtt%T&gYGB zF=KK&>QCrHC8#do`99~+pu!3$D@l-}1f3eQVnf<6`(*+m*=nXq$9Z&5UxdF3^s-_E zvAI`>s5jSwC6%_Cq@h#LK?pfTnuokJPPz%a2;_*HLHia}IMU|QW5;v7AhiMVs_e>Elf+yTH ze0;lG5HzR5n!u@(D1NkL0A-mm?ECP_jhY2T)u^>*_Jt-mmZY&TV z5t87~p{plLS2oUs?Fn(a+Am1bm!4ky0ZU~rlu%M=8OhrEP%=OlgXFtELH;$7vR0Hb z0rEmH7w>Kn#KUXoa5}KTd8Exid$>VqCzgfSd7|u}s;N+Gl7_+T0aNj#_liCDUL;oQ zhHoT%{RkCs(bhmnq)FKBIg`CD#v!Y@W0|qAAnoo+ee19=uaM zdl{gkf{D2DI{h@93kHz3f^4QzqXjq}h+;TZoZ_x3gTR}in=Fxx+L3Jz0ApOdk-FQ|bBXF7j6G>dG?_5eIfdm( z?wHjd%BIH;Wo!~Jv?!Fer(2@U6I2GCJv`(syt;Dg6)Eft!e>B!n)_Us+XZ&K``VHI zn87J5Mpt!cKVQE5>ytxXO(FC-;J3pf#h67OM?%7Tnis*x{c4z27EG+6gWZwHIAeYC z6{wAm{rHFCQ%<8T@ft_@7u9_)ds~DxPNj33v3~QKW>YG0Xlt6WX7D?L}7etMV#F|>yv3Rsd`Ro>_Z6$Pi)=BlRLmC za$z&q&+Lb8FegdM7q2fhq7=c8rT2EDpD=tYwNpGsH}C_4m|`GFq<6Z{zvteH);fGi zGoh2TpH=NHk9_%&8OQl20l(dmyQev)X}j{CkDYUjGKr*D)3bai*zuEayJ#K|sL`Sf zQDlGJ=@S`m>A9ZWC+ZrW*yYR<%}4vV{RK+$oZ8gC@E+|&0-W23`a0x~LJ?DFpyu2A zEN(KuTx`vFn}0C5W+|59qHfe`Vy@lG-68vS|5IMw@(Z`S+CI&>ClB823*goAGhZfN zUOzkDVX)IH=XUt!fNFGD4}?_mF1zbUqPp0jnunGehEe8vIen|^A%U)-%ef=i=4gW( z|5rtp<&ZG1E1s>8Y+W0BZI2#ev^eyVOrJ~$N(H?xeRT4vu%mkrXlfOwPW0jnoi}!% z?%W$@!CiuMJ%gOj**nT7xx53Yhip-KQA$QyvZXYK7WxT&+fSJZ`@{qnzt#6`&NzFv^~)rAFn{&-m;`X-LTF3cJ%HgcSpQW zR?kd3y@GtiotlGewVD>|%H_l2BKik7er6Sr%sne*>g->KTWOo9GjMmgM|2h$1#HO{ zcaOs<=I1`hsW7#+FF6YGUWU8BYZ-3>W>;7dDPU{RQDwZwkavPba{>F+gi3_FzHk{> z#)*h=ol0k!^#@uPq!<^HNu-D~P{|e#cxk5Trm=|SLVRU*fTlx_4n0TZG0x{fuddcR z%@e!a7qrI=7!On92JlJDXY5Asyd|q!84>Rg-VHmmVxoFbVs)wNF6_oSZDl^Dv;!{Y zIV~}+xu_I#nWnuKFb|)cGx%qU+L>WU%7%_8(_&)Yu3OOLVB*j?n)vg&{dw_b69qPp z0zsNzo12g>Bz}gq8+;MMiEpYcsxq>0NFTBp84uCMnsSJ5W_6R!q6QN~Xr{tGi+Gu+ z!B+40!D{wU$0TM$l_COL_8{IWi3+hEIl$&2uv2I&V(lf`G-e#M7%E;ZJnarBcoC*W z)2MK-9}fY^+g~l3vh z_5Au0DrKp)p>zHs1fSw!iqtAgCtP)}?EZkp;C=^Y%e16g=8(pNP&du1Zhz}nW>hR9 zLp}{9$AKv~em@doP<_t`Lz|rRz$1p^Y^s;#QGx;JG5C~mu@k6H{qhZ1!HFpD%=%6^N3kZyyeBf?&B|;<8B^OF zsJ(cOr>2fUQuewD?0~kHe{)q)YnItytIw}dPaEc`BE%Uxln&dY=&ySz=TdZbo);s6 zu2-tbgO&N$lVum~AG>c@Q@aK|RS&!Mc|+?_-a@E0&QBN0G5fg6C?Te9^KMi@1LTDsdg;m5&hSX{JeR zE(l0^cNop$c5Ely;pPCbMGiPrVhiMb7%$=u(eTUt!OrhI>xzCXe*l&$O&!K7l=|9s8h$Vy!<-iefwO?av5XBB0>k+X7w%9jB%Z-Nw7 z1=bjXUY?-PxMUE)ArzYt@Qdw%tq^>a59M`;d=I^R>R@DCK4hC9xNqO3 z?*N9Jm9G^pEtgbf>RS|PpL8c>{R&=p+TWs5ouQ%%^ZVRvP zRq#4DXtEckvUDX5?4%3%sm}0J5s?HHA zc3#lQeX2@g_DS375X~ulUtp5YIDkbrMZX1aRR;sa#-b%41-^pQfc4nQZaoQ`=6`Nw z`?XF6*Mj!r#SMH7QBa3S|A>C)8uV@%;GQ_A9p;+D_tu&nlKKPv>!)ZO$sb2??o_F1elRg`hST*298)_(#qC+I!$T#GamIQzB?on&#Jm*3F`{AV zAg0m+trftE-xBQVf<%#Zcg*|*oLRZYd+y*-eb(Ikp5tvV(Q(dxRcxqFzo>ZxaMRPY zn&b-s7Up{444e~qe)m^4M_^P9e@YbmJ*|oC@275k3 z33tZbL~XU8f*jh&cMZ%gF*Hy?^=5D>f5O>)AV?MC%|pM6g}wU?Y(V80lzEmL33@Z% zMzjcYgq>SFd<5WA29rj300Oi)*T@0f@#;L*JU1zF_n`gKYVv(he}HzB(0f z$(7UQD&u#C8jceL-IzXjxV{1s8;*Ycn1PyJv<*ngR|I0Zu!^h>W0p1Y7_|6tU|Qx{ zd3OjnhGmAGqbbq956^+aoB{@Ve}d>lLSB3b5t!Vg1D>j#zwLXcmGg*8#h*n}>;tg4 ztuOWIaq#IQDVYc9jFmcYHbAIcESVQzKgBQGG`7VfpQ@gZ=fm4XS&157U%vX$Wu)tk z?Jy-E(aqFO%+!9ip(4_gmD?GzM$+E5Ze0G*gs4$a;C1%!WS#g#U1-J_ zrBCjxj`;&cV_a9|td7}(#R{nz1(ikNin%)HuTRWwmz|$UB2D~gyWCH}S}qA;gm^Ft z>+qMH_KZYU8dpqO#y#I&5cjpP6H=wS!sc_{iP&{VmND=5)_s>)g$Umj@LhZZRQLJq zdgM0D7ct9&nwI-7xaf^`P1pq$xy@1YvH&c$}8@@4$Cq;!-SZkRe}1 zv;GCUAWuvjyi7wkh|`V)%@&=pLbAfyxPS?wG4YD50eiJGv5JJstO4<*U#*#Sgo+jX z$5uu#wLcCEklAgbkp-J>9oJmh%jsXO`czAqoTh$8mX*HLH4J`SpV;jAU;E3>dh208 zZejl}cktt942?6o#jJCnqS|>yE~k|I*#IAEWV1m-0pj195ZHQ~0yJZerSxagc4ix& zK<%vZ_Z(2EvT_~P`BQzq3D}g_D&|}&k%j>MdNt=>Hu47#0rg;$+HnN$CCvZJ^En~sZ`~yM@20yEA;Z6PlQI>j|JInrrD{mf zFAU?63(rf^R}B+{V}is-7gdK%f~UbPTGwlD*{p0|$Nc)sww%-bCYru0wJK>Psm_v~ z!Nz#&sq?9GHC5+t&7?pR48j}2z+y6F2!?9QWmp{~Yvl6cJQ8S;mLxeiuk}W9u=3%6 zgR13(0L?|`L%rtBn9o>K){eMp_afVkeyDl`Iu-4Cj*3pYW*npOo4m`XYanwi3OK zRHt3T$}Yr?Gd|L8c*w_UVK2S&gcEL7cSNYR-zv%!m>RRa!#Cpt?z+Zl3!N3IOFowt%ax`~wPU6g+j zYu$m|@?_lH#o4tE$Ri*T8-3D%_@$K8&Bt0Ryngs{%u*(exY?nKyV|wJ1gJH3E-$B) zdT4DY*jPC=I{3e}R!J*VwiNAyOlZdIjawMU3WnAoJk=pB?eod25?n;P*Y0sM8fkU3 zU?exQ&<;+QyvDUj`F}Y#F|R70pU$lzdj0S+@_;0}GFkb-Dwy_G(KMejh#mc|sn6Y~ zv61iuUsLt_?PC(Wq=I7P)T>X4l9pf1O>++#4+>%R=ZO}j5a0DKHv#ghznCH3Pz*{9b}ZL|Aq3~#2ny#?q0%RYwVSrWYfa{m zxzGFGG6DaL%l{s+6jqSgZr`FzzrUmQe?c6wv9WNnrTLbhl+yc`nVO=#nbp7l|0{S4 z<+x;k_~5_MSxa^zhSMiRW^M0!-~8)^sf^lJ0u~@1rP#c|;+xpeiLP-~SR- zy|52$8j^B8o=jh5v8m72xyA!HTOsY~EAwXpI}g~1jWD$5uW>eC25!gL1`QCG5biyE z?m{Y|n1x6!ZPM2XSmqbYEH2307)8i+Ej;)L6n$^!MG)6U1}Vb`nsBJoIa0qrRPm-8@`sQ`}Q@kejTP1imW9Rdh z88&7&dzPX<9mf}M>?DT3ZsMxzx3<*kZhg-B2?DcJ%y9>!RUb3~wJz$RqHa&7TGV0Z zS*d5*%x?H zdw^ZClL}XNRe5Az{7&H)Y|^pYXh5>e*5Le2-Yj&! zaKw$X#?A@N$+=VC{p#hgN-s0wkV~u<;%2i`#%Fh}z|RK4wL1lIa0pyrCt#wu#DV+; zssf+CmhGR5^Pgq=tEaB7UEiGkof`AseRazJ5zzl@t^Nzf|CS2p{;?uYs)8_p1sOv1 zs~jj#UlLhdzMm@Lrf0ndr};-cgOhXEj?8^8-cB@qR;rq5uWE!;lg`xY^+p#%J&%vq z7a&0R4Kq}@n(9~|1yHAO;(m+XNvR@pfGU~ z$utxoF9e2iaZG1(X0yy5cu>4qBuqwVG{Cl)`TC)=w7`WL^52?)B5`R!L*nBqqt_i| zq)X-Kkwz+?4;{k^`|U7ht`m=LeYK}>^5gWXfp9aOgTe zi4uT?r-&?+0(hGXYmtb-C7a3*S(E3iXVF<=1w7)<42mEm8zpwcoJ*Pgh#(?qJ*%`t zFVy(Pq|2{&ADLU>u@6rvk$GMsj8f6bVSc|@z~yTB#N4U81EVa?;5RYY2@xjP%go0l z0*9v$FP&cBl~Q%!!q#=+Bpa7yEVC2{yqekPgkY$gsOsah%kHt&C+h5L zthbgcy#SSUqFG~aR_VTeH=bVa1)q3dck%7fRS3E4CqT`!7-(&QB$sp`e`euOMcvwI ze2XrhsY;fR!vF$izd0S4-Y`WI2V?<&XNVEfVOi0E&4xYstvvv3e;+jq_5lmFQ`C>p za%hV@guNwwY1guUL%rePiigXZ;TsH#*IUqEn!uCUO0uMzp;Yje++tK zGt2M6K^kcrDLs1&BYWY$Z~u=bxzso;ARm0iqk7T+v3F1Js$c~TJYw+S4%Cq8c-qCt z#ho22caKP@wsck7yjH2B(w}=LAApcq7w-GnLYM3^4+k9!Q)Lf^J=Z0R2$LloM&=>sH7xJ)?HO{o^)tnD`H+Psra ztu}JMW20loR{=MT@ypp8F4}NOGTf|7cyF=c#~oZ!tzM-AC~{lz_tOO6O2!e`y+kuY z@=E@wDrV!ka>G2!v4M}o0x4v-5v+ua!z+XzN91ugj%W@^KoUl7Gy#>O*npkBQcM(H z=lPSvG=Zzj>(=b44XhFaB2C-T4?dym8zvDPU4T2iYAhG_h6(h^`X*1$DxWu~RRwYW zM6Gs1o-v^NRfc0u#C>;uaGnf8V@*Yq6oW6(hxCI&xC$(-K7GO&A{r&}e84@b+_=uXC zuWh!AwoApPtx5dDS3O`J$FB5g6rT>qk2aDs$&;Fz=HW;?IgNBn<*AfNn`EsB4Fq)% zvm>=X6FxpqIQX2lq#tGE%ogU=sRiuG3EjUK!?m(!j%aZgzZptF_mhWDA^-VkYA2lQ zHy$#yDMEIYKC%v10JkPDQYO?7)nf2s)~%jGdSMU)_AjIa8&>H|^D2lxP{FMV(gUeKkWMZ_veHCK@XIAxa+c7qkpt}vjLg>d^R=>YqT zMF(b*wjDHJ)y35I0@lIC5u(5H{MUZ(o8GUyAiH0BdGl2yw%W^_{y zq3Yw(eq{T|8%bj~Ul`hbw&ZVrGjji#EdNQPzbX-D8N>*k?-U{@{ND&u{Tp4rD^4?O zlfMhie`V6YKCzdo>n>O#7+;Y_W=3w8q-g6UfbseU$Q)sagJO$CB~BGVf-9xwSZG9K zm+Gq{;suHI>TGDFvZmr1KM&<|KA>1TW*vUAnaQ{v{O+gVyc=Qg;e*?ri0Uq>rP7Ex z4P@qCeQ|a^ded@#Twi>@^mq9J(#7r${~0!pa3NS2o@WjWYrd)4muTHmGG3m=Y2|2u zp+e9SbZ)-^@Xp&K1;({d>F)?*g|@<9@}QCjPZijn{eiIb(!<`%)U|a zg%Naz+V1Iy4JIPt>>Eao?~i^`ENWP)!(kH z-4-V%*Eip8dQGccyD%1+)Lc(lejodujcdZ9YY!Kpmkqb>#qTwppWb4O>#bGk2XJ6fWO2t5wI${Al45 z53?mu*j$oJyqv8*tL=F8t4}4bv;gr5W}`N4spP9kS8L_9p(`rRr@n0YqKEBqNj+WV zEV+4+K?<>wbyV5e!M~JTFJdCSDUiV)x03Y|goK~*V{K)tw-L$f{Y%;+f?YTa)AiD& zDbFf5x#)Av@x1HfLl9Ea#M_Fz#Efw2$LiEa*+2x0e_JwxroMvrht>-c@<99W3I@eC zZdU07_>Zp#nPF8)fStIKd+#RQ{E9>9fg+E1jdHHr69-4X+rDI{s&CTtYB7ym; z1^gE1ZOL9~Nbi?XwgBt7s2)q)yq#qt4^CP{Di2QL%f)$>Y50^fw$*GozIwrrVkXEu z7BGnhLspXu=ThpuwI*tYvb^lQC9-C4OS{25r8U>S^683-rW2WK>)?F%cT0E>BrvZ# zWzI9&iYl!Bg@eV*;W*=USBCl3;ytu8&6T2rw(IKGIqYxoJf_C}YDKdl)JegCmt-D| z7Q}!b;1!9F(7J4w$-xU(D&PVvS5BjeSY1Zd2k|}}vaetrtd}&X9sMcf07mQW5-g0M z^^ZenV}jGH$k87p_SROKpTeyzw|j-xoQ|+Hlj7EoiAh4|Op|>!V8ZII3ZZx#l;nPP z$_;IewKADM#ak=bsT>vyk=Ga7Je=9A(y$G&7d%3!JwWr;i04__x!K>9%XrrqLAb^s zQtXlJdfY>tkM(|u>>Au>HyI4|dJx(a#O2t03?%4@)A*WL9B&q9a<;fqYT!8KXm&;e zpF-Vt^=1YEb|puP@zZ6CF?&&Juh@@T;>$A;W9E4KFP-Xm#nzPZ!uH8HA#R=s5bh#2 z2}IKKOe5#h38>Z_Q}3kkw#d8-5MjwoT*#`3aq+h+cPu?nRWub&=Im+_78B9B!2Nbn zvSTZpBKaHPS%k3gHF2|27L3+VeGoTflt%EK2sj+&p>WE|FoA%s&qxD5T)zJb3Ztq7 zB~DZng$y$6$maM(ia;buA~A@P(TR>jQgdek=7xO!74v2dAtOToNy!gn~)Kpc=AQ4Pphg)a|`g-j;ff-2i8a=|GVJ3@8l;VRad zMhm$<1LzkORw~Z3%tZ;JWGz!^MzT_PHf9cvtrjSS!$}`Xhtgki^JT6d01(-jP-|# z)hox?Nfvucb`_A`aQbTy4pU9tG-lj%!rN;p>xgvCe|?n14V#A$t5~GZCktf4waxCU zv%1ygH6g(dc+RVw|Lj=Jt$u>JYA(WS+{>u~=W-<+K-gXM!Q+WEf^<9;496e**TYm- zL2)z6VG(r6e}A|TK1ivc#Ngl#&{cltmQtqSg4i<~cnf`zBkR3|G$+zY%yY93 zOm0;O2I;=YYOn{+_jymTe%N@+4BT9o1oB5_%vG966~|%`;K%3rbexe0ZEmT$mm5*G&Zv)L=Z)P8a@i8!tDYu2wrdQ04(3O=N zL^1)uOl@e>Y3bjP751Nq)U0Y{!_UXpjZuULBC%=iBgcKJJ8`4^D+lO_SUG1t0* z`G6|0*em_t<^%SB?N>3Vnmd{p7%Mtj*f|1)T>fLv3dn5!Zz6cAR(}e>d@2~vXrEL? zkrdIi1m_`xhDn6{bE_w$&$0Zf2s%TYZ$xmUmhpN(^}ks zOqxtL2Nx3?Ao+|LouXh%XwmM`qIfYDi|)zYEW8mrVj;XL4zety*L}(!RgJZymCBRt zRyWjc^#NxV3vt8n3q|-VQ|*-{t5{n!Ev;v;?M=rrXEHS{%a`;PYMA_*HE=dg%2G9* zlhI>kOkZU@RT!Poa#8xUOhg_{+P9(#N;2`!%N+CoFZnafE6n$`zjpaB+=vA&6LLyJr79HL2JuRnXu@GnU3jxeE1^VmrxeZd* z20~h5SUvV8tbo|5(79s86qB(@FM94fr}3-gIfXdqF}L0jxDjq|2Xt}~QQ>z*6>;_6 zWH?e6BPA*u_Zs$@ghH3v<>+#qJIhAS)6fEvT0Wlgzz^8tPm{M61q%>q%6rDp`U)gD#A2sdW&yMcx zbk}lUxU9A?Y$XiOGYdTGC8y{NdV3!cYni|*Eim3}JL+`6r`nSY%lf)q{dHFr|g?fL>uT818`@RnD+H`uEUc2(oDBY!TDQn3296w-8hZlas8^WGaVhSPj#7#;1?s?TKc;QTl<#YQJ zT@yK;=xKiQYB;r*8^wsHs-cE!-*z=`3M+tP3wOUb3AYaw4+wmSx0MiQ$)1s=*KE%T z=Hlbb4-fr@5A`T@X0>s9+xm4%CoPCvZsyv3_im7E&MLmC=s0cKEJ{5ND;WEq zMLw|AQv0ddi2#Rv$)DQV4j0f;`P!mJkYUGzh}mvgLzt66gVWJu`Vf@r6%d)e6?~BX z7Q__Fjml0^mK3#tiV?&=CW!>a@nbte&5g)=LpQKKT-1f;m=q-Gkz*D2a--7Du4;dP z9md9Z{wa8LA|TiYy365{SdB!BPX61c9Ya+PFi0W1nclrGsmf?2>?Elkfl-UnC_A?< zjJs8%z=UdBA=yO8lG+W;h*)dR-7c6d^|IuuAvjM!^bQ_zHMDCPK*|ItxT6 z5UN!fZnO8IXo8MLA(1dTbd~yEA+!4y%TWnPgq`c#{PL&f{dXVycke9OP7wYHjBAm= zxF+*I_RfD6x>TG!tWD$%Y)t+$rjd$x7})-muaBwfD5wY_@vX#TNF&pRWK$Mq?uppS zGV;eFrF@3dg09ME=uO;f{uaM_ZgYR$cZ+$L6a3M07}F2AQzJ0U*#eQR2#!o3J2O6d zKFY=7RsXVc0Hl_~*xX}W3mxM1WQ>9Au|{x$OR5{5F##Cb1YS5Y>{4GIi_4(LVt+1< z3W3+i@9Gg{G{($}HVrl?o|RGvgKJ9;lY26Ma`x*inW8DiEtMjhkKWIpoOm*&q}AEI zsqCt&y;?Wyw;oxyqu6+w-I1 z+%|NI_Qhh{+vj1K-UW>WpKbD~Pp{XPUFl#=Eu?SKt-3D7&%F=j&T#Etis-Q2)yz=F zeut@g zSUP*vOqdXj1ben`_@y+;!ploX+~YT`Bqe_z>;2d^-3FtB@{uy~t)I`+!0T|$1WN>i ztGW#>Z#B?gJl$HLtX1%{MfG=92>PjMQ~XXZ39f0W zUbSSf@fN^IZAO3NNJb}owbAZc?nN0^Ok#)wt{Y`REvP9bV3l$-ZGcexul>otTlc@) zJ%Rrxoji^KU zM@_pJ6S{asiq(I-#}etS?YyjBHC?ARPbqtl0kWhsg?r*G>;+KZj>w8~HBA%gU8hM% zz86r7sBr7@&k$ZpSIW8cs1=FQS=vIs`Pw}Z=fi$G=V**~@UBc`Zecc-v<s2&spQT57ITRDpx5=kJ zy&fM{rGqv#5c&b_zAm}B_aWaMtR1%y|A-6Sig@fdoT^0)q^V-i;N_AS-Mb+$iR1Djeom((jr@otNOgfdwa(dlI#%+$ZzO zuvB8A&Lb|~BQH9({+NgCI{qTpF;y)G9$%};mx&A>&fMM$6~;xv@jlxN1cG5;5oDl8 zZYf3CN$hbzT>kIB zD_6o(i4SHLCm62rHgr8FQP%5RU+PU{w*md}b+}5NxO@h!avgp(_l=a?`kmA^3ZLSF z{riP~Vz+ZpOQQr=pIoK8L2r2XsRvxnCG4LI|L^AgFT?+n$bdB0KO6z!m>RGuEAl_S z@TF{>P0UOj|7#?cr>3ofYl8Ko9ZwPpl(dWxqZZvpL|C(QQiYH$uM9pAEd^@l_Sk4C zKXk;_)XmSaApEDVwq4^bYs~neY{9zc-h~7A+`)=9m67C#EQ4#ugIC0a*YexR(}e=a zs3A%4i4>YLR<}39=c-6SroJ0-unck~=`C^$m7tyYY+DL@iU3xAm4p`P*tmUVuo37| zDAJKQ%Q98XRyup5K8KTJYst5$EKT_~+hrG*aa*hA9ULu@=k~2-t)=_l&0FPl6`|p6 zR*ktZV0<_EHqT-{=B|!9g!PBk*kFD%`8KM_JShO}m=p}IBy@>{`DSN17sMo{kEkQ) z+ok>mla-sivKY+~{;x~%Ey^{dU8>&`5@BNO;8?df#h)Q< zSSQb8wBfO}HZ<8B{tzOgljS$@iM@!$f$v!_<^s#nX``g|x%#N`r-yhhX`k)Tiu+wD zKeHrXR(_72O$lC@{AGuSt3umgL|Lui=(rzWr4Q>wx!GdR?`YL-xxLA#G$mb1mTbk< z8ymyBeFfBv~zUmx`gvbQJXnfRKW(hqSOw-{PZK<1G*YI z7L@QOce|=|i`mNn6bE^Xb@LKcf*!EG7%nOs&vqJ@j+(ImRBn5nrUi@dSx$O92_%al zQS>xDdkJ0ZFyDClmv(8`xrXA)8z@4)2>t-?uin!*qBsWVvA8WC%SeAOYT@SJH}it} zX3T$4?6Flr7#>8;!$s1nBNU4^nKBY2yUUc_af#B!<6Ynm79&X#iG)F;I~H8kAIYCG(TGJ;DdC z$Qzaq5)0Nn`1|bv%MgYq2g2lwh$`OeOM@^je0CZI@h0_@uF>!UcAcR2%_9_SqA)U! zi4!G+xnmd>QMJ?KulX?i{oF!mZ!G;b*^!&sX2E8}Dzl)VsZoK_bj1^N-;ebDVIlf2 zg5$D#8N}`$$qV!;srwW|zi%v3wy@UJd@%L+Y5aok~kh~>ko)l$DU@mbmCP7)Dc7+XC zH0@SV*UYAP{R#?nA{em`kOnu_v8f3NwEBy*>+ko+ziyU4iQblR;ma$Kw95oY+NJnE zzFEW^Tnwz8q|9vX98E+FoJ^EW?5z!qOl*L2a{mb`{|c;a8rm8v5@_!Lf70H;F_}C| zzWT4I;Nr-2Z0=%{=7Q3+YSv|ejQ%+k2Y3?!@p~DEG8r%P1^kQrzsjthmg}B#nxE68 zw#mqU&Bg~N4e@(Tyx((pU0}aIzeHeyh;O-M;cDz8N@jz{K!1ZhIN4H!3dH5HNA3HR zkCG_AsgA<(NF1ygyWN_{~=T?W5;t_%=ZIj`!Hwx(wr3>{@Q6Rxd1`$|du zoT5M3Pd&%kx@cxp7olQoPBZ_sU5{GM>!U*_jEW?G*w`1CnA4K(3?XmF^qREHn={%d z5cn zK34HgJ2r0x@~FtwHo+*SwJ)8>7)QmlFkq5Ae1Z;GbaG(3rlUIrwM~j?n_T0H^fG@_ zNvTyEL)vP};}`&p>$~5s?A<(*;AuAshq-!K5_J>kM(*!C+icW1?tEQFf9bWZh9!$Q z$Lo@X=`MW|Ayk_Gu35FFMsO}es?9K&K+dsOEFqCb(~NDu@^(iEGcO&=$bQH}ono3> z0+YtqKuR}p`5PVEG~YJ4^uj&{t-YTE>`N_IBwF}(d#7j@v6e>s_c3K1rJ96V&zos$ z8LRxAM)s>V5u2vMv}tqlBR3_PEp1*XNWK7w*qyJkLcUM-&dc-1qUO4rocTg$7%MQw zMcDCi`&6+h=7>r!cg-t`eBshCBaGYbiQOcLr!E&2`2M{4Jy|%ATn$^jSDXP%jAG^O zp(!*rc$M6t4dps1iRhfG{8S;YdBwER>JVi-;k6hL0Btm9Q$J$9NP6pAuC0~d?F~F{ z^~7ulHegW@ggOiRtp(_;hF_Kv*;MrEz&oaTLyj>kma1tq^X+QceI!;q!>sT2ro8Xc zmjT#EiX82o`Y$n_Z}0Cw$ph|>4&CauF>R)g#Z8*`YH5l4m#p6@OSqc-`)>DlSOWu)0+236Iv)VF%0;G{Pn!c>BZ^3Ep;SyX;RKgcvwfzS}!!WH@COv9jb{ zD6$M?6cOjjii!yKQ&T)C9CaiOg64?3hx-T9KmcU+$>EDy6mCEA`vi!r0fka~_snm& z93QO!f&eWO^mKc+UNzA&VdIL++1m(vwowTQB&IbRY{QBoCPnp_^GLRCUPlO)!1cjK=9TS-h8X7i)14VFGU8_qbpn7<~ zfQ1~Fqors}H2Y&y<8iZwp(~ntZz-bsR5P1coLcRXafUDLh`*qqg=3@r=R24_#tHZK z;2|SpUe1?%fCW4Yj_qL(@l0rn^my@Ed^nV?Rb$Rpc{u3m3}XRN3DE%3*itziCYEsU zt`p$0S_2IZ++zhj0(XvX%kG*kkk-#*Vtd@_eC2qR9bmFl&Vq%gqwzR`P_Y1kk9m`> z$L#T2+r)rdx5&7KjLeJ%$Z67DYJZ}(<}_w95tmJ+(YOmCL9`f4DKz?j}xxwoGZ#nXnF#-6@!;%E^13R zTO?WMtE%sJh?ZT)rOV*c76kc^QhAZ(@TQ{`)kM!6>etne@2?QjY7Fl18z@%wmKjd? zJo?f?im>I)@jG+S&LV@=8ncXc`bZ+5F)GbB`Qxzw+-Ol-*LEi&1IT3OlP}T^oBe}Z ztpu#r1(b!h6dBJ1bD7-DHY3-RY(0fOkYCv=ebpd3`jG@qMuZ&j9vS)_egug8(v_OW=j?-#-s{<48YXDP;=Mm$D3Bq^@U zqyI(fsLNtG$L9(IV8L}7)wa(3aNJuAd|KQ>KyQlpN{rvI4PMp=57T^rs4$u$(`!e@G zeNfiI$yvcv&cI&G*4fcR)WqpOx%d9*hd|$nC(8xUQr{4HMeM!vB4!BHj?y$|YBMJ@Tth;ce<3nZ+{(vSYSxp39uycBKuSP9_V1W6K4HO0)STM%

~HQ@$3)i^ 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

    o$62& zKoA4(=-2WqpX2h>hFF|sWx(Ei^$nYP``A~(LXHn45*guuXz+<%Vo+i~Y**>5gTE*+k++fz%>atGbx*6o*Bq)4@#{S9%V_ zhNbPUC$Y+@jj>;;x`-o^G1Lu4rm4v~EyG^BbFqw}W?Y{DcoyDF#J68gU!?WFh>@~% z&p3-0hbmRbgZ+Z|N^&$v05iw7XO2xr@FA&}o3}4DHRO`}v`{Ku;k{P3v?{Wl9mAY| zL5u~zAXE`xBgT%t6evNJqlJb@glciT?8vhxLBz*|nVeLu3xibs(}LW}Lv6jcB8p;e zqQ%*ME^c&WkG1`lGM6Qmm>UOxq`NM-KE4NA&CJVrgM6I0#(*pGyro(o)TA7c=RQmj zIOmAwW9#k#|7MG5oVll21WDJ!7?(OeZptP|+o*QuX7{AW=_e4nC~* ziljU0kfWG>Bj{UnN7L5zkF+bG4}jjycZf>t;8~dPzK?TNRvK8{B=_x|V*AZ;>*8L{ z`e8nw!$Pr{LamPqN(Z*X**TX)XaRVkQbvnQ#82ub4+D*8yb;0)zx50WQyVkcKb(YA+|ty>MBT~qe^&ng zdsnO(94)OjJ%)myAWD-u796#PU>&SpIWPLB>p|La4a~)jdMs4bU*Qn~!l+_*eOG6( z%-Jhyw5h1cHpSi#6X}<)Q|T=8gaSRjP>eB$%*?Rd4h0bBGg?fMnUf>b;YPA~$J&#v zRf2;A5b$V|X-SUi;_`XhR5jNK=vm*X9O7l(AhACvkF%{sSj?i-r7-G zqp=@>fiKdM;*dj#+Xv;Nc?6yZ%^Dlz&PYk3=XiCEzgR6?DdM?^daPat8+oK;hxGYA5CT$r8r z73o?Pb};Vgv|ky~u`V(3*M{)I;Z8De|7*XcbSLU?mCnHfwa7tXfbt8!Z+j_YYDulh5L-?)|k^`_GIE%xAM++u$6({2y1#^qq#SZvC^I)#|J{tqQ#Mq&(bX zaaA&zr5u4WE>Z3?U7J!QPznk9L}bc2C@XmkFo(x22q?@Q zGeoWhVkdnNH}@*}vr$ok7BDK}NKHBzw_taTIWb1{UiOk?dl9=JD z#<3BLVs>D~p>M6iC+b;!5tb^Xn-sWaD3knnB|D`!i{j%%s=!q^xy`61JzTHB>)_s- zO{@s5xEo@R=vUoha$Od48 V?WVHkG*?J&>(?li7qBOY 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

    @@ -21,6 +24,7 @@ import java.io.IOException; * 5/11/2015. */ public interface IoStream extends WriteStream { + Logging log = getLogging(IoStream.class); static String printHexBinary(byte[] data) { char[] hexCode = "0123456789ABCDEF".toCharArray(); @@ -47,7 +51,7 @@ public interface IoStream extends WriteStream { flush(); } - default void sendPacket(byte[] plainPacket, Logger logger) throws IOException { + default void sendPacket(byte[] plainPacket) throws IOException { byte[] packet; if (BinaryProtocol.PLAIN_PROTOCOL) { packet = plainPacket; @@ -55,7 +59,7 @@ public interface IoStream extends WriteStream { packet = IoHelper.makeCrc32Packet(plainPacket); } // todo: verbose mode printHexBinary(plainPacket)) - logger.info(getLoggingPrefix() + "Sending packet " + BinaryProtocol.findCommand(plainPacket[0]) + " length=" + plainPacket.length); + log.debug(getLoggingPrefix() + "Sending packet " + BinaryProtocol.findCommand(plainPacket[0]) + " length=" + plainPacket.length); write(packet); flush(); } diff --git a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java index a29be29bd1..379a214ee6 100644 --- a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java +++ b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java @@ -1,7 +1,7 @@ package com.rusefi.io; +import com.devexperts.logging.Logging; import com.fazecast.jSerialComm.SerialPort; -import com.opensr5.Logger; import com.rusefi.Callable; import com.rusefi.NamedThreadFactory; import com.rusefi.binaryprotocol.BinaryProtocol; @@ -19,6 +19,8 @@ import java.util.Arrays; import java.util.Objects; import java.util.concurrent.*; +import static com.devexperts.logging.Logging.getLogging; + /** * See TcpCommunicationIntegrationTest * @@ -26,6 +28,8 @@ import java.util.concurrent.*; * 3/3/14 */ public class LinkManager implements Closeable { + private static final Logging log = getLogging(LinkManager.class); + @NotNull public static LogLevel LOG_LEVEL = LogLevel.INFO; @@ -38,23 +42,21 @@ public class LinkManager implements Closeable { public static final String LOG_VIEWER = "log viewer"; private final CommandQueue commandQueue; - private final Logger logger; private LinkConnector connector; private boolean isStarted; private boolean compositeLogicEnabled = true; private boolean needPullData = true; - public LinkManager(Logger logger) { - this.logger = logger; + public LinkManager() { engineState = new EngineState(new EngineState.EngineStateListenerImpl() { @Override public void beforeLine(String fullLine) { - logger.info(fullLine); + log.info(fullLine); HeartBeatListeners.onDataArrived(); } - }, logger); - commandQueue = new CommandQueue(this, logger); + }); + commandQueue = new CommandQueue(this); } @NotNull @@ -196,7 +198,7 @@ public class LinkManager implements Closeable { public void start(String port, ConnectionStateListener stateListener) { Objects.requireNonNull(port, "port"); - logger.info("LinkManager: Starting " + port); + log.info("LinkManager: Starting " + port); if (isLogViewerMode(port)) { setConnector(LinkConnector.VOID); } else if (TcpConnector.isTcpPort(port)) { @@ -208,7 +210,7 @@ public class LinkManager implements Closeable { int portPart = TcpConnector.getTcpPort(port); String hostname = TcpConnector.getHostname(port); socket = new Socket(hostname, portPart); - TcpIoStream tcpIoStream = new TcpIoStream("[start] ", logger, socket); + TcpIoStream tcpIoStream = new TcpIoStream("[start] ", socket); return tcpIoStream; } catch (Throwable e) { @@ -218,13 +220,13 @@ public class LinkManager implements Closeable { } }; - setConnector(new StreamConnector(this, port, logger, streamFactory)); + setConnector(new StreamConnector(this, port, streamFactory)); isSimulationMode = true; } else { Callable ioStreamCallable = new Callable() { @Override public IoStream call() { - IoStream stream = ((Callable) () -> SerialIoStreamJSerialComm.openPort(port, logger)).call(); + IoStream stream = ((Callable) () -> SerialIoStreamJSerialComm.openPort(port)).call(); if (stream == null) { // error already reported return null; @@ -232,7 +234,7 @@ public class LinkManager implements Closeable { return stream; } }; - setConnector(new StreamConnector(this, port, logger, ioStreamCallable)); + setConnector(new StreamConnector(this, port, ioStreamCallable)); } } diff --git a/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java b/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java index d058fbdd2b..912db1e84c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java +++ b/java_console/io/src/main/java/com/rusefi/io/commands/HelloCommand.java @@ -1,6 +1,5 @@ package com.rusefi.io.commands; -import com.opensr5.Logger; import com.rusefi.binaryprotocol.BinaryProtocolCommands; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; @@ -14,21 +13,19 @@ import java.io.IOException; import static com.rusefi.binaryprotocol.IoHelper.checkResponseCode; public class HelloCommand implements Command { - private final Logger logger; private final String tsSignature; - public HelloCommand(Logger logger, String tsSignature) { - this.logger = logger; + public HelloCommand(String tsSignature) { this.tsSignature = tsSignature; } - public static void send(IoStream stream, Logger logger) throws IOException { - stream.sendPacket(new byte[]{Fields.TS_HELLO_COMMAND}, logger); + public static void send(IoStream stream) throws IOException { + stream.sendPacket(new byte[]{Fields.TS_HELLO_COMMAND}); } @Nullable - public static String getHelloResponse(IncomingDataBuffer incomingData, Logger logger) throws EOFException { - byte[] response = incomingData.getPacket(logger, "[hello]", false); + public static String getHelloResponse(IncomingDataBuffer incomingData) throws EOFException { + byte[] response = incomingData.getPacket("[hello]", false); if (!checkResponseCode(response, BinaryProtocolCommands.RESPONSE_OK)) return null; return new String(response, 1, response.length - 1); @@ -41,6 +38,6 @@ public class HelloCommand implements Command { @Override public void handle(IoStream stream) throws IOException { - stream.sendPacket((BinaryProtocolServer.TS_OK + tsSignature).getBytes(), logger); + stream.sendPacket((BinaryProtocolServer.TS_OK + tsSignature).getBytes()); } } diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java b/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java index c2accd98b3..3434bc88eb 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/PortHolder.java @@ -1,6 +1,6 @@ package com.rusefi.io.serial; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Callable; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.MessagesCentral; @@ -13,6 +13,8 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; +import static com.devexperts.logging.Logging.getLogging; + /** * This class holds the reference to the actual Serial port object *

    @@ -20,8 +22,9 @@ import java.awt.*; * Andrey Belomutskiy, (c) 2013-2020 */ public class PortHolder { + private static final Logging log = getLogging(PortHolder.class); + private final DataListener dataListener; - private final Logger logger; private final Callable ioStreamCallable; private final LinkManager linkManager; @@ -32,11 +35,10 @@ public class PortHolder { @Nullable private BinaryProtocol bp; - protected PortHolder(String port, LinkManager linkManager, Logger logger, Callable ioStreamCallable) { + protected PortHolder(String port, LinkManager linkManager, Callable ioStreamCallable) { this.port = port; this.linkManager = linkManager; dataListener = freshData -> linkManager.getEngineState().processNewData(new String(freshData), LinkManager.ENCODER); - this.logger = logger; this.ioStreamCallable = ioStreamCallable; } @@ -44,7 +46,7 @@ public class PortHolder { if (port == null) return false; - MessagesCentral.getInstance().postMessage(logger, getClass(), "Opening port: " + port); + MessagesCentral.getInstance().postMessage(getClass(), "Opening port: " + port); IoStream stream = ioStreamCallable.call(); if (stream == null) { @@ -52,7 +54,7 @@ public class PortHolder { return false; } synchronized (portLock) { - bp = new BinaryProtocol(linkManager, logger, stream, stream.getDataBuffer()); + bp = new BinaryProtocol(linkManager, stream, stream.getDataBuffer()); portLock.notifyAll(); } diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java index 76b8e3135a..0c79376298 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java @@ -1,13 +1,15 @@ package com.rusefi.io.serial; +import com.devexperts.logging.Logging; import com.fazecast.jSerialComm.SerialPort; import com.fazecast.jSerialComm.SerialPortDataListener; import com.fazecast.jSerialComm.SerialPortEvent; -import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.IoStream; +import static com.devexperts.logging.Logging.getLogging; + /** * https://github.com/Fazecast/jSerialComm looks to be alive as of 2020 *

    @@ -15,19 +17,18 @@ import com.rusefi.io.IoStream; * 06/03/2019 */ public class SerialIoStreamJSerialComm extends AbstractIoStream { + private static final Logging log = getLogging(SerialIoStreamJSerialComm.class); private SerialPort sp; private final String port; - private final Logger logger; private final IncomingDataBuffer dataBuffer; /** - * @see #openPort(String, Logger) + * @see #openPort(String) */ - private SerialIoStreamJSerialComm(SerialPort sp, String port, Logger logger) { + private SerialIoStreamJSerialComm(SerialPort sp, String port) { this.sp = sp; this.port = port; - this.logger = logger; - this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this, logger); + this.dataBuffer = IncomingDataBuffer.createDataBuffer("[serial] ", this); } @Override @@ -68,10 +69,10 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { @Override public void close() { - logger.info(port + ": Closing port..."); + log.info(port + ": Closing port..."); super.close(); sp.closePort(); - logger.info(port + ": Closed port."); + log.info(port + ": Closed port."); } @Override @@ -83,12 +84,12 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { * Just open physical serial and not much more * @see PortHolder#connectAndReadConfiguration() */ - public static IoStream openPort(String port, Logger logger) { - logger.info("[SerialIoStreamJSerialComm] openPort " + port); + public static IoStream openPort(String port) { + log.info("[SerialIoStreamJSerialComm] openPort " + port); SerialPort serialPort = SerialPort.getCommPort(port); serialPort.setBaudRate(BaudRateHolder.INSTANCE.baudRate); serialPort.openPort(0); // FileLog.LOGGER.info("[SerialIoStreamJSerialComm] opened " + port); - return new SerialIoStreamJSerialComm(serialPort, port, logger); + return new SerialIoStreamJSerialComm(serialPort, port); } } diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java b/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java index fc3e71700d..ae0c2c0d10 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/StreamConnector.java @@ -1,6 +1,6 @@ package com.rusefi.io.serial; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Callable; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.MessagesCentral; @@ -9,34 +9,32 @@ import com.rusefi.io.IoStream; import com.rusefi.io.LinkConnector; import com.rusefi.io.LinkManager; +import static com.devexperts.logging.Logging.getLogging; + /** * @author Andrey Belomutskiy * 3/3/14 */ public class StreamConnector implements LinkConnector { + private static final Logging log = getLogging(StreamConnector.class); private final PortHolder portHolder; - private final Logger logger; private final LinkManager linkManager; - public StreamConnector(LinkManager linkManager, String portName, Logger logger, Callable ioStreamCallable) { + public StreamConnector(LinkManager linkManager, String portName, Callable ioStreamCallable) { this.linkManager = linkManager; - this.logger = logger; - portHolder = new PortHolder(portName, linkManager, logger, ioStreamCallable); + portHolder = new PortHolder(portName, linkManager, ioStreamCallable); } @Override public void connectAndReadConfiguration(ConnectionStateListener listener) { - logger.info("StreamConnector: connecting"); + log.info("StreamConnector: connecting"); portHolder.listener = listener; - logger.info("scheduleOpening"); - linkManager.execute(new Runnable() { - @Override - public void run() { - logger.info("scheduleOpening>openPort"); - portHolder.connectAndReadConfiguration(); - } + log.info("scheduleOpening"); + linkManager.execute(() -> { + log.info("scheduleOpening>openPort"); + portHolder.connectAndReadConfiguration(); }); } @@ -52,13 +50,10 @@ public class StreamConnector implements LinkConnector { @Override public void restart() { - linkManager.execute(new Runnable() { - @Override - public void run() { - MessagesCentral.getInstance().postMessage(logger, StreamConnector.this.getClass(), "Restarting serial IO"); - portHolder.close(); - portHolder.connectAndReadConfiguration(); - } + linkManager.execute(() -> { + MessagesCentral.getInstance().postMessage(StreamConnector.this.getClass(), "Restarting serial IO"); + portHolder.close(); + portHolder.connectAndReadConfiguration(); }); } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index 5bc8bfcd55..8e38c7229f 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -1,6 +1,6 @@ package com.rusefi.io.tcp; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.IncomingDataBuffer; @@ -12,29 +12,31 @@ import java.io.IOException; import java.net.Socket; import java.util.function.Function; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.BinaryProtocolCommands.COMMAND_PROTOCOL; import static com.rusefi.config.generated.Fields.TS_PROTOCOL; public class BinaryProtocolProxy { + private static final Logging log = getLogging(BinaryProtocolProxy.class); /** * we expect server to at least request output channels once in a while * it could be a while between user connecting authenticator and actually connecting application to authenticator */ public static final int USER_IO_TIMEOUT = 600 * Timeouts.SECOND; - public static ServerHolder createProxy(Logger logger, IoStream targetEcuSocket, int serverProxyPort) { + public static ServerHolder createProxy(IoStream targetEcuSocket, int serverProxyPort) { Function clientSocketRunnableFactory = clientSocket -> () -> { try { - TcpIoStream clientStream = new TcpIoStream("[[proxy]] ", logger, clientSocket); - runProxy(logger, targetEcuSocket, clientStream); + TcpIoStream clientStream = new TcpIoStream("[[proxy]] ", clientSocket); + runProxy(targetEcuSocket, clientStream); } catch (IOException e) { - logger.error("BinaryProtocolProxy::run " + e); + log.error("BinaryProtocolProxy::run " + e); } }; - return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null); + return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, null); } - public static void runProxy(Logger logger, IoStream targetEcu, IoStream clientStream) throws IOException { + public static void runProxy(IoStream targetEcu, IoStream clientStream) throws IOException { /* * Each client socket is running on it's own thread */ @@ -45,7 +47,7 @@ public class BinaryProtocolProxy { clientStream.write(TS_PROTOCOL.getBytes()); continue; } - proxyClientRequestToController(logger, clientStream.getDataBuffer(), firstByte, targetEcu); + proxyClientRequestToController(clientStream.getDataBuffer(), firstByte, targetEcu); proxyControllerResponseToClient(targetEcu, clientStream); } @@ -54,11 +56,11 @@ public class BinaryProtocolProxy { public static void proxyControllerResponseToClient(IoStream targetInputStream, IoStream clientOutputStream) throws IOException { BinaryProtocolServer.Packet packet = targetInputStream.readPacket(); - System.out.println("Relaying controller response length=" + packet.getPacket().length); + log.info("Relaying controller response length=" + packet.getPacket().length); clientOutputStream.sendPacket(packet); } - private static void proxyClientRequestToController(Logger logger, IncomingDataBuffer in, byte firstByte, IoStream targetOutputStream) throws IOException { + private static void proxyClientRequestToController(IncomingDataBuffer in, byte firstByte, IoStream targetOutputStream) throws IOException { byte secondByte = in.readByte(); int length = firstByte * 256 + secondByte; @@ -67,7 +69,7 @@ public class BinaryProtocolProxy { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(packet.getPacket())); byte command = (byte) dis.read(); - logger.info("Relaying client command " + BinaryProtocol.findCommand(command)); + log.info("Relaying client command " + BinaryProtocol.findCommand(command)); // sending proxied packet to controller targetOutputStream.sendPacket(packet); } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index ce3840f72b..4052d95acd 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -1,5 +1,6 @@ package com.rusefi.io.tcp; +import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; import com.opensr5.Logger; import com.rusefi.Listener; @@ -20,6 +21,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.IoHelper.swap16; import static com.rusefi.config.generated.Fields.TS_PROTOCOL; import static com.rusefi.config.generated.Fields.TS_RESPONSE_BURN_OK; @@ -33,9 +35,9 @@ import static com.rusefi.config.generated.Fields.TS_RESPONSE_BURN_OK; */ public class BinaryProtocolServer implements BinaryProtocolCommands { + private static final Logging log = getLogging(BinaryProtocolServer.class); private static final int DEFAULT_PROXY_PORT = 2390; public static final String TS_OK = "\0"; - private final Logger logger; public AtomicInteger unknownCommands = new AtomicInteger(); @@ -51,27 +53,22 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } }; - - public BinaryProtocolServer(Logger logger) { - this.logger = logger; - } - public void start(LinkManager linkManager) { start(linkManager, DEFAULT_PROXY_PORT, null); } public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback) { - logger.info("BinaryProtocolServer on " + port); + log.info("BinaryProtocolServer on " + port); Function clientSocketRunnableFactory = clientSocket -> () -> { try { runProxy(linkManager, clientSocket); } catch (IOException e) { - logger.info("proxy connection: " + e); + log.info("proxy connection: " + e); } }; - tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, logger, serverSocketCreationCallback); + tcpServerSocket(port, "BinaryProtocolServer", clientSocketRunnableFactory, serverSocketCreationCallback); } /** @@ -80,15 +77,14 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { * @param port server port to accept connections * @param threadName * @param socketRunnableFactory method to invoke on a new thread for each new client connection - * @param logger * @param serverSocketCreationCallback this callback is invoked once we open the server socket * @return */ - public static ServerHolder tcpServerSocket(int port, String threadName, Function socketRunnableFactory, final Logger logger, Listener serverSocketCreationCallback) { - return tcpServerSocket(logger, socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); + public static ServerHolder tcpServerSocket(int port, String threadName, Function socketRunnableFactory, Listener serverSocketCreationCallback) { + return tcpServerSocket(socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); } - public static ServerHolder tcpServerSocket(Logger logger, Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { + public static ServerHolder tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { ServerSocket serverSocket = nonSecureSocketFunction.apply(port); ServerHolder holder = new ServerHolder() { @@ -108,10 +104,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { try { clientSocket = serverSocket.accept(); } catch (IOException e) { - logger.info("Client socket closed right away" + e); + log.info("Client socket closed right away" + e); continue; } - logger.info("Binary protocol proxy port connection"); + log.info("Binary protocol proxy port connection"); new Thread(clientSocketRunnableFactory.apply(clientSocket), "proxy connection").start(); } }; @@ -121,7 +117,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { @SuppressWarnings("InfiniteLoopStatement") private void runProxy(LinkManager linkManager, Socket clientSocket) throws IOException { - TcpIoStream stream = new TcpIoStream("[proxy] ", logger, clientSocket); + TcpIoStream stream = new TcpIoStream("[proxy] ", clientSocket); IncomingDataBuffer in = stream.getDataBuffer(); @@ -137,7 +133,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { continue; } - System.out.println("Got [" + length + "] length promise"); + if (log.debugEnabled()) + log.debug("Got [" + length + "] length promise"); Packet packet = readPromisedBytes(in, length); byte[] payload = packet.getPacket(); @@ -147,19 +144,18 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { byte command = payload[0]; - System.out.println("Got command " + BinaryProtocol.findCommand(command)); + log.info("Got command " + BinaryProtocol.findCommand(command)); if (command == Fields.TS_HELLO_COMMAND) { - new HelloCommand(logger, Fields.TS_SIGNATURE).handle(stream); + new HelloCommand(Fields.TS_SIGNATURE).handle(stream); } else if (command == COMMAND_PROTOCOL) { -// System.out.println("Ignoring crc F command"); - stream.sendPacket((TS_OK + TS_PROTOCOL).getBytes(), logger); + stream.sendPacket((TS_OK + TS_PROTOCOL).getBytes()); } else if (command == Fields.TS_GET_FIRMWARE_VERSION) { - stream.sendPacket((TS_OK + "rusEFI proxy").getBytes(), logger); + stream.sendPacket((TS_OK + "rusEFI proxy").getBytes()); } else if (command == COMMAND_CRC_CHECK_COMMAND) { handleCrc(linkManager, stream); } else if (command == COMMAND_PAGE) { - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } else if (command == COMMAND_READ) { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(payload, 1, payload.length - 1)); handleRead(linkManager, dis, stream); @@ -167,16 +163,16 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(payload, 1, payload.length - 1)); handleWrite(linkManager, payload, dis, stream); } else if (command == Fields.TS_BURN_COMMAND) { - stream.sendPacket(new byte[]{TS_RESPONSE_BURN_OK}, logger); + stream.sendPacket(new byte[]{TS_RESPONSE_BURN_OK}); } else if (command == Fields.TS_GET_COMPOSITE_BUFFER_DONE_DIFFERENTLY) { System.err.println("NOT IMPLEMENTED TS_GET_COMPOSITE_BUFFER_DONE_DIFFERENTLY relay"); // todo: relay command - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } else if (command == Fields.TS_OUTPUT_COMMAND) { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(payload, 1, payload.length - 1)); int offset = swap16(dis.readShort()); int count = swap16(dis.readShort()); - logger.info("TS_OUTPUT_COMMAND offset=" + offset + "/count=" + count); + log.info("TS_OUTPUT_COMMAND offset=" + offset + "/count=" + count); byte[] response = new byte[1 + count]; response[0] = (byte) TS_OK.charAt(0); @@ -184,15 +180,15 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { byte[] currentOutputs = binaryProtocolState.getCurrentOutputs(); if (currentOutputs != null) System.arraycopy(currentOutputs, 1 + offset, response, 1, count); - stream.sendPacket(response, logger); + stream.sendPacket(response); } else if (command == Fields.TS_GET_TEXT) { // todo: relay command System.err.println("NOT IMPLEMENTED TS_GET_TEXT relay"); - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } else { unknownCommands.incrementAndGet(); new IllegalStateException().printStackTrace(); - logger.info("Error: unexpected " + BinaryProtocol.findCommand(command)); + log.info("Error: unexpected " + BinaryProtocol.findCommand(command)); } } } @@ -241,7 +237,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } public static void handleProtocolCommand(Socket clientSocket) throws IOException { - System.out.println("Got plain F command"); + log.info("Got plain F command"); OutputStream outputStream = clientSocket.getOutputStream(); outputStream.write(TS_PROTOCOL.getBytes()); outputStream.flush(); @@ -251,10 +247,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { dis.readShort(); // page int offset = swap16(dis.readShort()); int count = swap16(dis.readShort()); - logger.info("TS_CHUNK_WRITE_COMMAND: offset=" + offset + " count=" + count); + log.info("TS_CHUNK_WRITE_COMMAND: offset=" + offset + " count=" + count); BinaryProtocolState bp = linkManager.getBinaryProtocolState(); bp.setRange(packet, 7, offset, count); - stream.sendPacket(TS_OK.getBytes(), logger); + stream.sendPacket(TS_OK.getBytes()); } private void handleRead(LinkManager linkManager, DataInputStream dis, TcpIoStream stream) throws IOException { @@ -262,9 +258,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { int offset = swap16(dis.readShort()); int count = swap16(dis.readShort()); if (count <= 0) { - logger.info("Error: negative read request " + offset + "/" + count); + log.info("Error: negative read request " + offset + "/" + count); } else { - System.out.println("read " + page + "/" + offset + "/" + count); + if (log.debugEnabled()) + log.debug("read " + page + "/" + offset + "/" + count); BinaryProtocolState bp = linkManager.getBinaryProtocolState(); byte[] response = new byte[1 + count]; response[0] = (byte) TS_OK.charAt(0); @@ -272,19 +269,19 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { ConfigurationImage configurationImage = bp.getControllerConfiguration(); Objects.requireNonNull(configurationImage, "configurationImage"); System.arraycopy(configurationImage.getContent(), offset, response, 1, count); - stream.sendPacket(response, logger); + stream.sendPacket(response); } } private void handleCrc(LinkManager linkManager, TcpIoStream stream) throws IOException { - System.out.println("CRC check"); + log.info("CRC check"); BinaryProtocolState bp = linkManager.getBinaryProtocolState(); byte[] content = bp.getControllerConfiguration().getContent(); int result = IoHelper.getCrc32(content); ByteArrayOutputStream response = new ByteArrayOutputStream(); response.write(TS_OK.charAt(0)); new DataOutputStream(response).writeInt(result); - stream.sendPacket(response.toByteArray(), logger); + stream.sendPacket(response.toByteArray()); } public static class Packet { diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index f1b4b00377..3802e5b267 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -1,6 +1,5 @@ package com.rusefi.io.tcp; -import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.ByteReader; @@ -21,22 +20,21 @@ import java.net.Socket; public class TcpIoStream extends AbstractIoStream { private final InputStream input; private final OutputStream output; - private final Logger logger; private final String loggingPrefix; private final DisconnectListener disconnectListener; @NotNull private final Socket socket; private final IncomingDataBuffer dataBuffer; - public TcpIoStream(Logger logger, Socket socket) throws IOException { - this("", logger, socket); + public TcpIoStream(Socket socket) throws IOException { + this("", socket); } - public TcpIoStream(String loggingPrefix, Logger logger, Socket socket) throws IOException { - this(loggingPrefix, logger, socket, DisconnectListener.VOID); + public TcpIoStream(String loggingPrefix, Socket socket) throws IOException { + this(loggingPrefix, socket, DisconnectListener.VOID); } - public TcpIoStream(String loggingPrefix, Logger logger, Socket socket, DisconnectListener disconnectListener) throws IOException { + public TcpIoStream(String loggingPrefix, Socket socket, DisconnectListener disconnectListener) throws IOException { this.loggingPrefix = loggingPrefix; this.disconnectListener = disconnectListener; if (socket == null) @@ -44,12 +42,11 @@ public class TcpIoStream extends AbstractIoStream { this.socket = socket; InputStream input = new BufferedInputStream(socket.getInputStream()); OutputStream output = socket.getOutputStream(); - this.logger = logger; if (output == null) throw new NullPointerException("output"); this.output = output; this.input = input; - this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this, logger); + this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this); } @Override @@ -81,7 +78,7 @@ public class TcpIoStream extends AbstractIoStream { @Override public void setInputListener(final DataListener listener) { - ByteReader.runReaderLoop(loggingPrefix, listener, input::read, logger, disconnectListener); + ByteReader.runReaderLoop(loggingPrefix, listener, input::read, disconnectListener); } public interface DisconnectListener { diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java index f0bc5c2f51..9ab2d16c4a 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java @@ -1,5 +1,6 @@ package com.rusefi.tools.online; +import com.devexperts.logging.Logging; import com.opensr5.Logger; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; @@ -15,7 +16,11 @@ import org.json.simple.parser.ParseException; import java.io.IOException; +import static com.devexperts.logging.Logging.getLogging; + public class HttpUtil { + private static final Logging log = getLogging(Logging.class); + // todo: migrate proxy http json API server to TLS public static final String RUSEFI_PROXY_JSON_PROTOCOL = "http://"; public static final int PROXY_JSON_API_HTTP_PORT = 8001; @@ -35,18 +40,18 @@ public class HttpUtil { public static String getResponse(HttpResponse response) throws IOException { HttpEntity entity = response.getEntity(); String responseString = EntityUtils.toString(entity, "UTF-8"); - Logger.CONSOLE.info("responseString=" + responseString); + log.info("responseString=" + responseString); return responseString; } - public static String executeGet(Logger logger, String url) throws IOException { + public static String executeGet(String url) throws IOException { HttpClient httpclient = new DefaultHttpClient(); HttpParams httpParameters = httpclient.getParams(); // HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); // HttpConnectionParams.setSoTimeout(httpParameters, WAIT_RESPONSE_TIMEOUT); // without this magic http response is pretty slow HttpConnectionParams.setTcpNoDelay(httpParameters, true); - logger.info("GET " + url); + log.info("GET " + url); HttpGet httpget = new HttpGet(url); // in case of emergency diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java index df392b5024..d9185b94c2 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java @@ -1,9 +1,7 @@ package com.rusefi.tools.online; -import com.opensr5.Logger; import com.rusefi.server.ControllerInfo; import com.rusefi.server.UserDetails; -import org.apache.http.HttpResponse; import org.jetbrains.annotations.NotNull; import org.json.simple.JSONArray; import org.json.simple.JSONObject; @@ -32,7 +30,7 @@ public class ProxyClient { @NotNull public static List getOnlineApplications(String url) throws IOException { - String responseString = HttpUtil.executeGet(Logger.CONSOLE, url); + String responseString = HttpUtil.executeGet(url); List userLists = new ArrayList<>(); try { diff --git a/java_console/models/src/main/java/com/rusefi/core/EngineState.java b/java_console/models/src/main/java/com/rusefi/core/EngineState.java index 29e8e992a4..ca5d6340b9 100644 --- a/java_console/models/src/main/java/com/rusefi/core/EngineState.java +++ b/java_console/models/src/main/java/com/rusefi/core/EngineState.java @@ -1,5 +1,6 @@ package com.rusefi.core; +import com.devexperts.logging.Logging; import com.opensr5.Logger; import com.rusefi.config.generated.Fields; import com.rusefi.io.LinkDecoder; @@ -8,6 +9,8 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.util.*; +import static com.devexperts.logging.Logging.getLogging; + /** * Date: 12/25/12 * Andrey Belomutskiy, (c) 2013-2020 @@ -15,6 +18,8 @@ import java.util.*; * @see #registerStringValueAction */ public class EngineState { + private static final Logging log = getLogging(EngineState.class); + public static final String SEPARATOR = ","; public static final String PACKING_DELIMITER = ":"; public static final Class ENGINE_STATE_CLASS = EngineState.class; @@ -43,11 +48,10 @@ public class EngineState { } private final ResponseBuffer buffer; - private final Logger logger; private final List actions = new ArrayList<>(); private final Set keys = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); - public EngineState(@NotNull final EngineStateListener listener, Logger logger) { + public EngineState(@NotNull final EngineStateListener listener) { buffer = new ResponseBuffer(new ResponseBuffer.ResponseListener() { public void onResponse(String response) { if (response != null) { @@ -64,9 +68,8 @@ public class EngineState { } } ); - this.logger = logger; - registerStringValueAction(Fields.PROTOCOL_MSG, value -> MessagesCentral.getInstance().postMessage(logger, ENGINE_STATE_CLASS, value)); + registerStringValueAction(Fields.PROTOCOL_MSG, value -> MessagesCentral.getInstance().postMessage(ENGINE_STATE_CLASS, value)); } /** @@ -133,7 +136,7 @@ public class EngineState { response = handleStringActionPair(response, pair, listener); } if (originalResponse.length() == response.length()) { - logger.info("EngineState.unknown: " + response); + log.info("EngineState.unknown: " + response); int keyEnd = response.indexOf(SEPARATOR); if (keyEnd == -1) { // discarding invalid line @@ -146,7 +149,7 @@ public class EngineState { return ""; } String value = response.substring(keyEnd, valueEnd); - logger.info("Invalid key [" + unknownKey + "] value [" + value + "]"); + log.info("Invalid key [" + unknownKey + "] value [" + value + "]"); // trying to process the rest of the line response = response.substring(valueEnd + SEPARATOR.length()); } diff --git a/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java b/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java index ddd8a24ce3..1f57c8d876 100644 --- a/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java +++ b/java_console/models/src/main/java/com/rusefi/core/MessagesCentral.java @@ -1,11 +1,13 @@ package com.rusefi.core; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import javax.swing.*; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import static com.devexperts.logging.Logging.getLogging; + /** * Messages from the firmware and UI panels which want to display them * @@ -13,6 +15,8 @@ import java.util.concurrent.CopyOnWriteArrayList; * Andrey Belomutskiy, (c) 2013-2020 */ public class MessagesCentral { + private static final Logging log = getLogging(MessagesCentral.class); + private static final MessagesCentral INSTANCE = new MessagesCentral(); private final List listeners = new CopyOnWriteArrayList<>(); @@ -27,8 +31,8 @@ public class MessagesCentral { listeners.add(listener); } - public void postMessage(Logger logger, final Class clazz, final String message) { - logger.info("postMessage " + clazz.getSimpleName() + ": " + message); + public void postMessage(final Class clazz, final String message) { + log.info("postMessage " + clazz.getSimpleName() + ": " + message); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { diff --git a/java_console/tools/src/com/irnems/AdcFilter.java b/java_console/tools/src/com/irnems/AdcFilter.java index f5e98549bd..3adc41351a 100644 --- a/java_console/tools/src/com/irnems/AdcFilter.java +++ b/java_console/tools/src/com/irnems/AdcFilter.java @@ -1,6 +1,5 @@ package com.irnems; -import com.rusefi.FileLog; import com.rusefi.core.EngineState; import com.rusefi.file.FileUtils; @@ -41,7 +40,7 @@ public class AdcFilter { } }; - EngineState engineState = new EngineState(listener, FileLog.LOGGER); + EngineState engineState = new EngineState(listener); FileUtils.readFile2(filename, engineState); diff --git a/java_console/tools/src/com/irnems/file/FrequencyDivider.java b/java_console/tools/src/com/irnems/file/FrequencyDivider.java index 67a47a89f9..77a53dc256 100644 --- a/java_console/tools/src/com/irnems/file/FrequencyDivider.java +++ b/java_console/tools/src/com/irnems/file/FrequencyDivider.java @@ -1,6 +1,5 @@ package com.irnems.file; -import com.rusefi.FileLog; import com.rusefi.core.EngineState; import com.rusefi.file.FileUtils; @@ -42,7 +41,7 @@ public class FrequencyDivider { lineCounter++; } }; - FileUtils.readFile(filename, listener, FileLog.LOGGER); + FileUtils.readFile(filename, listener); fos.close(); } } diff --git a/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java b/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java index 59821a9c2f..e2892ab0dd 100644 --- a/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java +++ b/java_console/ui/src/main/java/com/rusefi/ConsoleUI.java @@ -143,7 +143,7 @@ public class ConsoleUI { tabbedPane.addTab("Trigger Shape", new AverageAnglePanel(uiContext).getPanel()); } - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, ConsoleUI.class, "COMPOSITE_OFF_RPM=" + BinaryProtocol.COMPOSITE_OFF_RPM); + MessagesCentral.getInstance().postMessage(ConsoleUI.class, "COMPOSITE_OFF_RPM=" + BinaryProtocol.COMPOSITE_OFF_RPM); tabbedPane.addTab("rusEFI Online", new OnlineTab(uiContext).getContent()); @@ -235,7 +235,7 @@ public class ConsoleUI { new ConsoleUI(port); } else { for (String p : LinkManager.getCommPorts()) - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, Launcher.class, "Available port: " + p); + MessagesCentral.getInstance().postMessage(Launcher.class, "Available port: " + p); new StartupFrame().chooseSerialPort(); } diff --git a/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java b/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java index c17cfd82f1..9c266130d6 100644 --- a/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java +++ b/java_console/ui/src/main/java/com/rusefi/EcuStimulator.java @@ -100,7 +100,7 @@ public class EcuStimulator { putValue("engine_load", engineLoad) + putValue("advance", advance) + putValue("dwell", dwell); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EcuStimulator.class, msg); + MessagesCentral.getInstance().postMessage(EcuStimulator.class, msg); try { csv.write(msg + "\r\n"); @@ -232,7 +232,7 @@ public class EcuStimulator { } private static void log(String message) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EcuStimulator.class, message); + MessagesCentral.getInstance().postMessage(EcuStimulator.class, message); FileLog.MAIN.logLine(message); } diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java b/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java index 53508664d8..0728090650 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java +++ b/java_console/ui/src/main/java/com/rusefi/autodetect/ReconnectSandbox.java @@ -1,6 +1,5 @@ package com.rusefi.autodetect; -import com.rusefi.FileLog; import com.rusefi.IoUtil; import com.rusefi.io.ConnectionStatusLogic; import com.rusefi.io.LinkManager; @@ -11,7 +10,7 @@ import java.util.concurrent.atomic.AtomicBoolean; public class ReconnectSandbox { public static void main(String[] args) { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); LightweightGUI.waitForDeviceAndStart(linkManager); diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java b/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java index 933c675737..6bf7663fa4 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java +++ b/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java @@ -38,12 +38,12 @@ public class SerialAutoChecker implements Runnable { @Override public void run() { - IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort, logger); + IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort); Logger logger = FileLog.LOGGER; IncomingDataBuffer incomingData = stream.getDataBuffer(); try { - HelloCommand.send(stream, logger); - byte[] response = incomingData.getPacket(logger, "", false); + HelloCommand.send(stream); + byte[] response = incomingData.getPacket("", false); if (!checkResponseCode(response, BinaryProtocolCommands.RESPONSE_OK)) return; String signature = new String(response, 1, response.length - 1); diff --git a/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java b/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java index 09ee5d3d84..398a7c9365 100644 --- a/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java +++ b/java_console/ui/src/main/java/com/rusefi/etb/TestSequenceStep.java @@ -40,7 +40,7 @@ public abstract class TestSequenceStep { next.execute(executor); } } else { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, TestSequenceStep.class, "ETB test sequence done!"); + MessagesCentral.getInstance().postMessage(TestSequenceStep.class, "ETB test sequence done!"); } } diff --git a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java index 03ab5a0c3a..59b1d52e59 100644 --- a/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java +++ b/java_console/ui/src/main/java/com/rusefi/maintenance/DfuFlasher.java @@ -2,7 +2,6 @@ package com.rusefi.maintenance; import com.opensr5.ini.IniFileModel; import com.rusefi.ConsoleUI; -import com.rusefi.FileLog; import com.rusefi.Launcher; import com.rusefi.Timeouts; import com.rusefi.autodetect.PortDetector; @@ -45,14 +44,14 @@ public class DfuFlasher { if (!PortDetector.isAutoPort(port)) { messages.append("Using selected " + port + "\n"); - IoStream stream = SerialIoStreamJSerialComm.openPort(port, FileLog.LOGGER); - DfuHelper.sendDfuRebootCommand(stream, messages, FileLog.LOGGER); + IoStream stream = SerialIoStreamJSerialComm.openPort(port); + DfuHelper.sendDfuRebootCommand(stream, messages); } else { messages.append("Auto-detecting port...\n"); // instead of opening the just-detected port we execute the command using the same stream we used to discover port // it's more reliable this way port = PortDetector.autoDetectSerial(stream -> { - DfuHelper.sendDfuRebootCommand(stream, messages, FileLog.LOGGER); + DfuHelper.sendDfuRebootCommand(stream, messages); return null; }); if (port == null) { diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 36a0d39b92..0673c8fc30 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -147,9 +147,9 @@ public class ConsoleTools { String autoDetectedPort = autoDetectPort(); if (autoDetectedPort == null) return; - IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort, FileLog.LOGGER); + IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort); byte[] commandBytes = BinaryProtocol.getTextCommandBytes(command); - stream.sendPacket(commandBytes, FileLog.LOGGER); + stream.sendPacket(commandBytes); } @@ -208,11 +208,11 @@ public class ConsoleTools { System.err.println(RUS_EFI_NOT_DETECTED); return; } - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); linkManager.startAndConnect(autoDetectedPort, new ConnectionStateListener() { @Override public void onConnectionEstablished() { - new BinaryProtocolServer(FileLog.LOGGER).start(linkManager); + new BinaryProtocolServer().start(linkManager); } @Override @@ -318,19 +318,19 @@ public class ConsoleTools { System.out.println(RUS_EFI_NOT_DETECTED); return; } - IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort, FileLog.LOGGER); + IoStream stream = SerialIoStreamJSerialComm.openPort(autoDetectedPort); Logger logger = FileLog.LOGGER; IncomingDataBuffer incomingData = stream.getDataBuffer(); byte[] commandBytes = BinaryProtocol.getTextCommandBytes("hello"); - stream.sendPacket(commandBytes, logger); + stream.sendPacket(commandBytes); // skipping response - incomingData.getPacket(logger, "", true); + incomingData.getPacket("", true); sleep(300); - stream.sendPacket(new byte[]{Fields.TS_GET_TEXT}, logger); + stream.sendPacket(new byte[]{Fields.TS_GET_TEXT}); sleep(300); - byte[] response = incomingData.getPacket(logger, "", true); + byte[] response = incomingData.getPacket("", true); if (response == null) { System.out.println("No response"); return; diff --git a/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java b/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java index f813529de7..a697a97d03 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/RecentCommands.java @@ -6,7 +6,6 @@ import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.config.generated.Fields; import com.rusefi.core.MessagesCentral; import com.rusefi.io.CommandQueue; -import com.rusefi.io.LinkManager; import com.rusefi.ui.util.UiUtils; import javax.swing.*; @@ -293,7 +292,7 @@ public class RecentCommands { } catch (IOException e) { throw new IllegalStateException(e); } - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AverageAnglesUtil.class, report); + MessagesCentral.getInstance().postMessage(AverageAnglesUtil.class, report); } } }); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java b/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java index 07226b801a..fd0ea6aca2 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/UIContext.java @@ -1,13 +1,12 @@ package com.rusefi.ui; -import com.rusefi.FileLog; import com.rusefi.SensorSnifferCentral; import com.rusefi.io.CommandQueue; import com.rusefi.io.LinkManager; import com.rusefi.sensor_logs.SensorLogger; public class UIContext { - private final LinkManager linkManager = new LinkManager(FileLog.LOGGER); + private final LinkManager linkManager = new LinkManager(); public SensorLogger sensorLogger = new SensorLogger(this); public GaugesPanel.DetachedRepository DetachedRepositoryINSTANCE = new GaugesPanel.DetachedRepository(this); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java index 7c42ecc378..66c04eb53d 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java @@ -60,7 +60,7 @@ public class MainFrame { tabbedPane.settingsTab.showContent(); tabbedPane.logsManager.showContent(); tabbedPane.fuelTunePane.showContent(); - new BinaryProtocolServer(FileLog.LOGGER).start(consoleUI.uiContext.getLinkManager()); + new BinaryProtocolServer().start(consoleUI.uiContext.getLinkManager()); } }; } @@ -96,7 +96,7 @@ public class MainFrame { tabbedPane.settingsTab.showContent(); tabbedPane.logsManager.showContent(); tabbedPane.fuelTunePane.showContent(); - new BinaryProtocolServer(FileLog.LOGGER).start(linkManager); + new BinaryProtocolServer().start(linkManager); } }); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java index 5eb9f16e0c..41f3ee3516 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbMonteCarloSequence.java @@ -1,6 +1,5 @@ package com.rusefi.ui.etb; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; @@ -62,14 +61,14 @@ public class EtbMonteCarloSequence { ":pFactor:" + pFactor + ":iFactor:" + iFactor + ":dFactor:" + dFactor; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, stats); + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, stats); uiContext.getCommandQueue().write("etbreset"); uiContext.getCommandQueue().write("set etb_o " + offset); uiContext.getCommandQueue().write("set etb_p " + pFactor); uiContext.getCommandQueue().write("set etb_i " + iFactor); uiContext.getCommandQueue().write("set etb_d " + dFactor); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, uiContext.sensorLogger.getSecondsSinceFileStart() + " running " + stats); TestSequenceStep firstStep = new EtbTarget(uiContext, 10 * SECOND, DEFAULT_POSITION, null, TestSequenceStep.Condition.YES); @@ -79,7 +78,7 @@ public class EtbMonteCarloSequence { double currentValue = StandardTestSequence.metric.getStandardDeviation(); boolean shouldRun = currentValue < bestResultSoFar; if (!shouldRun) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, "Two much error accumulated, aborting! " + currentValue + " > " + bestResultSoFar); } @@ -93,7 +92,7 @@ public class EtbMonteCarloSequence { Runnable onEachStep = () -> SwingUtilities.invokeLater(() -> { String state = stepCounter.incrementAndGet() + "/" + totalSteps.get(); double value = StandardTestSequence.metric.getStandardDeviation(); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class,"Running " + state + ", current=" + value); + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class,"Running " + state + ", current=" + value); }); TestSequenceStep last = StandardTestSequence.addSequence(uiContext, firstStep, onEachStep, condition); @@ -109,18 +108,18 @@ public class EtbMonteCarloSequence { double cycleResult = SensorCentral.getInstance().getValue(Sensor.ETB_CONTROL_QUALITY); if (cycleResult < bestResultSoFar) { bestResultSoFar = cycleResult; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, uiContext.sensorLogger.getSecondsSinceFileStart() + ":" + stats + ":new_record:" + bestResultSoFar); } - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbMonteCarloSequence.class, + MessagesCentral.getInstance().postMessage(EtbMonteCarloSequence.class, uiContext.sensorLogger.getSecondsSinceFileStart() + ":" + stats + ":result:" + cycleResult); if (counter == TOTAL_CYCLES_COUNT) { stopETB(); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbTestSequence.class, "ETB MC sequence done!"); + MessagesCentral.getInstance().postMessage(EtbTestSequence.class, "ETB MC sequence done!"); return; } counter++; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, EtbTestSequence.class, "Starting " + counter + " of " + TOTAL_CYCLES_COUNT); + MessagesCentral.getInstance().postMessage(EtbTestSequence.class, "Starting " + counter + " of " + TOTAL_CYCLES_COUNT); runRandomCycle(); } diff --git a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java index 2b80fb57d1..54c74c400d 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/etb/EtbReturnToNeutral.java @@ -1,10 +1,8 @@ package com.rusefi.ui.etb; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; -import com.rusefi.io.CommandQueue; import com.rusefi.ui.UIContext; import javax.swing.*; @@ -82,7 +80,7 @@ public class EtbReturnToNeutral { uiContext.getCommandQueue().write(ZERO_DUTY_CYCLE_COMMAND); // CommandQueue.getInstance().write(DirectDrivePanel.CANCEL_DIRECT_DRIVE_COMMAND); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Cycles = " + CYCLES_COUNT + ", errors = " + errorCount); + MessagesCentral.getInstance().postMessage(getClass(), "Cycles = " + CYCLES_COUNT + ", errors = " + errorCount); } /** @@ -90,10 +88,10 @@ public class EtbReturnToNeutral { */ private boolean assertPosition(String msg, float expectedPosition) { double tps = SensorCentral.getInstance().getValue(Sensor.TPS); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), msg + " TPS=" + tps); + MessagesCentral.getInstance().postMessage(getClass(), msg + " TPS=" + tps); boolean isError = Math.abs(tps - expectedPosition) > ACCEPTABLE_ERROR; if (isError) - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), msg + " NOT GREAT " + tps + " while expected " + expectedPosition); + MessagesCentral.getInstance().postMessage(getClass(), msg + " NOT GREAT " + tps + " while expected " + expectedPosition); return isError; } diff --git a/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java b/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java index 8f553cc378..ab4a3db063 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/etb/MagicSpotsFinder.java @@ -1,10 +1,8 @@ package com.rusefi.ui.etb; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; -import com.rusefi.io.CommandQueue; import com.rusefi.io.InvocationConfirmationListener; import com.rusefi.ui.UIContext; import org.putgemin.VerticalFlowLayout; @@ -66,7 +64,7 @@ public class MagicSpotsFinder { sleep(SLEEP); double tpsPosition = SensorCentral.getInstance().getValue(Sensor.TPS); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); + MessagesCentral.getInstance().postMessage(getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); if (tpsPosition >= 100 - MEASURMENT_PRECISION) { currentDutyCycle -= DUTY_CYCLE_STEP; @@ -77,7 +75,7 @@ public class MagicSpotsFinder { // if that's the first we've moved let's remember duty cycle value startedToCloseValue = currentDutyCycle; startedToCloseValueLabel.setText(String.format("Started Close %.1f", startedToCloseValue)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Started to close at " + startedToCloseValue); + MessagesCentral.getInstance().postMessage(getClass(), "Started to close at " + startedToCloseValue); } currentDutyCycle -= DUTY_CYCLE_STEP; @@ -85,10 +83,10 @@ public class MagicSpotsFinder { } else { backToZeroValue = currentDutyCycle; backToZeroValueLabel.setText(String.format("Back Zero %.1f", backToZeroValue)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Back closed to close at " + backToZeroValue); + MessagesCentral.getInstance().postMessage(getClass(), "Back closed to close at " + backToZeroValue); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "startedToCloseValue = " + startedToCloseValue + ", backToZeroValue = " + backToZeroValue); + MessagesCentral.getInstance().postMessage(getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); + MessagesCentral.getInstance().postMessage(getClass(), "startedToCloseValue = " + startedToCloseValue + ", backToZeroValue = " + backToZeroValue); button.setEnabled(true); button.setText(MAGIC_SPOTS_FINDER); } @@ -108,7 +106,7 @@ public class MagicSpotsFinder { sleep(SLEEP); double tpsPosition = SensorCentral.getInstance().getValue(Sensor.TPS); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); + MessagesCentral.getInstance().postMessage(getClass(), "ETB duty " + currentDutyCycle + ": tps=" + tpsPosition); if (tpsPosition < defaultTpsPosition + MEASURMENT_PRECISION) { // ETB has not moved yet, keep going up @@ -120,7 +118,7 @@ public class MagicSpotsFinder { // if that's the first we've moved let's remember duty cycle value startedToOpenValue = currentDutyCycle; startedToOpenValueLabel.setText(String.format("Start to open: %.1f", startedToOpenValue)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Started to open at " + startedToOpenValue); + MessagesCentral.getInstance().postMessage(getClass(), "Started to open at " + startedToOpenValue); } @@ -132,7 +130,7 @@ public class MagicSpotsFinder { // looks like we have reached 100%, cool! reached100Value = currentDutyCycle; reached100ValueLabel.setText(String.format("Reached 100: %.1f", reached100Value)); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); + MessagesCentral.getInstance().postMessage(getClass(), "startedToOpenValue = " + startedToOpenValue + ", reached100Value = " + reached100Value); currentDutyCycle -= DUTY_CYCLE_STEP; uiContext.getCommandQueue().write(CMD_ETB_DUTY + " " + currentDutyCycle, goingDown); @@ -157,7 +155,7 @@ public class MagicSpotsFinder { public void run() { state = State.START; - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Start!"); + MessagesCentral.getInstance().postMessage(getClass(), "Start!"); resetValues(); uiContext.getCommandQueue().write(CMD_ETB_DUTY + " " + currentDutyCycle, goingUp); @@ -210,7 +208,7 @@ public class MagicSpotsFinder { private void sleep(long millis) { try { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, getClass(), "Sleeping " + millis + "ms"); + MessagesCentral.getInstance().postMessage(getClass(), "Sleeping " + millis + "ms"); Thread.sleep(millis); } catch (InterruptedException unexpected) { unexpected.printStackTrace(); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java b/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java index c7add02055..97eb74284a 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/logview/LogViewer.java @@ -179,7 +179,7 @@ public class LogViewer extends JPanel { EngineState.EngineStateListener listener = new EngineState.EngineStateListenerImpl(); ChartRepository.getInstance().clear(); - EngineState engineState = new EngineState(listener, FileLog.LOGGER); + EngineState engineState = new EngineState(listener); // this is pretty dirty, better OOP desperately needed ConsoleUI.engineSnifferPanel.setOutpinListener(engineState); engineState.registerStringValueAction(EngineReport.ENGINE_CHART, new EngineState.ValueCallback() { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java index 6fbb9ed825..124d05da4d 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java @@ -136,9 +136,9 @@ public class AnyCommand { String result = prepareEvalCommand(rawCommand); if (result.equals(rawCommand)) { // result was not translated - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Not valid expression"); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Please try eval \"2 + 2\""); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "For RPN use rpn_eval \"2 2 +\""); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Not valid expression"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Please try eval \"2 + 2\""); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "For RPN use rpn_eval \"2 2 +\""); } return result; } else if (rawCommand.toLowerCase().startsWith("stim_check" + " ")) { @@ -165,7 +165,7 @@ public class AnyCommand { private static void handleStimulationSelfCheck(String rawCommand, LinkManager linkManager) { String[] parts = rawCommand.split(" ", 4); if (parts.length != 4) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Invalid command length " + parts); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Invalid command length " + parts); return; // let's ignore invalid command } int rpm = Integer.parseInt(parts[1]); @@ -174,14 +174,14 @@ public class AnyCommand { new Thread(new Runnable() { @Override public void run() { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Will test with RPM " + rpm + ", settle time" + settleTime + "s and duration" + durationTime + "s"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Will test with RPM " + rpm + ", settle time" + settleTime + "s and duration" + durationTime + "s"); Function callback = new Function() { @Override public Object apply(String status) { if (status == null) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, rpm + " worked!"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, rpm + " worked!"); } else { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, rpm + " failed " + status); + MessagesCentral.getInstance().postMessage(AnyCommand.class, rpm + " failed " + status); } return null; } @@ -201,12 +201,12 @@ public class AnyCommand { private static void handleDecodeRpn(String rawCommand) { String[] parts = rawCommand.split(" ", 2); if (parts.length != 2) { - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Failed to parse, one argument expected"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Failed to parse, one argument expected"); return; } String argument = unquote(parts[1]); String humanForm = InfixConverter.getHumanInfixFormOrError(argument); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, AnyCommand.class, "Human form is \"" + humanForm + "\""); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Human form is \"" + humanForm + "\""); } public static String prepareEvalCommand(String rawCommand) { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java b/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java index 4195834a81..4c2866cbd0 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/widgets/PotCommand.java @@ -1,9 +1,6 @@ package com.rusefi.ui.widgets; -import com.rusefi.FileLog; import com.rusefi.core.MessagesCentral; -import com.rusefi.core.Sensor; -import com.rusefi.core.SensorCentral; import com.rusefi.EcuStimulator; import com.rusefi.io.CommandQueue; @@ -91,7 +88,7 @@ public class PotCommand { public static int getPotResistance(double vout, double vRef) { double r = getR1InVoltageDivider3(vout, vRef, EcuStimulator.getInstance().getInputs().getEngineLoadR2Resistance()); - MessagesCentral.getInstance().postMessage(FileLog.LOGGER, PotCommand.class, "VRef=" + vRef + ", needed resistance: " + r); + MessagesCentral.getInstance().postMessage(PotCommand.class, "VRef=" + vRef + ", needed resistance: " + r); // pot command accept resistance and does the conversion itself return (int) r; } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 0053d29f12..722ed8a621 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -1,7 +1,6 @@ package com.rusefi; import com.opensr5.ConfigurationImage; -import com.opensr5.Logger; import com.opensr5.ini.field.ScalarIniField; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.generated.Fields; @@ -27,8 +26,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class FullServerTest { - private final static Logger logger = Logger.CONSOLE; - @Before public void setTestCertificate() throws MalformedURLException { ServerTest.commonServerTest(); @@ -47,7 +44,7 @@ public class FullServerTest { UserDetailsResolver userDetailsResolver = authToken -> new UserDetails(authToken.substring(0, 5), userId); int httpPort = 8103; int applicationTimeout = 7 * SECOND; - try (Backend backend = new Backend(userDetailsResolver, httpPort, logger, applicationTimeout) { + try (Backend backend = new Backend(userDetailsResolver, httpPort, applicationTimeout) { @Override protected void onRegister(ControllerConnectionState controllerConnectionState) { super.onRegister(controllerConnectionState); @@ -59,7 +56,7 @@ public class FullServerTest { super.close(applicationConnectionState); applicationClosed.countDown(); } - }; LinkManager clientManager = new LinkManager(logger)) { + }; LinkManager clientManager = new LinkManager()) { int serverPortForControllers = 7001; int serverPortForRemoteUsers = 7003; @@ -71,7 +68,7 @@ public class FullServerTest { // create virtual controller to which "rusEFI network connector" connects to int controllerPort = 7002; ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT)); - TestHelper.createVirtualController(controllerPort, controllerImage, logger); + TestHelper.createVirtualController(controllerPort, controllerImage); // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network @@ -84,7 +81,7 @@ public class FullServerTest { // start authenticator int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio - LocalApplicationProxy.startAndRun(logger, serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, TcpIoStream.DisconnectListener.VOID); + LocalApplicationProxy.startAndRun(serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, TcpIoStream.DisconnectListener.VOID); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); diff --git a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java index 3219ec5b06..18668b34a4 100644 --- a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java +++ b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java @@ -35,7 +35,7 @@ public class MockRusEfiDevice { Socket socket = rusEFISSLContext.getSSLSocket(LOCALHOST, serverPort); BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, sessionDetails, - logger, TcpIoStream.DisconnectListener.VOID) { + TcpIoStream.DisconnectListener.VOID) { @Override protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { super.handleCommand(packet, stream); @@ -43,7 +43,7 @@ public class MockRusEfiDevice { if (packet.getPacket()[0] == Fields.TS_OUTPUT_COMMAND) { byte[] response = new byte[1 + Fields.TS_OUTPUT_SIZE]; response[0] = (byte) BinaryProtocolServer.TS_OK.charAt(0); - stream.sendPacket(response, logger); + stream.sendPacket(response); } } }; diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index 5b95c6376a..89328925eb 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -53,7 +53,7 @@ public class ServerTest { CountDownLatch allConnected = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort, logger) { + try (Backend backend = new Backend(createTestUserResolver(), httpPort) { @Override public void register(ControllerConnectionState clientConnectionState) { super.register(clientConnectionState); @@ -143,7 +143,7 @@ covered by FullServerTest int httpPort = 8001; int serverPortForRemoteUsers = 6801; CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort, logger) { + try (Backend backend = new Backend(createTestUserResolver(), httpPort) { @Override protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) { super.onDisconnectApplication(applicationConnectionState); @@ -155,7 +155,7 @@ covered by FullServerTest // start authenticator IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); - new HelloCommand(logger, "hello").handle(authenticatorToProxyStream); + new HelloCommand("hello").handle(authenticatorToProxyStream); assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS)); } @@ -174,7 +174,7 @@ covered by FullServerTest CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort, logger) { + try (Backend backend = new Backend(createTestUserResolver(), httpPort) { @Override protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) { super.onDisconnectApplication(applicationConnectionState); @@ -189,7 +189,7 @@ covered by FullServerTest // start authenticator IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); - LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest); + LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest); localApplicationProxy.run(authenticatorToProxyStream); assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS)); diff --git a/java_console/ui/src/test/java/com/rusefi/TestHelper.java b/java_console/ui/src/test/java/com/rusefi/TestHelper.java index d506278df4..d974b6fb19 100644 --- a/java_console/ui/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/ui/src/test/java/com/rusefi/TestHelper.java @@ -41,14 +41,14 @@ public class TestHelper { } @NotNull - public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, Logger logger) { + public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback) { BinaryProtocolState state = new BinaryProtocolState(); state.setController(ci); state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]); - LinkManager linkManager = new LinkManager(logger); + LinkManager linkManager = new LinkManager(); linkManager.setConnector(LinkConnector.getDetachedConnector(state)); - BinaryProtocolServer server = new BinaryProtocolServer(logger); + BinaryProtocolServer server = new BinaryProtocolServer(); server.start(linkManager, port, serverSocketCreationCallback); return server; } @@ -57,7 +57,7 @@ public class TestHelper { public static IoStream secureConnectToLocalhost(int controllerPort, Logger logger) { IoStream targetEcuSocket; try { - targetEcuSocket = new TcpIoStream("[local]", logger, rusEFISSLContext.getSSLSocket(LOCALHOST, controllerPort)); + targetEcuSocket = new TcpIoStream("[local]", rusEFISSLContext.getSSLSocket(LOCALHOST, controllerPort)); } catch (IOException e) { throw new IllegalStateException("Failed to connect to controller " + LOCALHOST + ":" + controllerPort); } @@ -68,16 +68,16 @@ public class TestHelper { public static IoStream connectToLocalhost(int controllerPort, Logger logger) { IoStream targetEcuSocket; try { - targetEcuSocket = new TcpIoStream("[local]", logger, new Socket(LOCALHOST, controllerPort)); + targetEcuSocket = new TcpIoStream("[local]", new Socket(LOCALHOST, controllerPort)); } catch (IOException e) { throw new IllegalStateException("Failed to connect to controller " + LOCALHOST + ":" + controllerPort); } return targetEcuSocket; } - public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage, Logger logger) throws InterruptedException { + public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage) throws InterruptedException { CountDownLatch controllerCreated = new CountDownLatch(1); - BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), logger); + BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown()); assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); return server; } diff --git a/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java b/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java index 3b30ebe946..3cd98c65af 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java +++ b/java_console/ui/src/test/java/com/rusefi/io/BinaryProtocolServerSandbox.java @@ -1,11 +1,8 @@ package com.rusefi.io; import com.opensr5.ConfigurationImage; -import com.rusefi.FileLog; import com.rusefi.binaryprotocol.BinaryProtocolState; import com.rusefi.config.generated.Fields; -import com.rusefi.io.LinkConnector; -import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.BinaryProtocolServer; class BinaryProtocolServerSandbox { @@ -14,8 +11,8 @@ class BinaryProtocolServerSandbox { state.setController(new ConfigurationImage(new byte[Fields.TOTAL_CONFIG_SIZE])); state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]); - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); linkManager.setConnector(LinkConnector.getDetachedConnector(state)); - new BinaryProtocolServer(FileLog.LOGGER).start(linkManager); + new BinaryProtocolServer().start(linkManager); } } \ No newline at end of file diff --git a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java index e593408881..ae2b637de7 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java +++ b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java @@ -27,7 +27,7 @@ public class TcpCommunicationIntegrationTest { CountDownLatch failedCountDownLatch = new CountDownLatch(1); - LinkManager clientManager = new LinkManager(LOGGER); + LinkManager clientManager = new LinkManager(); clientManager.startAndConnect(Integer.toString(port), new ConnectionStateListener() { @Override public void onConnectionEstablished() { @@ -51,13 +51,13 @@ public class TcpCommunicationIntegrationTest { ConfigurationImage serverImage = TestHelper.prepareImage(value, iniField); int port = 6100; - BinaryProtocolServer server = TestHelper.createVirtualController(port, serverImage, LOGGER); + BinaryProtocolServer server = TestHelper.createVirtualController(port, serverImage); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); // todo: remove CONFIGURATION_RUSEFI_BINARY or nicer API to disable local file load - LinkManager clientManager = new LinkManager(LOGGER); + LinkManager clientManager = new LinkManager(); clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + port, new ConnectionStateListener() { @Override public void onConnectionEstablished() { @@ -88,18 +88,18 @@ public class TcpCommunicationIntegrationTest { int controllerPort = 6102; // create virtual controller - TestHelper.createVirtualController(controllerPort, serverImage, LOGGER); + TestHelper.createVirtualController(controllerPort, serverImage); int proxyPort = 6103; // connect proxy to virtual controller IoStream targetEcuSocket = TestHelper.connectToLocalhost(controllerPort, LOGGER); - BinaryProtocolProxy.createProxy(LOGGER, targetEcuSocket, proxyPort); + BinaryProtocolProxy.createProxy(targetEcuSocket, proxyPort); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); // connect to proxy and read virtual controller through it - LinkManager clientManager = new LinkManager(LOGGER); + LinkManager clientManager = new LinkManager(); clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + proxyPort, new ConnectionStateListener() { @Override public void onConnectionEstablished() { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index 27fb3ae75c..c87fd08a75 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -1,6 +1,6 @@ package com.rusefi.proxy; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.NamedThreadFactory; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; @@ -13,16 +13,18 @@ import com.rusefi.server.SessionDetails; import java.io.IOException; import java.net.Socket; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.io.tcp.BinaryProtocolServer.getPacketLength; import static com.rusefi.io.tcp.BinaryProtocolServer.readPromisedBytes; public class BaseBroadcastingThread { + private static final Logging log = getLogging(BaseBroadcastingThread.class); private static final NamedThreadFactory BASE_BROADCASTING_THREAD = new NamedThreadFactory("BaseBroadcastingThread"); private final Thread thread; @SuppressWarnings("InfiniteLoopStatement") - public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, Logger logger, TcpIoStream.DisconnectListener disconnectListener) throws IOException { - TcpIoStream stream = new TcpIoStream("[broadcast] ", logger, socket, disconnectListener); + public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, TcpIoStream.DisconnectListener disconnectListener) throws IOException { + TcpIoStream stream = new TcpIoStream("[broadcast] ", socket, disconnectListener); IncomingDataBuffer in = stream.getDataBuffer(); thread = BASE_BROADCASTING_THREAD.newThread(() -> { @@ -41,14 +43,14 @@ public class BaseBroadcastingThread { // first TS_HELLO_COMMAND is PROXY request, consecutive TS_HELLO_COMMAND would be real deal from user desktop application isFirstHello = false; // respond on hello request with information about session - logger.info("Replying to controller connector@proxy: " + sessionDetails); - new HelloCommand(logger, sessionDetails.toJson()).handle(stream); + log.info("Replying to controller connector@proxy: " + sessionDetails); + new HelloCommand(sessionDetails.toJson()).handle(stream); } else { handleCommand(packet, stream); } } } catch (IOException e) { - logger.error("exiting thread " + e); + log.error("exiting thread " + e); } }); } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java index 9e7b591eca..3419894a22 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -25,7 +25,7 @@ import java.util.concurrent.TimeUnit; */ public class NetworkConnector { public static SessionDetails runNetworkConnector(String authToken, String controllerPort, int serverPortForControllers, TcpIoStream.DisconnectListener disconnectListener) throws InterruptedException, IOException { - LinkManager linkManager = new LinkManager(Logger.CONSOLE) + LinkManager linkManager = new LinkManager() .setCompositeLogicEnabled(false) .setNeedPullData(false); @@ -55,8 +55,8 @@ public class NetworkConnector { @NotNull private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, final Logger logger, String authToken, final TcpIoStream.DisconnectListener disconnectListener) throws IOException { IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); - HelloCommand.send(targetEcuSocket, logger); - String helloResponse = HelloCommand.getHelloResponse(targetEcuSocket.getDataBuffer(), logger); + HelloCommand.send(targetEcuSocket); + String helloResponse = HelloCommand.getHelloResponse(targetEcuSocket.getDataBuffer()); if (helloResponse == null) throw new IOException("Error getting hello response"); String controllerSignature = helloResponse.trim(); @@ -71,7 +71,7 @@ public class NetworkConnector { BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers), deviceSessionDetails, - logger, disconnectListener) { + disconnectListener) { @Override protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { super.handleCommand(packet, stream); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 6759d01bd0..467e303f24 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -1,8 +1,7 @@ package com.rusefi.server; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Listener; -import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.Sensor; import com.rusefi.io.IoStream; @@ -29,6 +28,7 @@ import java.net.BindException; import java.util.*; import java.util.concurrent.atomic.AtomicLong; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.Timeouts.SECOND; /** @@ -36,6 +36,8 @@ import static com.rusefi.Timeouts.SECOND; * @see BackendLauncher */ public class Backend implements Closeable { + private static final Logging log = getLogging(Backend.class); + public static final int SERVER_PORT_FOR_CONTROLLERS = 8003; private static final String MAX_PACKET_GAP = "MAX_PACKET_GAP"; private static final String IS_USED = "isUsed"; @@ -62,24 +64,22 @@ public class Backend implements Closeable { private final int applicationTimeout; private final UserDetailsResolver userDetailsResolver; - private final Logger logger; public final static AtomicLong totalSessions = new AtomicLong(); public int serverPortForApplications; public int serverPortForControllers; - public Backend(UserDetailsResolver userDetailsResolver, int httpPort, Logger logger) { - this(userDetailsResolver, httpPort, logger, 600 * SECOND); + public Backend(UserDetailsResolver userDetailsResolver, int httpPort) { + this(userDetailsResolver, httpPort, 600 * SECOND); } - public Backend(UserDetailsResolver userDetailsResolver, int httpPort, Logger logger, int applicationTimeout) { + public Backend(UserDetailsResolver userDetailsResolver, int httpPort, int applicationTimeout) { this.applicationTimeout = applicationTimeout; this.userDetailsResolver = userDetailsResolver; - this.logger = logger; new Thread(() -> { try { - System.out.println("Starting http backend on " + httpPort); + log.info("Starting http backend on " + httpPort); try { new FtBasic( new TkFork(showOnlineControllers, @@ -102,7 +102,7 @@ public class Backend implements Closeable { } catch (BindException e) { throw new IllegalStateException("While binding " + httpPort, e); } - logger.info("Shutting down backend on port " + httpPort); + log.info("Shutting down backend on port " + httpPort); } catch (IOException e) { throw new IllegalStateException(e); } @@ -111,7 +111,7 @@ public class Backend implements Closeable { new Thread(() -> { while (true) { - logger.info(getApplicationsCount() + " applications, " + getControllersCount() + " controllers"); + log.info(getApplicationsCount() + " applications, " + getControllersCount() + " controllers"); runApplicationConnectionsCleanup(); BinaryProtocol.sleep(applicationTimeout); } @@ -144,28 +144,28 @@ public class Backend implements Closeable { this.serverPortForApplications = serverPortForApplications; // connection from authenticator app which proxies for Tuner Studio // authenticator pushed hello packet on connect - System.out.println("Starting application connector at " + serverPortForApplications); - BinaryProtocolServer.tcpServerSocket(logger, applicationSocket -> () -> { - logger.info("new application connection!"); + log.info("Starting application connector at " + serverPortForApplications); + BinaryProtocolServer.tcpServerSocket(applicationSocket -> () -> { + log.info("new application connection!"); totalSessions.incrementAndGet(); // connection from authenticator app which proxies for Tuner Studio IoStream applicationClientStream = null; ApplicationConnectionState applicationConnectionState = null; try { - applicationClientStream = new TcpIoStream("[app] ", logger, applicationSocket); + applicationClientStream = new TcpIoStream("[app] ", applicationSocket); // authenticator pushed hello packet on connect - String jsonString = HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer(), logger); + String jsonString = HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer()); if (jsonString == null) { - logger.info("ERROR: null HELLO"); + log.error("ERROR: null HELLO"); return; } ApplicationRequest applicationRequest = ApplicationRequest.valueOf(jsonString); - logger.info("Application Connected: " + applicationRequest); + log.info("Application Connected: " + applicationRequest); String authToken = applicationRequest.getSessionDetails().getAuthToken(); UserDetails userDetails = userDetailsResolver.apply(authToken); if (userDetails == null) { - logger.info("Authentication failed for application " + authToken); + log.info("Authentication failed for application " + authToken); return; } @@ -175,7 +175,7 @@ public class Backend implements Closeable { state = acquire(controllerKey); } if (state == null) { - logger.info("No controller for " + controllerKey); + log.info("No controller for " + controllerKey); return; } applicationConnectionState = new ApplicationConnectionState(userDetails, applicationClientStream, state); @@ -183,10 +183,10 @@ public class Backend implements Closeable { applications.add(applicationConnectionState); } - BinaryProtocolProxy.runProxy(logger, state.getStream(), applicationClientStream); + BinaryProtocolProxy.runProxy(state.getStream(), applicationClientStream); } catch (Throwable e) { - logger.info("Application Connector: Got error " + e); + log.info("Application Connector: Got error " + e); } finally { if (applicationClientStream != null) applicationClientStream.close(); @@ -222,15 +222,15 @@ public class Backend implements Closeable { applications.remove(applicationConnectionState); } } - logger.info("Disconnecting application"); + log.info("Disconnecting application " + applicationConnectionState); } public void runControllerConnector(int serverPortForControllers, Listener serverSocketCreationCallback) { this.serverPortForControllers = serverPortForControllers; - logger.info("Starting controller connector at " + serverPortForControllers); - BinaryProtocolServer.tcpServerSocket(logger, controllerSocket -> () -> { + log.info("Starting controller connector at " + serverPortForControllers); + BinaryProtocolServer.tcpServerSocket(controllerSocket -> () -> { totalSessions.incrementAndGet(); - ControllerConnectionState controllerConnectionState = new ControllerConnectionState(controllerSocket, logger, getUserDetailsResolver()); + ControllerConnectionState controllerConnectionState = new ControllerConnectionState(controllerSocket, getUserDetailsResolver()); try { controllerConnectionState.requestControllerInfo(); @@ -305,7 +305,7 @@ public class Backend implements Closeable { } for (ApplicationConnectionState inactiveClient : inactiveApplications) { - logger.error("Kicking out application " + inactiveClient); + log.error("Kicking out application " + inactiveClient); close(inactiveClient); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java index c1505dd795..ff549fd706 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java @@ -1,6 +1,5 @@ package com.rusefi.server; -import com.opensr5.Logger; import com.rusefi.LocalApplicationProxy; import com.rusefi.tools.online.HttpUtil; @@ -15,7 +14,7 @@ public class BackendLauncher { UserDetailsResolver userDetailsFunction = new JsonUserDetailsResolver(); - Backend backend = new Backend(userDetailsFunction, HttpUtil.PROXY_JSON_API_HTTP_PORT, Logger.CONSOLE); + Backend backend = new Backend(userDetailsFunction, HttpUtil.PROXY_JSON_API_HTTP_PORT); backend.runApplicationConnector(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, parameter -> { }); backend.runControllerConnector(Backend.SERVER_PORT_FOR_CONTROLLERS, parameter -> { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java index ddf9ef5826..63408c91e4 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java @@ -1,6 +1,6 @@ package com.rusefi.server; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.auth.AutoTokenUtil; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.core.SensorsHolder; @@ -14,9 +14,11 @@ import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.net.Socket; +import static com.devexperts.logging.Logging.getLogging; + public class ControllerConnectionState { + private static final Logging log = getLogging(ControllerConnectionState.class); private final Socket clientSocket; - private final Logger logger; private final UserDetailsResolver userDetailsResolver; private boolean isClosed; @@ -35,12 +37,11 @@ public class ControllerConnectionState { private final TwoKindSemaphore twoKindSemaphore = new TwoKindSemaphore(); private final SensorsHolder sensorsHolder = new SensorsHolder(); - public ControllerConnectionState(Socket clientSocket, Logger logger, UserDetailsResolver userDetailsResolver) { + public ControllerConnectionState(Socket clientSocket, UserDetailsResolver userDetailsResolver) { this.clientSocket = clientSocket; - this.logger = logger; this.userDetailsResolver = userDetailsResolver; try { - stream = new TcpIoStream("[controller] ", logger, clientSocket); + stream = new TcpIoStream("[controller] ", clientSocket); incomingData = stream.getDataBuffer(); } catch (IOException e) { close(); @@ -65,21 +66,21 @@ public class ControllerConnectionState { } public void requestControllerInfo() throws IOException { - HelloCommand.send(stream, logger); - String jsonString = HelloCommand.getHelloResponse(incomingData, logger); + HelloCommand.send(stream); + String jsonString = HelloCommand.getHelloResponse(incomingData); if (jsonString == null) return; sessionDetails = SessionDetails.valueOf(jsonString); if (!AutoTokenUtil.isToken(sessionDetails.getAuthToken())) throw new IOException("Invalid token in " + jsonString); - logger.info(sessionDetails.getAuthToken() + " New client: " + sessionDetails.getControllerInfo()); + log.info(sessionDetails.getAuthToken() + " New client: " + sessionDetails.getControllerInfo()); userDetails = userDetailsResolver.apply(sessionDetails.getAuthToken()); if (userDetails == null) { throw new IOException("Unable to resolve " + sessionDetails.getAuthToken()); } controllerKey = new ControllerKey(userDetails.getUserId(), sessionDetails.getControllerInfo()); - logger.info("User " + userDetails); + log.info("User " + userDetails); } public UserDetails getUserDetails() { @@ -93,9 +94,9 @@ public class ControllerConnectionState { public void getOutputs() throws IOException { byte[] commandPacket = GetOutputsCommand.createRequest(); - stream.sendPacket(commandPacket, logger); + stream.sendPacket(commandPacket); - byte[] packet = incomingData.getPacket(logger, "msg", true); + byte[] packet = incomingData.getPacket("msg", true); if (packet == null) throw new IOException("getOutputs: No response"); sensorsHolder.grabSensorValues(packet); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java index 2b50771f50..05cd23bd89 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java @@ -1,8 +1,6 @@ package com.rusefi.server; -import com.opensr5.Logger; import com.rusefi.tools.online.HttpUtil; -import org.apache.http.HttpResponse; import org.jetbrains.annotations.Nullable; import org.json.simple.JSONObject; import org.json.simple.parser.ParseException; @@ -15,7 +13,7 @@ public class JsonUserDetailsResolver implements UserDetailsResolver { public UserDetails apply(String authToken) { try { - String responseString = HttpUtil.executeGet(Logger.CONSOLE,HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); + String responseString = HttpUtil.executeGet(HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); JSONObject json = HttpUtil.getJsonResponse(responseString); System.out.println("String " + json); Object getUserByToken = json.get("getUserByToken"); diff --git a/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml b/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml index 3ba1ad72a9..9e145b98d7 100644 --- a/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml +++ b/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml @@ -2,7 +2,7 @@

    @@ -17,6 +20,7 @@ import java.util.Date; * @see EngineSnifferPanel */ public class Launcher extends rusEFIVersion { + private static final Logging log = getLogging(Launcher.class); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); @@ -26,9 +30,9 @@ public class Launcher extends rusEFIVersion { * @see StartupFrame if no parameters specified */ public static void main(final String[] args) throws Exception { - System.out.println("rusEFI UI console " + CONSOLE_VERSION); - System.out.println("Compiled " + new Date(ConsoleTools.classBuildTimeMillis())); - System.out.println("\n\n"); + log.info("rusEFI UI console " + CONSOLE_VERSION); + log.info("Compiled " + new Date(ConsoleTools.classBuildTimeMillis())); + log.info("\n\n"); PersistentConfiguration.registerShutdownHook(); if (ConsoleTools.runTool(args)) { diff --git a/java_tools/proxy_server/src/main/resources/log4j2.xml b/java_tools/proxy_server/src/main/resources/log4j2.xml index 7939744706..82ce630ca9 100644 --- a/java_tools/proxy_server/src/main/resources/log4j2.xml +++ b/java_tools/proxy_server/src/main/resources/log4j2.xml @@ -3,7 +3,7 @@ - + @@ -12,7 +12,7 @@ - + From c71e5b65b90dde4e15365f9e6e15ed2836e34ce5 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 14:20:02 -0400 Subject: [PATCH 039/182] proxy operations --- java_tools/proxy_server/src/main/resources/run_server.sh | 1 + java_tools/proxy_server/src/main/resources/start_server.sh | 1 + java_tools/proxy_server/src/main/resources/stop_server.sh | 3 +++ java_tools/proxy_server/src/main/resources/update_server.sh | 3 +++ 4 files changed, 8 insertions(+) create mode 100644 java_tools/proxy_server/src/main/resources/run_server.sh create mode 100644 java_tools/proxy_server/src/main/resources/start_server.sh create mode 100644 java_tools/proxy_server/src/main/resources/stop_server.sh create mode 100644 java_tools/proxy_server/src/main/resources/update_server.sh diff --git a/java_tools/proxy_server/src/main/resources/run_server.sh b/java_tools/proxy_server/src/main/resources/run_server.sh new file mode 100644 index 0000000000..083974b84d --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/run_server.sh @@ -0,0 +1 @@ +java -Xmx250M -jar rusefi_server.jar proxy_server diff --git a/java_tools/proxy_server/src/main/resources/start_server.sh b/java_tools/proxy_server/src/main/resources/start_server.sh new file mode 100644 index 0000000000..ee6d89a4e4 --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/start_server.sh @@ -0,0 +1 @@ +./run_server.sh > log/proxy.stdout 2>log/proxy.stderr & diff --git a/java_tools/proxy_server/src/main/resources/stop_server.sh b/java_tools/proxy_server/src/main/resources/stop_server.sh new file mode 100644 index 0000000000..7a521177e5 --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/stop_server.sh @@ -0,0 +1,3 @@ +killall -9 java +TIMESTAMP=$(date "+%Y%m%d_%H%M%S") +mv log case_${TIMESTAMP} diff --git a/java_tools/proxy_server/src/main/resources/update_server.sh b/java_tools/proxy_server/src/main/resources/update_server.sh new file mode 100644 index 0000000000..49ecf5b59f --- /dev/null +++ b/java_tools/proxy_server/src/main/resources/update_server.sh @@ -0,0 +1,3 @@ +#!/bin/sh +rm -rf rusefi_server.jar +wget https://rusefi.com/build_server/autoupdate/rusefi_server.jar From d58438874e4a1f6c4c2e3959649315fe03609b19 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 14:30:00 -0400 Subject: [PATCH 040/182] better location for this class --- .../ts_plugin}/src/main/java/com/rusefi/SignatureHelper.java | 0 .../ts_plugin}/src/test/java/com/rusefi/SignatureHelperTest.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {java_console/shared_io => java_tools/ts_plugin}/src/main/java/com/rusefi/SignatureHelper.java (100%) rename {java_console/shared_io => java_tools/ts_plugin}/src/test/java/com/rusefi/SignatureHelperTest.java (100%) diff --git a/java_console/shared_io/src/main/java/com/rusefi/SignatureHelper.java b/java_tools/ts_plugin/src/main/java/com/rusefi/SignatureHelper.java similarity index 100% rename from java_console/shared_io/src/main/java/com/rusefi/SignatureHelper.java rename to java_tools/ts_plugin/src/main/java/com/rusefi/SignatureHelper.java diff --git a/java_console/shared_io/src/test/java/com/rusefi/SignatureHelperTest.java b/java_tools/ts_plugin/src/test/java/com/rusefi/SignatureHelperTest.java similarity index 100% rename from java_console/shared_io/src/test/java/com/rusefi/SignatureHelperTest.java rename to java_tools/ts_plugin/src/test/java/com/rusefi/SignatureHelperTest.java From accf9c9341b16f0c4aba846518fe78a58d8d80d7 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 14:33:11 -0400 Subject: [PATCH 041/182] getting SOOO close --- .../src/com/rusefi/ts_plugin/TsPluginLauncher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java index eb4beb2bf1..59f72a5d8f 100644 --- a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java +++ b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java @@ -10,7 +10,7 @@ import javax.swing.*; * by the way TS installs stuff into %user%\.efianalytics\TunerStudio\plugins folder */ public class TsPluginLauncher implements ApplicationPlugin { - static final String VERSION = "alpha3_2020"; + static final String VERSION = "alpha4_2020"; private static final String HELP_URL = "https://github.com/rusefi/rusefi/wiki/TS-Plugin"; private final JPanel content = new JPanel(new VerticalFlowLayout()); From 469ba453c199ff32c847a80855ef0e25c7eec819 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 14:41:50 -0400 Subject: [PATCH 042/182] getting SOOOOOOOOOO close --- .../com/rusefi/ts_plugin/PluginEntry.java | 23 ++++++++++++++++++- .../rusefi/ts_plugin/TsPluginLauncher.java | 3 ++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java index c002038a25..523f560175 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java @@ -5,12 +5,15 @@ import com.rusefi.ts_plugin.util.ManifestHelper; import com.rusefi.tune.xml.Constant; import javax.swing.*; +import java.awt.*; +import java.lang.reflect.Field; import java.util.function.Supplier; /** * TsPlugin launcher creates an instance of this class via reflection. */ public class PluginEntry implements TsPluginBody { + private final JPanel content = new JPanel(new BorderLayout()); private final JTabbedPane tabbedPane = new JTabbedPane(); /** @@ -23,6 +26,11 @@ public class PluginEntry implements TsPluginBody { public PluginEntry(Supplier controllerAccessSupplier) { System.out.println("PluginEntry init " + this); + if (isLauncherTooOld()) { + content.add(new JLabel("Please manually install latest plugin version")); + return; + } + UploadTab uploadTab = new UploadTab(controllerAccessSupplier); BroadcastTab broadcastTab = new BroadcastTab(); RemoteTab remoteTab = new RemoteTab(); @@ -30,6 +38,19 @@ public class PluginEntry implements TsPluginBody { tabbedPane.addTab("Upload", uploadTab.getContent()); tabbedPane.addTab("Broadcast", broadcastTab.getContent()); tabbedPane.addTab("Remote ECU", remoteTab.getContent()); + content.add(tabbedPane); + } + + private boolean isLauncherTooOld() { + try { + // at some point we did not have this field so using reflection for the next couple of months + Field field = TsPluginLauncher.class.getField("BUILD_VERSION"); + int launcherVersion = (int) field.get(null); + System.out.println("Launcher version " + launcherVersion + " detected"); + return false; + } catch (NoSuchFieldException | IllegalAccessException e) { + return true; + } } public static boolean isEmpty(Constant constant) { @@ -44,7 +65,7 @@ public class PluginEntry implements TsPluginBody { @Override public JComponent getContent() { - return tabbedPane; + return content; } /* public void close() { diff --git a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java index 59f72a5d8f..ab4e3a5ee1 100644 --- a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java +++ b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java @@ -10,7 +10,8 @@ import javax.swing.*; * by the way TS installs stuff into %user%\.efianalytics\TunerStudio\plugins folder */ public class TsPluginLauncher implements ApplicationPlugin { - static final String VERSION = "alpha4_2020"; + public static final int BUILD_VERSION = 3; + static final String VERSION = "2020.alpha." + BUILD_VERSION; private static final String HELP_URL = "https://github.com/rusefi/rusefi/wiki/TS-Plugin"; private final JPanel content = new JPanel(new VerticalFlowLayout()); From 957f63ccf3e6fc7a6f89792865c8c1057c7af515 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Fri, 24 Jul 2020 11:44:54 -0700 Subject: [PATCH 043/182] format --- firmware/controllers/algo/airmass/maf_airmass.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/algo/airmass/maf_airmass.cpp b/firmware/controllers/algo/airmass/maf_airmass.cpp index c9324858d6..7129b0746c 100644 --- a/firmware/controllers/algo/airmass/maf_airmass.cpp +++ b/firmware/controllers/algo/airmass/maf_airmass.cpp @@ -6,8 +6,8 @@ EXTERN_ENGINE; AirmassResult MafAirmass::getAirmass(int rpm) { - float maf = getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) + engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); - return getAirmassImpl(maf, rpm); + float maf = getRealMaf(PASS_ENGINE_PARAMETER_SIGNATURE) + engine->engineLoadAccelEnrichment.getEngineLoadEnrichment(PASS_ENGINE_PARAMETER_SIGNATURE); + return getAirmassImpl(maf, rpm); } /** From 6de35bf264fc6c1bb48afaf2ae88f1bc35d23a29 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 14:53:44 -0400 Subject: [PATCH 044/182] reducing application inactivity timeout to make contollers happier --- .../io/src/main/java/com/rusefi/Timeouts.java | 1 + .../java/com/rusefi/io/tcp/BinaryProtocolProxy.java | 3 ++- .../com/rusefi/tools/NetworkConnectorStartup.java | 9 +++------ .../main/java/com/rusefi/proxy/NetworkConnector.java | 1 + .../src/main/java/com/rusefi/server/Backend.java | 11 ++++++++++- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/Timeouts.java b/java_console/io/src/main/java/com/rusefi/Timeouts.java index dabbab278a..0ea6bfe7c0 100644 --- a/java_console/io/src/main/java/com/rusefi/Timeouts.java +++ b/java_console/io/src/main/java/com/rusefi/Timeouts.java @@ -5,6 +5,7 @@ package com.rusefi; */ public interface Timeouts { int SECOND = 1000; + int MINUTE = 60 * SECOND; int COMMAND_TIMEOUT_SEC = 10; // seconds /** diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index 8e38c7229f..d32f77e1b3 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -21,8 +21,9 @@ public class BinaryProtocolProxy { /** * we expect server to at least request output channels once in a while * it could be a while between user connecting authenticator and actually connecting application to authenticator + * See Backend#APPLICATION_INACTIVITY_TIMEOUT */ - public static final int USER_IO_TIMEOUT = 600 * Timeouts.SECOND; + public static final int USER_IO_TIMEOUT = 10 * Timeouts.MINUTE; public static ServerHolder createProxy(IoStream targetEcuSocket, int serverProxyPort) { Function clientSocketRunnableFactory = clientSocket -> () -> { diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index 8a0bc3c3e5..56290f0ca0 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -24,12 +24,9 @@ public class NetworkConnectorStartup { return; } - SessionDetails sessionDetails = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, Backend.SERVER_PORT_FOR_CONTROLLERS, new TcpIoStream.DisconnectListener() { - @Override - public void onDisconnect() { - System.err.println("Disconnect detected"); - System.exit(-1); - } + SessionDetails sessionDetails = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, Backend.SERVER_PORT_FOR_CONTROLLERS, () -> { + System.err.println("Disconnect detected"); + System.exit(-1); }); System.out.println("Running with " + sessionDetails.getOneTimeToken()); } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java index 3419894a22..d6a4657ade 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -22,6 +22,7 @@ import java.util.concurrent.TimeUnit; /** * Connector between rusEFI ECU and rusEFI server + * see NetworkConnectorStartup */ public class NetworkConnector { public static SessionDetails runNetworkConnector(String authToken, String controllerPort, int serverPortForControllers, TcpIoStream.DisconnectListener disconnectListener) throws InterruptedException, IOException { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 467e303f24..fc781d5634 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -2,6 +2,7 @@ package com.rusefi.server; import com.devexperts.logging.Logging; import com.rusefi.Listener; +import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.Sensor; import com.rusefi.io.IoStream; @@ -42,6 +43,14 @@ public class Backend implements Closeable { private static final String MAX_PACKET_GAP = "MAX_PACKET_GAP"; private static final String IS_USED = "isUsed"; + /** + * Application with exclusive access should connect tuning application within 3 minutes + * Should be at least twice less than USER_IO_TIMEOUT to prevent controller disconnect + * + * @see BinaryProtocolProxy#USER_IO_TIMEOUT + */ + private static final int APPLICATION_INACTIVITY_TIMEOUT = 3 * Timeouts.MINUTE; + private final FkRegex showOnlineControllers = new FkRegex(ProxyClient.LIST_CONTROLLERS_PATH, (Take) req -> getControllersOnline() ); @@ -69,7 +78,7 @@ public class Backend implements Closeable { public int serverPortForControllers; public Backend(UserDetailsResolver userDetailsResolver, int httpPort) { - this(userDetailsResolver, httpPort, 600 * SECOND); + this(userDetailsResolver, httpPort, APPLICATION_INACTIVITY_TIMEOUT); } public Backend(UserDetailsResolver userDetailsResolver, int httpPort, int applicationTimeout) { From a08e3591941d553661ac0f655e527617723bd1c0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 14:54:47 -0400 Subject: [PATCH 045/182] helping build --- java_console/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_console/build.xml b/java_console/build.xml index 71a159b89a..9083f52a59 100644 --- a/java_console/build.xml +++ b/java_console/build.xml @@ -56,7 +56,7 @@ - + From fde4b2455f89dbb6e17bac659f652004d99e787f Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 15:04:11 -0400 Subject: [PATCH 046/182] reducing application inactivity timeout to make controllers happier --- java_console/models/src/main/java/com/rusefi/rusEFIVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java index 93a39feb56..5e182c2879 100644 --- a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java +++ b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java @@ -3,6 +3,6 @@ package com.rusefi; import java.util.concurrent.atomic.AtomicReference; public class rusEFIVersion { - public static final int CONSOLE_VERSION = 20200722; + public static final int CONSOLE_VERSION = 20200723; public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); } From 984d85217899b3737e92a177503723c079d6c635 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 15:16:20 -0400 Subject: [PATCH 047/182] making backend version public --- .../main/java/com/rusefi/rusEFIVersion.java | 27 +++++++++++++++++++ .../ui/src/main/java/com/rusefi/Launcher.java | 2 +- .../java/com/rusefi/tools/ConsoleTools.java | 20 -------------- .../main/java/com/rusefi/server/Backend.java | 17 ++++++------ .../java/com/rusefi/server/Monitoring.java | 6 +++++ 5 files changed, 42 insertions(+), 30 deletions(-) diff --git a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java index 5e182c2879..383cbd8a97 100644 --- a/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java +++ b/java_console/models/src/main/java/com/rusefi/rusEFIVersion.java @@ -1,8 +1,35 @@ package com.rusefi; +import java.io.File; +import java.net.URISyntaxException; +import java.net.URL; import java.util.concurrent.atomic.AtomicReference; public class rusEFIVersion { public static final int CONSOLE_VERSION = 20200723; public static AtomicReference firmwareVersion = new AtomicReference<>("N/A"); + + public static long classBuildTimeMillis() { + Class clazz = rusEFIVersion.class; + URL resource = clazz.getResource(clazz.getSimpleName() + ".class"); + if (resource == null) { + throw new IllegalStateException("Failed to find class file for class: " + + clazz.getName()); + } + + if (resource.getProtocol().equals("file")) { + try { + return new File(resource.toURI()).lastModified(); + } catch (URISyntaxException e) { + return 0; + } + } else if (resource.getProtocol().equals("jar")) { + String path = resource.getPath(); + return new File(path.substring(5, path.indexOf("!"))).lastModified(); + } else { + throw new IllegalArgumentException("Unhandled url protocol: " + + resource.getProtocol() + " for class: " + + clazz.getName() + " resource: " + resource.toString()); + } + } } diff --git a/java_console/ui/src/main/java/com/rusefi/Launcher.java b/java_console/ui/src/main/java/com/rusefi/Launcher.java index 93e80dcca6..9d3c298577 100644 --- a/java_console/ui/src/main/java/com/rusefi/Launcher.java +++ b/java_console/ui/src/main/java/com/rusefi/Launcher.java @@ -31,7 +31,7 @@ public class Launcher extends rusEFIVersion { */ public static void main(final String[] args) throws Exception { log.info("rusEFI UI console " + CONSOLE_VERSION); - log.info("Compiled " + new Date(ConsoleTools.classBuildTimeMillis())); + log.info("Compiled " + new Date(rusEFIVersion.classBuildTimeMillis())); log.info("\n\n"); PersistentConfiguration.registerShutdownHook(); diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 0673c8fc30..485f00b0ae 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -292,26 +292,6 @@ public class ConsoleTools { Online.upload(new File(Online.outputXmlFileName), authToken); } - public static long classBuildTimeMillis() throws URISyntaxException, IllegalStateException, IllegalArgumentException { - Class clazz = ConsoleTools.class; - URL resource = clazz.getResource(clazz.getSimpleName() + ".class"); - if (resource == null) { - throw new IllegalStateException("Failed to find class file for class: " + - clazz.getName()); - } - - if (resource.getProtocol().equals("file")) { - return new File(resource.toURI()).lastModified(); - } else if (resource.getProtocol().equals("jar")) { - String path = resource.getPath(); - return new File(path.substring(5, path.indexOf("!"))).lastModified(); - } else { - throw new IllegalArgumentException("Unhandled url protocol: " + - resource.getProtocol() + " for class: " + - clazz.getName() + " resource: " + resource.toString()); - } - } - static void detect(String[] strings) throws IOException, InterruptedException { String autoDetectedPort = autoDetectPort(); if (autoDetectedPort == null) { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index fc781d5634..fc16d93312 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -96,15 +96,14 @@ public class Backend implements Closeable { new Monitoring(this).showStatistics, new FkRegex(ProxyClient.VERSION_PATH, ProxyClient.BACKEND_VERSION), new FkRegex("/", new RsHtml("\n" + - "rusEFI Online\n" + - "
    \n" + - "Status\n" + - "
    \n" + - "Version\n" + - "Controllers\n" + - "Applications\n" + - "
    \n" + - "
    \n" + + "
    rusEFI Online\n" + + "


    \n" + + "" + + "


    \n" + + "


    Status\n" + + "


    Version\n" + + "


    Controllers\n" + + "


    Applications\n" + "\n")) ), httpPort ).start(() -> isClosed); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java index 97e646ef90..26b3497090 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java @@ -1,5 +1,7 @@ package com.rusefi.server; +import com.rusefi.rusEFIVersion; +import com.rusefi.tools.online.ProxyClient; import org.takes.Take; import org.takes.facets.fork.FkRegex; import org.takes.rs.RsJson; @@ -9,6 +11,7 @@ import javax.json.JsonObjectBuilder; import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; +import java.util.Date; public class Monitoring { public static final String STATUS = "/status"; @@ -39,6 +42,9 @@ public class Monitoring { builder.add("serverPortForControllers", backend.serverPortForControllers); builder.add("applicationsCount", backend.getApplicationsCount()); builder.add("controllersCount", backend.getControllersCount()); + builder.add("backend version", ProxyClient.BACKEND_VERSION); + builder.add("framework version", rusEFIVersion.CONSOLE_VERSION); + builder.add("compiled", new Date(rusEFIVersion.classBuildTimeMillis()).toString()); return new RsJson(builder.build()); } From ec8dd826083cea4bf2237acf7b891fbf59b79439 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 15:23:30 -0400 Subject: [PATCH 048/182] operations --- .../proxy_server/src/main/resources/update_server.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java_tools/proxy_server/src/main/resources/update_server.sh b/java_tools/proxy_server/src/main/resources/update_server.sh index 49ecf5b59f..986f5f32db 100644 --- a/java_tools/proxy_server/src/main/resources/update_server.sh +++ b/java_tools/proxy_server/src/main/resources/update_server.sh @@ -1,3 +1,10 @@ #!/bin/sh +echo Stopping... +./stop_server.sh + +echo Downloading... rm -rf rusefi_server.jar wget https://rusefi.com/build_server/autoupdate/rusefi_server.jar + +echo Starting... +./start_server.sh From e6f686859866158e3c18692e42b0e683b8128a05 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 15:32:03 -0400 Subject: [PATCH 049/182] operations --- .../proxy_server/src/main/java/com/rusefi/server/Monitoring.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java index 26b3497090..fd6b26c97f 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Monitoring.java @@ -45,6 +45,7 @@ public class Monitoring { builder.add("backend version", ProxyClient.BACKEND_VERSION); builder.add("framework version", rusEFIVersion.CONSOLE_VERSION); builder.add("compiled", new Date(rusEFIVersion.classBuildTimeMillis()).toString()); + builder.add("now", System.currentTimeMillis()); return new RsJson(builder.build()); } From e2842e1191dd25b95c54c8c3b6235f1137266cb5 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 16:38:42 -0400 Subject: [PATCH 050/182] isUsed/owner progress --- .../com/rusefi/tools/online/ProxyClient.java | 2 ++ .../main/java/com/rusefi/server/Backend.java | 10 +++++----- .../com/rusefi/server/TwoKindSemaphore.java | 20 +++++++++++++++---- .../rusefi/server/TwoKindSemaphoreTest.java | 16 +++++++++++---- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java index d9185b94c2..f6a2dfe22f 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java @@ -18,6 +18,8 @@ public class ProxyClient { public static final String LIST_APPLICATIONS_PATH = "/list_applications"; public static final String VERSION_PATH = "/version"; public static final String BACKEND_VERSION = "0.0001"; + public static final String IS_USED = "isUsed"; + public static final String OWNER = "owner"; public static List getOnlineApplications(int httpPort) throws IOException { return getOnlineApplications(getHttpAddress(httpPort) + LIST_CONTROLLERS_PATH); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index fc16d93312..1dfa53da64 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -41,7 +41,6 @@ public class Backend implements Closeable { public static final int SERVER_PORT_FOR_CONTROLLERS = 8003; private static final String MAX_PACKET_GAP = "MAX_PACKET_GAP"; - private static final String IS_USED = "isUsed"; /** * Application with exclusive access should connect tuning application within 3 minutes @@ -180,7 +179,7 @@ public class Backend implements Closeable { ControllerKey controllerKey = new ControllerKey(applicationRequest.getTargetUserId(), applicationRequest.getSessionDetails().getControllerInfo()); ControllerConnectionState state; synchronized (lock) { - state = acquire(controllerKey); + state = acquire(controllerKey, userDetails); } if (state == null) { log.info("No controller for " + controllerKey); @@ -203,14 +202,14 @@ public class Backend implements Closeable { }, serverPortForApplications, "ApplicationServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY); } - private ControllerConnectionState acquire(ControllerKey controllerKey) { + private ControllerConnectionState acquire(ControllerKey controllerKey, UserDetails userDetails) { synchronized (lock) { ControllerConnectionState state = controllersByKey.get(controllerKey); if (state == null) { // no such controller return null; } - if (!state.getTwoKindSemaphore().acquireForLongTermUsage()) { + if (!state.getTwoKindSemaphore().acquireForLongTermUsage(userDetails)) { // someone is already talking to this controller return null; } @@ -279,7 +278,8 @@ public class Backend implements Closeable { JsonObject controllerObject = Json.createObjectBuilder() .add(UserDetails.USER_ID, client.getUserDetails().getUserId()) .add(UserDetails.USERNAME, client.getUserDetails().getUserName()) - .add(IS_USED, client.getTwoKindSemaphore().isUsed()) + .add(ProxyClient.IS_USED, client.getTwoKindSemaphore().isUsed()) + .add(ProxyClient.OWNER, client.getTwoKindSemaphore().getOwner().getUserName()) .add(ControllerStateDetails.RPM, rpm) .add(ControllerStateDetails.CLT, clt) .add(ControllerInfo.SIGNATURE, client.getSessionDetails().getControllerInfo().getSignature()) diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java index 20bc7b9052..27413cae75 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java @@ -8,9 +8,12 @@ public class TwoKindSemaphore { private final static int LONG_TERM = 2; private final static int SHORT_TERM = 1; private final Semaphore semaphore = new Semaphore(LONG_TERM); + private UserDetails owner; public void releaseFromLongTermUsage() { semaphore.release(LONG_TERM); + // not atomic but that's fine, isUsed is the source of truth + owner = null; } public boolean acquireForShortTermUsage() { @@ -28,16 +31,25 @@ public class TwoKindSemaphore { /** * @return true if acquired successfully, false if not + * @param userDetails */ - public boolean acquireForLongTermUsage() { - return acquireForLongTermUsage(10); + public boolean acquireForLongTermUsage(UserDetails userDetails) { + return acquireForLongTermUsage(userDetails, 10); } - public boolean acquireForLongTermUsage(int timeout) { + public boolean acquireForLongTermUsage(UserDetails userDetails, int timeout) { try { - return semaphore.tryAcquire(LONG_TERM, timeout, TimeUnit.SECONDS); + boolean isAcquired = semaphore.tryAcquire(LONG_TERM, timeout, TimeUnit.SECONDS); + if (isAcquired) { + owner = userDetails; + } + return isAcquired; } catch (InterruptedException e) { throw new IllegalStateException(e); } } + + public UserDetails getOwner() { + return owner; + } } diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java index 05e884f9b2..48e80b7034 100644 --- a/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/TwoKindSemaphoreTest.java @@ -2,8 +2,7 @@ package com.rusefi.server; import org.junit.Test; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; public class TwoKindSemaphoreTest { @Test @@ -15,11 +14,20 @@ public class TwoKindSemaphoreTest { assertFalse(twoKindSemaphore.isUsed()); twoKindSemaphore.releaseFromShortTermUsage(); + assertNull(twoKindSemaphore.getOwner()); - assertTrue(twoKindSemaphore.acquireForLongTermUsage()); + UserDetails userDetails = new UserDetails("xxx", 222); + + + assertTrue(twoKindSemaphore.acquireForLongTermUsage(userDetails)); + assertNotNull(twoKindSemaphore.getOwner()); assertTrue(twoKindSemaphore.isUsed()); // - assertFalse(twoKindSemaphore.acquireForLongTermUsage(1)); + assertFalse(twoKindSemaphore.acquireForLongTermUsage(userDetails, 1)); assertFalse(twoKindSemaphore.acquireForShortTermUsage()); + + + twoKindSemaphore.releaseFromLongTermUsage(); + assertNull(twoKindSemaphore.getOwner()); } } From 950871e5e4c562226307bf9b06acfe8b49053915 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 16:58:41 -0400 Subject: [PATCH 051/182] isUsed/owner progress --- .../src/main/java/com/rusefi/server/Backend.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 1dfa53da64..f2ae0e1121 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -23,6 +23,7 @@ import org.takes.rs.RsJson; import javax.json.Json; import javax.json.JsonArrayBuilder; import javax.json.JsonObject; +import javax.json.JsonObjectBuilder; import java.io.Closeable; import java.io.IOException; import java.net.BindException; @@ -34,6 +35,7 @@ import static com.rusefi.Timeouts.SECOND; /** * See NetworkConnectorStartup + * * @see BackendLauncher */ public class Backend implements Closeable { @@ -275,18 +277,23 @@ public class Backend implements Closeable { // todo: OutputChannel from .ini file based on controller signature int rpm = (int) client.getSensorsHolder().getValue(Sensor.RPM); double clt = client.getSensorsHolder().getValue(Sensor.CLT); - JsonObject controllerObject = Json.createObjectBuilder() + UserDetails owner = client.getTwoKindSemaphore().getOwner(); + JsonObjectBuilder objectBuilder = Json.createObjectBuilder() .add(UserDetails.USER_ID, client.getUserDetails().getUserId()) .add(UserDetails.USERNAME, client.getUserDetails().getUserName()) .add(ProxyClient.IS_USED, client.getTwoKindSemaphore().isUsed()) - .add(ProxyClient.OWNER, client.getTwoKindSemaphore().getOwner().getUserName()) .add(ControllerStateDetails.RPM, rpm) .add(ControllerStateDetails.CLT, clt) .add(ControllerInfo.SIGNATURE, client.getSessionDetails().getControllerInfo().getSignature()) .add(ControllerInfo.VEHICLE_NAME, client.getSessionDetails().getControllerInfo().getVehicleName()) .add(ControllerInfo.ENGINE_MAKE, client.getSessionDetails().getControllerInfo().getEngineMake()) .add(ControllerInfo.ENGINE_CODE, client.getSessionDetails().getControllerInfo().getEngineCode()) - .add(MAX_PACKET_GAP, client.getStream().getStreamStats().getMaxPacketGap()) + .add(MAX_PACKET_GAP, client.getStream().getStreamStats().getMaxPacketGap()); + if (owner != null) { + objectBuilder = objectBuilder.add(ProxyClient.OWNER, owner.getUserName()); + } + + JsonObject controllerObject = objectBuilder .build(); builder.add(controllerObject); } From 2d3159f91a5563829a3086b56f9cfc95ced8841e Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 17:20:13 -0400 Subject: [PATCH 052/182] isUsed/owner progress --- .../com/rusefi/tools/online/ProxyClient.java | 4 ++- .../rusefi/tools/online/PublicSession.java | 16 +++++++++++- .../java/com/rusefi/ts_plugin/RemoteTab.java | 25 ++++++++----------- ...Sandbox.xml => RemoteTabSandbox_local.xml} | 2 +- .../RemoteTabSandbox_real.xml | 16 ++++++++++++ 5 files changed, 45 insertions(+), 18 deletions(-) rename java_tools/ts_plugin_launcher/.idea/runConfigurations/{RemoteTabSandbox.xml => RemoteTabSandbox_local.xml} (85%) create mode 100644 java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox_real.xml diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java index f6a2dfe22f..50832b9812 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java @@ -43,7 +43,9 @@ public class ProxyClient { ControllerInfo ci = ControllerInfo.valueOf(element); UserDetails userDetails = UserDetails.valueOf(element); - userLists.add(new PublicSession(userDetails, ci)); + boolean isUsed = (Boolean) element.get(IS_USED); + String ownerName = (String) element.get(OWNER); + userLists.add(new PublicSession(userDetails, ci, isUsed, ownerName)); } System.out.println("object=" + array); diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java b/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java index e226537fe9..b83daf773e 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/PublicSession.java @@ -6,10 +6,14 @@ import com.rusefi.server.UserDetails; public class PublicSession { private final UserDetails userDetails; private final ControllerInfo controllerInfo; + private final boolean isUsed; + private final String ownerName; - public PublicSession(UserDetails userDetails, ControllerInfo controllerInfo) { + public PublicSession(UserDetails userDetails, ControllerInfo controllerInfo, boolean isUsed, String ownerName) { this.userDetails = userDetails; this.controllerInfo = controllerInfo; + this.isUsed = isUsed; + this.ownerName = ownerName; } public UserDetails getUserDetails() { @@ -20,11 +24,21 @@ public class PublicSession { return controllerInfo; } + public boolean isUsed() { + return isUsed; + } + + public String getOwnerName() { + return ownerName; + } + @Override public String toString() { return "PublicSession{" + "userDetails=" + userDetails + ", controllerInfo=" + controllerInfo + + ", isUsed=" + isUsed + + ", ownerName='" + ownerName + '\'' + '}'; } } diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index c84a3f064d..4104d0e008 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -110,23 +110,18 @@ public class RemoteTab { userPanel.add(new URLLabel(SignatureHelper.getUrl(controllerInfo.getSignature()))); + if (publicSession.isUsed()) { + userPanel.add(new JLabel(" used by " + publicSession.getOwnerName())); + } else { + JButton connect = new JButton("Connect"); + connect.addActionListener(event -> { - JButton connect = new JButton("Connect"); - connect.addActionListener(event -> { + setStatus("Connecting to " + publicSession.getUserDetails().getUserName()); - setStatus("Connecting to " + publicSession.getUserDetails().getUserName()); - - new Thread(new Runnable() { - @Override - public void run() { - runAuthenticator(publicSession, controllerInfo); - - } - }, "Authenticator").start(); - - - }); - userPanel.add(connect); + new Thread(() -> runAuthenticator(publicSession, controllerInfo), "Authenticator").start(); + }); + userPanel.add(connect); + } return userPanel; } diff --git a/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml b/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox_local.xml similarity index 85% rename from java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml rename to java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox_local.xml index 9e145b98d7..891fffaba3 100644 --- a/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox.xml +++ b/java_tools/ts_plugin_launcher/.idea/runConfigurations/RemoteTabSandbox_local.xml @@ -1,5 +1,5 @@ - + \ No newline at end of file diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index af5c8cdc1e..403244c081 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -2,7 +2,6 @@ package com.rusefi.server; import com.devexperts.logging.Logging; import com.rusefi.Listener; -import com.rusefi.LocalApplicationProxy; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.Sensor; @@ -11,7 +10,6 @@ import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; -import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; import net.jcip.annotations.GuardedBy; import org.jetbrains.annotations.NotNull; @@ -34,7 +32,6 @@ import java.util.concurrent.atomic.AtomicLong; import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.Timeouts.SECOND; -import static com.rusefi.tools.online.HttpUtil.getIntProperty; /** * See NetworkConnectorStartup - NetworkConnector connects an ECU to this backend @@ -46,11 +43,6 @@ import static com.rusefi.tools.online.HttpUtil.getIntProperty; public class Backend implements Closeable { private static final Logging log = getLogging(Backend.class); - /** - * @see HttpUtil#PROXY_JSON_API_HTTP_PORT - * @see LocalApplicationProxy#SERVER_PORT_FOR_APPLICATIONS - */ - public static final int SERVER_PORT_FOR_CONTROLLERS = getIntProperty("controllers.port", 8003); private static final String MAX_PACKET_GAP = "MAX_PACKET_GAP"; /** diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java index 22c7ba1570..30b1cd0e6d 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java @@ -2,12 +2,10 @@ package com.rusefi.server; import com.rusefi.LocalApplicationProxy; import com.rusefi.tools.online.HttpUtil; +import com.rusefi.tools.online.ProxyClient; public class BackendLauncher { - /** - * need this method to be not in Backend class for console to work without all backend classes - */ - public static void start() { + public static void main(String[] args) { /* todo rusEFISSLContext.setupCertificates(new File("keystore.jks"), System.getProperty("RUSEFI_KEYSTORE_PASSWORD")); */ @@ -17,7 +15,7 @@ public class BackendLauncher { Backend backend = new Backend(userDetailsFunction, HttpUtil.PROXY_JSON_API_HTTP_PORT); backend.runApplicationConnector(LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, parameter -> { }); - backend.runControllerConnector(Backend.SERVER_PORT_FOR_CONTROLLERS, parameter -> { + backend.runControllerConnector(ProxyClient.SERVER_PORT_FOR_CONTROLLERS, parameter -> { }); } } diff --git a/java_tools/proxy_server/src/main/resources/run_server.sh b/java_tools/proxy_server/src/main/resources/run_server.sh index 083974b84d..3c0195eb51 100644 --- a/java_tools/proxy_server/src/main/resources/run_server.sh +++ b/java_tools/proxy_server/src/main/resources/run_server.sh @@ -1 +1 @@ -java -Xmx250M -jar rusefi_server.jar proxy_server +java -Xmx250M -jar rusefi_server.jar From 617e8f773fca9fe8a38b9016b852b357cc127cff Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 14:45:29 -0400 Subject: [PATCH 077/182] better way to handle timeout? --- .../com/rusefi/binaryprotocol/IncomingDataBuffer.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java index cd722680ff..63f729726e 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -172,28 +172,28 @@ public class IncomingDataBuffer { public byte readByte(int timeoutMs) throws IOException { boolean isTimeout = waitForBytes(timeoutMs, loggingPrefix + "readByte", System.currentTimeMillis(), 1); if (isTimeout) - throw new IOException("Timeout in readByte"); + throw new EOFException("Timeout in readByte"); return (byte) getByte(); } public int readInt() throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "readInt", System.currentTimeMillis(), 4); if (isTimeout) - throw new IllegalStateException("Timeout in readByte"); + throw new EOFException("Timeout in readByte"); return swap32(getInt()); } public short readShort() throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "readShort", System.currentTimeMillis(), 2); if (isTimeout) - throw new IllegalStateException("Timeout in readShort"); + throw new EOFException("Timeout in readShort"); return (short) swap16(getShort()); } - public int read(byte[] packet) { + public int read(byte[] packet) throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "read", System.currentTimeMillis(), packet.length); if (isTimeout) - throw new IllegalStateException("Timeout while waiting " + packet.length); + throw new EOFException("Timeout while waiting " + packet.length); getData(packet); return packet.length; } From 923a2891664d4406f2dccad4122c269c66acb004 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 15:27:40 -0400 Subject: [PATCH 078/182] shutdown improvements --- .../java/com/rusefi/NamedThreadFactory.java | 10 +++++++++- .../main/java/com/rusefi/io/ByteReader.java | 17 +++++++---------- .../java/com/rusefi/io/tcp/TcpIoStream.java | 2 +- .../main/java/com/rusefi/server/Backend.java | 18 +++++++++++------- .../com/rusefi/ts_plugin/BroadcastTab.java | 7 +++++++ 5 files changed, 35 insertions(+), 19 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java b/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java index 3d1dd4e7c4..cc9457076d 100644 --- a/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java +++ b/java_console/io/src/main/java/com/rusefi/NamedThreadFactory.java @@ -9,15 +9,23 @@ import java.util.concurrent.atomic.AtomicInteger; public class NamedThreadFactory implements ThreadFactory { private final AtomicInteger counter = new AtomicInteger(); private String name; + private final boolean isDaemon; public NamedThreadFactory(String name) { - this.name = name; + this(name, false); } + public NamedThreadFactory(String name, boolean isDaemon) { + this.name = name; + this.isDaemon = isDaemon; + } + + @Override public Thread newThread(@NotNull Runnable r) { Thread t = Executors.defaultThreadFactory().newThread(r); t.setName(name + counter.incrementAndGet()); + t.setDaemon(isDaemon); return t; } } diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index bf771664f6..0bd04e5a0c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -1,10 +1,9 @@ package com.rusefi.io; import com.devexperts.logging.Logging; -import com.opensr5.Logger; import com.opensr5.io.DataListener; +import com.rusefi.NamedThreadFactory; import com.rusefi.config.generated.Fields; -import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import java.io.IOException; @@ -15,26 +14,24 @@ import java.util.concurrent.Executors; import static com.devexperts.logging.Logging.getLogging; public interface ByteReader { + NamedThreadFactory THREAD_FACTORY = new NamedThreadFactory("TCP connector loop", true); + + Logging log = getLogging(ByteReader.class); - static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, TcpIoStream.DisconnectListener disconnectListener) { + static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, TcpIoStream.DisconnectListener disconnectListener, TcpIoStream tcpIoStream) { /** * Threading of the whole input/output does not look healthy at all! * * @see #COMMUNICATION_EXECUTOR */ - Executor threadExecutor = Executors.newSingleThreadExecutor(r -> { - Thread t = new Thread(r, "IO executor thread"); - t.setDaemon(true); // need daemon thread so that COM thread is also daemon - return t; - }); + Executor threadExecutor = Executors.newSingleThreadExecutor(THREAD_FACTORY); threadExecutor.execute(() -> { - Thread.currentThread().setName("TCP connector loop"); log.info(loggingPrefix + "Running TCP connection loop"); byte inputBuffer[] = new byte[Fields.BLOCKING_FACTOR * 2]; - while (true) { + while (!tcpIoStream.isClosed()) { try { int result = reader.read(inputBuffer); if (result == -1) diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 3802e5b267..01bc61adbd 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -78,7 +78,7 @@ public class TcpIoStream extends AbstractIoStream { @Override public void setInputListener(final DataListener listener) { - ByteReader.runReaderLoop(loggingPrefix, listener, input::read, disconnectListener); + ByteReader.runReaderLoop(loggingPrefix, listener, input::read, disconnectListener, this); } public interface DisconnectListener { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 403244c081..294ef21790 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -2,6 +2,7 @@ package com.rusefi.server; import com.devexperts.logging.Logging; import com.rusefi.Listener; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.core.Sensor; @@ -28,6 +29,7 @@ import java.io.Closeable; import java.io.IOException; import java.net.BindException; import java.util.*; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicLong; import static com.devexperts.logging.Logging.getLogging; @@ -53,6 +55,8 @@ public class Backend implements Closeable { */ private static final int APPLICATION_INACTIVITY_TIMEOUT = 3 * Timeouts.MINUTE; static final String AGE = "age"; + private static final ThreadFactory APPLLICATION_CONNECTION_CLEANUP = new NamedThreadFactory("rusEFI Application connections Cleanup"); + private static final ThreadFactory GAUGE_POKER = new NamedThreadFactory("rusEFI gauge poker"); private final FkRegex showOnlineControllers = new FkRegex(ProxyClient.LIST_CONTROLLERS_PATH, (Take) req -> getControllersOnline() @@ -109,7 +113,7 @@ public class Backend implements Closeable { "\n")) ); Front frontEnd = new FtBasic(new BkParallel(new BkSafe(new BkBasic(forkTake)), 4), httpPort); - frontEnd.start(() -> isClosed); + frontEnd.start(() -> isClosed()); } catch (BindException e) { throw new IllegalStateException("While binding " + httpPort, e); } @@ -120,20 +124,20 @@ public class Backend implements Closeable { }, "Http Server Thread").start(); - new Thread(() -> { - while (true) { + APPLLICATION_CONNECTION_CLEANUP.newThread(() -> { + while (!isClosed()) { log.info(getApplicationsCount() + " applications, " + getControllersCount() + " controllers"); runApplicationConnectionsCleanup(); BinaryProtocol.sleep(applicationTimeout); } - }, "rusEFI Application connections Cleanup").start(); + }).start(); - new Thread(() -> { - while (true) { + GAUGE_POKER.newThread(() -> { + while (!isClosed()) { grabOutputs(); BinaryProtocol.sleep(SECOND); } - }, "rusEFI gauge poker").start(); + }).start(); } private void grabOutputs() { diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java index e7e52ea0ea..e7781fcdef 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java @@ -1,10 +1,17 @@ package com.rusefi.ts_plugin; +import com.rusefi.proxy.NetworkConnector; + import javax.swing.*; public class BroadcastTab { private final JComponent content = new JPanel(); + public BroadcastTab() { +// NetworkConnector + + } + public JComponent getContent() { return content; } From 5d91702272418bf5bfd76eb955fd2e8d752e1b76 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 15:37:42 -0400 Subject: [PATCH 079/182] helping Android --- android/app/src/main/java/com/rusefi/app/AndroidSerial.java | 2 +- java_console/io/src/main/java/com/rusefi/io/ByteReader.java | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java index 3d5e67bdd2..9ceafd107f 100644 --- a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java +++ b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java @@ -49,7 +49,7 @@ public class AndroidSerial extends AbstractIoStream { @Override public void setInputListener(DataListener listener) { ByteReader reader = buffer -> usbSerialPort.read(buffer, 5000); - ByteReader.runReaderLoop("", listener, reader, TcpIoStream.DisconnectListener.VOID); + ByteReader.runReaderLoop("", listener, reader, TcpIoStream.DisconnectListener.VOID, this); } @Override diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index 0bd04e5a0c..83968f5d53 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -4,6 +4,7 @@ import com.devexperts.logging.Logging; import com.opensr5.io.DataListener; import com.rusefi.NamedThreadFactory; import com.rusefi.config.generated.Fields; +import com.rusefi.io.serial.AbstractIoStream; import com.rusefi.io.tcp.TcpIoStream; import java.io.IOException; @@ -19,7 +20,7 @@ public interface ByteReader { Logging log = getLogging(ByteReader.class); - static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, TcpIoStream.DisconnectListener disconnectListener, TcpIoStream tcpIoStream) { + static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, TcpIoStream.DisconnectListener disconnectListener, AbstractIoStream ioStream) { /** * Threading of the whole input/output does not look healthy at all! * @@ -31,7 +32,7 @@ public interface ByteReader { log.info(loggingPrefix + "Running TCP connection loop"); byte inputBuffer[] = new byte[Fields.BLOCKING_FACTOR * 2]; - while (!tcpIoStream.isClosed()) { + while (!ioStream.isClosed()) { try { int result = reader.read(inputBuffer); if (result == -1) From 52caab398944de741cfa4322803c4c4e6d60769c Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 16:00:09 -0400 Subject: [PATCH 080/182] better logging requires better thread names --- .../src/com/rusefi/SimulatorExecHelper.java | 5 +++-- .../rusefi/binaryprotocol/BinaryProtocol.java | 22 +++++++++---------- .../main/java/com/rusefi/SimulatorHelper.java | 4 +++- .../sensor_logs/BinarySensorLogRestarter.java | 3 ++- .../java/com/rusefi/ui/SensorLiveGraph.java | 6 +++-- .../com/rusefi/ui/light/InternetStatus.java | 5 ++++- .../com/rusefi/ui/widgets/AnyCommand.java | 5 ++++- 7 files changed, 30 insertions(+), 20 deletions(-) diff --git a/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java b/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java index 5f7f6f4e49..56c842443e 100644 --- a/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java +++ b/java_console/autotest/src/com/rusefi/SimulatorExecHelper.java @@ -11,6 +11,8 @@ import java.util.function.Consumer; * Andrey Belomutskiy, (c) 2013-2020 */ public class SimulatorExecHelper { + private final static NamedThreadFactory THREAD_FACTORY = new NamedThreadFactory("SimulatorExecHelper", true); + // see also SimulatorHelper private static final String SIMULATOR_BINARY = "../simulator/build/rusefi_simulator.exe"; static Process simulatorProcess; @@ -42,8 +44,7 @@ public class SimulatorExecHelper { public static void dumpProcessOutput(Process process) throws IOException { BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream())); - Thread thread = new Thread(createErrorStreamEcho(process)); - thread.setDaemon(true); + Thread thread = THREAD_FACTORY.newThread(createErrorStreamEcho(process)); thread.start(); String prefix = "from console: "; diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java index d1c8ec3579..fe78dbeb60 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -6,6 +6,7 @@ import com.opensr5.Logger; import com.opensr5.io.ConfigurationImageFile; import com.opensr5.io.DataListener; import com.rusefi.ConfigurationImageDiff; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.composite.CompositeEvent; import com.rusefi.composite.CompositeParser; @@ -32,25 +33,23 @@ import java.nio.ByteOrder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; +import java.util.concurrent.*; import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.IoHelper.*; /** * This object represents logical state of physical connection. - * + *

    * Instance is connected until we experience issues. Once we decide to close the connection there is no restart - * new instance of this class would need to be created once we establish a new physical connection. - * + *

    * Andrey Belomutskiy, (c) 2013-2020 * 3/6/2015 */ public class BinaryProtocol implements BinaryProtocolCommands { private static final Logging log = getLogging(BinaryProtocol.class); + private static final ThreadFactory THREAD_FACTORY = new NamedThreadFactory("text pull"); private static final String USE_PLAIN_PROTOCOL_PROPERTY = "protocol.plain"; private static final String CONFIGURATION_RUSEFI_BINARY = "current_configuration.rusefi_binary"; @@ -101,7 +100,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { case Fields.TS_OUTPUT_COMMAND: return "TS_OUTPUT_COMMAND"; default: - return "command " + (char) + command + "/" + command; + return "command " + (char) +command + "/" + command; } } @@ -228,7 +227,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { private void startTextPullThread(final DataListener listener) { if (!linkManager.COMMUNICATION_QUEUE.isEmpty()) { - System.out.println("Current queue: " + linkManager.COMMUNICATION_QUEUE.size()); + log.info("Current queue: " + linkManager.COMMUNICATION_QUEUE.size()); } Runnable textPull = new Runnable() { @Override @@ -254,8 +253,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { log.info("Stopping text pull"); } }; - Thread tr = new Thread(textPull); - tr.setName("text pull"); + Thread tr = THREAD_FACTORY.newThread(textPull); tr.start(); } @@ -396,7 +394,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { if (localCached != null) { int crcOfLocallyCachedConfiguration = IoHelper.getCrc32(localCached.getContent()); - System.out.printf(CONFIGURATION_RUSEFI_BINARY + " Local cache CRC %x\n", crcOfLocallyCachedConfiguration); + log.info(String.format(CONFIGURATION_RUSEFI_BINARY + " Local cache CRC %x\n", crcOfLocallyCachedConfiguration)); byte packet[] = new byte[7]; packet[0] = COMMAND_CRC_CHECK_COMMAND; @@ -407,7 +405,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { // that's unusual - most of the protocol is LITTLE_ENDIAN bb.order(ByteOrder.BIG_ENDIAN); int crcFromController = bb.getInt(); - System.out.printf("From rusEFI CRC %x\n", crcFromController); + log.info(String.format("From rusEFI CRC %x\n", crcFromController)); if (crcOfLocallyCachedConfiguration == crcFromController) { return localCached; } diff --git a/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java b/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java index 4b143886ae..277ab21d77 100644 --- a/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java +++ b/java_console/ui/src/main/java/com/rusefi/SimulatorHelper.java @@ -8,10 +8,12 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.IOException; +import java.util.concurrent.ThreadFactory; import static com.rusefi.ui.util.UiUtils.setToolTip; public class SimulatorHelper { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("SimulatorHelper"); public static final String BINARY = "rusefi_simulator.exe"; private static Process process; @@ -27,7 +29,7 @@ public class SimulatorHelper { LinkManager.isSimulationMode = true; FileLog.MAIN.logLine("Executing " + BINARY); - new Thread(new Runnable() { + THREAD_FACTORY.newThread(new Runnable() { @Override public void run() { try { diff --git a/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java b/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java index b61c661085..443acf4dd6 100644 --- a/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java +++ b/java_console/ui/src/main/java/com/rusefi/sensor_logs/BinarySensorLogRestarter.java @@ -1,6 +1,7 @@ package com.rusefi.sensor_logs; import com.rusefi.FileLog; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; @@ -13,7 +14,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; public class BinarySensorLogRestarter implements SensorLog { - private final static Executor UPLOAD_EXECUTOR = Executors.newSingleThreadExecutor(); + private final static Executor UPLOAD_EXECUTOR = Executors.newSingleThreadExecutor(new NamedThreadFactory("BinarySensorLogRestarter")); private BinarySensorLog logger; diff --git a/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java b/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java index 582f6e05c9..0aa99ceae2 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/SensorLiveGraph.java @@ -1,5 +1,6 @@ package com.rusefi.ui; +import com.rusefi.NamedThreadFactory; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCategory; import com.rusefi.core.SensorCentral; @@ -11,6 +12,7 @@ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.LinkedList; +import java.util.concurrent.ThreadFactory; /** * Andrey Belomutskiy, (c) 2013-2020 @@ -18,6 +20,7 @@ import java.util.LinkedList; */ @SuppressWarnings("InfiniteLoopStatement") public class SensorLiveGraph extends JPanel { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("SensorLiveGraph", true); private static final int COUNT = 30; private static final String SENSOR_TYPE = "sensor"; private static final String PERIOD = "period"; @@ -41,8 +44,7 @@ public class SensorLiveGraph extends JPanel { String gaugeName = config.getProperty(SENSOR_TYPE, defaultSensor.name()); this.sensor = Sensor.lookup(gaugeName, defaultSensor); - Thread thread = new Thread(createRunnable()); - thread.setDaemon(true); + Thread thread = THREAD_FACTORY.newThread(createRunnable()); thread.start(); period = ChangePeriod.lookup(config.getProperty(PERIOD)); autoScale = config.getBoolProperty(USE_AUTO_SCALE); diff --git a/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java b/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java index a7bf5377ab..043ec92fd9 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/light/InternetStatus.java @@ -1,5 +1,6 @@ package com.rusefi.ui.light; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import javax.swing.*; @@ -8,8 +9,10 @@ import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.net.HttpURLConnection; import java.net.URL; +import java.util.concurrent.ThreadFactory; public class InternetStatus { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("InternetStatus"); private static final String GOOGLE = "http://google.com"; private final JPanel panel = new JPanel(); private final JLabel status = new JLabel(); @@ -19,7 +22,7 @@ public class InternetStatus { Font defaultFont = status.getFont(); status.setFont(new Font(defaultFont.getName(), defaultFont.getStyle(), 2 * defaultFont.getSize())); - new Thread(() -> { + THREAD_FACTORY.newThread(() -> { while (true) { boolean isConnected = isServerReachable(); try { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java index 124d05da4d..40b7fd07e8 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java @@ -4,6 +4,7 @@ import com.fathzer.soft.javaluator.DoubleEvaluator; import com.rusefi.AutoTest; import com.rusefi.FileLog; import com.rusefi.InfixConverter; +import com.rusefi.NamedThreadFactory; import com.rusefi.core.MessagesCentral; import com.rusefi.io.CommandQueue; import com.rusefi.io.LinkManager; @@ -21,6 +22,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; @@ -29,6 +31,7 @@ import java.util.function.Function; * Andrey Belomutskiy, (c) 2013-2020 */ public class AnyCommand { + private final static ThreadFactory THREAD_FACTORY = new NamedThreadFactory("AnyCommand"); public static final String KEY = "last_value"; private static final String DECODE_RPN = "decode_rpn"; @@ -171,7 +174,7 @@ public class AnyCommand { int rpm = Integer.parseInt(parts[1]); int settleTime = Integer.parseInt(parts[2]); int durationTime = Integer.parseInt(parts[3]); - new Thread(new Runnable() { + THREAD_FACTORY.newThread(new Runnable() { @Override public void run() { MessagesCentral.getInstance().postMessage(AnyCommand.class, "Will test with RPM " + rpm + ", settle time" + settleTime + "s and duration" + durationTime + "s"); From 47e130282782162a0f5f9a4de9be369e7fc3e9ea Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 16:34:50 -0400 Subject: [PATCH 081/182] serial thread name hack --- .../com/rusefi/io/serial/SerialIoStreamJSerialComm.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java index 0c79376298..1eaf662f99 100644 --- a/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java +++ b/java_console/io/src/main/java/com/rusefi/io/serial/SerialIoStreamJSerialComm.java @@ -39,6 +39,8 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { @Override public void setInputListener(DataListener listener) { sp.addDataListener(new SerialPortDataListener() { + private boolean isFirstEvent = true; + @Override public int getListeningEvents() { return SerialPort.LISTENING_EVENT_DATA_AVAILABLE; @@ -48,6 +50,11 @@ public class SerialIoStreamJSerialComm extends AbstractIoStream { public void serialEvent(SerialPortEvent event) { if (event.getEventType() != SerialPort.LISTENING_EVENT_DATA_AVAILABLE) return; + if (isFirstEvent) { + // a hack to have explicit thread name, see https://github.com/Fazecast/jSerialComm/issues/308 + Thread.currentThread().setName("Serial Port Event Thread"); + isFirstEvent = false; + } int bytesAvailable = sp.bytesAvailable(); if (bytesAvailable <= 0) return; // sometimes negative value is returned at least on Mac From 465d242347dd29540a288768db4b026ff77c3f48 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 17:23:00 -0400 Subject: [PATCH 082/182] bootloader not well? #1638 trying to fix error detection mechanism --- firmware/bootloader/compile_bootloader.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/firmware/bootloader/compile_bootloader.sh b/firmware/bootloader/compile_bootloader.sh index a8c7b4faae..15aa7645b3 100644 --- a/firmware/bootloader/compile_bootloader.sh +++ b/firmware/bootloader/compile_bootloader.sh @@ -11,13 +11,14 @@ BOOTLOADER_CODE_DESTINATION_FILE=$BOOTLOADER_CODE_DESTINATION_PATH/bootloader_ge echo "$SCRIPT_NAME: Starting bootloader compilation..." make -j4 -f src/Makefile $1 $2 $3 -[ $? -eq 0 ] || { echo "make compilation failed"; exit 1; } +rm -f blbuild/$BOOTLOADER_CODE_DESTINATION_FILE + +[ $? -eq 0 ] || { echo "bootloader compilation failed"; exit 1; } echo "$SCRIPT_NAME: Bootloader build success." cd blbuild # Generate a header file with binary bootloader code -rm -f $BOOTLOADER_CODE_DESTINATION_FILE java -jar ../../../java_tools/bin2header.jar bootloader.bin "$BOOTLOADER_CODE_DESTINATION_FILE" "$BOOTLOADER_COMMENT static const volatile uint8_t bootloader_code[] BOOTLOADER_SECTION" [ $? -eq 0 ] || { echo "$SCRIPT_NAME: error generating header file"; exit 1; } cd .. From ef36b230c2ed9a108720de0c224621a3f7fb15a6 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 17:25:32 -0400 Subject: [PATCH 083/182] bootloader not well? #1638 trying to fix error detection mechanism --- firmware/bootloader/compile_bootloader.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/bootloader/compile_bootloader.sh b/firmware/bootloader/compile_bootloader.sh index 15aa7645b3..018528ff2e 100644 --- a/firmware/bootloader/compile_bootloader.sh +++ b/firmware/bootloader/compile_bootloader.sh @@ -13,7 +13,7 @@ make -j4 -f src/Makefile $1 $2 $3 rm -f blbuild/$BOOTLOADER_CODE_DESTINATION_FILE -[ $? -eq 0 ] || { echo "bootloader compilation failed"; exit 1; } +[ $? -eq 0 ] || { echo "ERROR: bootloader compilation failed"; exit 1; } echo "$SCRIPT_NAME: Bootloader build success." From dc303d73238f344cc0b313723582484cac6c7573 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 17:40:16 -0400 Subject: [PATCH 084/182] bootloader not well? #1638 trying to fix error detection mechanism --- firmware/bootloader/compile_bootloader.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/firmware/bootloader/compile_bootloader.sh b/firmware/bootloader/compile_bootloader.sh index 018528ff2e..a374a38472 100644 --- a/firmware/bootloader/compile_bootloader.sh +++ b/firmware/bootloader/compile_bootloader.sh @@ -11,9 +11,8 @@ BOOTLOADER_CODE_DESTINATION_FILE=$BOOTLOADER_CODE_DESTINATION_PATH/bootloader_ge echo "$SCRIPT_NAME: Starting bootloader compilation..." make -j4 -f src/Makefile $1 $2 $3 -rm -f blbuild/$BOOTLOADER_CODE_DESTINATION_FILE - -[ $? -eq 0 ] || { echo "ERROR: bootloader compilation failed"; exit 1; } +# downstream scripts detect error condition by checking if the output file exists so we need to make sure we remove it +[ $? -eq 0 ] || { echo "ERROR: bootloader compilation failed"; rm -f blbuild/$BOOTLOADER_CODE_DESTINATION_FILE ; exit 1; } echo "$SCRIPT_NAME: Bootloader build success." From f9890edb3bfa73db45bd9577e69de3700281a9ec Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 18:46:53 -0400 Subject: [PATCH 085/182] better exception messages --- .../java/com/rusefi/binaryprotocol/IncomingDataBuffer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java index 63f729726e..784e8e02c9 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -172,14 +172,14 @@ public class IncomingDataBuffer { public byte readByte(int timeoutMs) throws IOException { boolean isTimeout = waitForBytes(timeoutMs, loggingPrefix + "readByte", System.currentTimeMillis(), 1); if (isTimeout) - throw new EOFException("Timeout in readByte"); + throw new EOFException("Timeout in readByte " + timeoutMs); return (byte) getByte(); } public int readInt() throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "readInt", System.currentTimeMillis(), 4); if (isTimeout) - throw new EOFException("Timeout in readByte"); + throw new EOFException("Timeout in readInt "); return swap32(getInt()); } From a81a5e3c04bbe08c7af144dd1e7c1bab80e09d78 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 19:04:15 -0400 Subject: [PATCH 086/182] bootloader not well? fix #1638 --- firmware/controllers/system/efi_gpio.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index 50004bf618..ef657b40db 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -323,7 +323,9 @@ bool OutputPin::getAndSet(int logicValue) { } void OutputPin::setValue(int logicValue) { +#if ENABLE_PERF_TRACE ScopePerf perf(PE::OutputPinSetValue); +#endif // ENABLE_PERF_TRACE #if EFI_PROD_CODE efiAssertVoid(CUSTOM_ERR_6621, modePtr!=NULL, "pin mode not initialized"); From f42e08c8e532b14c709e7cc17da7476af2e3e0d4 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 19:14:09 -0400 Subject: [PATCH 087/182] bootloader not well? temporary bad workaround #1638 --- firmware/controllers/system/efi_gpio.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/system/efi_gpio.cpp b/firmware/controllers/system/efi_gpio.cpp index ef657b40db..4a24fce5c6 100644 --- a/firmware/controllers/system/efi_gpio.cpp +++ b/firmware/controllers/system/efi_gpio.cpp @@ -324,7 +324,8 @@ bool OutputPin::getAndSet(int logicValue) { void OutputPin::setValue(int logicValue) { #if ENABLE_PERF_TRACE - ScopePerf perf(PE::OutputPinSetValue); +// todo: https://github.com/rusefi/rusefi/issues/1638 +// ScopePerf perf(PE::OutputPinSetValue); #endif // ENABLE_PERF_TRACE #if EFI_PROD_CODE From 98404eb69be2a820d9f2db4246329e1f64274094 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 19:17:28 -0400 Subject: [PATCH 088/182] proxy progress - backend and frontend --- .../com/rusefi/LocalApplicationProxy.java | 45 ++++++-- .../com/rusefi/server/ApplicationRequest.java | 23 ++-- .../java/com/rusefi/server/UserDetails.java | 5 + .../test/java/com/rusefi/FullServerTest.java | 6 +- .../src/test/java/com/rusefi/ServerTest.java | 5 +- .../main/java/com/rusefi/server/Backend.java | 29 +++-- .../server/ControllerConnectionState.java | 9 ++ .../com/rusefi/server/TwoKindSemaphore.java | 8 ++ .../com/rusefi/server/SessionDetailsTest.java | 2 +- .../com/rusefi/ts_plugin/PluginEntry.java | 5 +- .../java/com/rusefi/ts_plugin/RemoteTab.java | 105 ++++++++++++++---- .../rusefi/ts_plugin/RemoteTabController.java | 37 ++++++ .../rusefi/ts_plugin/TsPluginLauncher.java | 8 +- 13 files changed, 223 insertions(+), 64 deletions(-) create mode 100644 java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java index aebc254f2c..d282fb1daa 100644 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java @@ -1,8 +1,6 @@ package com.rusefi; import com.devexperts.logging.Logging; -import com.opensr5.Logger; -import com.rusefi.core.MessagesCentral; import com.rusefi.io.IoStream; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; @@ -13,45 +11,70 @@ import com.rusefi.server.rusEFISSLContext; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; +import java.io.Closeable; import java.io.IOException; import static com.devexperts.logging.Logging.getLogging; -public class LocalApplicationProxy { +public class LocalApplicationProxy implements Closeable { private static final Logging log = getLogging(LocalApplicationProxy.class); public static final int SERVER_PORT_FOR_APPLICATIONS = HttpUtil.getIntProperty("applications.port", 8002); private final ApplicationRequest applicationRequest; + private final ServerHolder serverHolder; + private final IoStream authenticatorToProxyStream; - public LocalApplicationProxy(ApplicationRequest applicationRequest) { + public LocalApplicationProxy(ApplicationRequest applicationRequest, ServerHolder serverHolder, IoStream authenticatorToProxyStream) { this.applicationRequest = applicationRequest; + this.serverHolder = serverHolder; + this.authenticatorToProxyStream = authenticatorToProxyStream; + } + + public ApplicationRequest getApplicationRequest() { + return applicationRequest; } /** * @param serverPortForRemoteUsers port on which rusEFI proxy accepts authenticator connections * @param applicationRequest remote session we want to connect to - * @param localApplicationPort local port we would bind for TunerStudio to connect to + * @param localApplicationPort local port we would bind for TunerStudio to connect to * @param jsonHttpPort * @param disconnectListener + * @param connectionListener */ - public static ServerHolder startAndRun(int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener) throws IOException { + public static ServerHolder startAndRun(int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { String version = HttpUtil.executeGet(ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); log.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers), disconnectListener); - LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest); - log.info("Pushing " + applicationRequest); - localApplicationProxy.run(authenticatorToProxyStream); + LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); - return BinaryProtocolProxy.createProxy(authenticatorToProxyStream, localApplicationPort); + ServerHolder serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, localApplicationPort); + LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest, serverHolder, authenticatorToProxyStream); + connectionListener.onConnected(localApplicationProxy); + return serverHolder; } - public void run(IoStream authenticatorToProxyStream) throws IOException { + public static void sendHello(IoStream authenticatorToProxyStream, ApplicationRequest applicationRequest) throws IOException { + log.info("Pushing " + applicationRequest); // right from connection push session authentication data new HelloCommand(applicationRequest.toJson()).handle(authenticatorToProxyStream); } public static void start(String[] strings) { } + + @Override + public void close() { + serverHolder.close(); + authenticatorToProxyStream.close(); + } + + public interface ConnectionListener { + ConnectionListener VOID = localApplicationProxy -> { + }; + + void onConnected(LocalApplicationProxy localApplicationProxy); + } } diff --git a/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java b/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java index dc8e8a73a6..11a269d22d 100644 --- a/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java +++ b/java_console/io/src/main/java/com/rusefi/server/ApplicationRequest.java @@ -7,38 +7,37 @@ import java.util.Objects; public class ApplicationRequest { private static final String SESSION = "session"; - private static final String USER_ID = "user_id"; private final SessionDetails sessionDetails; - private final int targetUserId; + private final UserDetails targetUser; - public ApplicationRequest(SessionDetails sessionDetails, int targetUserId) { + public ApplicationRequest(SessionDetails sessionDetails, UserDetails targetUser) { this.sessionDetails = sessionDetails; - this.targetUserId = targetUserId; + this.targetUser = targetUser; } public SessionDetails getSessionDetails() { return sessionDetails; } - public int getTargetUserId() { - return targetUserId; + public UserDetails getTargetUser() { + return targetUser; } public String toJson() { JSONObject jsonObject = new JSONObject(); jsonObject.put(SESSION, sessionDetails.toJson()); - jsonObject.put(USER_ID, targetUserId); + targetUser.put(jsonObject); return jsonObject.toJSONString(); } public static ApplicationRequest valueOf(String jsonString) { JSONObject jsonObject = HttpUtil.parse(jsonString); - long targetUserId = (Long) jsonObject.get(USER_ID); + UserDetails userDetails = UserDetails.valueOf(jsonObject); SessionDetails session = SessionDetails.valueOf((String) jsonObject.get(SESSION)); - return new ApplicationRequest(session, (int)targetUserId); + return new ApplicationRequest(session, userDetails); } @Override @@ -46,20 +45,20 @@ public class ApplicationRequest { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ApplicationRequest that = (ApplicationRequest) o; - return targetUserId == that.targetUserId && + return targetUser == that.targetUser && sessionDetails.equals(that.sessionDetails); } @Override public int hashCode() { - return Objects.hash(sessionDetails, targetUserId); + return Objects.hash(sessionDetails, targetUser); } @Override public String toString() { return "ApplicationRequest{" + "sessionDetails=" + sessionDetails + - ", targetUserId=" + targetUserId + + ", targetUserId=" + targetUser + '}'; } } diff --git a/java_console/io/src/main/java/com/rusefi/server/UserDetails.java b/java_console/io/src/main/java/com/rusefi/server/UserDetails.java index 5d6a778d4b..fe89fe6087 100644 --- a/java_console/io/src/main/java/com/rusefi/server/UserDetails.java +++ b/java_console/io/src/main/java/com/rusefi/server/UserDetails.java @@ -19,6 +19,11 @@ public class UserDetails { return new UserDetails(userName, (int) userId); } + void put(JSONObject jsonObject) { + jsonObject.put(USER_ID, getUserId()); + jsonObject.put(USERNAME, getUserName()); + } + public String getUserName() { return userName; } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 404262060d..644ecfd7f1 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -78,11 +78,13 @@ public class FullServerTest { assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, MockRusEfiDevice.TEST_TOKEN_3, networkConnectorResult.getOneTimeToken()); - ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userId); + ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(MockRusEfiDevice.TEST_TOKEN_1)); // start authenticator int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio - LocalApplicationProxy.startAndRun(serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, TcpIoStream.DisconnectListener.VOID); + LocalApplicationProxy.startAndRun(serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, + TcpIoStream.DisconnectListener.VOID, + LocalApplicationProxy.ConnectionListener.VOID); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index 89328925eb..8b9be40d63 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -185,12 +185,11 @@ covered by FullServerTest TestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); SessionDetails sessionDetails = MockRusEfiDevice.createTestSession(MockRusEfiDevice.TEST_TOKEN_1, Fields.TS_SIGNATURE); - ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, 123); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(MockRusEfiDevice.TEST_TOKEN_1)); // start authenticator IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); - LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest); - localApplicationProxy.run(authenticatorToProxyStream); + LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS)); } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 294ef21790..9a414e8ab7 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -184,7 +184,7 @@ public class Backend implements Closeable { return; } - ControllerKey controllerKey = new ControllerKey(applicationRequest.getTargetUserId(), applicationRequest.getSessionDetails().getControllerInfo()); + ControllerKey controllerKey = new ControllerKey(applicationRequest.getTargetUser().getUserId(), applicationRequest.getSessionDetails().getControllerInfo()); ControllerConnectionState state; synchronized (lock) { state = acquire(controllerKey, userDetails); @@ -318,19 +318,28 @@ public class Backend implements Closeable { * that's different from controllers since we periodically pull outputs from controllers which allows us to detect disconnects */ private void runApplicationConnectionsCleanup() { - List inactiveApplications = new ArrayList<>(); - + List applications; synchronized (lock) { - long now = System.currentTimeMillis(); - for (ApplicationConnectionState client : applications) { - if (now - client.getClientStream().getStreamStats().getPreviousPacketArrivalTime() > applicationTimeout) - inactiveApplications.add(client); + applications = new ArrayList<>(this.applications); + } + + long now = System.currentTimeMillis(); + for (ApplicationConnectionState client : applications) { + if (now - client.getClientStream().getStreamStats().getPreviousPacketArrivalTime() > applicationTimeout) { + log.error("Kicking out application " + client); + close(client); + } else { + log.info("Looks alive " + client); } } - for (ApplicationConnectionState inactiveClient : inactiveApplications) { - log.error("Kicking out application " + inactiveClient); - close(inactiveClient); + List controllers; + synchronized (lock) { + controllers = new ArrayList<>(this.controllers); + } + + for (ControllerConnectionState controllerConnectionState : controllers) { + log.info("State: " + controllerConnectionState); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java index 15f37c4fdb..9d9dfbfa79 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java @@ -75,6 +75,15 @@ public class ControllerConnectionState { FileUtil.close(clientSocket); } + @Override + public String toString() { + return "ControllerConnectionState{" + + "userDetails=" + userDetails + + ", isClosed=" + isClosed + + ", twoKindSemaphore=" + twoKindSemaphore + + '}'; + } + public void requestControllerInfo() throws IOException { HelloCommand.send(stream); String jsonString = HelloCommand.getHelloResponse(incomingData); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java index 27413cae75..5cc695786b 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java @@ -52,4 +52,12 @@ public class TwoKindSemaphore { public UserDetails getOwner() { return owner; } + + @Override + public String toString() { + return "TwoKindSemaphore{" + + "semaphore=" + semaphore + + ", owner=" + owner + + '}'; + } } diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java index 43247f691f..5692c71883 100644 --- a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java @@ -19,7 +19,7 @@ public class SessionDetailsTest { public void testApplicationRequest() { ControllerInfo ci = new ControllerInfo("name", "make", "code", "sign"); SessionDetails sd = new SessionDetails(ci, "auth", 123); - ApplicationRequest ar = new ApplicationRequest(sd, 321); + ApplicationRequest ar = new ApplicationRequest(sd, new UserDetails("", 321)); String json = ar.toJson(); ApplicationRequest fromJson = ApplicationRequest.valueOf(json); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java index 523f560175..9f9a011387 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java @@ -10,15 +10,15 @@ import java.lang.reflect.Field; import java.util.function.Supplier; /** - * TsPlugin launcher creates an instance of this class via reflection. + * {@link TsPluginLauncher} creates an instance of this class via reflection. */ public class PluginEntry implements TsPluginBody { private final JPanel content = new JPanel(new BorderLayout()); - private final JTabbedPane tabbedPane = new JTabbedPane(); /** * the real constructor - this one is invoked via reflection */ + @SuppressWarnings("unused") public PluginEntry() { this(ControllerAccess::getInstance); } @@ -35,6 +35,7 @@ public class PluginEntry implements TsPluginBody { BroadcastTab broadcastTab = new BroadcastTab(); RemoteTab remoteTab = new RemoteTab(); + JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("Upload", uploadTab.getContent()); tabbedPane.addTab("Broadcast", broadcastTab.getContent()); tabbedPane.addTab("Remote ECU", remoteTab.getContent()); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index fb85388755..bdd249c368 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -9,6 +9,7 @@ import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.ControllerInfo; import com.rusefi.server.SessionDetails; +import com.rusefi.server.UserDetails; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; import com.rusefi.tools.online.PublicSession; @@ -18,6 +19,8 @@ import org.putgemin.VerticalFlowLayout; import javax.swing.*; import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.io.IOException; import java.util.List; import java.util.concurrent.Executor; @@ -43,12 +46,27 @@ public class RemoteTab { } }; + + private final JButton disconnect = new JButton("Disconnect"); + private final Executor listDownloadExecutor = Executors.newSingleThreadExecutor(new NamedThreadFactory("online list downloader")); public RemoteTab() { JButton refresh = new JButton("Refresh List"); refresh.addActionListener(e -> requestListDownload()); + disconnect.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + LocalApplicationProxy localApplicationProxy = RemoteTabController.INSTANCE.getLocalApplicationProxy(); + if (localApplicationProxy != null) + localApplicationProxy.close(); + RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); + requestListDownload(); + } + }); + + JTextField applicationPort = new JTextField() { @Override public Dimension getPreferredSize() { @@ -78,7 +96,13 @@ public class RemoteTab { content.add(topLines, BorderLayout.NORTH); content.add(list, BorderLayout.CENTER); list.add(new JLabel("Requesting list of ECUs")); - requestListDownload(); + + LocalApplicationProxy currentState = RemoteTabController.INSTANCE.getLocalApplicationProxy(); + if (currentState == null) { + requestListDownload(); + } else { + setConnectedStatus(currentState.getApplicationRequest().getTargetUser()); + } } private String getLocalPort() { @@ -99,58 +123,99 @@ public class RemoteTab { } private void showList(List userDetails) { + if (RemoteTabController.INSTANCE.getState() != RemoteTabController.State.NOT_CONNECTED) + return; list.removeAll(); if (userDetails.isEmpty()) { list.add(new JLabel("No ECUs are broadcasting at the moment :(")); } else { + + JPanel verticalPanel = new JPanel(new VerticalFlowLayout()); + JScrollPane scroll = new JScrollPane(verticalPanel, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + list.add(scroll); + for (PublicSession user : userDetails) { - list.add(createPanel(user)); + verticalPanel.add(createSessionControl(user)); } } AutoupdateUtil.trueLayout(list); } - private JComponent createPanel(PublicSession publicSession) { - JComponent userPanel = new JPanel(new FlowLayout()); - userPanel.add(new JLabel(publicSession.getUserDetails().getUserName())); + private JComponent createSessionControl(PublicSession publicSession) { + JComponent topLine = new JPanel(new FlowLayout()); + topLine.add(new JLabel(publicSession.getUserDetails().getUserName())); ControllerInfo controllerInfo = publicSession.getControllerInfo(); - userPanel.add(new JLabel(controllerInfo.getVehicleName() + " " + controllerInfo.getEngineMake() + " " + controllerInfo.getEngineCode())); + topLine.add(new JLabel(controllerInfo.getVehicleName() + " " + controllerInfo.getEngineMake() + " " + controllerInfo.getEngineCode())); - userPanel.add(new URLLabel(SignatureHelper.getUrl(controllerInfo.getSignature()))); + JPanel bottomPanel = new JPanel(new FlowLayout()); if (publicSession.isUsed()) { - userPanel.add(new JLabel(" used by " + publicSession.getOwnerName())); + bottomPanel.add(new JLabel(" Used by " + publicSession.getOwnerName())); } else { - JButton connect = new JButton("Connect"); - connect.addActionListener(event -> { - - setStatus("Connecting to " + publicSession.getUserDetails().getUserName()); - - new Thread(() -> runAuthenticator(publicSession, controllerInfo), "Authenticator").start(); - }); - userPanel.add(connect); + JButton connect = new JButton("Connect to " + publicSession.getUserDetails().getUserName()); + connect.addActionListener(event -> connecToToProxy(publicSession, controllerInfo)); + bottomPanel.add(connect); } + JPanel userPanel = new JPanel(new BorderLayout()); + + userPanel.add(topLine, BorderLayout.NORTH); + userPanel.add(new URLLabel(SignatureHelper.getUrl(controllerInfo.getSignature())), BorderLayout.CENTER); + userPanel.add(bottomPanel, BorderLayout.SOUTH); + + userPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK)); + return userPanel; } - private void setStatus(String text) { + private void connecToToProxy(PublicSession publicSession, ControllerInfo controllerInfo) { + RemoteTabController.INSTANCE.setState(RemoteTabController.State.CONNECTING); + setStatus("Connecting to " + publicSession.getUserDetails().getUserName()); + + LocalApplicationProxy.ConnectionListener connectionListener = new LocalApplicationProxy.ConnectionListener() { + @Override + public void onConnected(LocalApplicationProxy localApplicationProxy) { + RemoteTabController.INSTANCE.setConnected(localApplicationProxy); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + setConnectedStatus(publicSession.getUserDetails()); + } + }); + } + }; + + new Thread(() -> { + runAuthenticator(publicSession, controllerInfo, connectionListener); + }, "Authenticator").start(); + } + + private void setConnectedStatus(UserDetails userDetails) { + setStatus("Connected to " + userDetails.getUserName(), + new JLabel("You can now connect your TunerStudio to IP address localhost and port " + getLocalPort()), + disconnect); + } + + private void setStatus(String text, JComponent... extra) { list.removeAll(); list.add(new JLabel(text)); + for (JComponent component : extra) + list.add(component); AutoupdateUtil.trueLayout(list); } - private void runAuthenticator(PublicSession publicSession, ControllerInfo controllerInfo) { + private void runAuthenticator(PublicSession publicSession, ControllerInfo controllerInfo, LocalApplicationProxy.ConnectionListener connectionListener) { SessionDetails sessionDetails = new SessionDetails(controllerInfo, AuthTokenPanel.getAuthToken(), Integer.parseInt(oneTimePasswordControl.getText())); - ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails().getUserId()); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails()); try { AtomicReference serverHolderAtomicReference = new AtomicReference<>(); TcpIoStream.DisconnectListener disconnectListener = () -> SwingUtilities.invokeLater(() -> { setStatus("Disconnected"); + RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); ServerHolder serverHolder = serverHolderAtomicReference.get(); if (serverHolder != null) serverHolder.close(); @@ -160,7 +225,7 @@ public class RemoteTab { LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, applicationRequest, Integer.parseInt(getLocalPort()), - HttpUtil.PROXY_JSON_API_HTTP_PORT, disconnectListener); + HttpUtil.PROXY_JSON_API_HTTP_PORT, disconnectListener, connectionListener); serverHolderAtomicReference.set(serverHolder); } catch (IOException e) { setStatus("IO error: " + e); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java new file mode 100644 index 0000000000..b623c22137 --- /dev/null +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java @@ -0,0 +1,37 @@ +package com.rusefi.ts_plugin; + +import com.rusefi.LocalApplicationProxy; + +public enum RemoteTabController { + /** + * TunerStudio likes to close plugin panel, we need a singleton to preserve the state + */ + INSTANCE; + + private State state = State.NOT_CONNECTED; + private LocalApplicationProxy localApplicationProxy; + + public synchronized void setState(State state) { + this.state = state; + localApplicationProxy = null; + } + + public synchronized State getState() { + return state; + } + + public synchronized void setConnected(LocalApplicationProxy localApplicationProxy) { + setState(State.CONNECTED); + this.localApplicationProxy = localApplicationProxy; + } + + public LocalApplicationProxy getLocalApplicationProxy() { + return localApplicationProxy; + } + + public enum State { + NOT_CONNECTED, + CONNECTING, + CONNECTED + } +} diff --git a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java index ab4e3a5ee1..0f47aca0a2 100644 --- a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java +++ b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java @@ -17,7 +17,7 @@ public class TsPluginLauncher implements ApplicationPlugin { private final JPanel content = new JPanel(new VerticalFlowLayout()); public TsPluginLauncher() { - System.out.println("TsPluginLauncher " + this); + System.out.println("init " + this); } @Override @@ -46,6 +46,7 @@ public class TsPluginLauncher implements ApplicationPlugin { @Override public boolean displayPlugin(String signature) { + System.out.println("displayPlugin " + signature); // todo: smarter implementation one day return true; } @@ -63,7 +64,8 @@ public class TsPluginLauncher implements ApplicationPlugin { @Override public JComponent getPluginPanel() { synchronized (this) { - // only create content if TS is actually planning to display this plugin instance + // lazy initialization since TunerStudio creates one instance only to get version information without any + // intentions to display the UI if (content.getComponents().length == 0) { System.out.println("Create Updater " + this); Updater updater = new Updater(); @@ -75,7 +77,7 @@ public class TsPluginLauncher implements ApplicationPlugin { @Override public void close() { - System.out.printf("TsPlugin#close"); + System.out.println("close " + this); } @Override From d225b6bd5427a66d3e826c05afb8ff806032e8c3 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 19:39:53 -0400 Subject: [PATCH 089/182] java logging migration --- .../java/com/rusefi/autodetect/PortDetector.java | 2 +- .../com/rusefi/autodetect/SerialAutoChecker.java | 15 ++++++--------- .../com/rusefi/tools/NetworkConnectorStartup.java | 4 +++- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java b/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java index 9840a04c3f..f4d7778adc 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java +++ b/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java @@ -36,7 +36,7 @@ public class PortDetector { CountDownLatch portFound = new CountDownLatch(1); AtomicReference result = new AtomicReference<>(); for (String serialPort : serialPorts) { - Thread thread = AUTO_DETECT_PORT.newThread(new SerialAutoChecker(FileLog.LOGGER, serialPort, portFound, result, callback)); + Thread thread = AUTO_DETECT_PORT.newThread(new SerialAutoChecker(serialPort, portFound, result, callback)); serialFinder.add(thread); thread.start(); } diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java b/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java index 6bf7663fa4..93f73b8c47 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java +++ b/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java @@ -1,7 +1,6 @@ package com.rusefi.autodetect; -import com.opensr5.Logger; -import com.rusefi.FileLog; +import com.devexperts.logging.Logging; import com.rusefi.binaryprotocol.BinaryProtocolCommands; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; @@ -17,29 +16,27 @@ import java.util.function.Function; import static com.rusefi.binaryprotocol.IoHelper.checkResponseCode; public class SerialAutoChecker implements Runnable { - private final Logger logger; + private final static Logging log = Logging.getLogging(SerialAutoChecker.class); private final String serialPort; private final CountDownLatch portFound; private final AtomicReference result; private final Function callback; public static String SIGNATURE; - public SerialAutoChecker(Logger logger, String serialPort, CountDownLatch portFound, AtomicReference result, Function callback) { - this.logger = logger; + public SerialAutoChecker(String serialPort, CountDownLatch portFound, AtomicReference result, Function callback) { this.serialPort = serialPort; this.portFound = portFound; this.result = result; this.callback = callback; } - public SerialAutoChecker(Logger logger, String serialPort, CountDownLatch portFound, AtomicReference result) { - this(logger, serialPort, portFound, result, null); + public SerialAutoChecker(String serialPort, CountDownLatch portFound, AtomicReference result) { + this(serialPort, portFound, result, null); } @Override public void run() { IoStream stream = SerialIoStreamJSerialComm.openPort(serialPort); - Logger logger = FileLog.LOGGER; IncomingDataBuffer incomingData = stream.getDataBuffer(); try { HelloCommand.send(stream); @@ -48,7 +45,7 @@ public class SerialAutoChecker implements Runnable { return; String signature = new String(response, 1, response.length - 1); SIGNATURE = signature; - System.out.println("Got signature=" + signature + " from " + serialPort); + log.info("Got signature=" + signature + " from " + serialPort); if (signature.startsWith(Fields.PROTOCOL_SIGNATURE_PREFIX)) { if (callback != null) { callback.apply(stream); diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index 5e1a851858..2f01bde70d 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -1,5 +1,6 @@ package com.rusefi.tools; +import com.devexperts.logging.Logging; import com.rusefi.auth.AutoTokenUtil; import com.rusefi.autodetect.PortDetector; import com.rusefi.proxy.NetworkConnector; @@ -7,6 +8,7 @@ import com.rusefi.tools.online.ProxyClient; import com.rusefi.ui.AuthTokenPanel; public class NetworkConnectorStartup { + private final static Logging log = Logging.getLogging(NetworkConnectorStartup.class); public static void start() { String authToken = AuthTokenPanel.getAuthToken(); if (!AutoTokenUtil.isToken(authToken)) { @@ -21,6 +23,6 @@ public class NetworkConnectorStartup { } NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, ProxyClient.SERVER_PORT_FOR_CONTROLLERS); - System.out.println("Running with " + networkConnectorResult.getOneTimeToken()); + log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); } } From ec2accd9d746609b2b52ffcec4a19c71ff9b2b2c Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 19:52:53 -0400 Subject: [PATCH 090/182] more, more logs! --- .../src/main/java/com/rusefi/server/Backend.java | 11 +++++++---- .../com/rusefi/server/ControllerConnectionState.java | 1 + .../com/rusefi/server/JsonUserDetailsResolver.java | 11 +++++++---- .../main/java/com/rusefi/server/TwoKindSemaphore.java | 5 +++++ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 9a414e8ab7..b6df0649ef 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicLong; import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.Timeouts.SECOND; +import static com.rusefi.server.Birthday.humanReadableFormat; /** * See NetworkConnectorStartup - NetworkConnector connects an ECU to this backend @@ -254,6 +255,7 @@ public class Backend implements Closeable { register(controllerConnectionState); } catch (Throwable e) { + log.error("runControllerConnector close " + controllerConnectionState, e); close(controllerConnectionState); } }, serverPortForControllers, "ControllerServer", serverSocketCreationCallback, BinaryProtocolServer.SECURE_SOCKET_FACTORY); @@ -323,13 +325,13 @@ public class Backend implements Closeable { applications = new ArrayList<>(this.applications); } - long now = System.currentTimeMillis(); for (ApplicationConnectionState client : applications) { - if (now - client.getClientStream().getStreamStats().getPreviousPacketArrivalTime() > applicationTimeout) { + long timeSinceLastActivity = System.currentTimeMillis() - client.getClientStream().getStreamStats().getPreviousPacketArrivalTime(); + if (timeSinceLastActivity > applicationTimeout) { log.error("Kicking out application " + client); close(client); } else { - log.info("Looks alive " + client); + log.info("Looks alive " + client + " time since last activity: " + humanReadableFormat(timeSinceLastActivity)); } } @@ -339,7 +341,8 @@ public class Backend implements Closeable { } for (ControllerConnectionState controllerConnectionState : controllers) { - log.info("State: " + controllerConnectionState); + long timeSinceLastActivity = System.currentTimeMillis() - controllerConnectionState.getStream().getStreamStats().getPreviousPacketArrivalTime(); + log.info("State: " + controllerConnectionState + " time since last activity: " + humanReadableFormat(timeSinceLastActivity)); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java index 9d9dfbfa79..93e2ee4536 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java @@ -137,6 +137,7 @@ public class ControllerConnectionState { getOutputs(); } catch (IOException e) { // todo: this is currently not covered by a unit test + log.error("grabOutputs " + this, e); backend.close(this); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java index 05cd23bd89..479f453cdb 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java @@ -1,5 +1,6 @@ package com.rusefi.server; +import com.devexperts.logging.Logging; import com.rusefi.tools.online.HttpUtil; import org.jetbrains.annotations.Nullable; import org.json.simple.JSONObject; @@ -8,6 +9,8 @@ import org.json.simple.parser.ParseException; import java.io.IOException; public class JsonUserDetailsResolver implements UserDetailsResolver { + private final static Logging log = Logging.getLogging(JsonUserDetailsResolver.class); + @Override @Nullable public UserDetails apply(String authToken) { @@ -15,10 +18,10 @@ public class JsonUserDetailsResolver implements UserDetailsResolver { try { String responseString = HttpUtil.executeGet(HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); JSONObject json = HttpUtil.getJsonResponse(responseString); - System.out.println("String " + json); + log.info("String " + json); Object getUserByToken = json.get("getUserByToken"); if (getUserByToken instanceof String) { - System.out.println("AUTH FAILED: Result " + getUserByToken); + log.info("AUTH FAILED: Result " + getUserByToken); return null; } JSONObject details = (JSONObject) getUserByToken; @@ -26,10 +29,10 @@ public class JsonUserDetailsResolver implements UserDetailsResolver { String name = (String) details.get("NAME"); UserDetails result = new UserDetails(name, Integer.parseInt(id)); - System.out.println("AUTH SUCCESS " + result); + log.info("AUTH SUCCESS " + result); return result; } catch (IOException | ParseException e) { - System.out.println("JsonUserDetailsResolver error" + e); + log.error("JsonUserDetailsResolver error" + e); e.printStackTrace(); return null; } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java index 5cc695786b..38729ffc5e 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/TwoKindSemaphore.java @@ -1,9 +1,13 @@ package com.rusefi.server; +import com.devexperts.logging.Logging; + import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; public class TwoKindSemaphore { + private final static Logging log = Logging.getLogging(TwoKindSemaphore.class); + // we have to distinguish between long-term usage by application and short-term usage just to refresh gauges private final static int LONG_TERM = 2; private final static int SHORT_TERM = 1; @@ -11,6 +15,7 @@ public class TwoKindSemaphore { private UserDetails owner; public void releaseFromLongTermUsage() { + log.info("release " + owner); semaphore.release(LONG_TERM); // not atomic but that's fine, isUsed is the source of truth owner = null; From 7d495c4824613f04700de21b8c7e73c1e709c926 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 20:05:37 -0400 Subject: [PATCH 091/182] network connector to reconnect on proxy timeout --- java_console/io/src/main/java/com/rusefi/io/ByteReader.java | 4 ++-- .../io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java | 3 ++- .../main/java/com/rusefi/proxy/BaseBroadcastingThread.java | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index 83968f5d53..a72321b867 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -20,7 +20,7 @@ public interface ByteReader { Logging log = getLogging(ByteReader.class); - static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, TcpIoStream.DisconnectListener disconnectListener, AbstractIoStream ioStream) { + static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, AbstractIoStream ioStream) { /** * Threading of the whole input/output does not look healthy at all! * @@ -40,7 +40,7 @@ public interface ByteReader { listener.onDataArrived(Arrays.copyOf(inputBuffer, result)); } catch (IOException e) { log.error("TcpIoStream: End of connection " + e); - disconnectListener.onDisconnect(); + ioStream.close(); return; } } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 01bc61adbd..92e9bf8aaa 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -53,6 +53,7 @@ public class TcpIoStream extends AbstractIoStream { public void close() { super.close(); FileUtil.close(socket); + disconnectListener.onDisconnect(); } @Override @@ -78,7 +79,7 @@ public class TcpIoStream extends AbstractIoStream { @Override public void setInputListener(final DataListener listener) { - ByteReader.runReaderLoop(loggingPrefix, listener, input::read, disconnectListener, this); + ByteReader.runReaderLoop(loggingPrefix, listener, input::read, this); } public interface DisconnectListener { diff --git a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index 9a6c3189c4..e3f62d310b 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -59,6 +59,7 @@ public class BaseBroadcastingThread { } } catch (IOException e) { log.error("exiting thread " + e); + stream.close(); } }); } From 56d3c3a2ab2071a40e938ec70661a9d0d4fe30db Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 20:11:34 -0400 Subject: [PATCH 092/182] helping Android --- android/app/src/main/java/com/rusefi/app/AndroidSerial.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java index 9ceafd107f..9a2a164db2 100644 --- a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java +++ b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java @@ -12,7 +12,6 @@ import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.dfu.DfuLogic; import com.rusefi.io.ByteReader; import com.rusefi.io.serial.AbstractIoStream; -import com.rusefi.io.tcp.TcpIoStream; import java.io.IOException; import java.util.List; @@ -49,7 +48,7 @@ public class AndroidSerial extends AbstractIoStream { @Override public void setInputListener(DataListener listener) { ByteReader reader = buffer -> usbSerialPort.read(buffer, 5000); - ByteReader.runReaderLoop("", listener, reader, TcpIoStream.DisconnectListener.VOID, this); + ByteReader.runReaderLoop("", listener, reader, this); } @Override From dba2ff4a7eb2b49f816b763b9b8df925a50a7141 Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Sun, 26 Jul 2020 00:33:45 +0000 Subject: [PATCH 093/182] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 08016215fc..4d04e204fd 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200725 +#define VCS_DATE 20200726 From b657c637153a4898deb15e9952d74e6aa62ecd93 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 20:38:15 -0400 Subject: [PATCH 094/182] all this is too broken, need proper test for all this :( --- .../binaryprotocol/IncomingDataBuffer.java | 10 ++++++- .../src/main/java/com/rusefi/io/IoStream.java | 4 +-- .../rusefi/io/tcp/BinaryProtocolProxy.java | 28 +++++++++++-------- .../rusefi/io/tcp/BinaryProtocolServer.java | 1 + 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java index 784e8e02c9..4117492925 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -50,6 +50,10 @@ public class IncomingDataBuffer { return getPacket(msg, allowLongResponse, System.currentTimeMillis()); } + /** + * why does this method return NULL in case of timeout?! + * todo: there is a very similar BinaryProtocolServer#readPromisedBytes which throws exception in case of timeout + */ public byte[] getPacket(String msg, boolean allowLongResponse, long start) throws EOFException { boolean isTimeout = waitForBytes(msg + " header", start, 2); if (isTimeout) @@ -78,13 +82,17 @@ public class IncomingDataBuffer { log.debug(String.format("%x", actualCrc) + " vs " + String.format("%x", packetCrc)); return null; } - streamStats.onPacketArrived(); + onPacketArrived(); if (log.debugEnabled()) log.debug("packet " + Arrays.toString(packet) + ": crc OK"); return packet; } + public void onPacketArrived() { + streamStats.onPacketArrived(); + } + public void addData(byte[] freshData) { log.info("IncomingDataBuffer: " + freshData.length + " byte(s) arrived"); synchronized (cbb) { diff --git a/java_console/io/src/main/java/com/rusefi/io/IoStream.java b/java_console/io/src/main/java/com/rusefi/io/IoStream.java index 4ddfef2f99..d49bb6cd3b 100644 --- a/java_console/io/src/main/java/com/rusefi/io/IoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/IoStream.java @@ -1,7 +1,6 @@ package com.rusefi.io; import com.devexperts.logging.Logging; -import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.opensr5.io.WriteStream; import com.rusefi.binaryprotocol.BinaryProtocol; @@ -11,6 +10,7 @@ import com.rusefi.io.serial.AbstractIoStream; import com.rusefi.io.tcp.BinaryProtocolServer; import org.jetbrains.annotations.NotNull; +import java.io.Closeable; import java.io.EOFException; import java.io.IOException; @@ -23,7 +23,7 @@ import static com.devexperts.logging.Logging.getLogging; *

    * 5/11/2015. */ -public interface IoStream extends WriteStream { +public interface IoStream extends WriteStream, Closeable { Logging log = getLogging(IoStream.class); static String printHexBinary(byte[] data) { diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index d32f77e1b3..a38d188c11 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -5,6 +5,7 @@ import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.io.IoStream; +import org.jetbrains.annotations.NotNull; import java.io.ByteArrayInputStream; import java.io.DataInputStream; @@ -15,6 +16,7 @@ import java.util.function.Function; import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.BinaryProtocolCommands.COMMAND_PROTOCOL; import static com.rusefi.config.generated.Fields.TS_PROTOCOL; +import static com.rusefi.shared.FileUtil.close; public class BinaryProtocolProxy { private static final Logging log = getLogging(BinaryProtocolProxy.class); @@ -27,11 +29,13 @@ public class BinaryProtocolProxy { public static ServerHolder createProxy(IoStream targetEcuSocket, int serverProxyPort) { Function clientSocketRunnableFactory = clientSocket -> () -> { + TcpIoStream clientStream = null; try { - TcpIoStream clientStream = new TcpIoStream("[[proxy]] ", clientSocket); + clientStream = new TcpIoStream("[[proxy]] ", clientSocket); runProxy(targetEcuSocket, clientStream); } catch (IOException e) { log.error("BinaryProtocolProxy::run " + e); + close(clientStream); } }; return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, null); @@ -48,25 +52,25 @@ public class BinaryProtocolProxy { clientStream.write(TS_PROTOCOL.getBytes()); continue; } - proxyClientRequestToController(clientStream.getDataBuffer(), firstByte, targetEcu); + BinaryProtocolServer.Packet clientRequest = readClientRequest(clientStream.getDataBuffer(), firstByte); - proxyControllerResponseToClient(targetEcu, clientStream); + sendToTarget(targetEcu, clientRequest); + BinaryProtocolServer.Packet controllerResponse = targetEcu.readPacket(); + + log.info("Relaying controller response length=" + controllerResponse.getPacket().length); + clientStream.sendPacket(controllerResponse); } } - public static void proxyControllerResponseToClient(IoStream targetInputStream, IoStream clientOutputStream) throws IOException { - BinaryProtocolServer.Packet packet = targetInputStream.readPacket(); - - log.info("Relaying controller response length=" + packet.getPacket().length); - clientOutputStream.sendPacket(packet); - } - - private static void proxyClientRequestToController(IncomingDataBuffer in, byte firstByte, IoStream targetOutputStream) throws IOException { + @NotNull + private static BinaryProtocolServer.Packet readClientRequest(IncomingDataBuffer in, byte firstByte) throws IOException { byte secondByte = in.readByte(); int length = firstByte * 256 + secondByte; - BinaryProtocolServer.Packet packet = BinaryProtocolServer.readPromisedBytes(in, length); + return BinaryProtocolServer.readPromisedBytes(in, length); + } + private static void sendToTarget(IoStream targetOutputStream, BinaryProtocolServer.Packet packet) throws IOException { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(packet.getPacket())); byte command = (byte) dis.read(); diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 4052d95acd..ec1cf99f08 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -229,6 +229,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { int fromPacket = IoHelper.getCrc32(packet); if (crc != fromPacket) throw new IllegalStateException("CRC mismatch crc=" + Integer.toString(crc, 16) + " vs packet=" + Integer.toString(fromPacket, 16) + " len=" + packet.length + " data: " + IoStream.printHexBinary(packet)); + in.onPacketArrived(); return new Packet(packet, crc); } From c5c930878d22c673f8ddd295ea84e2160c53099b Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 20:44:33 -0400 Subject: [PATCH 095/182] all this is too broken, need proper test for all this :( --- .../src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index ec1cf99f08..3c1504db11 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -229,7 +229,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { int fromPacket = IoHelper.getCrc32(packet); if (crc != fromPacket) throw new IllegalStateException("CRC mismatch crc=" + Integer.toString(crc, 16) + " vs packet=" + Integer.toString(fromPacket, 16) + " len=" + packet.length + " data: " + IoStream.printHexBinary(packet)); - in.onPacketArrived(); +// todo?! in.onPacketArrived(); return new Packet(packet, crc); } From 61b5b515d3891b163e3aa0a894585c707510726e Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 21:48:17 -0400 Subject: [PATCH 096/182] two bytes of dead code --- .../java/com/rusefi/binaryprotocol/IncomingDataBuffer.java | 3 +-- .../src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java | 4 +--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java index 4117492925..a199d4526c 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -198,11 +198,10 @@ public class IncomingDataBuffer { return (short) swap16(getShort()); } - public int read(byte[] packet) throws EOFException { + public void read(byte[] packet) throws EOFException { boolean isTimeout = waitForBytes(loggingPrefix + "read", System.currentTimeMillis(), packet.length); if (isTimeout) throw new EOFException("Timeout while waiting " + packet.length); getData(packet); - return packet.length; } } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 3c1504db11..497b6599b2 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -222,9 +222,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { if (length <= 0) throw new IOException("Unexpected packed length " + length); byte[] packet = new byte[length]; - int size = in.read(packet); - if (size != packet.length) - throw new IllegalStateException(size + " promised but " + packet.length + " arrived"); + in.read(packet); int crc = in.readInt(); int fromPacket = IoHelper.getCrc32(packet); if (crc != fromPacket) From 60c327f11f2bd4882e23a14665cfa1bf06671c3e Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 21:53:09 -0400 Subject: [PATCH 097/182] better package name --- .../com/rusefi/{ => proxy/client}/LocalApplicationProxy.java | 2 +- .../io/src/main/java/com/rusefi/tools/online/ProxyClient.java | 2 +- .../ui/src/main/java/com/rusefi/tools/ConsoleTools.java | 1 + java_console/ui/src/test/java/com/rusefi/FullServerTest.java | 1 + java_console/ui/src/test/java/com/rusefi/ServerTest.java | 1 + .../src/main/java/com/rusefi/server/BackendLauncher.java | 2 +- .../ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java | 2 +- .../src/main/java/com/rusefi/ts_plugin/RemoteTabController.java | 2 +- 8 files changed, 8 insertions(+), 5 deletions(-) rename java_console/io/src/main/java/com/rusefi/{ => proxy/client}/LocalApplicationProxy.java (99%) diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java similarity index 99% rename from java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java rename to java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index d282fb1daa..a1f6b0a9a4 100644 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -1,4 +1,4 @@ -package com.rusefi; +package com.rusefi.proxy.client; import com.devexperts.logging.Logging; import com.rusefi.io.IoStream; diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java index 7b87cc0b5f..1c630a0333 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java @@ -1,6 +1,6 @@ package com.rusefi.tools.online; -import com.rusefi.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.server.ControllerInfo; import com.rusefi.server.UserDetails; import org.jetbrains.annotations.NotNull; diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 8730561761..8953264328 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -21,6 +21,7 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.serial.SerialIoStreamJSerialComm; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.maintenance.ExecHelper; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.tools.online.Online; import com.rusefi.tune.xml.Msq; import com.rusefi.ui.AuthTokenPanel; diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 644ecfd7f1..34bf3df578 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -8,6 +8,7 @@ import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.server.*; import org.junit.Before; import org.junit.Test; diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index 8b9be40d63..cd4b8f290f 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -4,6 +4,7 @@ import com.opensr5.Logger; import com.rusefi.config.generated.Fields; import com.rusefi.io.IoStream; import com.rusefi.io.commands.HelloCommand; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.server.*; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java index 30b1cd0e6d..36e9958111 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java @@ -1,6 +1,6 @@ package com.rusefi.server; -import com.rusefi.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index bdd249c368..9af4c21a83 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -1,11 +1,11 @@ package com.rusefi.ts_plugin; -import com.rusefi.LocalApplicationProxy; import com.rusefi.NamedThreadFactory; import com.rusefi.SignatureHelper; import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.io.tcp.ServerHolder; import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.ControllerInfo; import com.rusefi.server.SessionDetails; diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java index b623c22137..cd89ea684d 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTabController.java @@ -1,6 +1,6 @@ package com.rusefi.ts_plugin; -import com.rusefi.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxy; public enum RemoteTabController { /** From a7961de5cd72c1c4132450322ed9d9ab98873858 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 22:22:40 -0400 Subject: [PATCH 098/182] time for more tests --- .../io/src/main/java/com/rusefi/Listener.java | 5 ++++ .../rusefi/io/tcp/BinaryProtocolProxy.java | 5 ++-- .../rusefi/io/tcp/BinaryProtocolServer.java | 19 +++++--------- .../java/com/rusefi/io/tcp/ServerHolder.java | 15 ----------- .../rusefi/io/tcp/ServerSocketReference.java | 25 +++++++++++++++++++ .../proxy/client/LocalApplicationProxy.java | 13 +++++----- .../client/LocalApplicationProxyContext.java | 7 ++++++ .../LocalApplicationProxyContextImpl.java | 12 +++++++++ .../src/test/java/com/rusefi/TestHelper.java | 17 +++---------- .../client/LocalApplicationProxyTest.java | 10 ++++++++ .../java/com/rusefi/BackendTestHelper.java | 23 +++++++++++++++++ .../test/java/com/rusefi/FullServerTest.java | 7 +++--- .../src/test/java/com/rusefi/ServerTest.java | 8 +++--- .../com/rusefi/server/SessionDetailsTest.java | 8 +++--- .../java/com/rusefi/ts_plugin/RemoteTab.java | 10 +++++--- 15 files changed, 120 insertions(+), 64 deletions(-) delete mode 100644 java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java create mode 100644 java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketReference.java create mode 100644 java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java create mode 100644 java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java rename java_console/{ui => io}/src/test/java/com/rusefi/TestHelper.java (79%) create mode 100644 java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java create mode 100644 java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java diff --git a/java_console/io/src/main/java/com/rusefi/Listener.java b/java_console/io/src/main/java/com/rusefi/Listener.java index 3722c6e526..064e0f8f85 100644 --- a/java_console/io/src/main/java/com/rusefi/Listener.java +++ b/java_console/io/src/main/java/com/rusefi/Listener.java @@ -2,4 +2,9 @@ package com.rusefi; public interface Listener { void onResult(T parameter); + + static Listener empty() { + return parameter -> { + }; + } } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index a38d188c11..df00562939 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -1,6 +1,7 @@ package com.rusefi.io.tcp; import com.devexperts.logging.Logging; +import com.rusefi.Listener; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.binaryprotocol.IncomingDataBuffer; @@ -27,7 +28,7 @@ public class BinaryProtocolProxy { */ public static final int USER_IO_TIMEOUT = 10 * Timeouts.MINUTE; - public static ServerHolder createProxy(IoStream targetEcuSocket, int serverProxyPort) { + public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort) { Function clientSocketRunnableFactory = clientSocket -> () -> { TcpIoStream clientStream = null; try { @@ -38,7 +39,7 @@ public class BinaryProtocolProxy { close(clientStream); } }; - return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, null); + return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Listener.empty()); } public static void runProxy(IoStream targetEcu, IoStream clientStream) throws IOException { diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 497b6599b2..b195bacebf 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -11,7 +11,6 @@ import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; import com.rusefi.io.commands.HelloCommand; import com.rusefi.server.rusEFISSLContext; -import com.rusefi.shared.FileUtil; import java.io.*; import java.net.ServerSocket; @@ -54,7 +53,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { }; public void start(LinkManager linkManager) { - start(linkManager, DEFAULT_PROXY_PORT, null); + start(linkManager, DEFAULT_PROXY_PORT, Listener.empty()); } public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback) { @@ -80,23 +79,17 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { * @param serverSocketCreationCallback this callback is invoked once we open the server socket * @return */ - public static ServerHolder tcpServerSocket(int port, String threadName, Function socketRunnableFactory, Listener serverSocketCreationCallback) { + public static ServerSocketReference tcpServerSocket(int port, String threadName, Function socketRunnableFactory, Listener serverSocketCreationCallback) { return tcpServerSocket(socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); } - public static ServerHolder tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { + public static ServerSocketReference tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { + Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback"); ServerSocket serverSocket = nonSecureSocketFunction.apply(port); - ServerHolder holder = new ServerHolder() { - @Override - public void close() { - super.close(); - FileUtil.close(serverSocket); - } - }; + ServerSocketReference holder = new ServerSocketReference(serverSocket); - if (serverSocketCreationCallback != null) - serverSocketCreationCallback.onResult(null); + serverSocketCreationCallback.onResult(null); Runnable runnable = () -> { while (!holder.isClosed()) { // Wait for a connection diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java deleted file mode 100644 index 134ff36247..0000000000 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/ServerHolder.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.rusefi.io.tcp; - -import java.io.Closeable; - -public class ServerHolder implements Closeable { - private boolean isClosed; - - public void close() { - isClosed = true; - } - - public boolean isClosed() { - return isClosed; - } -} diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketReference.java b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketReference.java new file mode 100644 index 0000000000..caac6887f8 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketReference.java @@ -0,0 +1,25 @@ +package com.rusefi.io.tcp; + +import com.rusefi.shared.FileUtil; + +import java.io.Closeable; +import java.net.ServerSocket; + +public class ServerSocketReference implements Closeable { + private final ServerSocket serverSocket; + private boolean isClosed; + + public ServerSocketReference(ServerSocket serverSocket) { + this.serverSocket = serverSocket; + } + + @Override + public void close() { + isClosed = true; + FileUtil.close(serverSocket); + } + + public boolean isClosed() { + return isClosed; + } +} diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index a1f6b0a9a4..dd3052ee65 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -4,7 +4,7 @@ import com.devexperts.logging.Logging; import com.rusefi.io.IoStream; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; -import com.rusefi.io.tcp.ServerHolder; +import com.rusefi.io.tcp.ServerSocketReference; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.rusEFISSLContext; @@ -20,10 +20,10 @@ public class LocalApplicationProxy implements Closeable { private static final Logging log = getLogging(LocalApplicationProxy.class); public static final int SERVER_PORT_FOR_APPLICATIONS = HttpUtil.getIntProperty("applications.port", 8002); private final ApplicationRequest applicationRequest; - private final ServerHolder serverHolder; + private final ServerSocketReference serverHolder; private final IoStream authenticatorToProxyStream; - public LocalApplicationProxy(ApplicationRequest applicationRequest, ServerHolder serverHolder, IoStream authenticatorToProxyStream) { + public LocalApplicationProxy(ApplicationRequest applicationRequest, ServerSocketReference serverHolder, IoStream authenticatorToProxyStream) { this.applicationRequest = applicationRequest; this.serverHolder = serverHolder; this.authenticatorToProxyStream = authenticatorToProxyStream; @@ -34,6 +34,7 @@ public class LocalApplicationProxy implements Closeable { } /** + * @param context * @param serverPortForRemoteUsers port on which rusEFI proxy accepts authenticator connections * @param applicationRequest remote session we want to connect to * @param localApplicationPort local port we would bind for TunerStudio to connect to @@ -41,8 +42,8 @@ public class LocalApplicationProxy implements Closeable { * @param disconnectListener * @param connectionListener */ - public static ServerHolder startAndRun(int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { - String version = HttpUtil.executeGet(ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); + public static ServerSocketReference startAndRun(LocalApplicationProxyContext context, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { + String version = context.executeGet(ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); log.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); @@ -50,7 +51,7 @@ public class LocalApplicationProxy implements Closeable { IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers), disconnectListener); LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); - ServerHolder serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, localApplicationPort); + ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, localApplicationPort); LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest, serverHolder, authenticatorToProxyStream); connectionListener.onConnected(localApplicationProxy); return serverHolder; diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java new file mode 100644 index 0000000000..b3b75aec18 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java @@ -0,0 +1,7 @@ +package com.rusefi.proxy.client; + +import java.io.IOException; + +public interface LocalApplicationProxyContext { + String executeGet(String url) throws IOException; +} diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java new file mode 100644 index 0000000000..c4a3f35d4c --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java @@ -0,0 +1,12 @@ +package com.rusefi.proxy.client; + +import com.rusefi.tools.online.HttpUtil; + +import java.io.IOException; + +public class LocalApplicationProxyContextImpl implements LocalApplicationProxyContext { + @Override + public String executeGet(String url) throws IOException { + return HttpUtil.executeGet(url); + } +} diff --git a/java_console/ui/src/test/java/com/rusefi/TestHelper.java b/java_console/io/src/test/java/com/rusefi/TestHelper.java similarity index 79% rename from java_console/ui/src/test/java/com/rusefi/TestHelper.java rename to java_console/io/src/test/java/com/rusefi/TestHelper.java index d974b6fb19..6c4201b1f6 100644 --- a/java_console/ui/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/io/src/test/java/com/rusefi/TestHelper.java @@ -11,7 +11,7 @@ import com.rusefi.io.LinkConnector; import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; -import com.rusefi.server.Backend; +import com.rusefi.server.ControllerInfo; import com.rusefi.server.rusEFISSLContext; import com.rusefi.tune.xml.Constant; import org.jetbrains.annotations.NotNull; @@ -26,6 +26,9 @@ import static org.junit.Assert.assertTrue; public class TestHelper { public static final String LOCALHOST = "localhost"; + public static final String TEST_SIGNATURE_1 = "rusEFI 2020.07.06.frankenso_na6.2468827536"; + public static final String TEST_SIGNATURE_2 = "rusEFI 2020.07.11.proteus_f4.1986715563"; + public static final ControllerInfo CONTROLLER_INFO = new ControllerInfo("name", "make", "code", Fields.TS_SIGNATURE); @NotNull public static ScalarIniField createIniField(Field field) { @@ -81,16 +84,4 @@ public class TestHelper { assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); return server; } - - public static void runApplicationConnectorBlocking(Backend backend, int serverPortForRemoteUsers) throws InterruptedException { - CountDownLatch applicationServerCreated = new CountDownLatch(1); - backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown()); - assertTrue(applicationServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); - } - - public static void runControllerConnectorBlocking(Backend backend, int serverPortForControllers) throws InterruptedException { - CountDownLatch controllerServerCreated = new CountDownLatch(1); - backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); - assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); - } } diff --git a/java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java new file mode 100644 index 0000000000..66cc15bead --- /dev/null +++ b/java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -0,0 +1,10 @@ +package com.rusefi.proxy.client; + +import org.junit.Test; + +public class LocalApplicationProxyTest { + @Test + public void testLocalApplication() { + + } +} diff --git a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java new file mode 100644 index 0000000000..2b39602358 --- /dev/null +++ b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java @@ -0,0 +1,23 @@ +package com.rusefi; + +import com.rusefi.server.Backend; + +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import static com.rusefi.Timeouts.READ_IMAGE_TIMEOUT; +import static org.junit.Assert.assertTrue; + +public class BackendTestHelper { + public static void runApplicationConnectorBlocking(Backend backend, int serverPortForRemoteUsers) throws InterruptedException { + CountDownLatch applicationServerCreated = new CountDownLatch(1); + backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown()); + assertTrue(applicationServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + } + + public static void runControllerConnectorBlocking(Backend backend, int serverPortForControllers) throws InterruptedException { + CountDownLatch controllerServerCreated = new CountDownLatch(1); + backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); + assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + } +} diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 34bf3df578..1b86ecd945 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -9,6 +9,7 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; import com.rusefi.proxy.client.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxyContextImpl; import com.rusefi.server.*; import org.junit.Before; import org.junit.Test; @@ -63,8 +64,8 @@ public class FullServerTest { // first start backend server - TestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); - TestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); + BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); // create virtual controller to which "rusEFI network connector" connects to int controllerPort = 7002; @@ -83,7 +84,7 @@ public class FullServerTest { // start authenticator int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio - LocalApplicationProxy.startAndRun(serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, + LocalApplicationProxy.startAndRun(new LocalApplicationProxyContextImpl(), serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index cd4b8f290f..84e4ec5372 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -80,8 +80,8 @@ public class ServerTest { assertEquals(0, backend.getControllersCount()); - new MockRusEfiDevice(MockRusEfiDevice.TEST_TOKEN_1, "rusEFI 2020.07.06.frankenso_na6.2468827536", logger).connect(serverPortForControllers); - new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", "rusEFI 2020.07.11.proteus_f4.1986715563", logger).connect(serverPortForControllers); + new MockRusEfiDevice(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1, logger).connect(serverPortForControllers); + new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2, logger).connect(serverPortForControllers); assertTrue("onConnected", onConnected.await(30, TimeUnit.SECONDS)); @@ -152,7 +152,7 @@ covered by FullServerTest } }) { - TestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); // start authenticator IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); @@ -183,7 +183,7 @@ covered by FullServerTest } }) { - TestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); SessionDetails sessionDetails = MockRusEfiDevice.createTestSession(MockRusEfiDevice.TEST_TOKEN_1, Fields.TS_SIGNATURE); ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(MockRusEfiDevice.TEST_TOKEN_1)); diff --git a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java index 5692c71883..0149866e01 100644 --- a/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java +++ b/java_tools/proxy_server/src/test/java/com/rusefi/server/SessionDetailsTest.java @@ -1,14 +1,15 @@ package com.rusefi.server; +import com.rusefi.TestHelper; import org.junit.Test; import static org.junit.Assert.assertEquals; public class SessionDetailsTest { + @Test public void testSerialization() { - ControllerInfo ci = new ControllerInfo("name", "make", "code", "sign"); - SessionDetails sd = new SessionDetails(ci, "auth", 123); + SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123); String json = sd.toJson(); SessionDetails fromJson = SessionDetails.valueOf(json); @@ -17,8 +18,7 @@ public class SessionDetailsTest { @Test public void testApplicationRequest() { - ControllerInfo ci = new ControllerInfo("name", "make", "code", "sign"); - SessionDetails sd = new SessionDetails(ci, "auth", 123); + SessionDetails sd = new SessionDetails(TestHelper.CONTROLLER_INFO, "auth", 123); ApplicationRequest ar = new ApplicationRequest(sd, new UserDetails("", 321)); String json = ar.toJson(); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 9af4c21a83..b5d94fea53 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -3,9 +3,10 @@ package com.rusefi.ts_plugin; import com.rusefi.NamedThreadFactory; import com.rusefi.SignatureHelper; import com.rusefi.autoupdate.AutoupdateUtil; -import com.rusefi.io.tcp.ServerHolder; +import com.rusefi.io.tcp.ServerSocketReference; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.client.LocalApplicationProxy; +import com.rusefi.proxy.client.LocalApplicationProxyContextImpl; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.ControllerInfo; import com.rusefi.server.SessionDetails; @@ -211,17 +212,18 @@ public class RemoteTab { ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails()); try { - AtomicReference serverHolderAtomicReference = new AtomicReference<>(); + AtomicReference serverHolderAtomicReference = new AtomicReference<>(); TcpIoStream.DisconnectListener disconnectListener = () -> SwingUtilities.invokeLater(() -> { setStatus("Disconnected"); RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); - ServerHolder serverHolder = serverHolderAtomicReference.get(); + ServerSocketReference serverHolder = serverHolderAtomicReference.get(); if (serverHolder != null) serverHolder.close(); }); - ServerHolder serverHolder = LocalApplicationProxy.startAndRun( + ServerSocketReference serverHolder = LocalApplicationProxy.startAndRun( + new LocalApplicationProxyContextImpl(), LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, applicationRequest, Integer.parseInt(getLocalPort()), From 240b64759577aebb6712cac1798697f7fa1310e1 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 22:35:10 -0400 Subject: [PATCH 099/182] time for more tests --- .../proxy/client/LocalApplicationProxy.java | 8 ++--- .../client/LocalApplicationProxyContext.java | 10 +++++++ .../LocalApplicationProxyContextImpl.java | 7 ++++- .../test/java/com/rusefi/FullServerTest.java | 29 +++++++++++++++---- .../java/com/rusefi/ts_plugin/RemoteTab.java | 10 +++++-- 5 files changed, 49 insertions(+), 15 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index dd3052ee65..2a030986b5 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -35,23 +35,21 @@ public class LocalApplicationProxy implements Closeable { /** * @param context - * @param serverPortForRemoteUsers port on which rusEFI proxy accepts authenticator connections * @param applicationRequest remote session we want to connect to - * @param localApplicationPort local port we would bind for TunerStudio to connect to * @param jsonHttpPort * @param disconnectListener * @param connectionListener */ - public static ServerSocketReference startAndRun(LocalApplicationProxyContext context, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { + public static ServerSocketReference startAndRun(LocalApplicationProxyContext context, ApplicationRequest applicationRequest, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener, ConnectionListener connectionListener) throws IOException { String version = context.executeGet(ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); log.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); - IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers), disconnectListener); + IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, context.serverPortForRemoteApplications()), disconnectListener); LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); - ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, localApplicationPort); + ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, context.authenticatorPort()); LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest, serverHolder, authenticatorToProxyStream); connectionListener.onConnected(localApplicationProxy); return serverHolder; diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java index b3b75aec18..a2249a95b0 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java @@ -4,4 +4,14 @@ import java.io.IOException; public interface LocalApplicationProxyContext { String executeGet(String url) throws IOException; + + /** + * port on which rusEFI proxy accepts authenticator connections + */ + int serverPortForRemoteApplications(); + + /** + * local port on which authenticator accepts connections from Tuner Studio + */ + int authenticatorPort(); } diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java index c4a3f35d4c..7cf0862121 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContextImpl.java @@ -4,9 +4,14 @@ import com.rusefi.tools.online.HttpUtil; import java.io.IOException; -public class LocalApplicationProxyContextImpl implements LocalApplicationProxyContext { +public abstract class LocalApplicationProxyContextImpl implements LocalApplicationProxyContext { @Override public String executeGet(String url) throws IOException { return HttpUtil.executeGet(url); } + + @Override + public int serverPortForRemoteApplications() { + return LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS; + } } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 1b86ecd945..bc80454fb0 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -9,8 +9,9 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; import com.rusefi.proxy.client.LocalApplicationProxy; -import com.rusefi.proxy.client.LocalApplicationProxyContextImpl; +import com.rusefi.proxy.client.LocalApplicationProxyContext; import com.rusefi.server.*; +import com.rusefi.tools.online.HttpUtil; import org.junit.Before; import org.junit.Test; @@ -40,6 +41,24 @@ public class FullServerTest { int value = 241; int userId = 7; + + LocalApplicationProxyContext localApplicationProxyContext = new LocalApplicationProxyContext() { + @Override + public String executeGet(String url) throws IOException { + return HttpUtil.executeGet(url); + } + + @Override + public int serverPortForRemoteApplications() { + return 7003; + } + + @Override + public int authenticatorPort() { + return 7004; + } + }; + CountDownLatch controllerRegistered = new CountDownLatch(1); CountDownLatch applicationClosed = new CountDownLatch(1); @@ -60,12 +79,11 @@ public class FullServerTest { } }; LinkManager clientManager = new LinkManager()) { int serverPortForControllers = 7001; - int serverPortForRemoteUsers = 7003; // first start backend server BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); - BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); + BackendTestHelper.runApplicationConnectorBlocking(backend, localApplicationProxyContext.serverPortForRemoteApplications()); // create virtual controller to which "rusEFI network connector" connects to int controllerPort = 7002; @@ -83,8 +101,7 @@ public class FullServerTest { ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(MockRusEfiDevice.TEST_TOKEN_1)); // start authenticator - int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio - LocalApplicationProxy.startAndRun(new LocalApplicationProxyContextImpl(), serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, + LocalApplicationProxy.startAndRun(localApplicationProxyContext, applicationRequest, httpPort, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); @@ -92,7 +109,7 @@ public class FullServerTest { CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); // connect to proxy and read virtual controller through it - clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + authenticatorPort, new ConnectionStateListener() { + clientManager.startAndConnect(TestHelper.LOCALHOST + ":" + localApplicationProxyContext.authenticatorPort(), new ConnectionStateListener() { @Override public void onConnectionEstablished() { connectionEstablishedCountDownLatch.countDown(); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index b5d94fea53..d56e78b639 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -222,11 +222,15 @@ public class RemoteTab { serverHolder.close(); }); + LocalApplicationProxyContextImpl context = new LocalApplicationProxyContextImpl() { + @Override + public int authenticatorPort() { + return Integer.parseInt(getLocalPort()); + } + }; ServerSocketReference serverHolder = LocalApplicationProxy.startAndRun( - new LocalApplicationProxyContextImpl(), - LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, + context, applicationRequest, - Integer.parseInt(getLocalPort()), HttpUtil.PROXY_JSON_API_HTTP_PORT, disconnectListener, connectionListener); serverHolderAtomicReference.set(serverHolder); } catch (IOException e) { From 8ce0974b2768c647afc8d3fe45b83a8f1b783d81 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 25 Jul 2020 23:03:40 -0400 Subject: [PATCH 100/182] time for more tests --- .../rusefi/io/tcp/BinaryProtocolServer.java | 11 ++- .../proxy/client/LocalApplicationProxy.java | 3 +- .../src/test/java/com/rusefi/TestHelper.java | 8 ++ .../client/LocalApplicationProxyTest.java | 10 --- .../java/com/rusefi/tools/ConsoleTools.java | 2 +- .../java/com/rusefi/BackendTestHelper.java | 19 +++++ .../test/java/com/rusefi/FullServerTest.java | 9 +-- .../java/com/rusefi/MockRusEfiDevice.java | 17 +--- .../src/test/java/com/rusefi/ServerTest.java | 30 +++---- .../client/LocalApplicationProxyTest.java | 78 +++++++++++++++++++ 10 files changed, 133 insertions(+), 54 deletions(-) delete mode 100644 java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java create mode 100644 java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index b195bacebf..f615f7cf0a 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -4,6 +4,7 @@ import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; import com.opensr5.Logger; import com.rusefi.Listener; +import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.*; import com.rusefi.config.generated.Fields; @@ -16,6 +17,8 @@ import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; @@ -52,6 +55,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } }; + private static ConcurrentHashMap THREAD_FACTORIES_BY_NAME = new ConcurrentHashMap<>(); + public void start(LinkManager linkManager) { start(linkManager, DEFAULT_PROXY_PORT, Listener.empty()); } @@ -84,6 +89,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } public static ServerSocketReference tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { + ThreadFactory threadFactory = THREAD_FACTORIES_BY_NAME.computeIfAbsent(threadName, NamedThreadFactory::new); + Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback"); ServerSocket serverSocket = nonSecureSocketFunction.apply(port); @@ -101,10 +108,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { continue; } log.info("Binary protocol proxy port connection"); - new Thread(clientSocketRunnableFactory.apply(clientSocket), "proxy connection").start(); + threadFactory.newThread(clientSocketRunnableFactory.apply(clientSocket)).start(); } }; - new Thread(runnable, threadName).start(); + threadFactory.newThread(runnable).start(); return holder; } diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index 2a030986b5..fc964717cd 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -61,7 +61,8 @@ public class LocalApplicationProxy implements Closeable { new HelloCommand(applicationRequest.toJson()).handle(authenticatorToProxyStream); } - public static void start(String[] strings) { + public static void start() { + throw new UnsupportedOperationException("TODO"); } @Override diff --git a/java_console/io/src/test/java/com/rusefi/TestHelper.java b/java_console/io/src/test/java/com/rusefi/TestHelper.java index 6c4201b1f6..160302dca6 100644 --- a/java_console/io/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/io/src/test/java/com/rusefi/TestHelper.java @@ -12,6 +12,7 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.ControllerInfo; +import com.rusefi.server.SessionDetails; import com.rusefi.server.rusEFISSLContext; import com.rusefi.tune.xml.Constant; import org.jetbrains.annotations.NotNull; @@ -29,6 +30,7 @@ public class TestHelper { public static final String TEST_SIGNATURE_1 = "rusEFI 2020.07.06.frankenso_na6.2468827536"; public static final String TEST_SIGNATURE_2 = "rusEFI 2020.07.11.proteus_f4.1986715563"; public static final ControllerInfo CONTROLLER_INFO = new ControllerInfo("name", "make", "code", Fields.TS_SIGNATURE); + public static final String TEST_TOKEN_1 = "00000000-1234-1234-1234-123456789012"; @NotNull public static ScalarIniField createIniField(Field field) { @@ -84,4 +86,10 @@ public class TestHelper { assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); return server; } + + public static SessionDetails createTestSession(String authToken, String signature) { + ControllerInfo ci = new ControllerInfo("vehicle", "make", "code", signature); + + return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode()); + } } diff --git a/java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java deleted file mode 100644 index 66cc15bead..0000000000 --- a/java_console/io/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.rusefi.proxy.client; - -import org.junit.Test; - -public class LocalApplicationProxyTest { - @Test - public void testLocalApplication() { - - } -} diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 8953264328..742058828a 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -61,7 +61,7 @@ public class ConsoleTools { registerTool("compile_fsio_file", ConsoleTools::runCompileTool, "Convert all lines from a file to RPN form."); registerTool("network_connector", strings -> NetworkConnectorStartup.start(), "Connect your rusEFI ECU to rusEFI Online"); - registerTool("network_authenticator", LocalApplicationProxy::start, "rusEFI Online Authenticator"); + registerTool("network_authenticator", strings -> LocalApplicationProxy.start(), "rusEFI Online Authenticator"); registerTool("print_auth_token", args -> printAuthToken(), "Print current rusEFI Online authentication token."); registerTool(SET_AUTH_TOKEN, ConsoleTools::setAuthToken, "Set rusEFI authentication token."); diff --git a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java index 2b39602358..dddad0ce29 100644 --- a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java +++ b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java @@ -1,7 +1,14 @@ package com.rusefi; +import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.server.Backend; +import com.rusefi.server.UserDetails; +import com.rusefi.server.UserDetailsResolver; +import com.rusefi.server.rusEFISSLContext; +import com.rusefi.tools.online.HttpUtil; +import org.jetbrains.annotations.NotNull; +import java.net.MalformedURLException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -20,4 +27,16 @@ public class BackendTestHelper { backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); } + + @NotNull + public static UserDetailsResolver createTestUserResolver() { + return authToken -> new UserDetails(authToken.substring(0, 5), authToken.charAt(6)); + } + + public static void commonServerTest() throws MalformedURLException { + HttpUtil.RUSEFI_PROXY_HOSTNAME = TestHelper.LOCALHOST; + BinaryProtocol.DISABLE_LOCAL_CACHE = true; + + rusEFISSLContext.init("certificate/test_pkcs12.jks", "password"); + } } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index bc80454fb0..5e7e58f9fd 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -30,9 +30,8 @@ import static org.junit.Assert.assertTrue; public class FullServerTest { @Before - public void setTestCertificate() throws MalformedURLException { - ServerTest.commonServerTest(); - BinaryProtocol.DISABLE_LOCAL_CACHE = true; + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); } @Test @@ -92,13 +91,13 @@ public class FullServerTest { // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, MockRusEfiDevice.TEST_TOKEN_3, networkConnectorResult.getOneTimeToken()); - ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(MockRusEfiDevice.TEST_TOKEN_1)); + ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(TestHelper.TEST_TOKEN_1)); // start authenticator LocalApplicationProxy.startAndRun(localApplicationProxyContext, applicationRequest, httpPort, diff --git a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java index 18668b34a4..db1e9f2df3 100644 --- a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java +++ b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java @@ -1,11 +1,9 @@ package com.rusefi; -import com.opensr5.Logger; import com.rusefi.config.generated.Fields; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.BaseBroadcastingThread; -import com.rusefi.server.ControllerInfo; import com.rusefi.server.SessionDetails; import com.rusefi.server.rusEFISSLContext; @@ -15,20 +13,11 @@ import java.net.Socket; import static com.rusefi.TestHelper.LOCALHOST; public class MockRusEfiDevice { - public static final String TEST_TOKEN_1 = "00000000-1234-1234-1234-123456789012"; public static final String TEST_TOKEN_3 = "33333333-3333-1234-1234-123456789012"; - private SessionDetails sessionDetails; - private final Logger logger; + private final SessionDetails sessionDetails; - public MockRusEfiDevice(String authToken, String signature, Logger logger) { - sessionDetails = createTestSession(authToken, signature); - this.logger = logger; - } - - public static SessionDetails createTestSession(String authToken, String signature) { - ControllerInfo ci = new ControllerInfo("vehicle", "make", "code", signature); - - return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode()); + public MockRusEfiDevice(String authToken, String signature) { + sessionDetails = TestHelper.createTestSession(authToken, signature); } public void connect(int serverPort) throws IOException { diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index 84e4ec5372..396e6afcb2 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -9,7 +9,6 @@ import com.rusefi.server.*; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; import com.rusefi.tools.online.PublicSession; -import org.jetbrains.annotations.NotNull; import org.junit.Before; import org.junit.Test; @@ -32,14 +31,8 @@ public class ServerTest { private final static Logger logger = Logger.CONSOLE; @Before - public void setTestCertificate() throws MalformedURLException { - commonServerTest(); - } - - static void commonServerTest() throws MalformedURLException { - HttpUtil.RUSEFI_PROXY_HOSTNAME = TestHelper.LOCALHOST; - - rusEFISSLContext.init("certificate/test_pkcs12.jks", "password"); + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); } @Test @@ -54,7 +47,7 @@ public class ServerTest { CountDownLatch allConnected = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort) { + try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { @Override public void register(ControllerConnectionState clientConnectionState) { super.register(clientConnectionState); @@ -80,8 +73,8 @@ public class ServerTest { assertEquals(0, backend.getControllersCount()); - new MockRusEfiDevice(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1, logger).connect(serverPortForControllers); - new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2, logger).connect(serverPortForControllers); + new MockRusEfiDevice(TestHelper.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1).connect(serverPortForControllers); + new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2).connect(serverPortForControllers); assertTrue("onConnected", onConnected.await(30, TimeUnit.SECONDS)); @@ -144,7 +137,7 @@ covered by FullServerTest int httpPort = 8001; int serverPortForRemoteUsers = 6801; CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort) { + try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { @Override protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) { super.onDisconnectApplication(applicationConnectionState); @@ -162,11 +155,6 @@ covered by FullServerTest } } - @NotNull - private static UserDetailsResolver createTestUserResolver() { - return authToken -> new UserDetails(authToken.substring(0, 5), authToken.charAt(6)); - } - @Test public void testAuthenticatorRequestUnknownSession() throws InterruptedException, IOException { int serverPortForRemoteUsers = 6800; @@ -175,7 +163,7 @@ covered by FullServerTest CountDownLatch disconnectedCountDownLatch = new CountDownLatch(1); - try (Backend backend = new Backend(createTestUserResolver(), httpPort) { + try (Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { @Override protected void onDisconnectApplication(ApplicationConnectionState applicationConnectionState) { super.onDisconnectApplication(applicationConnectionState); @@ -185,8 +173,8 @@ covered by FullServerTest BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); - SessionDetails sessionDetails = MockRusEfiDevice.createTestSession(MockRusEfiDevice.TEST_TOKEN_1, Fields.TS_SIGNATURE); - ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(MockRusEfiDevice.TEST_TOKEN_1)); + SessionDetails sessionDetails = TestHelper.createTestSession(TestHelper.TEST_TOKEN_1, Fields.TS_SIGNATURE); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, BackendTestHelper.createTestUserResolver().apply(TestHelper.TEST_TOKEN_1)); // start authenticator IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java new file mode 100644 index 0000000000..b3743bd020 --- /dev/null +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -0,0 +1,78 @@ +package com.rusefi.proxy.client; + +import com.rusefi.BackendTestHelper; +import com.rusefi.TestHelper; +import com.rusefi.config.generated.Fields; +import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.ServerSocketReference; +import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.server.ApplicationRequest; +import com.rusefi.server.SessionDetails; +import com.rusefi.tools.online.ProxyClient; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.Socket; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; + +import static com.rusefi.BackendTestHelper.createTestUserResolver; +import static com.rusefi.TestHelper.TEST_TOKEN_1; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class LocalApplicationProxyTest { + @Before + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); + } + + @Test + public void testLocalApplication() throws IOException, InterruptedException { + LocalApplicationProxyContext context = new LocalApplicationProxyContext() { + @Override + public String executeGet(String url) { + if (url.endsWith(ProxyClient.VERSION_PATH)) + return ProxyClient.BACKEND_VERSION; + throw new UnsupportedOperationException(url); + } + + @Override + public int serverPortForRemoteApplications() { + return 5999; + } + + @Override + public int authenticatorPort() { + return 5998; + } + }; + + CountDownLatch backendCreated = new CountDownLatch(1); + ServerSocketReference mockBackend = BinaryProtocolServer.tcpServerSocket(context.serverPortForRemoteApplications(), "localAppTest", new Function() { + @Override + public Runnable apply(Socket socket) { + return new Runnable() { + @Override + public void run() { + + } + }; + } + }, parameter -> backendCreated.countDown()); + assertTrue(backendCreated.await(30, TimeUnit.SECONDS)); + + + SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); + + + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); + + + mockBackend.close(); + } +} From 267f2de0ab4612f82f5dc1ecea08800bc01dc642 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 00:16:43 -0400 Subject: [PATCH 101/182] time for more tests --- .../rusefi/io/commands/GetOutputsCommand.java | 10 ++ .../rusefi/io/tcp/BinaryProtocolProxy.java | 23 +++- .../rusefi/io/tcp/BinaryProtocolServer.java | 2 +- .../proxy/client/LocalApplicationProxy.java | 34 ++++- .../client/LocalApplicationProxyContext.java | 10 ++ .../java/com/rusefi/MockRusEfiDevice.java | 6 +- .../io/TcpCommunicationIntegrationTest.java | 3 +- .../client/LocalApplicationProxyTest.java | 127 +++++++++++++----- .../main/java/com/rusefi/server/Backend.java | 3 +- 9 files changed, 172 insertions(+), 46 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java b/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java index fe2a52da3e..ba47d12e52 100644 --- a/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java +++ b/java_console/io/src/main/java/com/rusefi/io/commands/GetOutputsCommand.java @@ -1,6 +1,10 @@ package com.rusefi.io.commands; import com.rusefi.config.generated.Fields; +import com.rusefi.io.IoStream; +import com.rusefi.io.tcp.BinaryProtocolServer; + +import java.io.IOException; import static com.rusefi.binaryprotocol.IoHelper.putShort; import static com.rusefi.binaryprotocol.IoHelper.swap16; @@ -13,4 +17,10 @@ public class GetOutputsCommand { putShort(packet, 3, swap16(Fields.TS_OUTPUT_SIZE)); return packet; } + + public static void sendOutput(IoStream stream) throws IOException { + byte[] response = new byte[1 + Fields.TS_OUTPUT_SIZE]; + response[0] = (byte) BinaryProtocolServer.TS_OK.charAt(0); + stream.sendPacket(response); + } } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index df00562939..695599e487 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -12,6 +12,7 @@ import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.net.Socket; +import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import static com.devexperts.logging.Logging.getLogging; @@ -28,12 +29,12 @@ public class BinaryProtocolProxy { */ public static final int USER_IO_TIMEOUT = 10 * Timeouts.MINUTE; - public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort) { + public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort, AtomicInteger relayCommandCounter) { Function clientSocketRunnableFactory = clientSocket -> () -> { TcpIoStream clientStream = null; try { clientStream = new TcpIoStream("[[proxy]] ", clientSocket); - runProxy(targetEcuSocket, clientStream); + runProxy(targetEcuSocket, clientStream, relayCommandCounter); } catch (IOException e) { log.error("BinaryProtocolProxy::run " + e); close(clientStream); @@ -42,12 +43,11 @@ public class BinaryProtocolProxy { return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Listener.empty()); } - public static void runProxy(IoStream targetEcu, IoStream clientStream) throws IOException { + public static void runProxy(IoStream targetEcu, IoStream clientStream, AtomicInteger relayCommandCounter) throws IOException { /* * Each client socket is running on it's own thread */ - //noinspection InfiniteLoopStatement - while (true) { + while (!targetEcu.isClosed()) { byte firstByte = clientStream.getDataBuffer().readByte(USER_IO_TIMEOUT); if (firstByte == COMMAND_PROTOCOL) { clientStream.write(TS_PROTOCOL.getBytes()); @@ -55,8 +55,17 @@ public class BinaryProtocolProxy { } BinaryProtocolServer.Packet clientRequest = readClientRequest(clientStream.getDataBuffer(), firstByte); - sendToTarget(targetEcu, clientRequest); - BinaryProtocolServer.Packet controllerResponse = targetEcu.readPacket(); + /** + * Two reasons for synchronization: + * - we run gauge poking thread until TunerStudio connects + * - technically there could be two parallel connections to local application port + */ + BinaryProtocolServer.Packet controllerResponse; + synchronized (targetEcu) { + sendToTarget(targetEcu, clientRequest); + controllerResponse = targetEcu.readPacket(); + relayCommandCounter.incrementAndGet(); + } log.info("Relaying controller response length=" + controllerResponse.getPacket().length); clientStream.sendPacket(controllerResponse); diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index f615f7cf0a..6363c2023d 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -104,7 +104,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { try { clientSocket = serverSocket.accept(); } catch (IOException e) { - log.info("Client socket closed right away" + e); + log.info("Client socket closed right away " + e); continue; } log.info("Binary protocol proxy port connection"); diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index fc964717cd..e0c5640158 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -1,7 +1,9 @@ package com.rusefi.proxy.client; import com.devexperts.logging.Logging; +import com.rusefi.NamedThreadFactory; import com.rusefi.io.IoStream; +import com.rusefi.io.commands.GetOutputsCommand; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.ServerSocketReference; @@ -13,10 +15,14 @@ import com.rusefi.tools.online.ProxyClient; import java.io.Closeable; import java.io.IOException; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; import static com.devexperts.logging.Logging.getLogging; +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; public class LocalApplicationProxy implements Closeable { + private static final ThreadFactory THREAD_FACTORY = new NamedThreadFactory("gauge poking"); private static final Logging log = getLogging(LocalApplicationProxy.class); public static final int SERVER_PORT_FOR_APPLICATIONS = HttpUtil.getIntProperty("applications.port", 8002); private final ApplicationRequest applicationRequest; @@ -35,7 +41,7 @@ public class LocalApplicationProxy implements Closeable { /** * @param context - * @param applicationRequest remote session we want to connect to + * @param applicationRequest remote session we want to connect to * @param jsonHttpPort * @param disconnectListener * @param connectionListener @@ -49,7 +55,31 @@ public class LocalApplicationProxy implements Closeable { IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, context.serverPortForRemoteApplications()), disconnectListener); LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); - ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, context.authenticatorPort()); + AtomicInteger relayCommandCounter = new AtomicInteger(); + + /** + * We need to entertain proxy server and remote controller while user has already connected to proxy but has not yet started TunerStudio + */ + THREAD_FACTORY.newThread(() -> { + long start = System.currentTimeMillis(); + try { + while (relayCommandCounter.get() < 4) { + sleep(context.gaugePokingPeriod()); + byte[] commandPacket = GetOutputsCommand.createRequest(); + + synchronized (authenticatorToProxyStream) { + authenticatorToProxyStream.sendPacket(commandPacket); + // we do not really need the data, we just need to take response from the socket + authenticatorToProxyStream.readPacket(); + } + } + } catch (IOException e) { + log.error("Gauge poker", e); + } + }).start(); + + + ServerSocketReference serverHolder = BinaryProtocolProxy.createProxy(authenticatorToProxyStream, context.authenticatorPort(), relayCommandCounter); LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest, serverHolder, authenticatorToProxyStream); connectionListener.onConnected(localApplicationProxy); return serverHolder; diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java index a2249a95b0..35a79eaf84 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxyContext.java @@ -1,5 +1,7 @@ package com.rusefi.proxy.client; +import com.rusefi.Timeouts; + import java.io.IOException; public interface LocalApplicationProxyContext { @@ -14,4 +16,12 @@ public interface LocalApplicationProxyContext { * local port on which authenticator accepts connections from Tuner Studio */ int authenticatorPort(); + + default int startUpIdle() { + return 6 * Timeouts.MINUTE; + } + + default int gaugePokingPeriod() { + return 5 * Timeouts.SECOND; + } } diff --git a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java index db1e9f2df3..ccd36daf82 100644 --- a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java +++ b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java @@ -1,6 +1,7 @@ package com.rusefi; import com.rusefi.config.generated.Fields; +import com.rusefi.io.commands.GetOutputsCommand; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.BaseBroadcastingThread; @@ -30,12 +31,11 @@ public class MockRusEfiDevice { super.handleCommand(packet, stream); if (packet.getPacket()[0] == Fields.TS_OUTPUT_COMMAND) { - byte[] response = new byte[1 + Fields.TS_OUTPUT_SIZE]; - response[0] = (byte) BinaryProtocolServer.TS_OK.charAt(0); - stream.sendPacket(response); + GetOutputsCommand.sendOutput(stream); } } }; baseBroadcastingThread.start(); } + } diff --git a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java index ae2b637de7..4550221cb0 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java +++ b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java @@ -13,6 +13,7 @@ import org.junit.Test; import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -94,7 +95,7 @@ public class TcpCommunicationIntegrationTest { // connect proxy to virtual controller IoStream targetEcuSocket = TestHelper.connectToLocalhost(controllerPort, LOGGER); - BinaryProtocolProxy.createProxy(targetEcuSocket, proxyPort); + BinaryProtocolProxy.createProxy(targetEcuSocket, proxyPort, new AtomicInteger()); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java index b3743bd020..ef061dbd40 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -2,37 +2,116 @@ package com.rusefi.proxy.client; import com.rusefi.BackendTestHelper; import com.rusefi.TestHelper; +import com.rusefi.Timeouts; import com.rusefi.config.generated.Fields; +import com.rusefi.io.IoStream; +import com.rusefi.io.commands.GetOutputsCommand; +import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.ServerSocketReference; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.SessionDetails; import com.rusefi.tools.online.ProxyClient; +import org.jetbrains.annotations.NotNull; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.net.MalformedURLException; -import java.net.Socket; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.function.Function; +import java.util.concurrent.atomic.AtomicInteger; import static com.rusefi.BackendTestHelper.createTestUserResolver; import static com.rusefi.TestHelper.TEST_TOKEN_1; -import static org.junit.Assert.assertEquals; +import static com.rusefi.Timeouts.SECOND; +import static com.rusefi.binaryprotocol.BinaryProtocol.findCommand; +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; +import static com.rusefi.shared.FileUtil.close; import static org.junit.Assert.assertTrue; public class LocalApplicationProxyTest { + private static AtomicInteger portNumber = new AtomicInteger(); + @Before public void setup() throws MalformedURLException { BackendTestHelper.commonServerTest(); } @Test - public void testLocalApplication() throws IOException, InterruptedException { - LocalApplicationProxyContext context = new LocalApplicationProxyContext() { + public void testDisconnectCallback() throws IOException, InterruptedException { + LocalApplicationProxyContext context = createLocalApplicationProxy(); + + CountDownLatch backendCreated = new CountDownLatch(1); + ServerSocketReference mockBackend = BinaryProtocolServer.tcpServerSocket(context.serverPortForRemoteApplications(), "localAppTest", socket -> () -> { + sleep(Timeouts.SECOND); + close(socket); + }, parameter -> backendCreated.countDown()); + assertTrue(backendCreated.await(30, TimeUnit.SECONDS)); + + SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); + + CountDownLatch disconnected = new CountDownLatch(1); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, () -> disconnected.countDown(), LocalApplicationProxy.ConnectionListener.VOID); + + assertTrue(disconnected.await(30, TimeUnit.SECONDS)); + mockBackend.close(); + } + + @Test + public void testGaugePoking() throws IOException, InterruptedException { + LocalApplicationProxyContext context = createLocalApplicationProxy(); + + CountDownLatch gaugePokes = new CountDownLatch(3); + + CountDownLatch backendCreated = new CountDownLatch(1); + ServerSocketReference mockBackend = BinaryProtocolServer.tcpServerSocket(context.serverPortForRemoteApplications(), "localAppTest", socket -> () -> { + try { + IoStream applicationClientStream = new TcpIoStream("gauge", socket); + + HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer()); + + while (gaugePokes.getCount() > 0) { + BinaryProtocolServer.Packet packet = applicationClientStream.readPacket(); + System.out.println("Got packet " + findCommand(packet.getPacket()[0])); + + if (packet.getPacket().length != 5) + throw new IllegalStateException(); + + GetOutputsCommand.sendOutput(applicationClientStream); + gaugePokes.countDown(); + } + } catch (IOException e) { + throw new IllegalStateException(e); + } + + }, parameter -> backendCreated.countDown()); + + assertTrue(backendCreated.await(30, TimeUnit.SECONDS)); + + SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); + ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); + + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); + + // wait for three output requests to take place + assertTrue(gaugePokes.await(30, TimeUnit.SECONDS)); + + + + + + mockBackend.close(); + } + + @NotNull + private LocalApplicationProxyContext createLocalApplicationProxy() { + return new LocalApplicationProxyContext() { + private final int remotePort = portNumber.incrementAndGet(); + private final int authenticatorPort = portNumber.incrementAndGet(); + @Override public String executeGet(String url) { if (url.endsWith(ProxyClient.VERSION_PATH)) @@ -42,37 +121,23 @@ public class LocalApplicationProxyTest { @Override public int serverPortForRemoteApplications() { - return 5999; + return remotePort; } @Override public int authenticatorPort() { - return 5998; + return authenticatorPort; + } + + @Override + public int startUpIdle() { + return 7 * Timeouts.SECOND; + } + + @Override + public int gaugePokingPeriod() { + return SECOND; } }; - - CountDownLatch backendCreated = new CountDownLatch(1); - ServerSocketReference mockBackend = BinaryProtocolServer.tcpServerSocket(context.serverPortForRemoteApplications(), "localAppTest", new Function() { - @Override - public Runnable apply(Socket socket) { - return new Runnable() { - @Override - public void run() { - - } - }; - } - }, parameter -> backendCreated.countDown()); - assertTrue(backendCreated.await(30, TimeUnit.SECONDS)); - - - SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); - ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); - - - LocalApplicationProxy.startAndRun(context, applicationRequest, -1, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); - - - mockBackend.close(); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index b6df0649ef..5959a6cbfe 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.net.BindException; import java.util.*; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; import static com.devexperts.logging.Logging.getLogging; @@ -199,7 +200,7 @@ public class Backend implements Closeable { applications.add(applicationConnectionState); } - BinaryProtocolProxy.runProxy(state.getStream(), applicationClientStream); + BinaryProtocolProxy.runProxy(state.getStream(), applicationClientStream, new AtomicInteger()); } catch (Throwable e) { log.info("Application Connector: Got error " + e); From 8e607dd2439a6b5f4886a3d7fc8086fb8f4eb141 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 00:23:36 -0400 Subject: [PATCH 102/182] time for more tests --- .../java/com/rusefi/proxy/client/LocalApplicationProxyTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java index ef061dbd40..24ae68f56c 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -32,7 +32,7 @@ import static com.rusefi.shared.FileUtil.close; import static org.junit.Assert.assertTrue; public class LocalApplicationProxyTest { - private static AtomicInteger portNumber = new AtomicInteger(); + private static final AtomicInteger portNumber = new AtomicInteger(4000); @Before public void setup() throws MalformedURLException { From bade31ef40e388b80daee01eac48bf86d07c91c6 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 00:35:11 -0400 Subject: [PATCH 103/182] time for more tests --- .../rusefi/proxy/client/LocalApplicationProxy.java | 12 +++++++++++- .../proxy/client/LocalApplicationProxyTest.java | 14 +++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index e0c5640158..38ab9bf28a 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -63,7 +63,7 @@ public class LocalApplicationProxy implements Closeable { THREAD_FACTORY.newThread(() -> { long start = System.currentTimeMillis(); try { - while (relayCommandCounter.get() < 4) { + while (relayCommandCounter.get() < 4 && !isTimeForApplicationToConnect(context, start)) { sleep(context.gaugePokingPeriod()); byte[] commandPacket = GetOutputsCommand.createRequest(); @@ -73,6 +73,12 @@ public class LocalApplicationProxy implements Closeable { authenticatorToProxyStream.readPacket(); } } + + if (isTimeForApplicationToConnect(context, start) && relayCommandCounter.get() < 4) { + // we should not keep controller blocker, time to auto-disconnect + authenticatorToProxyStream.close(); + } + } catch (IOException e) { log.error("Gauge poker", e); } @@ -85,6 +91,10 @@ public class LocalApplicationProxy implements Closeable { return serverHolder; } + private static boolean isTimeForApplicationToConnect(LocalApplicationProxyContext context, long start) { + return System.currentTimeMillis() - start > context.startUpIdle(); + } + public static void sendHello(IoStream authenticatorToProxyStream, ApplicationRequest applicationRequest) throws IOException { log.info("Pushing " + applicationRequest); // right from connection push session authentication data diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java index 24ae68f56c..e9b715e4cd 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -54,7 +54,7 @@ public class LocalApplicationProxyTest { ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); CountDownLatch disconnected = new CountDownLatch(1); - LocalApplicationProxy.startAndRun(context, applicationRequest, -1, () -> disconnected.countDown(), LocalApplicationProxy.ConnectionListener.VOID); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); assertTrue(disconnected.await(30, TimeUnit.SECONDS)); mockBackend.close(); @@ -73,7 +73,7 @@ public class LocalApplicationProxyTest { HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer()); - while (gaugePokes.getCount() > 0) { + while (!socket.isClosed()) { BinaryProtocolServer.Packet packet = applicationClientStream.readPacket(); System.out.println("Got packet " + findCommand(packet.getPacket()[0])); @@ -94,14 +94,14 @@ public class LocalApplicationProxyTest { SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); - LocalApplicationProxy.startAndRun(context, applicationRequest, -1, TcpIoStream.DisconnectListener.VOID, LocalApplicationProxy.ConnectionListener.VOID); + CountDownLatch disconnected = new CountDownLatch(1); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); // wait for three output requests to take place - assertTrue(gaugePokes.await(30, TimeUnit.SECONDS)); - - - + assertTrue("gaugePokes", gaugePokes.await(30, TimeUnit.SECONDS)); + // but there must be a disconnect after some time + assertTrue("disconnected", disconnected.await(30, TimeUnit.SECONDS)); mockBackend.close(); } From a27d682f148276f1f2c83133458ccb14f975c99b Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 02:54:27 -0700 Subject: [PATCH 104/182] add cfg field --- firmware/integration/rusefi_config.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 0ed08df76a..e3bde63fa7 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -826,7 +826,7 @@ custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:1], @@maf_sensor_type_e_enum@ bit enableInnovateLC2 bit showHumanReadableWarning bit stftIgnoreErrorMagnitude;+If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.; - bit unusedBit_251_11 + bit volkswagenEtbIdle bit unusedBit_251_12 bit unusedBit_251_13 bit unusedBit_251_14 From 7003d6c7ba5b9c784643ee884d28a111eff35a6d Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 02:55:35 -0700 Subject: [PATCH 105/182] implement --- .../actuators/electronic_throttle.cpp | 26 +++++++++++++++---- .../actuators/electronic_throttle.h | 6 +++-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 7ae34557e9..47d5d19409 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -99,7 +99,11 @@ static bool startupPositionError = false; #define STARTUP_NEUTRAL_POSITION_ERROR_THRESHOLD 5 -static SensorType indexToTpsSensor(size_t index) { +static SensorType indexToTpsSensor(size_t index, bool volkswagenEtbIdle) { + if (volkswagenEtbIdle) { + return SensorType::Tps2; + } + switch(index) { case 0: return SensorType::Tps1; default: return SensorType::Tps2; @@ -127,7 +131,8 @@ static percent_t currentEtbDuty; // this macro clamps both positive and negative percentages from about -100% to 100% #define ETB_PERCENT_TO_DUTY(x) (clampF(-ETB_DUTY_LIMIT, 0.01f * (x), ETB_DUTY_LIMIT)) -void EtbController::init(DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) { +void EtbController::init(SensorType positionSensor, DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) { + m_positionSensor = positionSensor; m_motor = motor; m_myIndex = ownIndex; m_pid.initPidClass(pidParameters); @@ -149,7 +154,7 @@ void EtbController::showStatus(Logging* logger) { } expected EtbController::observePlant() const { - return Sensor::get(indexToTpsSensor(m_myIndex)); + return Sensor::get(m_positionSensor); } void EtbController::setIdlePosition(percent_t pos) { @@ -162,6 +167,12 @@ expected EtbController::getSetpoint() const { return unexpected; } + // VW ETB idle mode uses an ETB only for idle (a mini-ETB sets the lower stop, and a normal cable + // can pull the throttle up off the stop.), so we directly control the throttle with the idle position. + if (CONFIG(volkswagenEtbIdle)) { + return m_idlePosition; + } + // If the pedal map hasn't been set, we can't provide a setpoint. if (!m_pedalMap) { return unexpected; @@ -743,7 +754,11 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); - engine->etbActualCount = Sensor::hasSensor(SensorType::Tps2) ? 2 : 1; + if (CONFIG(volkswagenEtbIdle)) { + engine->etbActualCount = 1; + } else { + engine->etbActualCount = Sensor::hasSensor(SensorType::Tps2) ? 2 : 1; + } for (int i = 0 ; i < engine->etbActualCount; i++) { auto motor = initDcMotor(i, CONFIG(etb_use_two_wires) PASS_ENGINE_PARAMETER_SUFFIX); @@ -751,7 +766,8 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // If this motor is actually set up, init the etb if (motor) { - engine->etbControllers[i]->init(motor, i, &engineConfiguration->etb, &pedal2tpsMap); + auto positionSensor = indexToTpsSensor(i, CONFIG(volkswagenEtbIdle)); + engine->etbControllers[i]->init(positionSensor, motor, i, &engineConfiguration->etb, &pedal2tpsMap); INJECT_ENGINE_REFERENCE(engine->etbControllers[i]); } } diff --git a/firmware/controllers/actuators/electronic_throttle.h b/firmware/controllers/actuators/electronic_throttle.h index 5c120aac1e..e4b1ca666e 100644 --- a/firmware/controllers/actuators/electronic_throttle.h +++ b/firmware/controllers/actuators/electronic_throttle.h @@ -19,6 +19,7 @@ #include "engine.h" #include "closed_loop_controller.h" #include "expected.h" +#include "sensor.h" class DcMotor; class Logging; @@ -26,7 +27,7 @@ class Logging; class IEtbController : public ClosedLoopController { public: DECLARE_ENGINE_PTR; - virtual void init(DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) = 0; + virtual void init(SensorType positionSensor, DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) = 0; virtual void reset() = 0; virtual void setIdlePosition(percent_t pos) = 0; virtual void start() = 0; @@ -35,7 +36,7 @@ public: class EtbController : public IEtbController { public: - void init(DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) override; + void init(SensorType positionSensor, DcMotor *motor, int ownIndex, pid_s *pidParameters, const ValueProvider3D* pedalMap) override; void setIdlePosition(percent_t pos) override; void reset() override; void start() override {} @@ -74,6 +75,7 @@ protected: private: int m_myIndex = 0; + SensorType m_positionSensor = SensorType::Invalid; DcMotor *m_motor = nullptr; Pid m_pid; bool m_shouldResetPid = false; From 51a69c74786d13b6b5a97532efa78e0d7276513e Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 03:05:59 -0700 Subject: [PATCH 106/182] clamp idle in VW mode --- firmware/controllers/actuators/electronic_throttle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 47d5d19409..4f94a74ef3 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -170,7 +170,7 @@ expected EtbController::getSetpoint() const { // VW ETB idle mode uses an ETB only for idle (a mini-ETB sets the lower stop, and a normal cable // can pull the throttle up off the stop.), so we directly control the throttle with the idle position. if (CONFIG(volkswagenEtbIdle)) { - return m_idlePosition; + return clampF(0, m_idlePosition, 100); } // If the pedal map hasn't been set, we can't provide a setpoint. From 2b212fbaab370d5c071135428cfa63ef1ae1876a Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 03:11:56 -0700 Subject: [PATCH 107/182] add tests for VW mode --- unit_tests/tests/test_etb.cpp | 82 +++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index a78a39c327..70a94c977c 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -32,7 +32,6 @@ TEST(etb, initializationNoPedal) { } TEST(etb, initializationSingleThrottle) { - StrictMock mocks[ETB_COUNT]; WITH_ENGINE_TEST_HELPER(TEST_ENGINE); @@ -45,8 +44,8 @@ TEST(etb, initializationSingleThrottle) { Sensor::setMockValue(SensorType::AcceleratorPedal, 0); Sensor::setMockValue(SensorType::AcceleratorPedalPrimary, 0); - // Expect mock0 to be init with index 0, and PID params - EXPECT_CALL(mocks[0], init(_, 0, &engineConfiguration->etb, Ne(nullptr))); + // Expect mock0 to be init with TPS 1, index 0, and PID params + EXPECT_CALL(mocks[0], init(SensorType::Tps1, _, 0, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[0], reset); EXPECT_CALL(mocks[0], start); @@ -71,19 +70,43 @@ TEST(etb, initializationDualThrottle) { // The presence of a second TPS indicates dual throttle Sensor::setMockValue(SensorType::Tps2, 25.0f); - // Expect mock0 to be init with index 0, and PID params - EXPECT_CALL(mocks[0], init(_, 0, &engineConfiguration->etb, Ne(nullptr))); + // Expect mock0 to be init with TPS 1, index 0, and PID params + EXPECT_CALL(mocks[0], init(SensorType::Tps1, _, 0, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[0], reset); EXPECT_CALL(mocks[0], start); - // Expect mock1 to be init with index 2, and PID params - EXPECT_CALL(mocks[1], init(_, 1, &engineConfiguration->etb, Ne(nullptr))); + // Expect mock1 to be init with TPS 2, index 1, and PID params + EXPECT_CALL(mocks[1], init(SensorType::Tps2, _, 1, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[1], reset); EXPECT_CALL(mocks[1], start); doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); } +TEST(etb, initializationVolkswagenEtbIdleMode) { + StrictMock mocks[ETB_COUNT]; + + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + + // Enable VW idle mode + engineConfiguration->volkswagenEtbIdle = true; + + for (int i = 0; i < ETB_COUNT; i++) { + engine->etbControllers[i] = &mocks[i]; + } + + // No accelerator pedal configured - this mode doesn't use it + + // Expect mock0 to be init with TPS 2, index 0, and PID params + EXPECT_CALL(mocks[0], init(SensorType::Tps2, _, 0, &engineConfiguration->etb, Ne(nullptr))); + EXPECT_CALL(mocks[0], reset); + EXPECT_CALL(mocks[0], start); + + // We do not expect throttle #2 to be initialized + + doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); +} + TEST(etb, idlePlumbing) { StrictMock mocks[ETB_COUNT]; @@ -117,7 +140,7 @@ TEST(etb, testSetpointOnlyPedal) { // Uninitialized ETB must return unexpected (and not deference a null pointer) EXPECT_EQ(etb.getSetpoint(), unexpected); - etb.init(nullptr, 0, nullptr, &pedalMap); + etb.init(SensorType::Invalid, nullptr, 0, nullptr, &pedalMap); // Check endpoints and midpoint Sensor::setMockValue(SensorType::AcceleratorPedal, 0.0f); @@ -167,7 +190,7 @@ TEST(etb, setpointIdle) { .WillRepeatedly([](float xRpm, float y) { return y; }); - etb.init(nullptr, 0, nullptr, &pedalMap); + etb.init(SensorType::Invalid, nullptr, 0, nullptr, &pedalMap); // No idle range, should just pass pedal Sensor::setMockValue(SensorType::AcceleratorPedal, 0.0f); @@ -204,6 +227,29 @@ TEST(etb, setpointIdle) { EXPECT_FLOAT_EQ(55, etb.getSetpoint().value_or(-1)); } +TEST(etb, idleVolkswagenMode) { + WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + + // In this mode the idle position should be passed thru as the setpoint directly + engineConfiguration->volkswagenEtbIdle = true; + + EtbController etb; + INJECT_ENGINE_REFERENCE(&etb); + + etb.setIdlePosition(0); + EXPECT_FLOAT_EQ(0, etb.getSetpoint().value_or(-1)); + etb.setIdlePosition(50); + EXPECT_FLOAT_EQ(50, etb.getSetpoint().value_or(-1)); + etb.setIdlePosition(100); + EXPECT_FLOAT_EQ(100, etb.getSetpoint().value_or(-1)); + + // Out of range should be clamped + etb.setIdlePosition(-10); + EXPECT_FLOAT_EQ(0, etb.getSetpoint().value_or(-1)); + etb.setIdlePosition(110); + EXPECT_FLOAT_EQ(100, etb.getSetpoint().value_or(-1)); +} + TEST(etb, etbTpsSensor) { // Throw some distinct values on the TPS sensors so we can identify that we're getting the correct one Sensor::setMockValue(SensorType::Tps1, 25.0f); @@ -212,14 +258,14 @@ TEST(etb, etbTpsSensor) { // Test first throttle { EtbController etb; - etb.init(nullptr, 0, nullptr, nullptr); + etb.init(SensorType::Tps1, nullptr, 0, nullptr, nullptr); EXPECT_EQ(etb.observePlant().Value, 25.0f); } // Test second throttle { EtbController etb; - etb.init(nullptr, 1, nullptr, nullptr); + etb.init(SensorType::Tps2, nullptr, 1, nullptr, nullptr); EXPECT_EQ(etb.observePlant().Value, 75.0f); } } @@ -231,7 +277,7 @@ TEST(etb, setOutputInvalid) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be disabled in case of unexpected EXPECT_CALL(motor, disable()); @@ -245,7 +291,7 @@ TEST(etb, setOutputValid) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -261,7 +307,7 @@ TEST(etb, setOutputValid2) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -277,7 +323,7 @@ TEST(etb, setOutputOutOfRangeHigh) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -293,7 +339,7 @@ TEST(etb, setOutputOutOfRangeLow) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Should be enabled and value set EXPECT_CALL(motor, enable()); @@ -309,7 +355,7 @@ TEST(etb, setOutputPauseControl) { EtbController etb; INJECT_ENGINE_REFERENCE(&etb); - etb.init(&motor, 0, nullptr, nullptr); + etb.init(SensorType::Invalid, &motor, 0, nullptr, nullptr); // Pause control - should get no output engineConfiguration->pauseEtbControl = true; @@ -327,7 +373,7 @@ TEST(etb, closedLoopPid) { pid.minValue = -60; EtbController etb; - etb.init(nullptr, 0, &pid, nullptr); + etb.init(SensorType::Invalid, nullptr, 0, &pid, nullptr); // Disable autotune for now Engine e; From d1fde4fe93b058907c2995ab0ad1ae5836a60ae8 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 03:15:17 -0700 Subject: [PATCH 108/182] make reality match the test --- firmware/controllers/actuators/electronic_throttle.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 4f94a74ef3..ef32b12da9 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -747,8 +747,8 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { addConsoleActionI("etb_freq", setEtbFrequency); #endif /* EFI_PROD_CODE */ - // If you don't have a pedal, we have no business here. - if (!Sensor::hasSensor(SensorType::AcceleratorPedalPrimary)) { + // If you don't have a pedal (or VW idle valve mode), we have no business here. + if (!CONFIG(volkswagenEtbIdle) && !Sensor::hasSensor(SensorType::AcceleratorPedalPrimary)) { return; } From ed14758c63b0c67bc1ab295f8767d2059cb65454 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 03:18:26 -0700 Subject: [PATCH 109/182] mocks --- unit_tests/mocks.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unit_tests/mocks.h b/unit_tests/mocks.h index 2a093f05f1..dcaad8ebb4 100644 --- a/unit_tests/mocks.h +++ b/unit_tests/mocks.h @@ -10,7 +10,7 @@ public: // IEtbController mocks MOCK_METHOD(void, reset, (), ()); MOCK_METHOD(void, start, (), (override)); - MOCK_METHOD(void, init, (DcMotor* motor, int ownIndex, pid_s* pidParameters, const ValueProvider3D* pedalMap), (override)); + MOCK_METHOD(void, init, (SensorType positionSensor, DcMotor* motor, int ownIndex, pid_s* pidParameters, const ValueProvider3D* pedalMap), (override)); MOCK_METHOD(void, setIdlePosition, (percent_t pos), (override)); MOCK_METHOD(void, autoCalibrateTps, (), (override)); From bb3648bba54f4524beeb743523be71969aaa4024 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 26 Jul 2020 14:50:10 +0000 Subject: [PATCH 110/182] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 6 +++--- .../controllers/algo/rusefi_generated.h | 8 ++++---- ...ngine_configuration_generated_structures.h | 6 +++--- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 8 ++++---- .../controllers/generated/signature_all.h | 6 +++--- .../generated/signature_frankenso_na6.h | 6 +++--- .../controllers/generated/signature_kin.h | 6 +++--- .../controllers/generated/signature_mre_f4.h | 6 +++--- .../controllers/generated/signature_mre_f7.h | 6 +++--- .../generated/signature_prometheus_405.h | 6 +++--- .../generated/signature_prometheus_469.h | 6 +++--- .../generated/signature_proteus_f4.h | 6 +++--- .../generated/signature_proteus_f7.h | 6 +++--- firmware/tunerstudio/generated/cache.zip | Bin 842327 -> 842444 bytes firmware/tunerstudio/generated/rusefi.ini | 8 ++++---- .../generated/rusefi_frankenso_na6.ini | 8 ++++---- .../tunerstudio/generated/rusefi_kinetis.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f4.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f7.ini | 8 ++++---- .../generated/rusefi_prometheus_405.ini | 8 ++++---- .../generated/rusefi_prometheus_469.ini | 8 ++++---- .../generated/rusefi_proteus_f4.ini | 8 ++++---- .../generated/rusefi_proteus_f7.ini | 8 ++++---- .../com/rusefi/config/generated/Fields.java | 12 ++++++------ java_console/rusefi.xml | 2 +- 29 files changed, 88 insertions(+), 88 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 05e0b572bf..22109f436d 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Jul 25 16:16:37 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:49:43 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1760,7 +1760,7 @@ struct engine_configuration_s { bool stftIgnoreErrorMagnitude : 1; /** offset 976 bit 11 */ - bool unusedBit_251_11 : 1; + bool volkswagenEtbIdle : 1; /** offset 976 bit 12 */ bool unusedBit_251_12 : 1; @@ -3530,4 +3530,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sat Jul 25 16:16:37 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:49:43 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 6d0a71a6be..e3234d33bb 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1074,8 +1074,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 2967996033 +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 3815423868 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1343,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.25.kin.2967996033" +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.3815423868" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 @@ -1378,7 +1378,6 @@ #define unusedAuxVoltage1_TODO_332_offset 2713 #define unusedAuxVoltage2_TODO_332_offset 2714 #define unusedBit4_1476_offset 1476 -#define unusedBit_251_11_offset 976 #define unusedBit_251_12_offset 976 #define unusedBit_251_13_offset 976 #define unusedBit_251_14_offset 976 @@ -1461,6 +1460,7 @@ #define verboseTriggerSynchDetails_offset 1476 #define veRpmBins_offset 18528 #define veTable_offset 17440 +#define volkswagenEtbIdle_offset 976 #define VOLTAGE_1_BYTE_PACKING_DIV 0.02 #define vRefAdcChannel_offset 1470 #define vvt_mode_e_enum "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 42ce66edcc..f4fe42d90d 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Jul 25 16:16:21 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1760,7 +1760,7 @@ struct engine_configuration_s { bool stftIgnoreErrorMagnitude : 1; /** offset 976 bit 11 */ - bool unusedBit_251_11 : 1; + bool volkswagenEtbIdle : 1; /** offset 976 bit 12 */ bool unusedBit_251_12 : 1; @@ -3530,4 +3530,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Jul 25 16:16:21 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 940cb1eabe..b7b3fd6d59 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Jul 25 16:16:21 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 4ae4c49b21..ac63b1c703 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Jul 25 16:16:21 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index 3cc6fd8064..3832fa85ce 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Jul 25 16:16:21 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 401866a474..7dfdb6e365 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sat Jul 25 16:16:21 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 75e32b9aab..83a6442f2f 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1074,8 +1074,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 2111232539 +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 777282534 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1343,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.25.all.2111232539" +#define TS_SIGNATURE "rusEFI 2020.07.26.all.777282534" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 @@ -1378,7 +1378,6 @@ #define unusedAuxVoltage1_TODO_332_offset 2713 #define unusedAuxVoltage2_TODO_332_offset 2714 #define unusedBit4_1476_offset 1476 -#define unusedBit_251_11_offset 976 #define unusedBit_251_12_offset 976 #define unusedBit_251_13_offset 976 #define unusedBit_251_14_offset 976 @@ -1461,6 +1460,7 @@ #define verboseTriggerSynchDetails_offset 1476 #define veRpmBins_offset 18528 #define veTable_offset 17440 +#define volkswagenEtbIdle_offset 976 #define VOLTAGE_1_BYTE_PACKING_DIV 0.02 #define vRefAdcChannel_offset 1470 #define vvt_mode_e_enum "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index a505ce8365..307b8047e5 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 2111232539 -#define TS_SIGNATURE "rusEFI 2020.07.25.all.2111232539" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 777282534 +#define TS_SIGNATURE "rusEFI 2020.07.26.all.777282534" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index ffc1fdc5ea..90e8ecb91a 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 2740041464 -#define TS_SIGNATURE "rusEFI 2020.07.25.frankenso_na6.2740041464" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 4040363781 +#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.4040363781" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index c3735b3abe..90e25463d1 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 2967996033 -#define TS_SIGNATURE "rusEFI 2020.07.25.kin.2967996033" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 3815423868 +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.3815423868" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 290c230e83..728e3a57e2 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 875039893 -#define TS_SIGNATURE "rusEFI 2020.07.25.mre_f4.875039893" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 1739240808 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.1739240808" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 90106f0450..eb2cd69b6a 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 875039893 -#define TS_SIGNATURE "rusEFI 2020.07.25.mre_f7.875039893" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 1739240808 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.1739240808" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index ad8d38399c..05bf7d560e 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 2294940319 -#define TS_SIGNATURE "rusEFI 2020.07.25.prometheus_405.2294940319" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 3678976866 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.3678976866" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index d4bf701167..9ed6d52717 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 2294940319 -#define TS_SIGNATURE "rusEFI 2020.07.25.prometheus_469.2294940319" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 3678976866 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.3678976866" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 86680c5564..64f8cf12ae 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 4031228884 -#define TS_SIGNATURE "rusEFI 2020.07.25.proteus_f4.4031228884" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 2747601449 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.2747601449" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index ef08b5c2bf..9ca6a38c0f 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.25 -#define SIGNATURE_HASH 4031228884 -#define TS_SIGNATURE "rusEFI 2020.07.25.proteus_f7.4031228884" +#define SIGNATURE_DATE 2020.07.26 +#define SIGNATURE_HASH 2747601449 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.2747601449" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index d35ff435bf27db61564ac0bfa295875165d92b52..c1622a30fec8eb258a0ddf0f12183d4480217c29 100644 GIT binary patch delta 221319 zcmV(`K-0h1v@^`LGk}BvgaU*Ev;;T?6fk!BQ2jBA69>UG`ot|b z)S-{9?Ek|JEzE;PhQVwG-9*r`8^+e7A5W~EA9l8W!2eU=q+x(B1TI2&4@W3FgyhYvhl|Ug*t-o;C48Y&)L7bZzLs8U--5^B}gO2m+_|;0 zoG)PscdUUAyCJmr)AC^(ykAC3cM6k%`(?7c_aw7EAN}$hj5%~+B4f(+<~RoU52nnW zd6Xs%M$17I`|&dNjJCadm{eMLcm8YuN9zl9BWxt{fA_dmfBq1B^{jhuE>pihz>Z;P zi-o{{NBa(EcsQ{haZa(c2P@=R``F9K+J~)3dsj`Q=R#TP7uR>>4X3bz?&l3u~7i)JA_$vhj=n9Ki);apyDr$>rT7dw_E++EbqY! z0canF*zY;*n||k}@AMi!*Rf?@>yb5cVZaf8oH`t)KOcr3LV*=}jmwtZzveaod_07hMeC>RBw87{0l_q-8p3~TD&PY5fe20B>sEMGK# z^en@knoe;Wum$7{aO?2QLDMsL zL@SSNrct3F?o1!M(Cl(C!tGA83P_uOR!&-2h9T}A%>Th^5Uvcp|62MX&l;fJm&YMU3dZI3xcJIom*?n8jRk2Vg6mg;ed+_F24)*jlLg>=E4+K6yd~hel zg7*A5Rak`n%!NauEA7%|-NB)Kw=b=KZR>11DOc~GJLe4>8oue?*3}S=hWg#cC=^ndEq zouh(Ng3R2!@{v=tPK}D~cK^!h*wr8FYDl<2^79#SW%3Aif#~dPrTp31UoxrG%h{PZ z3xIxmjeb21$DsknN)ZC(Feg6^PHsH{DZf(_tZTaiD}D*fL!F(ZGVU6Gty=p|<>;)2 zU3EH*nsa^A?5||D>~0t8oZ~LNYt-ue3-*8<&6NsOXoOdsa*9VuPSlA678EWPOWi&+34F%=hkjw)7c^oJ3GTV>-HS-8m+(A5gDujs&-dzHrM3k z&wJAIWy@){Z8a8SZ84|c>E&m1JJ(4@l0#tP7V0!wD!*h_Y^=|%U&0(**{xQ+sV7zs z5T>uwPLQ2Szq)g-?Juw;sxU>h`WLHsyn=6f4LAihPF~V&d8HJ8Bh$PRfNC36!nr^F z3*&4&TtQO^o}w1>uvq2QH2fHXkD~?PJJ{fRd}Qi?@EH>2h}>Cdc~9 zEEps()O3M|BO(tfslxN+%nSXY^$<*B7l|m~7)L^4F~1>okbhc6P=vURowGBX&7yPu zlOSpw2O`(AvmK;+U<{9*!D#e*%x((7H*@d(Ax?;zv^A}N!5ET_(Qd*8T+bG(HEylK zexbx9rWbiaf&;N51RQ`s+$l~LOzQ$>7D>jr2dvK?QOU$kB29%wn3e&C21YQQCffn} z#7OP~S2sluiix7I~+vjl9Pt23WXoFDmiE$c@ z8!2KSCX zhmEzNrn>OVsw4m2kKL)No0?$!pIrqMBk-lk9F+q?d&S5>w6D-{tKCZ9o9A{H@o~4i zLLyw-7l5&!_MNMCvzAXJ7=@rI`==L6)mz<0^(vPv?FJ-& zF3KhRbJo7NfW2_GYyI-N7Jl2^o<-YO75*#o--3Jsiost%`|^*Hg7v{ukXrvwA^kG| z3NRMv|4&a(5iAXqI}SBeZ-wcmaPqA%jlBEq-FGxwnd#$SrNezmC|b#4>vQLvJe@ep zllUF9ZeR!QE|u^Cw3{mfpbzeJ>1|$r>C&M9TUZ0=xLlIW`C3?WSNo5E6)uF8eHkwz zhyG_Aqa3_KedeZbhWkxTeZwg9_87Qf;0%K>OdYc{GNYceNt@w+MFRje2{g=uR^nr( zq4V!qQlFaU6hA;srug+D!(5$Uvco zgi^WebndS6*)`6}LVmn6p zt~U!FJgBl-evb-M`6W~+9zhKhuvdi@rGB;}ZwM9XLNCZ)2Dh~3%|{M@L!5>@;synR z#%Stwy?a2C-Nmf(@!Xr@0~<=kVWxJ89rU4y6;c@#vIBeT1I*iyPcUy_HghkMVo6^l zg%l|52QLhl^Jd_VQh=}&+nPc;0~Bz+I3?&tTM4lTkxZt+fE8z*#EakuUFbEE`x822>1lb^g$}? zNl1uzqjA{s>Gs^GZ)wlmHR^Kr?oq@ukAl$g9B;myS=;BG-WOF_`3xcc<_k7I!!8AC31kOv~KNYqh|h8#Ddw8b%1&r(XQ1)%GjU*3ZF}Gy`P<} zK!xvDveAd3J4e~8vv5Oq=E32JVB_a6^S^j&HgSvvFxIx$%58)>0#J^U>y{gSa+(MwHC`M z!1Cyi;>o_bxvVVCE~$-G+)^ta;+0Rg3LF4_`$zfo)SvkJ4hlRa^!vgfZZ~Z!lj*~fmhcxR;LRsVtB6U3S zcHGDtEbkqdVo&cldkU*KcL8JIfyUi~^NQ*$Q%_dVn};w=yehN%3~3)Ax#BRG;&+`< zGm;C~!c=NfqoIF~BKaze61NSeu~f2#H{7;*Qz_!d?JZzlk}Kj4m+@08F!%hcO4xpn zuszK(qI@-i+g=ZU|MY4=4}?g2Y)9cC{`qkp48P(JoPy#J!90aM6b5sD2oyvZ#PO64 zUH!=$E@4ve_qjKRRqlIHY<yB7l?Ky6h2UMvx?Rl9|MuI&!}@nV>NODa+CpZ}>uO~c~!;HVPB z{bv0H{>uS_%GU5jz~WXi%Lwhkn%#5yIr3WOqW19e{nU$t1%5T%<(yX(YuPYGsF9`z zmb`#B+n0I6J#mT$I=$DaR~vSdh6f9BP}aW=H10CDtj1mN-^~hRU-*1T2yA7On-B00 z4{>_`H|9)#tI|-3Qm`iObc~;+%by7#A60x>=QNG1eyB=dONZ*mk@|70flqpS33SH2 z8R$&FXKn;KIH z)=q0&0}_INOZ0DKOHXmti9hh$Js_3okxRd96|MiU zO8l588k|V~y9*?hc~>j#Aj?&aSfdbDF=X_t^sXjxyof%3`gHHdljUF^4(=x@uKw=T zs9N-CFbxKm(X$IFe-B_ciON?LEj>MU8f!53R5hf7hr@wz)E~UrJoxs!sa6nY!H3c{pXD|xJF)98^kvlGjGaQ!JV z9=e&C`#kV;V`G?}O^xxhWsyva@;gswm5e|IBi0l(B{##bM@*$mv2 z!c!f)$bU-wr<}oK9s7{~9PyuH{&T{APS+4gulWf*A7-IhQ}Vpbe-8N1;dk`<|Ltd| z$}?C!{#SwMzwysbop)vZXj7T&?(Ecy#W(h3Wsc52^W&fK_5c6l-=liXmzK(B@i^Su z35~NNaxZ*7e?P&a1IGP2DsG6moHy1GkWyn z;bbNEr=Na;!DKEx+noz4e?i4BsPqLDzM!%fhx9LXc0rw8P-hpXTuUl*ZSL%XJGgin_d_F0W3xmQ?22+~pN_dBt5`VV6Mz21NtWZ`POH_Xafq*SEg| z1`h!N@t4m81{ezWJEXEA${y8bpO^6j1}-Y|aMjU6hfhLx)P=%#?9Saa8tw-3y25xBX0(FPI`S978sIf}JCQ)k}r^<~1!XCQTAvNK^ zDolRIKi=FWjZB_K+~&~jN7guZ3c&Xd*m=us-*)Qa*>v)it9|i^|f6IkGojNmjQK@V%;pi#KHLH84Y;4Tg z|0Qcd@f!hf4m%WDQ+n~))58KNtc`j_<=-q*UA0zk_1eV~R{83DIe^jP&#QK;W|z4OLy3d%EL;=OA{ilhcDzVXpwi3r6EM{yq<);lwKK6S;8h{yuVx z(hP#nj352Vs+J^T4Sb}WlC?weh<9m}SnZSZyji&<9>R8Y0XjWU0ZWG7)DZ=lyg?gc^H04A&3V~ywH^G1$6|FBjf*XBKP%5sqTLKj&T8OaJFXxnP9^sf zQDytP^@5+`!EO0hc5BTm4 zxGu*W0*(ALvuK?Smw(|1P65uBAqWO10_f|Pp8N(ne{N4^>y8%Q#~W&wzN>cmEwz&`01;lYN#&AZ>qYsZ7~)bb z`omx;e|ME>Z&QTvO!v}Qzq%4WH-mM}CUj9mUQQ=FkY7TuWo*gqJX~y8m zQhe{WeN$^VHd|ZN+O^BNLxgAX^ppsii*~o>*u74pTgS8`op#Zv_xeOvwi>;j-EunJ z#&x}GYdRJ^NkBneq0wrhKf5E{^yN?RyL|eef7j>RTWO&AtB=<=DzSh5^hvx+q7M6` z|JDBlsNQ?pUrZK%i~V@&{q@?NFWu>9w!v|*Cfg4g?OI>9(7H*IdUJAl++EE26F5owO#2*5CXAOs+WfT#T`;rzcovOTOL2kuFA1f-O43oVzpd2P%S5nfpWE<&jAQe4S`_V-Z4!u!hK3bA3Vug~)3JCZz zd->GyN5zViz4gKYz?4c&7cJ!$E#(z0=N2vJ6+Or;s#D2GOtLB>7aINp(jGYNlN{Jo zBGsh?Ke};i{)0dAMwO2ZIaD{cMa?Ry%%gG^d|kb*1e187WyM2OTb7_?U*2Eo_J zn)+Wo3${Z@4z3eXD-39PKiO5~#c4a*OC^568CaP1sy~EX59d|pmJ~TO{=gHAZm(Uo zv4z59lkTHSNhIx<9+alk1CTbSow&oV6_wjyw;^zOsm}OJ4qyr3Qa}lOM{X99P}Ahl ze}xlz_sc1n&+2dh6JWYvv4_j$45neu=Wa@dlVVp{rxQEkPT(7PH@2)yH$jemG^LzpG(jLXtC%NZA~#U&4O;4&@}*1C~Se8N1*_nTPkY` z#RSoPs$49|9jXS9Qk5hpf~ph`0j=dIZQp9a*0^O~r9Zq5K4|X^@Rye@WmB z^n;*DG!$CQ)5FS0Wqqcn4m}R*&-9EkM-xVL-^w=XKxDzWw#jFFB({m#LL5D^qVub4 z%V-!070_SGf;^f0c@4*0WJ&(YB(IF&%D-R$s|0P#FT6Q= zy@#(J`jm-lBAU65-XLF4PDA8Xe~_%a4Ws~V-4G!>CUh#^k*HLSJTRz&IAi_pO+Do# zVUw2x?pKWm_HKCZu}JOX9oF{I=Puo4?sSL< z6|POPSf{WFa8RR(JC1(^p64D&1K{Qm(V}Bu!O#+3A!0xL>=A~p>WmYGe<1W8j?0m5E$G=*7ww$^oM-biD`hX8}B% zd!KmS5Zh*0oQXGGNNtmseEa4X~I24|- zwJFy^FIVI?h2E-%&r@XS!}9>IFY6}q^!qQl^g`d(d)8MNi&0zURJI`_3lK|s(BmVs zX<5(mzri5g@GD`1uDm3+;iUO^IQE8tKgC!3N0(xCP*L2A%LUPfOyvM@{20cERlQ)4 zU^(IZi>5SN{W7H5fA3y~kKRfUF(P_;x30~y=1_CQ&uH71xT|5xXh?*j5__0wyBwS* zhP{O-L@sN!ND=ulscbhlAdeLxnG#RwMgWIEE9e$<#W_Uw?KJfk2Him+xcLuut;1dG zXxBR4wN7@e(_M0|RfPOv=@k!YD{y3nr-Ge~eY`51ARM79e*_G|)pm*~*N~r1*(o^( zkWf|$Ck_yN&XIHI96Ke*I8+%>4id|dbd-3}HJZ=$l#zYVgF&>>TfIPwgDUQo_YU?- z{Idi<%PJK<_~#*f93`J8SO^jh_m0hahpHyD##JPb{s8=C8i7hxrBARGYE5^2NKG6; z6UTceoODF+e;g_hiiN#X4F$B|2pq@oSwz@RA*Wb^DhMn;XJan@rbNocVpv{*T~@;> zmZ;e>mOdi*ikN?@KtHBt4-qOgS;-(y^Z=y{md;wKujFG_MeJG6{<_VVS#OV}5d?S~fAdPe26f<#6LZ}hxDIYeBKp$pA+kERat3{?HgPfN(?$Zd-Q-0XMJ39CM1(eUkp#m z%B|VU14V7d?VjP!g{GR6z+&GehfC*f%pR6{bP-$R{cU?|r4vQdHdF?BPD%vjriK)v&&p5{Sp(4yqE^ zdi}S=?>5U^baI>BL4MS3>&U^+$Q$~kXsNaMv}~Vt7|JepV9OAnYxJyv>P*mQAaGJl zeSb#L>!Zh`L_JFxFP(88V{|@xLV!|4f0hMCm3(xc|CYx_B$!d_G-&_bj4sts)rn%x zM7UY4aO*NM5Jd_SA*2se;>-}PuF`ACMPf20Uc?eTrBPqG|jg_IWZ0)*xDwzR5{M9Axo_yf|vgFOf&bR7Bve{`J} z0nW;FsJ+gs_{{KZ?Q z#%1LRXQDC*1)wAe@sMEK^w@SS^sopur2_VpYC!^L^3>rpvEuQ2ddgCof5L#)Irda! zHuhmZSq~Zk!pb;AZaJ;ZoCBG$X<>+Bl^<*KE7Scib$U5u+x5E`enSFax?7O z8k;swBk<`Qlz9KGOR9!;KMe-%R2+E{a#Wj+KJ>FpKUi2b6th%4RLrs7_iNP;^g_c9 zTJdEo7I&beLk~#r$9eF`e-56>&mJ~Mj_`0`rpF$cG7^38<&I@p>gTEW%^2jhRuxpr zP&?A0!)M?%@;@`u1B(7cZonav8fa<4uVrC1@Wx|*=%XOvV;AT6(=bUwR6uqqTH+}$ zUy;_C>QvA7t&1ca8VmY%N;@dFO|+_{Vq_gYuw1INfB3LZf})+`fBwVK-3@QfjIXD6TcfnWisEV6BjydJ2rRQhi3&yNkG$BOK#Nlj#uc4OLe5iQ2^y zGI%)~co?cW_BjOIy^GPQXGCZTC~WHS@(?-PP;xhll8Na;%nqXg>{gO$1i{~9{=&MsCf}_Z*Kwg7j6Jqe{+Ka zc{qHW+b1S2?*W{v-#_qfOcmX=zRo^PUR=7;T8WxFcjklP3-$-7s1=B_ zS~0Dl)d7 z`0hT>QQHMB#AWkq3A|ETuDE@Gd?E&3R{`mV z?o31-E7_U6lH{$Hi=JmQayzUXb6f8dbI!E@pfPDy-F0={p(Fhp@gw+MmG zmo_lV6*@x2y#y?xy$ds2#C$+Cq5RT=#=WE*BlFY#n`rsDZ2!sV;NbYAVEkkSp2cu{ za(H}@n)OUS@<|h|VZk7R9H#sgkPy+wK6FW} zo?6pH6-?Q;^3z-L@*BV{AF|G-8LHEv(Lom^e}q&j03)E%flNasLO5C%KDw%I22oV` zSlBP}(C&j^WU8YrB}C8DdXWjm2q~z0Cy`yNh#>+y3Weju!u4$@!m7Z?fA=uFm1qGg zay_g5ufhlbpW{v6M;|gKL|aD0uxYuJ`?9u*i^gz}2o*u!o)OAa0l_NSA~#nIZh-v9 ze~1AgiXwpBVn++O)<};$7{Os_d9b)j*;_EZZTvnbCGczKm}7Yai0rK{TSAg~qSb3( zRV_luM}<#Bj+Bo+(NoVAzTsO3A4>-xi`--!EeC!y@zc4GC#`gW41l6X3P$Vpf6naE?68MIXcBqjFr1RZ?nky;eiQ*U+X>ML zI$9n8TlQd;{{FL7{!~6-_vfzo7wFPO^&?N5)$Cd32&?B^>xhj(p|(?GHy7zlYp88d z%b$u?^wnQ1Q0}ujEqs+H%LT*=?~?oSf%-u!D>|RYA88W)4m6%sJlVr{JL>+ff6>X= z5<&~1d_mXx@^{#ERg~SnB%}* zd+oVbbDs;9bvZ@J0o2@vS*2Sve|_Nv3qrSP$(Z7rMWI%SCKM7z8+4@f<{ZpRwogBZ z-6@>}ek!kQGmp9!k>ZcT43lNF*W+#Yy)BwArz<#A5)!fvJzc;_^M{5Tj&;E)wt)}j zXTe5M{+8r#S^lQz#{8dfQKmW-O`P7suTj#9r4Oo;I22PkYkF9GL)p?wf7zKkPTkI; zy)|a40=1@u0cQCTzKvCNP_c?3Sfc)n_-9{ox!4!Xr_>z|Fy0P_Z?oq*GFmFDhGy;) z#kzsxUGwfM@Ci5+Z!OrhN}2-XnR=qYcn-?}>(-L53_tVe@#~xSt)##2Usj3xG7V< zhoCQV`!k^~ zi?`CDd($qCRBP<-DV-I2aC?U}Uv7c*MSAcDbFI9^F?!&o$uX-%yCy$KuldO6w^&)9 zSIXqct4eMyQgh0Bu|j3y^hDFdSGJOSXO7l0>P%Gl;Y+;?e-+rA3utg&B>u9<-0g#bO?VIVyy>_X`${v! zdOv5CkqCW3e=OW6A~OKGYt{NfBP!~kQb5a_rHmzSYUBUHcA*&it#V`lpMQ-=LklmC0Wd)OdC;xteeKGQU1L$x^WZXm&b#-3 z9E7A=@JL1I78|-@#Hu8&y656R4aXDVB~_CsxffxAo2IDHz$+x@ z06h+ZE0?kB2{BoF&+{SL!=xI>8-2o!);QNnWox88c!paYO))U|Yh+;7AKiNdlsvTX&9j3?GRtCFL207t zvz8l%!K2ufmMqTTRo6T!IRjx_X3}Oq0YD3aJ&RU!XLT!F8=!Kn~PL>_x# zGA+ZG9|d23;Sa^QX{6|XcFt)IN4;U_d2>k;-$CL&rDC=%Gg8G11-L-Fg%4#weqog8 zB}o&6hQ)Jm(ZF*EmTR6ea>9RK_g2ve)hcA2S>CHmZfOr2*APntV)}EZQ6b@DZTr zi0jKfA!k<|AU4qd06Jg-A|6e0%;VvO;u8i=@y$XF>|<{R8j zw+vG>k#?dGdPpRyu?*l=Wn&>42HsP!Td|;8*eRM>D#IXuwno37psFJML9qlWf78yk zmvOL%L=$2h@lmCQ)(T*wVMuo2gKHl0rwRJPDr~LL@kfFY6GYMJouh|>TQ-8sMal=9 zy1+wNj|b93Vk=84n8RT)1|!j@M>D>kF={Zfta|@Et1lH%Kme_)3bY~H%V~R^NkW>+ zbkNgT$^nvp9rtThJzVHz%nqRRDAsNQ0Enod7y&J^Y31`mIE`{m>eOJ$)M$DHRkbEFy)7twG3WTNbyoXScm1KljFi^5uF*7{!i(2 zued7~h5TL)3+RuCGz7FevKlpmP=C<3A07~3V33YxPtHj=2GxE#C)|YD&Nxz@b8znhKZD069lPb1`elFJ4pjm~lFTLggG;#AUZomi3fpe% zZojC0l+=$hD!nMTR?L=b3xJQk8Y1!$9u#ta(yfdD(02h4Ha-itqP1R`G$WPWD7<7R zg%>#56ny4Ni)I^QU+R+IoRLl(k=w>S?OjphZNk@E?{eM+2(DfnEY6p4%`e4 z3Q=fgKJ(Hsqr<*uMRPP=SE3WSCy_lN=Z_QB&=3{o zJT(o|S8x(nYvhbjk6K65A}p97K?60ts8OLD{@^W!p=QuF3|6Y78@FzXM`;{?tNwe7 z;>Np72QOYG$$&Y3RIVz%AHlw5)%gI{T zT4`Nt<+Y%dbz`epxvdRHGbQ$aM|BH#U{zs?&@38Gmv$;?!CqfZl|MG&!L4g#4(5K>B zJ4w+wPW8FYIlp!Zlmp_~*;b|z!vuv507dXBgSS}tVhP7b=faqUnLAEL&5?35_uDJJrAXL-!Znxca&TlR*NV@!U9ixK*a57>c z*?=q>2Y?UH&Ti{hjcT**G+GyJDt~r{Mv)}buzS@;!<>fP;z{EKk|Q8d>nqS~Zat^C zZXAF{dqQBmsbzpcq1Ua~gSmt)YmKmmXD>yWe}~G;a*+p` zHU#f_iy(~2gZ09IZjDBZ`JSkWNOS|`lXn%M=g_O^3O!gh3D1*k6?%TvK7N!N2wnMT zLsh1j@k7~ZD3U%XVf&f45+jvrGK_{qL(OK2)=oMbPVm(r^hfvTyS_120)1qelt=oj zm(kq|Fex^Q%#_A_9$;jHW>p?_&<*|7a^}vvz|~<1@kXx%*WW6$k}U`zbXb} zf4iiVSk%)?F#Q@m0z#bE;{l3#WM2?#f9}Ul=@2d4a#PE>sRy~KhqrK69a|}PY^B_>m2$^cIz=X*b+Lb`_s_Fx1P`Gmf7cY{gPSTzMUlgcxYLe5s_1KzQu%NeN!)HYx+0CN_PF!y%{9e)Xd&2kJx&rNSM?R#T|sE=OlUr-8f`! z%Qu+*7KK!*?Y&naFRk-ui*VeB?cIc!MF z?TYL~qy|b_g67PaV_VbCrok0xaGL;-(XDGcH(kb;I1i^K>1W-trs7kPXPL_OkBiAG zbWjSJ_Dxw+(z+3hIP2y$r|px%n#RTR`C`_^;3()c3S*>@;T>PM7UU7}&Lu6rmgTvL zj_)`3jW4nGh=RNjB|~mMElzo*e<(5CAdvgRExKWUL%E+u(2teTSE!khDt!81MP#3 zj^WSNi}wrab7r_Q7MWkWUtzjZ9>vbD?{=+A3d3HVcn@&1c=50EZv8)Re;Qq2;z{9) zwKUpuidmE2a+TQYRLjj?5nCk>Hg9N8K3l-DW*WT0DWgYvNNsccATkyEb$%;OqsaDV z;%c{#bN{~#Gb6J2RD8_-MyN86PW|eQ(`y5p*KVw^a`ABKs3!vyqTrVJ<>>G?t>o99 zj?Pijt7^KWsLw~Q(EL+^fAP{c2-8ci6Q-L~48G*uc~`FD3s7l-FKoQ86FXF6iTKU)s@hnNO1y-R;i)%8KVE0RkldIA#wJ^o?Tfhk3}e=07Fp@fA+1U4RRf_z7Y0adwK){q%m9$KFbMPO+q8+LgR3F8z| z%nKUSj+ct{xP#t5#VrobrgC~b3{VTwjrkF++PT4?HABx5Ud@LC5%-PPhswu9cTzd& zC8x^d(utg&Vn`@?e~(_^x{?cBteYsI0bp)eoyN)>pLB_sU(D)Vp=vTDr_{$VL07s9 z;SA^0dc^cpHA=|<(Qs2hKsw5MibsI5#7!_Uq7+8rBfbfu$S0d4{JuM!kZzQEjItxV zG3mlo>u6^!e$uO{Rxz4UVCoeWHP#W7>n0L!vUtlIMU`W3f3yH3iA|005T}ZtN+0i5*d8xS1~Ugk56CoZ3kzu#tLR_z)CR$)_s0 zl-_p*m0nJ#e-~ByK{~yp(hs-HitczhDn%bI#Ek zbOs^*lKT$rJRHq^UT1+u@&HsxB>!&gz6kBSx5a#18Q+dXDM?meOi5DP}EB^tS74_KA4M;=pm)iuiwzznzgnJy5yj+Y@R z&Ls}+Gw3u@4&$@%YM(0q3`i4)EhdcGcX}2^rAb`HXspXb<(K2IilEsaTNrE);GB3< z#af>p{uwZy%#1pX5OHW@nsvskE#^o$1Urc@Wn9b&E5x;v7E*c=45lP&z z4XU4_6s%^2D970BU0>WF3K(rY@l`kQLy9YkbL% zl?6kh4{azslUg)o1HC@*rx=}O@GQ0iy1|fzA4J(m2nO-~6QNa)7~F`msx*g$!M?=; z4pl$KP-RBG*bXSQa5A7!&c%gjQV|~{f2^5VSHquH>t0YaG)~53DwyQMb z2@bLICM+t;JIbr@#JesB@hh4}EW~;3+vRx`3`r2p2_?BM%Vi$VGEKfl8oB z1S!!fV2YFDpc6y^Co_@wlZ&!0g1u2wueh1xA4>p z#kBC;cv4G+(-uB&hJF_%C=}_(25N3Cf~jVqbqFAl!xJ4-K$w6~{xd1v$rY_d)W-Ax z!E$oo43_~)1R8&)$X+5->iNHWS>@#y-CVCIF#~CTgUSgU>Fy&coZ=IddXkUP;E4;< zL<+LzAb8|&dbuD42%q(va%{HfH2CgNe<#tG^MdlFU_UigNac-#phxkB2Uoxa?%qr^ z21QFsEEyvV1Cz@vM4JaH)U&t;5QX4fjNz+dhQ}D(nN@!UkfInR;Vwd|0F991fojR% zOT_5f=zjn00Uzj%1JD4*m9MH$wRYS7kccl3b?-s zsZcz5Lo}NHo8e^J6bPc@{I6^sMWhr)`6DNCNNk|Z*zZh+YtO8(4k&Bhe}$Ln^3bDt~f_W5hJ7X!5ZkU2)MdR&7 zRYH30-S0?L>v#Nz6rwzTsw_5RFSR z!+w{GraKx%6GrWNakn(~l?}w7?Gn@rpUsI9ciiONd>p20dp)ft9}%GGDAqhjFP&`gRgpb&pTqz1=qmPxPQGdF^2Lm+ z_sMOG$HIgUhf-!{68Ufzh&>2S8m$mDL%O7hxrALm*oZ6`F5ek3h8WR%mn>H3WcW0{UtoRGYB!Lcg0sgGD zG9FO@UKM_Z$Ye$rkEkdt>Xov2HA!yH>AYs;OqqfRG5#SUzG6G!fE($Acyqp30;Pi; z4*z)NN!=Q27wJRfH+&Sw0 zr?-@ZTM*}G%lJ`(!omfrH3n?&v!PPopJSw^bMQu&fmn(j!B{j zS4$4?hsh3!ba?kUN2M$*Qdf{k&oAW2)_^h9M6>sro{!?b=PRHI=6)(@i$& zuRW=|phAOXW+IhpWM;f?tW%rX!=xf^5OkzHHxf{_~px@C8lm3*`{xv z4fsVaR=#x0iJm5jt8e1%?o@k?vU>B%w1wvC zISo~8(#7}E${M>UXeVY)PWDNj<|d+IN_VeiRv)mHxy_Il(60dG%*)OpiZ z10M||H^t-_{(+tw`pzbCnaxXEb$H~@xL(v(Zs8kd3(0D(1X?y8_ZpKae8?Nnc53$3 zlhflDY$E9NZZ~~=Oq9!zW?00qZTP-H%W9#3Y$tW$9ND#{fnX~3rc3yKCG;G6o<}UG zHJ^2Ih0I8}*4A#G&T~;WUlzWV?xTN^$tdGB*QQn763t5j4#oN5hLUpc!?oRcsonw7 z%H0Yne4jg(tin&<-5AvJDC?R!wKVm>;7+t@)E$*qXFri$CkYBe=4a5fc*@AE2noxX zaQlp|(CYeEcr-oKT>CE0d%UqxGP_4q^ml58;n6g{FBW_TEv8{T~AD|CiX28!}zBa6#Ka5Z4x>7H3J)YH~>S427zDcxoF@flXUl z$w$MKI-}-NvVc*6s5^J1SLdi53}*WOj#8oIm}t&SaIII9G2z_0 zZT*TOs88wpnARP`?#fz_A1#bB#o1l1KTkXcRqqeHs(1ukxazc^UvBTN*>6!S%Qsi zzIBz8C9B2m`(ufD35(6deHG`7d>!iiX=5L?`){A_(2!nNEwgBq<2}mbg>VdJuM5$h z+PGTMwDyje*zcy5%w#iX^|c83a)%%ff%WQ;;Y4>6qHz!PnTYN}Oc%|x``eRKu6o!r z(u)xln@^$L=VzRlprI(ahkV);}jZK{zU&(AKYSmp<5J+>(QB>!dI^@Zn`Qe(5 za)J}3z#}06lcgf}h%;U{3-cb>3t&|RQWuBFcUsNQz8b`^w(_d8@ZaNTKNnNGFrs^M z>smzMUq=#8`7g_7I?bL)^}Nozl4s$_F`SZhi9NDk$I-X)eR#D@+l*{}!bd*=x$$6Z z!eN@MXA!z4DDnQ~yzdAn$|#w>^TCMXnplX<67?kcU!fh!DQgqm;hLJ42Y7Suk94t3 z=ao=I3BP#hL3frWa+^2#9v*M|oQgL=E1rS(aMqL0WEr`I-Fn9e7NQfm{|0J&}9xim9k8+QlDl+qtmDbm-a%OiF$^+y3a+(lvNK z(pNJ6_TQkJ@XrjdZYK zy{EH3Uw6UX5FhwAyZZ7>ozr_e8=`Ma8mIR^Z(I%zycyTX#K>tOZFlP%OAc!fRnz$2 zms-05QzV2!zwh@EnO`&0;l!7%nA>rfbY8KtB$eBUn4&uwYyS#4dv2~R-Hhg7quDc~ z8&27rb(ZwlG(>x*E09Y(>v@4vA)b9msf$)wo8sDA#`pDyTl*Gm8rFqA70*qzJv>uY zbwsG`v!-X>zON7I{ln9EL=)tseY((%53GwW$jZ2ex(IA5HI+NgFBpd+<~^(Ulj=`< z=n*PKVmY?Z6G~ePC*zt{5)J8QSSjtWAA`i@t%8!p($yp+qk@roNfIV(z+iOK+c1)X zl*eDQjL*(a@^+CG9X(xhogHQVOg>_k#Ym9HGjz;lxxLAwrb9Y*pnl@; zx{Ca3bHcC16yFUu<}wt9CMFBIWuK@s7WF)+D2(r`IA=Csbku&@^ri%+yYsVc(i!I{ zrpyuAQ}d~}+&sq?H}S`Z@uhV-IOOAY_@kZug=GE`aeMtT=y3yQaL@S~ES=j_+?30$ zmw|MYpR(Hua$GZO5<=)E9=2aPL?pSKeb?uX=k4(mFGC8Nbc|ljxbHKu9h2lqs?XVS z7fK1t7nHSY7>P5l36zr1UGL?N;qY2zR0^F|2u|cN<=o&8n4 zRVUHGIIuUlZ{JCQ_WD7yNh<7}lBF%`WQO+m9a7X;itW-lmd&m?mO8oyN9we&-0y+o z$Tblqb6?lZ=uaUkdCZy5+x%vc$J$g4-x)~I*e8wm1h=KOr$(_YSfKv_<4EM4YZ0%yKeBl6 zf3xIHa4jCLcd~U!CS|dzr&bV5a}pO5tPMNJ_s&KWtLqyq6tC56UT7NH?c%~o}g@` zvDy8t@k@=Tbf!iu-ecK_pgSxvT&`KzH>ILQ!Zq=Id2t(4Er+kSY0)5*H20RM;^@gv z2#XpC9~8kpN=2eoi23mP5vrpk5_qSOITd0S>Soyl4W6X?H&{vMn$9%7xrn$OC1Jsn zL?VxpFknZBm^&URo-Pr!?pycSv5#<>zw|Y}{Kx=z@~M>o-S^yxKMHpT;$__q;nd&_ z?b}YvH79yKbQjOnHkHqQQ6fR>X%l6siCRQQ<`^tByl6YirZW=q`0Dhj=pNB{_KGg+ zyoY_ObjRe3r`NwZ3Jl$yH?VwYk*Pf_@72NNsolYeC0Szk>i^vEQtrZBYH#O&*0K6c zSzCftuAr$9?RWQQNDa>MT1;?UN8NX)-GBBw%|z8x(gb#U6P9H|=EP?LquEs*Io;K@ zx4k_$2o~C;s?VGWKPD>QXj^R%PLpqKuwU(acjlX#HFD7cx%j}>^BZQtB4_E={Y&lR z$uDhhC7f2qOd3kXSa)+i(6ZNi|Gd6b&0F{`NzRMAUFXe?p9s>epnZH^=9sT;L6&2p z$DmU;u{l%tfPPh9wU^>*yu{3Vhm3=75yeAfe6$gz+~Ram{@oWk{c7_Anu~&U+jEev zQ^a&s>qd1c(qic`A^PN_=g0_yl7y>`aYS0rVf+3?yPx! zr?QrZe`;UoVnpWdBQD2^=c)G+0C5z@?Bo0!_YDe`n zJ1m-ux?{;b5!VDghMvkGzUGuEvRBFhFRmNBtgcM>AWbt{St)o{XoWrW!J37gD1mgf zSXO0c@hmg$Ux&QIYxUB~+t*9fmf4@PJ5t=HwbPtzRyx5a^+5!yqpjA`(rDu8XXBY? z=$UWeva(;1JzkIhpkp=VwXS)VZr>pL)v}xJk(A`>xgMG8&#pAyyzbOxv6Iy==Hs(^ zV(ub7n|WR1;~<$;N(SOiH2qM-4F}%`EwfAn6>|w6Ou2sK9r;rPVQrfuh}+a-wR=+9U7# z+eFecP8`g2WiIRTd0wWO`NfcOBi(#HC2*iLdpo=pG|J`2#s-g_C!*th+m~aZ*d}<&}t0{pFqV ztk^_pkCa8#$KHa*9t$*B7uw)`@}fQ*#MnH$#7UKCMb(LqpFTSqjMWXzEVI;+tDHXF zUOas8!xhu>Q+J|NO7bo#T&|opBF`##ng3Xv)~P7SE>hnS?p45UmOpN;(bOd8Z$qYy2Yb|XPouqSl@;B`cva+0nfq}%pE)()~eI^ zgPS8yk5UW;3&wBFS23QM&F}XM! z-x#r5dK8w+AJfXqPEx*K zjB8S@Uz&GWbMYYg>`;wO7?02GvWsWcnIDol@=E4~CHaUSFIbb$X{rh?2+iw=o5%NG?p1ON80E%FQs>*pzer7m{aNko|LWr-x#{9<#Ry?TUTIDb@*K%gX^QmYKB>l764w4S%MHjS>fQN8(6_5|m~+|z-&+f<)=IkwWh zs@vJ>%5PGAC?6Yi`*?%prg*{ZaAClKP==ABfaT})#O*iGCGzKULxfsiZCeyR9O$0n z?nBA+oWJa&@d5vc*u<*5KjY2s69(cHB2n$ncla`P7P(C#Pg!E*;+G=lu~;dVoN-ev zk*69gO99y4QB`zHU$XC!k%?+qZ&|k&6Z?5?(++>#}k!5THi2KEEjREaGR+2l^~BZ)~g+VLLaXt zc>{O9f8Hy_yzrWZuZ2DtK37d$md^%Jy$Ra=IHqg?ns%zcUB5L$!g1@0PpXs#bGCX^ zxuEelr$LMJ%G6N8kc*cgd2$x{IULi&QWVE`z}^4z;oMs%J$$p;%=)EE?g?!$26>N< zJnd)Q82#2o5#eha_ti_}A=alVY&3aRNCa~Qou-YuFTnOH$9=8RFv5N1N@1K><2M#m zj7!`n_(NkFi#M%4OL>Mj*!C@xZjA^SI7@xxQR4T$@48gzw8|s>*njJp{93&y>e}0r zoiA1L1DsZEwLTHqn2p=Cg(xia_S={j91xSKe(mM_;N}+N`YrQ>*3{2fDGH_<7cY@1 zQU13<-B$FycT9{)q)yc)ye{t+)PLmWaL3R+&D5Kvl}^pl8&KV}F z*^Z+rQncGgjaNV4km2n%$Tpr`cCIOj5Zx9qIg=*;mNkEIswe;0_vNCY?8GnRa#F~l zTw>dDT`tZ;Ni$jI_3q9VL)hDItdBjoQJD}nO|O2DH0{x`{^H_7x8VwGfd)|-ax<;Y z^s0{+#TUY?0)Fm6hXaLOSA`R&<@y`P7f2)iS}?>5H5)iC!+9QK`e|I++t$lCSTxa- zY9+I74qKV!9M{NU;Qg`ht7%5){)|r?&)AHwy_cM-TF$D_G8>Y2ko=U3#obSS<@%UW zjfjEEMQsn;Nz`ROZ)AAsas1;_48_Y|$7C%FOW54B%d#JK?QW zKTwnBX8Zvae@rB&?5nke51_Je$CAK1plmIP*kj&+()BL}FL`;%*Q|a5>3u zs(eako)t$*#0OVqBZw9Jp}0HTQ$9+gz3By&lgDzMgx*;`w}arFV$1FHo=q6UB%XhB(xq69N&P+qD#|1YPduFh0HP2zXNgCQnxK%3bTW9~3(dX;t;qV2nLySJ;zW0s(@Riw{|8S4*j1 z_bxZsEE`9Jp*b^^BJ+Y}d0${}YD@dNy*XSS{?+p8lRHHNlH=U8%vtz5kDrX#n{-& ziT5vh)<%vo5h^}FKED-q)^8AJ6cIn$ucXUFiJ$3s{{++V4qAd`j z|5UoJORpXgCDj#Kmk&#pOvVFWKDVTN_B%8jHqRY6|71K?rqpN&)<#V-YziP)be}aXPiMZLP6Dp2r$;U(ZDkH2U zET^tt!G`+~v7~+tuoP`SsH1)6Bd<&OaoPSCE0a}neyDlVg1g_yN21I+PvIYaHFeH$ zzo5rDbD@;>IM>MLlY4KZt?_S1YD^u$OZjV}Zp-uf0FS;_`lC9nzAvXwY_=I=$(in1 z3i~DdUr~R{D8I8AOUwSD$=hP^eH*6PU$J}gZ>AjG0?y|Pw;gE(G)fmfS&`^{Yf_oo zO3r9A8VJHiEltMuWRIkN5qXh$ULx&UEz>dMt%*VO^?CR4D@*im6-Ns-#q0xeai5A! zrW7u)kf~n!$X{jU8LT?T9gUqW_rgBuuzbH>oJoJ;v%Y0rs>9Nw7hTmCa{3FOSxmJY z*LYf-HyLxGL__Xe{G|H*fQyeYdX>HwUkV;-#AEF~^)Uw)|d6UvTL|Bmq%@jN-Rn%(15GQ=Gh7I_>#U*f5_twy2v3HyB0 zB&b8fnACuWPI;IG-yxx&VR?oq^;#{t>s!3e3v#0!i8lfhEh{{U<&2L^2I=9*SZ@uY1$V}u!prsQgq{!a38&Q<^NoHh*25RKlaK;yQ#-CVTH z5NNI&!n`2*tsAF>i!POkyJeuIJ+ayPu2&`J%nsZize|!4JIZ2={yxmnN$7RWHi_ko)}3#yid$Ai%HH4q>rx@@iS+y zNH!FV_N2c&p5+zO;NCB96f}tWO6*SMex+x>lK;iToL4Lgcl$HmJrtU=7S1X;ixtN* z5PzhT&`50S`8tT2niyP~^TjtlDR1zxjdaFVten#$-Y7`c==2-`aTt@3gKdrb@T1`B zkR-XI49xfcN`F&(*{dh$$gAd&Cf{t0wUe=2sAu~{283`Ais(P=m=bZBt)h#Zif zFhBpi+3`dodDr2Ts%htTe)=*ZqvcwxzJEOH#)mN1`5mpcq?3V1@|54IGV=fW=C{cM53ja20hXvglL?O1Y;RA#Z5I#Wo0O13K4-h^;_yFMp zgbxrtK==UR1B4F{K0x>Y;RA#Z5I#Wo0O13K4-h^;_yFMpgbxrtK==UR1B4F{K0x>Y z;RA#Z5I#Wo0O13K4-h^;_yFMpgbxrtK==UR1B4F{K0x>Y;RA#Z5I#Wo0O13K4-h^; z_yFMpgbxrtK==UR1B4F{K0x>Y;RA#Z5I#Wo0O13K4-h^;_yFMpgbxrtK==UR1B4F{ zK0x>Y;RA#Z5dMEVgpYIU5uJ-f$M$OVRX?@+-O{!Vk=k#i6l3BhJc8X4ojsA#-V#!5 zN<8i{AjhTLlg=yOi0mN3=Jg(iUbdb=>IwZ(Fa5y5Pd-O0nrCU9}s;&^a0Ta zL>~}+K=c982SgtbeL(a9(Fa5y5Pd-O0nrCU9}s;&^a0TaL>~}+K=c982SgtbeL(a9 z(Fa5y5Pd-O0nrCU9}s;&^a0TaL>~}+K=c982SgtbeL(a9(Fa5y5Pd-O0nrCU9}s;& z^a0TaL>~}+K=c982SgtbeL(a9(Fa5y5Pd-O0nrCU9}s;&^a0TaL>~}+K=c982Sgtb zeL(a9(Fa5y5Pd-O0nrCU9}s;&^a0TaL>~}+K=c98|NnsK&ufqP=ivK}}M3s5ZAoDSNl#T`gAuS3;N{ZS|DCv?M+dKBBn@=IW*Ud-F`$%Na z_&6#5*8x&KNckY;gOm?aK1lf><%5(DQa(ueAmxLU4^loz`5@(kln+uqNckY;gOm?a zK1lf><%5(DQa(ueAmxLU4^loz`5@(kln+uqNckY;gOm?aK1lf><%5(DQa(ueAmxLU z4^loz`5@(kln+uqNckY;gOm?aK1lf><%5(DQa(ueAmxLU4^loz`5@(kln+uqNckY; zgOm?aK1lf><%5(DQa(ueAmxLU4^loz`5@(kln+uqNckY;gOm?aK1lf><%5(DQa(ue zAmxLU4^sYryOfV}>k)M^GL~2dW-4U35kp5wfg;%>*Z)%Uaj^tRG8TkNg_H_$?!izX z^3539e`I4tSlq~dO8L9faw?Om{f6N4Ns)OG>{b?(NssTX{4(?W82Vu7gP{+GJ{bC7 z=!2mThCUejVCaLP4~9M%`e5jTp$~>W82Vu7gP{+GJ{bC7=!2mThCUejVCaLP4~9M% z`e5jTp$~>W82Vu7gP{+GJ{bC7=!2mThCUejVCaLP4~9M%`e5jTp$~>W82Vu7gP{+G zJ{bC7=!2mThCUejVCaLP4~9M%`e5jTp$~>W82Vu7gP{+GJ{bC7=!2mThCUejVCaLP z4~G7KyP=PB>vs)(mAzX1FE<}o!nyf6dngKbJ2t zH2-N(71uqCwit!zUOFG~Z^cN{Y#}V>IvRNRw5XqR;3CM&Rtyt?s}mvO=R|n;01=Ah zPa*a;3=^T9J0S|e>%njy`9nlUdZ>A&Aqa&EcEU$7pvX}F_eJH28|U^4!y@+2abkP7 zh|~Q!e;Y@;Nf`SSLyLTragm7c--T}OhS0V|2&FBN zl*FHB(s|ykUOIu>bO1gICHUJu4%-tUCvq?cVyOu*2x|j|n&wYC(RhVnBDcCsgmQAX zHn)+E9Zh8V(^5zNW6RESM2OoQ5zlTXDBQyh_MR-<$e-<284@FfhQvSG{Zr^iyVl0U zv3Rt!NGdxXIU;CF#Bk)#Q~rm(Zy+DqF%mR?T4J|Zf;zJwOW>Z|K)KuLA96ZdVxeOz zHYgMm?&J#m_D%hJoET9kz%U_2Z!rgG@cz*2a0hM;22BzKPm@G+clUn?>F`9($#>(< zS_>%(CG*!+@&!EJA>`b*_e?|DY73g$v;f_+e?!7w^z(+9a(JCVTS*GzajcVZwTC^!-DwT zz^C5b(VvoReYoUz9&$vHpPT_Hd5IxM6g&uM|6M#}H=fT&j`&w$Xb?X>a^`=R{Dw>7 zVG;ITjDXlb7sfqOru@;C5(_#uTHx^RlVGT6{*>BniQoY1k2(MK^Y+gi?t1rIYh1sb zJMKs5|9vjZkBi0bWpi(TyO+zO&v8H2u4tt39Y&bu4}paDxNWdeVPZ!GxRGf}%#Szl zKjd_FuWh)?#E&nn-}XVVAA^h%5gtQ2-(%?iv<9+U;n*6U?X2*2o`^z0jKvJ!|5H*mgXD>DthNH40#A=Rs^m%f%u9 zfF|&J7C=k>kVo-2!I?|-3L{%iN6_<~CuIRZoRMG|TX)NliVi34{GK6%l6}v!+-Vfx zltWvvZ1HmB2cH0j(ahVApJFQZpP#ME0LBIFmdyd<<700 z<$MWCxMSVdzm7uby@9&1LHM@33PS z+F~Jp@X@}*86HloN1RhE?ZFCp);{(!vi4ys(%w}Q>A6sr`o;AfdBZ8JBTPz!8~u6V zSvZu6?A9%+Li->7ANB;m7x1P?c5D>D`VL`M-65U~%a3;vFsS%T^QznF4ea*dH_LnQ zLIB!_ArAUZ=X%h+9ytBx&vk5>*Lq~lTo`bF1g8#%>CcCuhfrXJe)FPj53YN4%e@O8 zV1~B-#0NXuTIt{<4K>X^G)Hq7&KP?9^#}u}IU3-8>eGJ0O${|@tEv@&kwQ;2kq?M2 zf;qGf(}24k5X!wri^4;oslMS-FaV=2LKKXG&kPsVoqOJhHik9z?!h zntGODPfe#dBAn%YtL^d7X8t{{x!@6_{5T9|*l45KsyjFJUccFCV}(>dpWmBvnJQW; zlnRA%v9Lv0g69+GMdm?m+>sl*09z39aK=+Nnxt_V9>2LPzl$>i8*BkNcer(U=Ah}B zJEE1xHq)q35O=1JU1)Z>7~yuOSp}qjO)DoYEW;3Y59a@1H3?US-hVCqkY|n1iB!+q zVQ{XzIX66kBj?SdeLYc)mfgQ}YWBd^b5$%93PqeKz#hDLmUnyl8X-v+m&0l+6NFalg5E4Z+=&+Pb*)wzjykaj^;V0EDf7GM#zg zEJ7H_(;C#irN;?-q1w5+vfDMMRc~JmE@4a1ZioOM@7zs;;a3<@!yUrH>|{2)YU8}s zss7k(UpNiBI_UJQ18hN0B+Q*-x9wKv!fCeg6jwXf?SXZW6sg)*oYh~=>(_fX9Z5bh zs&v}@4!}+e)a`W!ooc7$4D1VkYuh^8PRi8>=gxW4hK8?uH+3~cqoF~sd2vziIfI|N zb?2zylpr%VuYBYbty807r!%;8x_0%)x*8I0koTJ* z&H|v{esfSy!*OVUu~LLUIn2pVgOgj2K+5mb1nbJ~!irzO@=#|dsf^oyX1mt8RXIAV zX;+v{$i6vxeJ0 zDR+`?Ko`v`L3Qogjoq%UYeUt~DP`<%nDJ)2?zB72{sv$M&8y9z++->zo2`27;8}qV zYO4nc4+tlgl0^IZi&JZVUNi@G%ek>z*mSl?)6UMY&bm2=yk`6FbwmbhfU4crTdg&D z`SYIie9?AV9b1jXSX;~)bo==kz3x?#k>n7VxP`jSw#qM=6`SjG>lZKwmv*~dZ|RBE z1BB`8b`oT#(l2kFEBgy`q(5lD8l0t=_N^)12G=x>b0hI}a{B<8ps` zdLjge8xejJ#TC1M$lnoFd54^g+`$Il<0DfCgwK#DN94{z%X@NX3m}6a74K3DhRICA zVZk7Qp{5Hw91(d?Nfn+iXI|(Jt%qP5yGTR<$2bxai}?+ygZ$Gnf+ECi?3|t9Y!;pK zp9E3kI1ss>o$Vmq17mpf3`S$nXLeHvzL|UP4{<`&q^)Ux4aSgcj7|$K;Ci-Lt$AY= z_6sE@F}=tW5*&yfA>aT6;!bh0U|JV2vq&<|Jz#zIh)O1Q5@{+d!n6!9G%$kcG}#W& zA73BcUcKK(I=h#i(Y`{*?M^#=Z=Tyd#K*nf z3W;!KHvnT*J2ko$`6@m%P<3MfbkM-=4V=qPtCmkB7=@rI`==L6)!V&h^)i=$#R(*T z8s!rHIqNhUuoupDtzTZ(!f(6VvuGQu!hc2nTaZscG58B;U;a^2us(PSQtSUIq<;oL z0mcIT|LN%|f~A3S$DxMmtuS2|PQDeUk$1nn`;KNSGkyH4bhs}GMJriseeRr-rxRy+ z62F7i4eY?(r4n9%c5`I_^ue7jz0E6sT{;wC3u^!!mrJraUkhvQYX1?i!iBK1FXKhz z(Ep5Ml!I5O&)oFQaKEXkZy1H%9(QgSIKvO*j}!0p0)I3?v)T7@JC65>CW$`-oFlv#|Wgw{~B9=cHxcS zGK>S>w}1s!NO0;XCv`JEcy%+3R#ySWKR_VSM zS2wc>T(}X^lY18gQLMKB?DjNI#3vxb4ZQ^E>)HS?`QV?Ot)mOipgpT#?IwdjWT4PP zLaAJIySG>Q>>6j~@pzmgbWtCF2_Kn~`^DmMW=u(@2^vne$7D)qLQ>Q5y86HETHB*# z{A{8X+FS)Ke2wC9>dQa{^~H-w6Gp%>&YgIn72<|BuHAx=Xcaf1Ru zb2RmO-aR16-eOkycbd>UBO z=>m)8b@}#AN1i*nbLY?k;VqXT$O$HYoj>*CXMF#~M<;r0QO{fM=pS&BSiZoFJxp6b z55L}1jFJanyQ7&qo$eB!Ee}`f5oN!kwsD4DRO2h-h_{mM?9Z#yIJI)IH(TI)B|UZ| zL!qZhKf;p@y=+&Lt#6{rJ-L7wwWrt29*3!pXvWeV(EN=m+dyn{`{_{>WfatZNinq# zsc~Z~{Bezwa=>y?^QP`|O8@WpTDxKT#1CxeB#F)D}! zg83*)kwS-zv)*N})h}7um><)N@^2QFsgCcXN*?CGn-mbo7igeWfAr1u6(S{nX5qn)=!G&Ek0URxv|!HN5H$;kX2b&tH#*Gry+3@Z zC+VgKJCyb9t0mB<0A(!Q}<&6@dB5esHV)&c5iM7vfWDPw~MD10u#^?r7? z0u{br$wnWB?i^*W&cY4dnFog>f{oAn?#_+8#?qSt>VaR@NIhSR*c9a=mOuZ8pb5yP zLn{sLYLx}86LZJXSENvX{l(OWu1LgLZ4GwuiDefhO%}AaOAo{T1M8r`#JW@6thHE9 z0hUL96i@ce&1GeAc1dll;+9(Z5U+f?Rp0>d+ds;ur~b@`(Gq%P?GwzYSFfQPR!~T~ zr$M8dh2pjN!0e*7i9Zxo8y+{Xic2V1J}m4V92TJOee2gbbezn8Iiy)%63QZH5UJyl zx8p|M-SXanDfaY^v!}3%a~CiM9%$S>IIpPAGWBEyy?F@3#H%v9&ye;3k}D2_DSp=( zH6yuzEli~*H5&T&D3Y(jC~@0h8cQW>c*AY0HCAlK*a2Y?f0&~y5s)X(L z2;0*vBg$7Jxas$Q@lU@7^gxKT$95DR;-4Sq!SE~oz$qvm5zJHALt!xYhd@DuK^#x% z(AA&3;SweVf1i7ESml8i#nvZ$4L}7Umv5A9d--Gmet7Wsi{z;cdu08o$n(`lEg*;2 zjR#%-LV|dFJ}WwOu=_C(0@OzJ@5K@UTeaKx=gRKVA1{V~xug>H!TFy`)HEzkAC4+P zJZRNV;J+L&sB8^i1T1bPvy9Lltl2%MpChkjE@~ey-%tHGSm0O7UCwz$v6c-}gc@mj zV95)3t81K;tfR%WB*O|6Q*z_Jz-fguqrdx%mM9 z@DQi>e{;@%v?>jiCW8WXwsfd|9H}428u+BQmq2IS zn}N;*eC9@gYhg#a_r~Fc`KJY+KDy7eH`=IcmUjoF>uYeXS8jnKL6XxQLi2-Vv;N;K zVC}T#6(Aw_w?zMzS*NUdbxJQ;O0|Y`?5t+>S}TH3x%3oQo%nZtrw^nuJ#y)nt)lfG zR*4@IMS~ORe|LeTGVf}o9b~zx5o;8}Du#@nmEP4Pju+AAPoM7nc(T0PhlBe`imShS zHL4bUx|;@fm*DgUDSzL=ZW5KRC|Y`Y>@?P3?x|`>2NCm1%!e8=J?F`gBOh-;ckTtt zX!@Lt9Zvt?s$5EsnLB~02jGCH#%l_2EY4sQjAK&#i-r?#v;_Q4%SDQZux2Ng`{4Rh zWIS{;Gxzz<(~XT`dNwu2&yIhyrl<-@s*L;?jPNEq`7U(*Ie)(!IScruHZ#8Z(9LGx zrWBs)+C~0T;y>jK9_!kN{O5@O9P^(O{&Tv9NP5jr==m@U&6<+uW&U%(e-6K+*Z*%n zyH%dS>hZq{ME{L{cI&(=>qnc)WOrw`UM#+`Co6Mw{+S>DjIaOyAO9ZJYreEpK8wfU z-cD$o6_I=4^M5f>7WwF(hzq!Ob~u|dc9hEX3`x@Q)O#Wh|0^0Y0QCT6umY>a7&Tmm z4D+q8^WbqVO2@!p#abO6saw22MX3e|>E~b>TG7HAqWOk(7Xaswz+-?*eSG=y1v8^Z zKORn2a)0{iCm2lT!ZWTq{xA2!gR7>X&T{U3*R>Cl{C^kkJ7~geuE^cNuaYb({46Iw z50amJ-*wNE>gUDeXDRuabKiB(8KQHB=$s)sXNb-TBK%vFza{xAEfuAyBDYoL;#DqP z<-%1iTjiqF!_`}>TjgG>r&3)tBkf49Rq3@Vy;h~y8W*o|=^7WVaoHLdtw~AlwZ^^H zxYydLRDV~^NITMNO?s_KuQlnlUJ%^Rf4Fd+%hnIFw+Z}vO#hzHzo+ys_9(Xp{weXF zGXFW?KZn~&46@yAQ27QGZ&2w56>d=3#v%Pnoi(Vl26fgrrq${y9$fS0il1uiQ0aMjU6hfhLx)P=%#?C$Lq8tw-3yjCi>tM1ywvS@ObW=a>=$y@b$pkX-w_2Te@nxkPMw*%s8qI>aP$=An$^8iHa6z$ z|B|(!_>BNKhaC#7DZTh?YoZyysv7@G#z^BgR8f@1L@V(7%nedTB|If*B&JNV{1Bb! zM5yASbVbpB)<(Ue@^6-@u3D?N`<>zmt9*689KdMt=Vhl|v&-jp4?o)VPTN5*O!!eM ze-(-)+b*0^xw3WchN>>iJ>Buaa}c}M$>~9I; zX$HY(#*cnwRZ9}F20l_w$=acK#Je;~toF%y-mF{_4`I8y0G%GFfF(n3>IxG15iW!n zHsfOuenmG2i!ivyc{SY&xTE39ZNUPFe@()NHG+q8#n*4YiEXcmJ;HXLFd)m8SBt{q z7lqwUapa0&-k=S!`KR85=DcjU+75ohW3f7m#>JMmpOxn*(Qbw%XEpGzU00A3r;_`L zsIvWa;pU=-y#quHCki{1q`irMKgnqjli%FphU18TDqHEPnmktdcV$Z<7C4(J4}A9q zT$f`GfkytBS+vgXml4PcP65`J;S&WX0vPC*9UcTaf9_0X>y8%Q#~W&wzN>cmEwz z^oPMxfBI%va+WbU)Kyr+oTENmh7aiaNm&wYy<0^Py!@5yqQaM6)g1a%JUeDc(u~2A zrTE@$`?}V2Y__(jb!r!NhX~K&=_wI3jZUxT*!^y^SI4v?oz`g9`vamY+s%I8Zadvx z^QzvnH64qdB%q+K&}_HRpWTse`r;?}T|WKKf2;HDtu)a5HNfi|mDoRj`Xt^ZQHTA} z|LT7NRPR0QFD8q>#eO{X{(9xkm+tg4+u%4@lkJC$cC9a4Xx$`9{W-Zj?k#4637n`& zFdbFIf+ylE@v93AvNA|D`9NSk%pP)@+ib2>E|}&@YTK}h80-LTPznD&iXj&KKVcbF z9*FXkOJXtu(zroH0phZC;tzqnvxdV@Gav50;quOx-xUQcf8KqXgdcvL=Vo#jA3nh` zJ4}icim>FT$EQ?=i&VCUvoij`>B)K(*(EOs><6K=CD;Bs?}5KrcWxZF-1}+}hD1-m zsyJi7hmM}jse5m=>lT{>{ zA(|qvu{T!MW%AvZpEoxRtWgeBY;H&DjfA!$I$(28%s^Q*Qx^>Ol>3_{ON@;9$S_>zqvey{APW4y(r@ z`aJj9K&5#6WZk=XZlOOivIL9-)sBf%GDp>lmItRiM_zpA01j~C$H2jnM1VqCbs%O> z*@rZwfA3*B%h4>zJ1rH8)Zb0}vefUE3)U#G+MNN(iO>gqQe0M{7A#?o`@z(k2mT1H zAuAvI%R4t*0_X4yv(MfHmEimV?F20tqpvLGqhRK78NpODe>6fw#b#!av`hyC-CjfQ z=$(+f%ClKJ%|9O-l^w&)sQXmCG01?GAN!*!e~@UmE_s@-r1nI(x+i*X-4nmgTS4$O zvZnr5&w}j`l7s6+)CvPy-cNQ_d2!l~_EL#oa0V8pz3LBP*TZ?0xg|vojX&@NquXnj zZET@1*`)jEQW8l!rU#`d^#G*JX(#URYenTY*=-11UaB)blXtKLa4Db!zAHBiNvLUZ zf9S#qz5C^q%x85tfC(^Nu-L=pat6~d=W{nD!%4BLtka1daVPMNyc=6qrg8uxAFyXC z4S?+}$>YJ58&3dQWgojs&jeTQVz=QxsnUQ37Jzcey0hgyc+;pkubbDkLMYJ^n2XZ` zr*yQEa=emqvXXL|O(_>vQi{8g?}*3Gf8Dt|a@9wL@U=K`SwvTGH?nyzY-P5{-4}B- z^vr<{M41)DGbvF7pn8B(eC0hH<>wMK0a`3NMO#yhOtYYyCUgw|6bf4)=TRs?=a$Nv zLNP&fpDK+dxkJ?eQmT^VL{OFDA)vJ!rR`g7*cvzNtMrH0!3XWV0X`EzdP}L%e=7-` zfk6AHuZyyAT*8X{;ARe(;)Z^I7b(Nrv`Gq$} zulMlPN1rlrO++(S(HrCo%4vwae+rV7w}BL(t!pBL$AnJBI}(+ukp~7<5NB-AyRN64 zBy94M!2PQ6z}^k-Jr=2byrug|J3)BQUJ`~b-MdH;A{n5(_QJUxg~8$j`rM_v%$*Jq zp~AIE7V8u?0S;<3amVqm!1LS#X#m_DB3g6|EErnCD@5#vpFP6RRh@C7e=sCK9TtXt zF{EF4?ncO=!oIhgDM@@NIo@K?kMBUO)LcSIAkID{yk`)X^IcQf7WdNf42i>|e^9)jB}8A*f78S{kR|-$1&6{j zwl?Kj=;eysrqEmU@Og?XeRv+=^<`a0o__x&mtN@Gde8a_V=-#0oXR$2WC3DH4|;rL zHZAK}{x=w;8-68h(36+M4xBU}569jx@Td4{|L9Vz4l0U!ak(Jckf|I1jvvGLu&Ngf z5-ca2f6CY9~h2IR3KBvaxk-3Z_iXa(JZt~iItzMZDt!k{}S1ULV|u64L; z9qn4jyVl9Bb-GK=wTh5mEWP3(Z3T|Z@Kmsqv5!}U6NDple}#ZSxH?V|Q4o-(ozdN7C%daD;`aZts*^4`H- ziGP;hXIZ7f2md^TkE7)C1PejJ;oh-X?@-l**0_q~(I0@nOe0XKs`LrALaphp52=YG zXySP9gp-a4f1X1HLb0%Ss-b`u9D(B)K8pzZDdZGOPz8bI=WNWy-;_wXSPaW6u*+&V z#S%4J#?nUwUlH?973jy*>>)y>CMy}li5{So!O~eP^_6_=s)#-7* zlHsT;f0l=3WV2OxIAYZQYl-Z1{G3>StIA4qY~SF@P-4*S+oK13I2+)SGa;E&`eJxe zR&LE+9w=%vZubp;E;QAo1Qz=)Ib1q-WA?Drr;FGk?{C{%E1f8swy84Eb5bHGC+DQv z-x?ezAUy7$mE$$>qDT+i`xb@BK>5L^W>Q1Qe@>!}NU+2N(!PWfid($%3@~a4U~KXL~`hYw0flmxJd`>A=R zGUg;<=0wsIqvUJdJuDS>zlZlNlH zt=E4`{BE<%MJIRI9pp#twvHV9jJ%;wik4c7Ps{dchoS6p2eu6Hxkk?#sO|)P1_CF= z)c0o;y*_$8O4PHI@zNRhF-GU3Cj=-(e`Hx;RLMv8`EPk_M1mQ$PJ{N}&FE4MRh=m2 zOoW@&3b!sJ15uQP%(Wu(p}^S?SWkctAzu3Y(X zbAll<_1y9{6V+RamaAeq8KlgsBqS<=1Mk~S*CB4O0yz|ap1U)4J~&3n_4Zb}Hh=M! zsc~6(!kMT{LIEgALOdkcHa)go3q34CO{suArCN}{nLKqkO{{qQo}RLlf2J^?b&fq1 znT>tePu7D*fUq(Sky}n{Gv`2NY+Be*JJf(=?TEg#zmIR%vLccvI_$I`n0^^Ar`!y? zw#KH7(+GSz2PNKr>yoOW-A{u%cPfrN2|21wM<4oGW)Li_8j4w}9xCQo?+3N&2YR7l z2d((B6^lDi(xC^W_v1Wxe`E*GbK5A~)cWNlmmg;n%XT8hGQeKlD+M@Ue$;{ArjZAu1rd6fNQg2T3=_MCNC~sX{|)fojdcp;S2T$sHhc) zvsy8&y0I^|E#hr|uGv=a3rRiBuWpI3DHTfcY1P^4AXkc}fBS}C?YklAY!MOXCf7Bx z`S9JJdfuX|+@4qM_8p?P2??dy8#=&wVW*Fd zR|Vxq2_ZBif9KPP8OL;2#M9?}>k7$l6fy6Kvp7`^^$4C5k8n!jgA(w4>xChTBf3Qh zbiTBKS+39#D()p<5$#==*&^lxstM(n9yIPH~hMh6GSCk5jtEAT9a z9(#BJHI0cnZbWsL?+e&N5Tfr*FF>)+Z!R+}}e0Z?J>AN`zt z7mS{Fg>d3sxNm6|nqIBDqUDpck+J!pd)(+Db&D^;VCY4xNsSnrtT!i_ds$uALq8lY zNwFhke-F7U#0T3#&FPj8#{4dyScC2|1{G2frjfE&=N3_659auOaj4~rZ84+o+ z@H^|ek?1ibnmSXgmFSG8z~8r2GcIszC@ypHg;d>PQNUchlDaTc6)MRT0J*xPrPPv& zYw^^YCaPe{zLlTel9%5AZuyXPHqB6-4vh}Fe;^^GQUMqNl@4SYDiOlbYWV1?x)nrG z?jnD6ARb3od~M}BmdpQ@K&M) ztjP7O`o9Vz0DO)&eII?um=J9l5yPhCQtr#zDlQtsK_XNHeS1bIQw0R8WQ*KfF}MNp ze;*?TgeZytc8eV?;94U+@?ZpqrR~AuDrIlM^tSQ)oRq+?oMVpV5g@X+dTa?v=80Cn zb6K?rAs-b!5jj#m`b1AXm-vQn9egYud@OR4akRYiqlur+O}>gB)wcniGOy(BYSb;gmu8236hf288;9YP9Ckml-S(phsM&6a zPSDZv0NAnztMvDut@5Yx0lPnU#lJw0E~+1S;;dHRGDlcF?^#D|3<|ZKBD=XrXIevT zgIfMnw4$&6Vu5m>)oJ0YJXtOvR(O}(mk-nrT3ONgJpM?N@OPl`tm4TYzS~jvf49wU z&Xy2b2;~d9)|bD-h8;fhhJrqu_J2CvlVo{*K9qhrR6@_2`%l)vf$E6AkB*YAdE`G@ z#S$+jRy~$oR5C#C-+Ynm!xW*L2y{|s;dOx+a?a1$+19&EQ?a6#&2&U;?@;FgrNJBr z?#k=Ty_)-6sI1E=N)Djr4$Lauf1>FNFIW(|O-sfU*DMOPN;IL6FxsFar8nnbUb1}# zLF`WHB=A#tWt(}_wTKjd9A=m-qrE6yNwP?qM<~|ZuB}*& zrY`rQNieUt(Eg=rUvV(;fBs6GHFrj`HK1Cm?u?ZFga%6=TF)o(ABl*Fqv9u+1-&Ds zv^VK&t3wS90&>xs+WvevU5-41mBlxj9aPJ7!{;4^19tJLz|Vq!-QKvNPeOBw0i?u} z81*W71Q^OV@Ns9*sdcPB9UZ}}Xyfy7sJ3ae!FX|atS{1sKbULfEsoIxFHMeFE!s8tL3+(cM!&_% z`n*ymPhM4WYmu5$){7M?6Q?JdCcd(j+&go$o>6C_!Vh2Se`Tn^=3GF7E9*=)TBTR4 zHI98$y9>RDg&!C0iwjvadDT)*D^TDY+R=fLLT~QQ=&4DrmcC+AdW#wFzHEl+{|W12 zFhS+Bie5}mg~NTO$XJUo7%hkVP)yaK43szIKH1h`sUq>0MdofF3~a)Cpzlq`{n%HU zA=djjtBgeGe+y#aMiH3-&|Rz67aCDf2bBU^-YjJ-c~cwz7q$z<*l*otJA2(H3LvO_ zoUM7$Zmz8;1Pa&7J4|NNe46qKCCx|~^Aw1b&k3V78MO2BGDdd?YpRUy4%g-!t<5>k zc67gpobU-hDytc>%1B`#q*S}h*@BVN>RcH4axtXqf6v_McsZvjMHP&p>^dOSNT#P^ zLZd`{MD5Sx$l3HvAo?KvxTB?2KP(&5LHYGsvE#k$>;UNXEpd8W)iAY!&!2cAJ(9mZ#|(MHAo^ zl5>C_?}AI0&=UtS0sEJs9|jXeefJEvI+|i&@Yl$|tV5WIjGxFM`-@#el_lB9+U2;p zdR-{VqRFjKIa+YTjp8&PzT#42`Gkd-t|~f)hmC7iErI#(d6%Cn1v?54-1%2A0tMRR zW|yB72O0i`$B0t7P2B>eW)Kl`%!Z*(j9?2|=Wd)^)rq9}L7zU4GS6Z?- zgI8VisN@WUahXZm<)JU5Y0`%cMxBaw!Q-&q!pK2lf2^37SmL*wOln!BvKJHO8AGff zqLKD{6OB|!q-x+=R<_rY$`+q#cN{A3l5d1es&d4mNpk(z#OJgdgmIF@(jInOk}^#a zPbj2ToPL4QOa|ArW&t@+AF(%N%z}l~yH5~Paq36vdNqh&1`;>~=w#-NsFBISc?KVD?0r`bdqL(C15E>TGL8FQ1 z5Xj{Ks3zsH2(A@fC2?6~rgDFz-=54oxigV@CA|#tEkNfk;h02EgY~Ca+C;_|aQsm| zA6kY#YD0x2qPsnc&6Y$?wy(AVor28XBSt0de|AYG@FA|cGp4J7l@}3OF{um@2oCalXiu>aW2dHFRi;1!9Bvt=Xd>-IA@q<) zRAae=Ta}H4Xc%};!EVKZYGJ2nW~mH=f7lxReuAos^asTfr2I`g+g`@O9uiH6al}WJ z8d^JmjfNrFg%7TI$e$+Y3#+iTLf0P&MobVzw||Zv3U1g4G8ZWyaOwgNVLiT+CK6j& zTEQF+i!m69K0TW8{ftqAk!95f=UIKJhyns=T~(kB*r4{TRHlQT&QcDLf9!Zr ztLouGFJpE9rAM)L697O&1;x1Y$gl(F9-WpcYlQ@D&jNOqAl{+`SNWmxUx-x|dV!zK zIiO(TFQ&LA{?J6bwm18NSB{5n!gsQ1I%smagx)2f7MfS?viTrgJ*33u&e?u~98h`p z@>WV_o+w-(QU~Y-v^>n^y;_}%e`eLO+ji@xpMe;uUfS(;y_F?H2w~WO*q(p)!nGWj z$;RXekxT|HKdU*9FM}yR%&cYbl0u4?`oTIZADtW*PK)Twp!9!Ar+dX+u_)yCa#%or zM5H00-I3L-8HDmwppA<`VYNW-ca=Ty6B59oQCES9ZIW-5&P~KUhPVZmfs1 zpgH46dCtMT3;YZon{@1!U+NcwbvslE5J@tZ=npR8UVD{lj45opwtIu3`cYCp%Bb|B z+*&bPt}OsQ_G^g9M|e=ke@VA80zlsdK-l;!+=|wEWzvjPcBAl;ofKZ+Xjf#Vrn{om zCrqLT=&06=2g1CU%+;cF>N@f?tRIEN>yswixgI|UB)7ghMH7i<<=H7C>YzF58?UpZ z{x6zsh<&L`ese}TaYSw#_q2CKjkgJ3Z@tTT7a+L$aj-aF#xcL|f2N5b&ydh7pGz}$ z0q633iPuaE21B~$#4~SL%hJKFQVpXWgTTQZQ1iq;D7r#hM2SZV(<50f0@*L58x*=w zk%WjnkVlAKXh~ZIno(^~=&2?6(Gy29Y<7uZ1aZpN zqIFTEsdBDXxl*c7e?C9ovKFSSVP%^k+ayYXnJ~mCDb)+6ugGs*A}d6pnfc61$BYj9 zo)yi}bX|!~lJ^rA+Ea`=O{7>1fb+b~$El5X6(E*_GbNR~fv;!WT<8J~|i1EX>?-I%tU=^ z+AtE1V3^+xMj_gIx7ylFsUnj(X##Au*BmsfcFXDZ>W$_XYg;93qpvm;I!}qxNbZ|q z=#vXn7@>s5vA8&$0lVVf1AH(iiIGY*8Aem0p=L8h zYbTuzC;0L%^hfvTyS_PA0)1qelt=o@Jt@F$bb*)U9tSEZCW_3I=6oJtWP?^!9(B+S z{pE7z&U?VsVF~d@uLRfQxOqPZcAm)DE0>T!1Y>`vq?B0HYYg%5=YH&z4vS8)n44P4 zO)cl99^|GT=B6IyrXJ^}p5&&U=B1Vjxv9BhE9H)@lsmRk?$}DXV=Lv3t&}^qQtsGF zr^w^8D)uk+!Fd+#Lryc;V&|19ChQK+(F;m{nKF#}u%#UIEu66}u|ufIHAVT{rb<## zWbl6??zHQVD*D!>ltI?qZ>Z^pbJ^+$I2IbnDvAO_%W{ zzQbur23fDHsqj?fSf;Z5<6`m(6_i4zeN)twv~I*A&U$&xY5SzGrg3q6zL@neHVXQT z!VoEBcgMG_1$jifb4iPDWqEC)DDcWB9Z6;{Af^oEfH!CFWP|SD3DpL$UL#+gcs$MD7YnlIXe7J>-cr1qjOaBs+t}t>hsYn6#tZ5yz~vS^wR5O=_Y>_gAaMP z-leP90@Rt{3mfn2#LQW1Yw(Xq(aJ*Y4*8CsLLF-ixR&)Q0`|5tO|&bt>QvLNRz7w^ zJWCR5fi>vT(wa;q*!@x|q9=D%Q|iH5rs{2uazZQw`5HjIy`{Iy>O)F-NPIo9V^>zn zV+o4rzfh2aeJg2$Jcq1rgkygqAd87i!5nokOxmCIDp^w+en;q2F4)BYY5ERJKviCr zHDrd8hgN4p30PXkhCLoc!Z$?}@`47n;t`-M@e)jYC`FO@ zh);qj@yX^0yYCJsq#C8(qU;E7Ou8`DI@(!-pY&>~Rg7j7mwH7*ja3BYx{1V@EZ*`) zQRUZL?H!UiblKuvS;~KqAUvb`GM@Sir6Q+v)n?*#i7IQK;^h2K+hZi1XiW8O-6Uaa z@;l;CcFPzkn$BE%)K|%@ai2*~h$5|>W~8%}M`fg4O+hls|KT#ijXh;2u_LMsH&Y`| z)+J`lshxBJ8>#Pw4?!`Ne5#U5>3vsF>E(2KQKcWG(@QG-aLa#8K9neTK>8T_*DP{K zL8Mr6+{6g#LsH9FfNnunhm}s($O@%$QePa)$LpMYvz3KB0W-kW}o*yg)gQ>8D zt4IV|p8@JH)C1A*Vi{t{NTQ5mc3;5?u{(&f*k)_Km7NeAxfmX#^2(BTB|0;yTs-kT z??G$Qt~wuCuu6YQ5^g$UU^Qeu%N`9YsD{JBTy1bW9})i&iG$gt2!yk(JoG%%aY-Vh z1d_1rEnyC{l@n6<3wCfe=Nzp-XAt5qdGFA^!_nI3bp~i84?vAXa_`38i_pw_Tdc>G z?d?dELK1iIyd_Btp)jKMJfERPvdW@++Jl=iIzs(kyy<`D-Xlr?v0%hXqLDlHfK?fL zn1Kco~x3T;kt8gH9vmFFp&ecB%5ufHd*fV#26hr)ObQio{h6 z#=1;2emM-Q$eI1Ig|YSk&WSfwto7;Pp8?~^%&5~ye$Y}e-%zmv+D5V-9rAH`jmfpg z^nFD~5NdyyYeDvQO8s7o-wvGO!SRtAM_zC>Rv4GKSc>p#!s(Nz^z?P33Nlh>T+VXx z#nfkq*=)TQ@v{fvqB~?WA_*I|LGx2|g4L`LnojoV{fA(vFh9lx5Xj5#D>+O z`gCLtB-v1#Q!zp;6Gt?%K#_L{T$2YE6S_lW16F^Dvq}offjFHf;x!l!mtmqZ-1jhQ zVeAQqtOKyp)Ft!}^C>RhmP>VBcZ^hpHcAq%tF4Ob3)!IN47q-{L|vselg>)y%A`;ZJLI zFDQQ)8oji#sK_%RQrmWr*mz}(Om1O&DSg@W0Z10*<~8d<2QFCzEG{!ID$MNRaLI88 z#tEbu=1rM@Bqr388gpQkkAi!YpE2RglCz08A59A8%6emk7uMly2q^`Yg74n(^HD^1PPfK!S){d991KvN^D}1bf^5{Lt)3TK1mHY%?jBMpAgF`y}$F}nOg!9)YD5J37{Yw=XV>90Q<>RczsL*H8~cuG!- zE}-iY!bOqf$OA+=a?x5(pb}^jK}xg=nBwF(<^)l|$xI~f#)sC@ua0FNS;@gp>d0*Hs>=pM5A2L$`|(iS%O=6}J|_RI?t?Is%Z$ z;fanZAWT3g|Cw~|ifTYS>5FqyfJR8~K(%D>C1P`Jbie=hcn|c(0cZfj%2!pST03r{ALq(PJC+#R z+S(bCl`$*H1{DU`3qAH%1>E0+G$@|DA=*s;&G4~p3Ix$_{#Q1RB2o&2{E-hiBsS1w z>~|)^wPRLT2b4AMzrxA%amwiZ(*JJ~2d7<%W!DsZvmaVvOa9ivTK z2!pO3W@9_1n!)(x-`9@FY|fXn#aml3j^iT>S=b7Ne3_qVV>jCLz7hD{Cn^u*pcsC9yK)*o>+Vvz`ulEc3t~4!x;8 zhEDC>cQ}^s`#A8&UXPKTnZ3#kq0DUAqiiWcCaMrKIEsF0mmRtVW5 zTffKq-S7CQpYQMQ&-XaaIOX;H+Y1JWSHM(W%jWe_i2gkRj zQcq_OEcGXGdWj{t%-d(y@rbjyD@vMqt=cd)T@szXQWfgbH?7G(Eth6n^>s2T-PNq@ zwHIdKczK@ey;9N#)fEPG)qbwSXS$LPc>0kEMNga!%{ju?-7Ge6%RT#64GL8~dEHl6Z3q&6T~@g4>yq^Or`OrZ%u!N0@^!C~bE>cW zPs-{(-cxuK81U?u+y>mLtD(@EI|$ zHKWAES-2l?op^jmJ-Bh6^YW%(V{ZWMI$4y|uxle_Jic%)&*%}Mz*!3+wb1D|MiTFs z5`|uI2noKAm>0}$eUUt^*HxNv{M@wP#NENlXzL&L&DU*?Ka72W; z&b#JZ6KH1<{injoez5tYgny z#RLZkuy42(zG0b;kF(&9!BaliLV9K9aQ7p^`;+X%LvCrkRdp*@vk$nX2A8tOkP&(z zcGM)i6u6-!+$H{3Rnfs|Y8+z7+hc@0CL)I@TkhhYS2RH@cVD`Y8g_(NJF)QzB1>P0 zZ_2S~TGy@1_}QY-=gP1cZ;n=wMl}b+S8ZuKkF0E~;#P;IikFII$30vY7AbmYT!js` z$^7TS30Y*2k&^^87*>(dtG=h#iY1l1tX?^&4j{m_B$68@q(SJG5u9vn@2yA2e_rjrxxmcq|QoUHifw|MDVbr|o?F)6Bx0Wu|GO)GR$CZ2yKF(uO_H;ex%L{(((5cO9c(gaQ@A$cH66EVz zc*f6=)COFcdw1Df&VVqMeDL97a^6XmsHJJI)%#5G z#Sy6mf35bnbNX@8E6YUb2chGw%piHAS4mU#j1O2=D-tKqWpv)1?2&m&!BusLGCcnA zN1C4$q<0ZJ1AJN>CFB7e39ByJDWm;%MfFDDF09=9jRpR~hGX@p;f6^;PI8TpODSqGadW|yEE|~+Bcj8hK;CYX(lXpg z7qmF|kZrE@@{OBX)#`mQXu`bmjWQ(A2%ih{YCPuj-EEnudfs~JyQB5kAMR6Lj+>ds z+uRY@IH_8=R^UM$O~{X1U@hUVv|#S<@*;>fIT)T<1a`*OvSup&aya|&ecDj6WTqJ ziFxGqjoD>AqU;P$frj-Y>b$6hFw3`tcYM;Pbxg1I_noR2?-n5o|ImItgTuWx=T-UG zd*b%?tF;Afj9PYW3{m`V-Ko`UUWbyT$E_|1RZT~#i#ytSPgf6Vl%mAw4cs^x4w(?s zsms_%9r9%jF_VnoV;_34w!WDqrF}-5qk9RX*xHapMq(A6@jb{?xliLpjBdBmjJDS6 z#nfAeKeL!>SeU+;v>HE{G`D4Lvfg1jch6LDqKa-O`gL}E1>Nx|gBV$3QT2p8ZujxG z8KfJFOeFWuAH9n^jnVo%=&v~Y(_qHrZJXLlg;Nd6Y^7Wz{UPN=N_&8s(%<~&dD%8!B936D`==?+Fe>7zsjF10RW?(4s zHbbG`#DMvb)g5F?Fq@Zc+u*p^s9r*Q_!40hUarT>Q+BO1YDN}WSw4hgT$0+6?ZJcR zPaGO&PEoZ|ykh8C_WUZP=P%26l!B!}niQid=6pE5V^|)WY43B%D7JCMGx@24&BL(@ z^G6&O<^w$obMmiPA~8>5`9vK^)$#KqehFkh*xT)fUGZ04lE&6(!z ziMQGA0XN0$4DR5c;nWF-zTSkB9}d| z;Xy-G28n``Iqf{pvh~-c>QoJUPv?9v#m3yMvmD_hO z=Nt?VUv4xQJ4sMhpPYTflxo0~^FkCuN!`H1$+XwsB=5D^-l`cx(eQ>>+}5QJ=wTiC zJfp2dLLRH(i95(1AQ?=_e9%lW8}mFhD5mpBIN2nRZdeoLuW1asd|Ska>JQ8hyHBo` z`8BC7hXn- zQT}TZVH(q8aVdhu={2$6&3R2@yrrUpXgfcp$bM(V{x4(mFkca_ij!DXlj@};@}5T* zf2RLzD!opfUo@Gz9&8jaMcv^o6M@8Z`NZgaN#n5*z6 zB`4g={J z>1$q_z0f;8E2LIykfL(=>mud-FVh**2bWffnrpO*MD@al+io0=WvyYj8cwUdsydJw!NLD)v{oLiNI=4xa!ZCL>ggM z9?>awei7>HM@3Hy9~8l4#v@7xNCj{jk>_kAM{x*|)B~ifR2i~y+I)!*ud@*^ylF}O z?1-ew5V7LWA!6(#j2K%y3dfE^+^6GPtlmAotW5ns_Vf9Oi1$F=!3=VEk|BFaGB zzm(sRLBDRBueQwBiru9$=h{;%+kS7)G<$+4k8wM>84EwCe-iYyu^)dz$-hw7SLu=Q z!8xHZvVT&%tHouDG&w2H%ipUk*6saTZlP{r2Os+*xrtL%B92j*(e+5V*(*ciNr!#( zrzd84ldS`iigC80(pT#EW^}x73JTE{EIl|8s3Suh{$w+J>9Z|V7dmBO&r$%BI zIxQTHrv|Ox9m6 zC#2hN+Dfzt#D4{7b0565EX4dl+=;p+`{yr-gEX)X5XT%SwE!A`{85?_F}`8lryU1U(lnbyFnr}nk^VFt~qNDvJv9VMap z%M@v`^r&!S(h<{eT%^qspC2a(Ns}W=#(97!9w(y3FgLFY)ksJ36s_fxJCNPm3g@)1 zy@8XNaRINvx6#3$H)}kmgY}qP)l>=LPt^ed*$D;m@47wtQIlESFJ9yDOO6iSgjdP6cXEt5rn*RjyaY)X@$ zO8c0$z#Zq$H8CTtEBN2ilt!y_$1N?I<`cucEiB@m&~H+ywrsgw5XI}M5X&xWEpTI< zA11zb=d)p2N%Kab<_bp$$HgIXfwuUL(2(nf7hl<6Qj?>?!Z8(-xXm-hBC}pqgWvgr zl?Ahm#d|$i7t%-NGB-&(7tU{wv9Z#|7*1)egiHi%|LjkHyK}14etCJpfA~GV{3{=f zBiZEzR?#mfL@Yg}m-1FFQ@?gcf2y%~SGa;lq^*d2l4wUOZa!wc;1hZ>PR>(rE|Slx zcc*nS5JP)+V(hG}@Q#}DSC`6UYxI$2JgT!9b>FnCO$pLu+Udt+XByAB2)z!ww{b4B z=JE%^X}Tuy*mN72nRls!)08uVZz^U=oCTB^rjgHJ}EzO z-{HsUvdJ;Nok4yot^nI*HS~^g`_ayD&Kvg{>zi8#a^GFU3S7s0=)xi+6Ktv_UQJXM zc2jbM+nO{4e)`^9N~?1QF>`d}@3$mt=XK(pGD9(43batJkPD!|En>|QvQX;C>zRp@ zn2e-~#q>xBXy2xJs{6tt&Zsp^7Ej@gYbnix1FCgF#xdUGfm_KDGISpO7l>t6+RA0y z&Gu=y9R7|Ks*&oy}R~|Sc zxH;-BIfG$NJ-teazsz&ymz`FUv!B0dll^FFEnS{0+<8J@{CdQ0T@uxC zc*g+sYKgTkaL$3QF!5vNz$csF(d?b1D=}mQCpi6?X{(%gH{(wgKIY_CrnMOo{dKCr>ABCz`Lb@CymZNXO(_nsu215q%02F~5eFIi zvPQmiJxp!<r-}RIDQT%k!hEf>ynP7*7?&`gJD2baqL#U5nPYsj z*U=%XZdS$hG$&O0o(u5Yo5PoiVKN!59Mqz8*`X9%IKnBEp?QV7<7+t@XXw;2@d8&V zx6m7V61)ZG3?%l*FU~Jxk4D+tRwNmAt=rM9(^y#__$& zjIoZ7>2TpAsLX8MQoizQiN-L%PPq{?b2H}GIN#WC2#L&^J@#Llv&tVI6J&||U{S(J zs_3Q;d>21@^lOaln{Tp>40@G^p9?)HdQ~$nlS=fSFNWM#rVIiQr(~+jb)1K@_VhQK4^O2RtYI9AMz#b2>fiGRbBjV2| zXN4G6D%(x-=9jBhe92G8OQC*5ce3~1sO-Gh^WDa_`J=~IFHFy2eO1%B+)>(}# znT`I;w~RbR%r^}(eY(Q>MdPoLjmOr@jxXsa}+l!Qt&mdYi`f2Jw9f6Yke zU*BvL@p7|&Kk4UXb-#`BmEpJpR{&>b6hfjt)PD=(A(7ZCvK2k#!Vsu#wfs`2M7H-9 zru&?fXz_zY0Y2OY3ztOy=jL_8W6DF-UW6+`lVkyBcyAdwU;r;I-9imV}71N728%FopaOLH92p4@t}?R{xb5R$do*hin|^oDMcZee*LwH ziz6vNMp8A*c6Ghib8n?;)(S4kgzV`1J!>g2D_Hu{CQQ;BSO38rEE0Mq^P0$keaqRmShg^ZOS8{C(==SmOQmCVS`XkQ!ob@9{y zKSn)wsji^QPmPX8ty%r1LfK-GOPBliBQA+AD>2>9AC2ZQZxg@$d{^pelRNk>d9tMg z=M(COaP^dz;q8IMHH8Xr8mEOu<_LI5&Qt|exFP+(o^EUicr%i8t zFLskx{`Q$Zzr*@*t{{)KO^?|VYfke6#&uoa4erd{UJ!_CKKqrSFnX?Phd|h&cs1t7 zX(@WH&Ac-uuQ;|am}2ZL{_gX&?viplpOfso+TqAMGHvyhc*0ZPNBox(e5J3NjAp;W z5xi!tf4-}!W`n7E+Us-9q38VF$a^jUW)e+elL7*Di3e5r1p#iWD~kI4uU~P?xoYs{ zDv;Fph^QU0r|_cNC|)UbpEYfIUNG69&y;#WVD65xkz0P~0H$&6W917SW@$#7HcNZ0 z)gK$KZ97$8!XDbk$2W|zW8_VJ4V@dm@V`DfF!SL`4(Zu%D1miiChh)!weXLsGJ_WK zboeg<2YuS>ZY$p$qb&2X2qhVR5M}hb_3N@FuECg!EZpvCA}w+zE)nGvzJ)%pYeMpH$?Ry#UgoGYcD9(+31CP|UH zEqn`q(0EIqLE+}pt@^L(m1_rRF(e!IRvSK@pCng4t*bJQYbzdIq1_M-nJK+sbooSR zz%?VW6PI`1W}o$~*;29BQMRz*xaxWSmt}FgUH?3nw_N$jrgylQBi>d!1ch`AX6x4` z%*r#5JxYA-@$-#gnXsOc0F!x>=~CH9J+ljpCzd#)`*WW5}DfFf5 z-bz#x<1(f1N*le^M$bEFedc$rRZ5LH(&<>-`ta z8cn*TogVoc42-nRj7cq(_;orj4Khfs_uK3&F=XtROe=5<<#)*_7n%rW6)`pYK8+K+ z7DFkU_Me0% zaZT9KH=J4mH$14-uVu`3wo8?@rgjqGhs~e8dd>_Ly1XexO=V|Yem2@Rt#jf+=`~If zoQe1Kk6sDTh+eleM@ZI=3s20JCnn;gIaBkDyH+}wEsdBB8unt|ps(O8qaPWicWk_YwGAN*W)*bB zD#wF+!ngb$7uR0JP&9R8j#MwmJSH6_u*wjTyw}pK++|HiXu&skhBUzB6!J0nME~<# z9lb^tmc;XsMXV?l$63pqEftB^J6YD%gx6mh4QbxZ8&JNPI^j9t{lrSXxonVqIsa+f z&Xlecks?=`?3eF7VP?Y`%88OSVwYOX70$@<$vu(OaV8cQ`G%Pg^tA3*&Z&IDxHLy~ zy7<$(oK>d4ud{-042X_9&fb)BSvuf+tE<1_b6=FENTya|$4*jy!lw*$YUZ83LN6xc z;h;r(8n=%#+>!~^Pc5pD4~gDxIa-tTv=L;C4{i~sh93*~W!K}2t|`blNpX$QYpVS| zAER&I!xsj%cLxOMFqT&2FA-JViqW@|=X~CG*Ho{5ka&A!u+O1h{!(?Gtj$bAj=T5a zgI*86oANcS_rz9qHBJA#-__A@x~kVof8@SGKj&odSIS$ft^-5?wH6KLWgGe+KQmd zEZJIV8r=BKOc^H$T7RN>?viLGK*@8vhpihP7=3R?BI zsav0Mge+uwRGv9hkgmBf874$U%K0)XT*_HjqlLu!gZBlq)i7cs%r|>RY7z6illL@! ze8wYmbS2yfidecLrkl!@kG?{t6PmGg2ZP^gaOZi^l3%q==iv5Pa&BeC3<(0?m{uX0 zBU_ROxg5i$A0~!N6-+xGQd8#PRIX2pf4`n}(@N}F$q(d%mAon~_lHSChOgO?dX`l8 zAL4`;G5_*TeQwx>mStm+{2)MBE~r0xqO^ojl>nu$jfYQ*LJ3sY?}{(ESDP=d zcEvBn$J-5E_4q6F+@9bZ-ajE0FMQ!Ys@eoe8$!s@dp&zZXbWGItQQN}{~iF@17r`7 zJwWyV*#l$`kUc>50NDd%50E`T_5j%fWDk%%K=uIH17r`7JwWyV*#l$`kUc>50NDd% z50E`T_5j%fWDk%%K=uIH17r`7JwWyV*#l$`kUc>50NDd%50E`T_5j%fWDk%%K=uIH z17r`7JwWyV*#l$`kUc>50NDd%50E`T_5j%fWDk%%K=uIH17r`7JwWyV*#l$`kUc>5 z0NDd%50E`T_5j%fWDk%%K=uIH17r`7JwWyV*#l$`kUc>50NDd%50E`T_5j)cw?p<= zcOG%JCpf-Wn=k)YtKSVVIudB^4HZ`-Z*cH-BO*=&%6lWobti&_ee}iyeXGVB@uQtC&xc9Ii)Z82TL%63$QmhCM?+yRK+|wgN)`aYP z!@sS2ir{s9R2XsLlmiOIgba-lN|Oy>t^3~ttb4HT!MX?Q9;|z??!meT>mICoumICoumICoumICo zumICoumICouAezIT$}#}GbJ+Di>9Fo$@XaTzxn&!P^2=k{@xIlzrXyO zzTXX>S0UEi8%8Qrh`sT4Ba2cbtcdmICoumICoumICoumICoumICoumIE8|90yh>(1|5 z_pH$i9E3<6jB`90))A~P8i!p2W3@<)80nam0Y zZ&$O|Vxq+ck`dDJA$M#e@xIONZJr`fI4_x9~DMiIOTvs zF}dKN_@fp0nUItP0(!DBtbPA`fPD}4J=phP--CS*_C475VBdp%5B5FS_h8?HeGm3M z*!N)HgMAP7J=phP--CS*_C475VBdp%5B5FS_h8?HeGm3M*!N)HgMAP7J=phP--CS* z_C475VBdp%5B5FS_h8?HeGm3M*!N)HgMAP7J=phP--CS*_C475VBdp%5B5FS_h8?H zeGm3M*!N)HgMAP7J=phP--CS*_C475VBdp%5B5FS_h8?HeGm3M*!N)HgMAP7J=phP z--CS*_C475VBdp%5B5FS_h8?HegEHX-(&rGWQu`Iaj!Q2+rHloVeNa(KSKYq_q!o1 zd#}7Vg#1I@??$lHJri<*jf{P7xcndQo*Wzhk9Uup$RraZ8^=2LzXv$?;M{|A56(R} z_u$-va}UlvIQQV(gL4ngJvjH^+=Fuu&OJEy;M{|A56(R}_u$-va}UlvIQQV(gL4ng zJvjH^+=Fuu&OJEy;M{|A56(R}_u$-va}UlvIQQV(gL4ngJvjH^+=Fuu&OJEy;M{|A z56(R}_u$-va}UlvIQQV(gL4ngJvjH^+=Fuu&OJEy;M{|A56(R}_u$-va}UlvIQQV( zgL4ngJvjH^+=Fuu&OJEy;M{|A56(R}_u$-va}UlvIQQV(gL4ngJvjIO8=QN8GW3bP z+Wa2p{xBul_>WKoCHf97-mYfPM2)s*-ec6;;Gy)j@$hL;C}LvNZbCdYTI!EltaSf2 zq&y)WttUoK_J?=>vjHtl(~b4+^|f(uX;J^qflWaa8_~@8_OAFSB#jQ2M#b~I>!pi! zp67*qTrZj!6QGFpsnPdyuAV%DheAaVqEPH864ZbGSa@J33T#Dl@4ME_?pnBB*p!i1 zXjZYmr$+C6#V$A~?mwm`+QLV~w($Aru`jCkuST$y$mM1y}>5oYB=xCLWdM~qYsGfv(|rp z;lTgXj`0Ek60tz=Pdk18LpwN;$lYeNFwK7P-7fItEeNA=XldhGu&wTw^iL-yR)o>_ z={b?4k7%lWvvym-i?#k|s_3}{3UTZX|2-SUUuPrq$JwMI%>}6F)j6xmzqw1j^5weqqW=0lT(Omo1MicgkV=qn=4t9wB zQQM(UgcRhXSrJ78B8J_A-Dhd!UK@5dBn|#uWp_J{?vqIM*LEEKV;zkiqUg8GEXZ6h znx1CluT8<0B6^+Ji|39!qSS$=MKJAX4v~Gb^d-kky)I&#z+g8)_KyXWk=Ay!^1emi z`o8P$79rRn@kbE@qS%3!+xPX{|Ag&%T!k1>qQhlDY)%qWNMM`(`!yZ-|2DnefRJ>e zC1}3>)i1W{pMLR9h>=7uuw!?n2F)nCPuBmZ-ycVj_D-~t*nU<2bHg7bNuotK1(0MF zV)EV7-lrPb?Ho5wYIl0p|9jZ`T!>=Ds9}e#6Q5?_rPb)4Wa>c5}aTkw)uq zu_CtBXd0URvhsGb9`TVz4{$LeqV;G}M9~wEcK2oPm%Y=2&DIwnji%z|MC5z1pV<3l z+4W+xxCQ^6bN3!4@^{uBzZ3;~kNUH^t*xmvUVH5&1XfP_n;5%o{k)LJNC)@<8*lbIGtA+WGELW zxAUG(NKg&-v9$X*-TMgK?Iph+yG@&yc454%GA0W>l~fPWlupho|5u=^~6xb - + From d5739815b4e1d1002f38e511106e676ff6a971a2 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 10:54:51 -0400 Subject: [PATCH 111/182] Weird VAG: DC motor idle valve not ETB #1637 --- .../controllers/actuators/electronic_throttle.cpp | 12 ++++++------ firmware/integration/rusefi_config.txt | 2 +- unit_tests/tests/test_etb.cpp | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index ef32b12da9..6ec1ec9ec7 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -99,8 +99,8 @@ static bool startupPositionError = false; #define STARTUP_NEUTRAL_POSITION_ERROR_THRESHOLD 5 -static SensorType indexToTpsSensor(size_t index, bool volkswagenEtbIdle) { - if (volkswagenEtbIdle) { +static SensorType indexToTpsSensor(size_t index, bool dcMotorIdleValve) { + if (dcMotorIdleValve) { return SensorType::Tps2; } @@ -169,7 +169,7 @@ expected EtbController::getSetpoint() const { // VW ETB idle mode uses an ETB only for idle (a mini-ETB sets the lower stop, and a normal cable // can pull the throttle up off the stop.), so we directly control the throttle with the idle position. - if (CONFIG(volkswagenEtbIdle)) { + if (CONFIG(dcMotorIdleValve)) { return clampF(0, m_idlePosition, 100); } @@ -748,13 +748,13 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif /* EFI_PROD_CODE */ // If you don't have a pedal (or VW idle valve mode), we have no business here. - if (!CONFIG(volkswagenEtbIdle) && !Sensor::hasSensor(SensorType::AcceleratorPedalPrimary)) { + if (!CONFIG(dcMotorIdleValve) && !Sensor::hasSensor(SensorType::AcceleratorPedalPrimary)) { return; } pedal2tpsMap.init(config->pedalToTpsTable, config->pedalToTpsPedalBins, config->pedalToTpsRpmBins); - if (CONFIG(volkswagenEtbIdle)) { + if (CONFIG(dcMotorIdleValve)) { engine->etbActualCount = 1; } else { engine->etbActualCount = Sensor::hasSensor(SensorType::Tps2) ? 2 : 1; @@ -766,7 +766,7 @@ void doInitElectronicThrottle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { // If this motor is actually set up, init the etb if (motor) { - auto positionSensor = indexToTpsSensor(i, CONFIG(volkswagenEtbIdle)); + auto positionSensor = indexToTpsSensor(i, CONFIG(dcMotorIdleValve)); engine->etbControllers[i]->init(positionSensor, motor, i, &engineConfiguration->etb, &pedal2tpsMap); INJECT_ENGINE_REFERENCE(engine->etbControllers[i]); } diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index e3bde63fa7..813fd55734 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -826,7 +826,7 @@ custom maf_sensor_type_e 4 bits, S32, @OFFSET@, [0:1], @@maf_sensor_type_e_enum@ bit enableInnovateLC2 bit showHumanReadableWarning bit stftIgnoreErrorMagnitude;+If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.; - bit volkswagenEtbIdle + bit dcMotorIdleValve;+Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve.\nSet the primary TPS to the cable-operated throttle's sensor\nSet the secondary TPS to the mini ETB's position sensor(s). bit unusedBit_251_12 bit unusedBit_251_13 bit unusedBit_251_14 diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index 70a94c977c..9f48a11887 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -83,13 +83,13 @@ TEST(etb, initializationDualThrottle) { doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); } -TEST(etb, initializationVolkswagenEtbIdleMode) { +TEST(etb, initializationDcMotorIdleValveMode) { StrictMock mocks[ETB_COUNT]; WITH_ENGINE_TEST_HELPER(TEST_ENGINE); // Enable VW idle mode - engineConfiguration->volkswagenEtbIdle = true; + engineConfiguration->dcMotorIdleValve = true; for (int i = 0; i < ETB_COUNT; i++) { engine->etbControllers[i] = &mocks[i]; @@ -231,7 +231,7 @@ TEST(etb, idleVolkswagenMode) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); // In this mode the idle position should be passed thru as the setpoint directly - engineConfiguration->volkswagenEtbIdle = true; + engineConfiguration->dcMotorIdleValve = true; EtbController etb; INJECT_ENGINE_REFERENCE(&etb); From 48f808edf5964056e11b27b801f99359b5849351 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 26 Jul 2020 14:58:12 +0000 Subject: [PATCH 112/182] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 9 ++++++--- .../controllers/algo/rusefi_generated.h | 6 +++--- ...ngine_configuration_generated_structures.h | 9 ++++++--- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 6 +++--- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 842444 -> 843236 bytes firmware/tunerstudio/generated/rusefi.ini | 9 +++++---- .../generated/rusefi_frankenso_na6.ini | 9 +++++---- .../tunerstudio/generated/rusefi_kinetis.ini | 9 +++++---- .../tunerstudio/generated/rusefi_mre_f4.ini | 9 +++++---- .../tunerstudio/generated/rusefi_mre_f7.ini | 9 +++++---- .../generated/rusefi_prometheus_405.ini | 9 +++++---- .../generated/rusefi_prometheus_469.ini | 9 +++++---- .../generated/rusefi_proteus_f4.ini | 9 +++++---- .../generated/rusefi_proteus_f7.ini | 9 +++++---- .../com/rusefi/config/generated/Fields.java | 11 +++++------ java_console/rusefi.xml | 2 +- 29 files changed, 91 insertions(+), 77 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 22109f436d..a553c99748 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:49:43 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:57:46 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1759,8 +1759,11 @@ struct engine_configuration_s { offset 976 bit 10 */ bool stftIgnoreErrorMagnitude : 1; /** + * Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve. + * Set the primary TPS to the cable-operated throttle's sensor + * Set the secondary TPS to the mini ETB's position sensor(s). offset 976 bit 11 */ - bool volkswagenEtbIdle : 1; + bool dcMotorIdleValve : 1; /** offset 976 bit 12 */ bool unusedBit_251_12 : 1; @@ -3530,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:49:43 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:57:46 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index e3234d33bb..e43e800901 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -276,6 +276,7 @@ #define cutSparkOnHardLimit_offset 1464 #define cylinderBore_offset 408 #define cylindersCount_offset 400 +#define dcMotorIdleValve_offset 976 #define debug_mode_e_enum "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44" #define debugMapAveraging_offset 807 #define debugMode_offset 2092 @@ -1075,7 +1076,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3815423868 +#define SIGNATURE_HASH 987820688 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.3815423868" +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.987820688" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 @@ -1460,7 +1461,6 @@ #define verboseTriggerSynchDetails_offset 1476 #define veRpmBins_offset 18528 #define veTable_offset 17440 -#define volkswagenEtbIdle_offset 976 #define VOLTAGE_1_BYTE_PACKING_DIV 0.02 #define vRefAdcChannel_offset 1470 #define vvt_mode_e_enum "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index f4fe42d90d..7613941c1f 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1759,8 +1759,11 @@ struct engine_configuration_s { offset 976 bit 10 */ bool stftIgnoreErrorMagnitude : 1; /** + * Used on some German vehicles around late 90s: cable-operated throttle and DC motor idle air valve. + * Set the primary TPS to the cable-operated throttle's sensor + * Set the secondary TPS to the mini ETB's position sensor(s). offset 976 bit 11 */ - bool volkswagenEtbIdle : 1; + bool dcMotorIdleValve : 1; /** offset 976 bit 12 */ bool unusedBit_251_12 : 1; @@ -3530,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index b7b3fd6d59..8b6d1733e6 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index ac63b1c703..3bf11dc0bd 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index 3832fa85ce..cb801038e1 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 7dfdb6e365..95d6f57d6f 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:49:32 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 83a6442f2f..c9c989b62f 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -276,6 +276,7 @@ #define cutSparkOnHardLimit_offset 1464 #define cylinderBore_offset 408 #define cylindersCount_offset 400 +#define dcMotorIdleValve_offset 976 #define debug_mode_e_enum "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44" #define debugMapAveraging_offset 807 #define debugMode_offset 2092 @@ -1075,7 +1076,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 777282534 +#define SIGNATURE_HASH 4158533130 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1343,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.all.777282534" +#define TS_SIGNATURE "rusEFI 2020.07.26.all.4158533130" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 @@ -1460,7 +1461,6 @@ #define verboseTriggerSynchDetails_offset 1476 #define veRpmBins_offset 18528 #define veTable_offset 17440 -#define volkswagenEtbIdle_offset 976 #define VOLTAGE_1_BYTE_PACKING_DIV 0.02 #define vRefAdcChannel_offset 1470 #define vvt_mode_e_enum "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 307b8047e5..7021bdf241 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 777282534 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.777282534" +#define SIGNATURE_HASH 4158533130 +#define TS_SIGNATURE "rusEFI 2020.07.26.all.4158533130" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 90e8ecb91a..2d1602d247 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 4040363781 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.4040363781" +#define SIGNATURE_HASH 693715689 +#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.693715689" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 90e25463d1..42675da543 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3815423868 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.3815423868" +#define SIGNATURE_HASH 987820688 +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.987820688" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 728e3a57e2..805f19bdc6 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1739240808 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.1739240808" +#define SIGNATURE_HASH 3189831812 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.3189831812" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index eb2cd69b6a..7866c8f3bc 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1739240808 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.1739240808" +#define SIGNATURE_HASH 3189831812 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.3189831812" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 05bf7d560e..8a9ebe40e0 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3678976866 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.3678976866" +#define SIGNATURE_HASH 46331534 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.46331534" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 9ed6d52717..2443b73b1b 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3678976866 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.3678976866" +#define SIGNATURE_HASH 46331534 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.46331534" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 64f8cf12ae..da47de303d 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2747601449 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.2747601449" +#define SIGNATURE_HASH 2052022213 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.2052022213" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 9ca6a38c0f..e2af03cf26 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2747601449 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.2747601449" +#define SIGNATURE_HASH 2052022213 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.2052022213" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index c1622a30fec8eb258a0ddf0f12183d4480217c29..970c3f6dcfd4f38db27accbdd952eec9b3074b6b 100644 GIT binary patch delta 91429 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 - + From d35a6e8d2d7f5b3d0dc217ce06d231c0de3b3aaa Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 11:00:57 -0400 Subject: [PATCH 113/182] https://github.com/rusefi/web_backend/issues/83 --- .../com/rusefi/proxy/client/LocalApplicationProxy.java | 2 +- .../java/com/rusefi/proxy/NetworkConnectorTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java diff --git a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java index 38ab9bf28a..40839a3e98 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/client/LocalApplicationProxy.java @@ -75,7 +75,7 @@ public class LocalApplicationProxy implements Closeable { } if (isTimeForApplicationToConnect(context, start) && relayCommandCounter.get() < 4) { - // we should not keep controller blocker, time to auto-disconnect + // we should not keep controller blocked since we are not connecting application, time to auto-disconnect authenticatorToProxyStream.close(); } diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java new file mode 100644 index 0000000000..7ea4085a6a --- /dev/null +++ b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java @@ -0,0 +1,10 @@ +package com.rusefi.proxy; + +import org.junit.Test; + +public class NetworkConnectorTest { + @Test + public void testReconnect() { + + } +} From 0bbe159e38fc487e59d2293ecd9319603e3d5194 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 11:04:32 -0400 Subject: [PATCH 114/182] Weird VAG: DC motor idle valve not ETB fix #1637 --- firmware/tunerstudio/rusefi.input | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 8bc870fb4c..3e4e7b67fe 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2868,11 +2868,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune From 573ccbbd50cae36fb9918dff26f8ce4856e63cd9 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 26 Jul 2020 15:10:22 +0000 Subject: [PATCH 115/182] Auto-generated configs and docs --- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 843236 -> 843596 bytes firmware/tunerstudio/generated/rusefi.ini | 9 +++++---- .../generated/rusefi_frankenso_na6.ini | 9 +++++---- .../tunerstudio/generated/rusefi_kinetis.ini | 9 +++++---- .../tunerstudio/generated/rusefi_mre_f4.ini | 9 +++++---- .../tunerstudio/generated/rusefi_mre_f7.ini | 9 +++++---- .../generated/rusefi_prometheus_405.ini | 9 +++++---- .../generated/rusefi_prometheus_469.ini | 9 +++++---- .../generated/rusefi_proteus_f4.ini | 9 +++++---- .../generated/rusefi_proteus_f7.ini | 9 +++++---- 19 files changed, 63 insertions(+), 54 deletions(-) diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 7021bdf241..ffc9cfc866 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 4158533130 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.4158533130" +#define SIGNATURE_HASH 2076618072 +#define TS_SIGNATURE "rusEFI 2020.07.26.all.2076618072" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 2d1602d247..01c02a6775 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 693715689 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.693715689" +#define SIGNATURE_HASH 2772550075 +#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.2772550075" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 42675da543..ced9535154 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 987820688 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.987820688" +#define SIGNATURE_HASH 3069735362 +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.3069735362" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 805f19bdc6..d31fa28852 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3189831812 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.3189831812" +#define SIGNATURE_HASH 842562518 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.842562518" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 7866c8f3bc..91388e3ba1 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3189831812 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.3189831812" +#define SIGNATURE_HASH 842562518 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.842562518" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 8a9ebe40e0..13b1fb0c26 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 46331534 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.46331534" +#define SIGNATURE_HASH 2396681692 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.2396681692" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 2443b73b1b..68f1052c4a 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 46331534 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.46331534" +#define SIGNATURE_HASH 2396681692 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.2396681692" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index da47de303d..93cc7f457a 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2052022213 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.2052022213" +#define SIGNATURE_HASH 4132953239 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.4132953239" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index e2af03cf26..c4e14a012d 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2052022213 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.2052022213" +#define SIGNATURE_HASH 4132953239 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.4132953239" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 970c3f6dcfd4f38db27accbdd952eec9b3074b6b..fe5d3ce52dd57a81a3246d3b1579a406c9e15a5f 100644 GIT binary patch delta 72353 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 Dl1t}n delta 72192 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 ToiJD{`kP4+1}o1%pnv**9*>tM diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 8ce4cf6aa5..e6ff9f12bf 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.all.4158533130" + signature = "rusEFI 2020.07.26.all.2076618072" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.all.4158533130" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.all.2076618072" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:42 UTC 2020 pageSize = 20000 page = 1 @@ -4162,11 +4162,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index ef67ca3898..53591bfa0b 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.frankenso_na6.693715689" + signature = "rusEFI 2020.07.26.frankenso_na6.2772550075" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.frankenso_na6.693715689" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.frankenso_na6.2772550075" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:40 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:53 UTC 2020 pageSize = 20000 page = 1 @@ -4162,11 +4162,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index f1b3920fd2..160701fb9a 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.kin.987820688" + signature = "rusEFI 2020.07.26.kin.3069735362" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.kin.987820688" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.kin.3069735362" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:57:46 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 15:09:59 UTC 2020 pageSize = 20000 page = 1 @@ -4163,11 +4163,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 7fc78a92db..bd13e32e0f 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f4.3189831812" + signature = "rusEFI 2020.07.26.mre_f4.842562518" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f4.3189831812" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.mre_f4.842562518" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:39 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:49 UTC 2020 pageSize = 20000 page = 1 @@ -4139,11 +4139,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 99b20f077a..a06972bb6c 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f7.3189831812" + signature = "rusEFI 2020.07.26.mre_f7.842562518" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f7.3189831812" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.mre_f7.842562518" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:38 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:45 UTC 2020 pageSize = 20000 page = 1 @@ -4139,11 +4139,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index 3da7c9b1b4..87f77e645e 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_405.46331534" + signature = "rusEFI 2020.07.26.prometheus_405.2396681692" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_405.46331534" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.prometheus_405.2396681692" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:43 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:56 UTC 2020 pageSize = 20000 page = 1 @@ -4158,11 +4158,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index af06058245..71eae5bf63 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_469.46331534" + signature = "rusEFI 2020.07.26.prometheus_469.2396681692" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_469.46331534" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.prometheus_469.2396681692" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:41 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:54 UTC 2020 pageSize = 20000 page = 1 @@ -4158,11 +4158,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index b821b346c0..b517a47d1e 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f4.2052022213" + signature = "rusEFI 2020.07.26.proteus_f4.4132953239" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f4.2052022213" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.proteus_f4.4132953239" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:45 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:58 UTC 2020 pageSize = 20000 page = 1 @@ -4129,11 +4129,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index c936aab18d..5a550cc7eb 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f7.2052022213" + signature = "rusEFI 2020.07.26.proteus_f7.4132953239" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f7.2052022213" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.proteus_f7.4132953239" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:44 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 15:09:57 UTC 2020 pageSize = 20000 page = 1 @@ -4129,11 +4129,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" + field = "Late 90s German DC Motor idle", dcMotorIdleValve field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune From 86dd5cb8a936b8d97637c61a770f120cd7847fbe Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 11:15:57 -0400 Subject: [PATCH 116/182] Weird VAG: DC motor idle valve not ETB #1637 --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2475d828a3..3f516cd520 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,8 @@ See https://rusefi.com/forum/viewtopic.php?f=5&t=9 | Release date | Revision | Details | | ------------ | --------- | ------- | +| 07/26/2020 | r24635 | improvement #1637: DC motor idle air valve for late 90s German vehicles | +| 07/21/2020 | | bugfix #1592 injectors could stay open on transition from cranking to running under certain conditions | | 06/17/2020 | r23656 | bugfix #1491 major performance/scheduling improvement | | 05/21/2020 | r22961 | rusEFI console start-up time improvements | | 04/18/2020 | r22231 | Renix 44-2-2 trigger support added | From 3857607fc239e26bc5c3a8eda9c2b72d6e187e2f Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 12:03:36 -0400 Subject: [PATCH 117/182] Weird VAG: DC motor idle valve not ETB #1637 Seattle we might have a problem! --- firmware/controllers/actuators/idle_thread.cpp | 12 ++++++++---- firmware/controllers/actuators/idle_thread.h | 5 ++++- firmware/controllers/settings.cpp | 2 +- unit_tests/tests/test_etb.cpp | 10 +++++++++- 4 files changed, 22 insertions(+), 7 deletions(-) diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 20d5cd196a..24b5cd488c 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -202,7 +202,9 @@ void setIdleMode(idle_mode_e value DECLARE_ENGINE_PARAMETER_SUFFIX) { showIdleInfo(); } -static void applyIACposition(percent_t position) { +#endif // EFI_UNIT_TEST + +void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX) { /** * currently idle level is an percent value (0-100 range), and PWM takes a float in the 0..1 range * todo: unify? @@ -216,8 +218,8 @@ static void applyIACposition(percent_t position) { } #if EFI_ELECTRONIC_THROTTLE_BODY - setEtbIdlePosition(position); -#endif + setEtbIdlePosition(position PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_ELECTRONIC_THROTTLE_BODY #if ! EFI_UNIT_TEST } if (CONFIG(useStepperIdle)) { iacMotor.setTargetPosition(duty * engineConfiguration->idleStepperTotalSteps); @@ -239,11 +241,13 @@ static void applyIACposition(percent_t position) { } } +#if ! EFI_UNIT_TEST + percent_t getIdlePosition(void) { return engine->engineState.idle.currentIdlePosition; } -void setIdleValvePosition(int positionPercent) { +void setManualIdleValvePosition(int positionPercent) { if (positionPercent < 1 || positionPercent > 99) return; scheduleMsg(logger, "setting idle valve position %d", positionPercent); diff --git a/firmware/controllers/actuators/idle_thread.h b/firmware/controllers/actuators/idle_thread.h index 0f6e6bee39..b8a94fa45f 100644 --- a/firmware/controllers/actuators/idle_thread.h +++ b/firmware/controllers/actuators/idle_thread.h @@ -20,7 +20,10 @@ public: }; percent_t getIdlePosition(void); -void setIdleValvePosition(int positionPercent); + +void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX); +void setManualIdleValvePosition(int positionPercent); + void startIdleThread(Logging*sharedLogger DECLARE_ENGINE_PARAMETER_SUFFIX); void setDefaultIdleParameters(DECLARE_CONFIG_PARAMETER_SIGNATURE); void startIdleBench(void); diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp index fc4cdff7b3..e06e6f91d1 100644 --- a/firmware/controllers/settings.cpp +++ b/firmware/controllers/settings.cpp @@ -1261,7 +1261,7 @@ const command_i_s commandsI[] = {{"ignition_mode", setIgnitionMode}, {"can_vss", setCanVss}, #endif /* EFI_CAN_SUPPORT */ #if EFI_IDLE_CONTROL - {"idle_position", setIdleValvePosition}, + {"idle_position", setManualIdleValvePosition}, {"idle_rpm", setTargetIdleRpm}, {"idle_dt", setIdleDT}, #endif /* EFI_IDLE_CONTROL */ diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index 9f48a11887..2552f2d68c 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -10,6 +10,7 @@ #include "dc_motor.h" #include "engine_controller.h" #include "sensor.h" +#include "idle_thread.h" #include "mocks.h" @@ -101,16 +102,23 @@ TEST(etb, initializationDcMotorIdleValveMode) { EXPECT_CALL(mocks[0], init(SensorType::Tps2, _, 0, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[0], reset); EXPECT_CALL(mocks[0], start); +// todo: make this work! EXPECT_CALL(mocks[0], setIdlePosition(33.0f)); // We do not expect throttle #2 to be initialized doInitElectronicThrottle(PASS_ENGINE_PARAMETER_SIGNATURE); + + + applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); } TEST(etb, idlePlumbing) { StrictMock mocks[ETB_COUNT]; WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + engineConfiguration->useETBforIdleControl = true; + + Sensor::setMockValue(SensorType::AcceleratorPedal, 50.0f); for (int i = 0; i < ETB_COUNT; i++) { engine->etbControllers[i] = &mocks[i]; @@ -118,7 +126,7 @@ TEST(etb, idlePlumbing) { EXPECT_CALL(mocks[i], setIdlePosition(33.0f)); } - setEtbIdlePosition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); + applyIACposition(33.0f PASS_ENGINE_PARAMETER_SUFFIX); } TEST(etb, testSetpointOnlyPedal) { From c649b05ebdf161a9fb8ea46e18b314b7159f907b Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 12:19:30 -0400 Subject: [PATCH 118/182] Weird VAG: DC motor idle valve not ETB #1637 should be better this way --- firmware/controllers/actuators/idle_thread.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index 24b5cd488c..d91634e050 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -221,9 +221,13 @@ void applyIACposition(percent_t position DECLARE_ENGINE_PARAMETER_SUFFIX) { setEtbIdlePosition(position PASS_ENGINE_PARAMETER_SUFFIX); #endif // EFI_ELECTRONIC_THROTTLE_BODY #if ! EFI_UNIT_TEST - } if (CONFIG(useStepperIdle)) { + } else if (CONFIG(useStepperIdle)) { iacMotor.setTargetPosition(duty * engineConfiguration->idleStepperTotalSteps); #endif /* EFI_UNIT_TEST */ + } else if (CONFIG(dcMotorIdleValve)) { +#if EFI_ELECTRONIC_THROTTLE_BODY + setEtbIdlePosition(position PASS_ENGINE_PARAMETER_SUFFIX); +#endif // EFI_ELECTRONIC_THROTTLE_BODY } else { if (!CONFIG(isDoubleSolenoidIdle)) { idleSolenoidOpen.setSimplePwmDutyCycle(duty); From 7e86dbc249b744563a2e3c48f7169af9fd20b93d Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 12:30:50 -0400 Subject: [PATCH 119/182] Weird VAG: DC motor idle valve not ETB #1637 ok, that's the current reality --- unit_tests/tests/test_etb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unit_tests/tests/test_etb.cpp b/unit_tests/tests/test_etb.cpp index 2552f2d68c..44525c3c6d 100644 --- a/unit_tests/tests/test_etb.cpp +++ b/unit_tests/tests/test_etb.cpp @@ -94,6 +94,7 @@ TEST(etb, initializationDcMotorIdleValveMode) { for (int i = 0; i < ETB_COUNT; i++) { engine->etbControllers[i] = &mocks[i]; + EXPECT_CALL(mocks[i], setIdlePosition(33.0f)); } // No accelerator pedal configured - this mode doesn't use it @@ -102,7 +103,6 @@ TEST(etb, initializationDcMotorIdleValveMode) { EXPECT_CALL(mocks[0], init(SensorType::Tps2, _, 0, &engineConfiguration->etb, Ne(nullptr))); EXPECT_CALL(mocks[0], reset); EXPECT_CALL(mocks[0], start); -// todo: make this work! EXPECT_CALL(mocks[0], setIdlePosition(33.0f)); // We do not expect throttle #2 to be initialized From f8518cd0d6e310b3e6b256b6658d816a9776fd19 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 13:13:17 -0400 Subject: [PATCH 120/182] time for more tests --- .../rusefi/io/tcp/BinaryProtocolServer.java | 3 +- .../com/rusefi/proxy/NetworkConnector.java | 9 +++-- .../rusefi/proxy/NetworkConnectorContext.java | 13 +++++++ .../test/java/com/rusefi/FullServerTest.java | 9 ++++- .../rusefi/proxy/NetworkConnectorTest.java | 34 ++++++++++++++++++- 5 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 6363c2023d..1e459db757 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -2,7 +2,6 @@ package com.rusefi.io.tcp; import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; -import com.opensr5.Logger; import com.rusefi.Listener; import com.rusefi.NamedThreadFactory; import com.rusefi.Timeouts; @@ -48,7 +47,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { public static final Function PLAIN_SOCKET_FACTORY = port -> { try { ServerSocket serverSocket = new ServerSocket(port); - Logger.CONSOLE.info("ServerSocket " + port + " created"); + log.info("ServerSocket " + port + " created"); return serverSocket; } catch (IOException e) { throw new IllegalStateException("Error binding server socket " + port, e); diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index 5dbdce6bc3..2ccdbf019f 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -30,9 +30,8 @@ import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; */ public class NetworkConnector { private final static Logging log = Logging.getLogging(NetworkConnector.class); - public static final int RECONNECT_DELAY = 15; - public static NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, int serverPortForControllers) { + public static NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) { LinkManager controllerConnector = new LinkManager() .setCompositeLogicEnabled(false) .setNeedPullData(false); @@ -73,9 +72,9 @@ public class NetworkConnector { proxyReconnectSemaphore.acquire(); try { - runNetworkConnector(serverPortForControllers, controllerConnector, authToken, () -> { - log.error("Disconnect from proxy server detected, now sleeping " + RECONNECT_DELAY + " seconds"); - sleep(RECONNECT_DELAY * Timeouts.SECOND); + runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, () -> { + log.error("Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); + sleep(context.reconnectDelay() * Timeouts.SECOND); proxyReconnectSemaphore.release(); }, oneTimeToken, controllerInfo); } catch (IOException e) { diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java new file mode 100644 index 0000000000..b200296095 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java @@ -0,0 +1,13 @@ +package com.rusefi.proxy; + +import com.rusefi.tools.online.ProxyClient; + +public class NetworkConnectorContext { + public int reconnectDelay() { + return 15; // this one is seconds + } + + public int serverPortForControllers() { + return ProxyClient.SERVER_PORT_FOR_CONTROLLERS; + } +} diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 5e7e58f9fd..23c61bf37e 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -8,6 +8,7 @@ import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.LinkManager; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.NetworkConnectorContext; import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.proxy.client.LocalApplicationProxyContext; import com.rusefi.server.*; @@ -89,9 +90,15 @@ public class FullServerTest { ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT)); TestHelper.createVirtualController(controllerPort, controllerImage); + NetworkConnectorContext networkConnectorContext = new NetworkConnectorContext() { + @Override + public int serverPortForControllers() { + return serverPortForControllers; + } + }; // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java index 7ea4085a6a..830fb56fa4 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java @@ -1,10 +1,42 @@ package com.rusefi.proxy; +import com.opensr5.ConfigurationImage; +import com.rusefi.BackendTestHelper; +import com.rusefi.TestHelper; +import com.rusefi.config.generated.Fields; +import com.rusefi.server.Backend; import org.junit.Test; public class NetworkConnectorTest { @Test - public void testReconnect() { + public void testReconnect() throws InterruptedException { + int serverPortForControllers = 7504; + int httpPort = 7503; + // create virtual controller to which "rusEFI network connector" connects to + int controllerPort = 7502; + ConfigurationImage controllerImage = new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE); + TestHelper.createVirtualController(controllerPort, controllerImage); + + NetworkConnectorContext connectorContext = new NetworkConnectorContext() { + @Override + public int reconnectDelay() { + return 3; + } + + @Override + public int serverPortForControllers() { + return serverPortForControllers; + } + }; + + // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext); + + + Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort); +// BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); + + backend.close(); } } From 144df50d555479c633761069feb3984139b0ff89 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 13:31:08 -0400 Subject: [PATCH 121/182] time for more tests - one less defect now --- .../rusefi/proxy/BaseBroadcastingThread.java | 8 ++++--- .../com/rusefi/proxy/NetworkConnector.java | 24 +++++++++++++++++-- .../rusefi/tools/NetworkConnectorStartup.java | 5 +++- .../test/java/com/rusefi/FullServerTest.java | 2 +- .../rusefi/proxy/NetworkConnectorTest.java | 17 ++++++++++++- 5 files changed, 48 insertions(+), 8 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index e3f62d310b..b25cc05dee 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -17,6 +17,7 @@ import java.net.Socket; import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.io.tcp.BinaryProtocolServer.getPacketLength; import static com.rusefi.io.tcp.BinaryProtocolServer.readPromisedBytes; +import static com.rusefi.shared.FileUtil.close; public class BaseBroadcastingThread { private static final Logging log = getLogging(BaseBroadcastingThread.class); @@ -25,11 +26,12 @@ public class BaseBroadcastingThread { @SuppressWarnings("InfiniteLoopStatement") public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, TcpIoStream.DisconnectListener disconnectListener) throws IOException { - TcpIoStream stream = new TcpIoStream("[broadcast] ", socket, disconnectListener); - IncomingDataBuffer in = stream.getDataBuffer(); thread = BASE_BROADCASTING_THREAD.newThread(() -> { + TcpIoStream stream = null; try { + stream = new TcpIoStream("[broadcast] ", socket, disconnectListener); + IncomingDataBuffer in = stream.getDataBuffer(); boolean isFirstHello = true; while (true) { int ioTimeout; @@ -59,7 +61,7 @@ public class BaseBroadcastingThread { } } catch (IOException e) { log.error("exiting thread " + e); - stream.close(); + close(stream); } }); } diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index 2ccdbf019f..ed608f04c9 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -18,6 +18,7 @@ import com.rusefi.tools.online.HttpUtil; import org.jetbrains.annotations.NotNull; import java.io.IOException; +import java.net.Socket; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; @@ -31,7 +32,7 @@ import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; public class NetworkConnector { private final static Logging log = Logging.getLogging(NetworkConnector.class); - public static NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) { + public static NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { LinkManager controllerConnector = new LinkManager() .setCompositeLogicEnabled(false) .setNeedPullData(false); @@ -76,6 +77,7 @@ public class NetworkConnector { log.error("Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); sleep(context.reconnectDelay() * Timeouts.SECOND); proxyReconnectSemaphore.release(); + reconnectListener.onReconnect(); }, oneTimeToken, controllerInfo); } catch (IOException e) { log.error("IO error", e); @@ -95,7 +97,15 @@ public class NetworkConnector { SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken); - BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers), + Socket socket; + try { + socket = rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers); + } catch (IOException e) { + // socket open exception is a special case and should be handled separately + disconnectListener.onDisconnect(); + return deviceSessionDetails; + } + BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, deviceSessionDetails, disconnectListener) { @Override @@ -147,4 +157,14 @@ public class NetworkConnector { } } + public interface ReconnectListener { + ReconnectListener VOID = new ReconnectListener() { + @Override + public void onReconnect() { + + } + }; + void onReconnect(); + } + } diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index 2f01bde70d..f053ccdf3c 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -4,6 +4,7 @@ import com.devexperts.logging.Logging; import com.rusefi.auth.AutoTokenUtil; import com.rusefi.autodetect.PortDetector; import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.NetworkConnectorContext; import com.rusefi.tools.online.ProxyClient; import com.rusefi.ui.AuthTokenPanel; @@ -22,7 +23,9 @@ public class NetworkConnectorStartup { return; } - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, ProxyClient.SERVER_PORT_FOR_CONTROLLERS); + NetworkConnectorContext connectorContext = new NetworkConnectorContext(); + + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, connectorContext, NetworkConnector.ReconnectListener.VOID); log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); } } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 23c61bf37e..a1a8fe281c 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -98,7 +98,7 @@ public class FullServerTest { }; // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext); + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java index 830fb56fa4..57121d599e 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java @@ -7,6 +7,11 @@ import com.rusefi.config.generated.Fields; import com.rusefi.server.Backend; import org.junit.Test; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import static org.junit.Assert.assertTrue; + public class NetworkConnectorTest { @Test public void testReconnect() throws InterruptedException { @@ -30,8 +35,18 @@ public class NetworkConnectorTest { } }; + CountDownLatch reconnectCounter = new CountDownLatch(1); + // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext); + NetworkConnector.ReconnectListener reconnectListener = new NetworkConnector.ReconnectListener() { + @Override + public void onReconnect() { + reconnectCounter.countDown(); + } + }; + NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener); + + assertTrue(reconnectCounter.await(30, TimeUnit.SECONDS)); Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort); From ca9ffdfb5c5a316cce2db04af715e46906598b64 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 14:03:31 -0400 Subject: [PATCH 122/182] refactoring --- firmware/tunerstudio/rusefi.input | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 3e4e7b67fe..69f17fe5df 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2143,9 +2143,9 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = baroSettings, "Baro sensor" field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} + field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != @@ADC_CHANNEL_NONE@@} + field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != @@ADC_CHANNEL_NONE@@} + field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != @@ADC_CHANNEL_NONE@@} dialog = mapCurves, "MAP sampling", yAxis field = "isMapAveragingEnabled", isMapAveragingEnabled @@ -2171,7 +2171,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = egoSettings, "", yAxis panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} + panel = egoSettings_sensor, {afr_hwChannel != @@ADC_CHANNEL_NONE@@ && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } @@ -2854,13 +2854,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} + field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} + field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} + field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} + field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} + field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} + field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} + field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -2873,7 +2873,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || (useStepperIdle && useHbridges) || dcMotorIdleValve } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune From 929b613a85efcde193d7875a00a71637ebc467ee Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 26 Jul 2020 18:05:05 +0000 Subject: [PATCH 123/182] Auto-generated configs and docs --- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 843596 -> 843587 bytes firmware/tunerstudio/generated/rusefi.ini | 6 +++--- .../generated/rusefi_frankenso_na6.ini | 6 +++--- .../tunerstudio/generated/rusefi_kinetis.ini | 6 +++--- .../tunerstudio/generated/rusefi_mre_f4.ini | 6 +++--- .../tunerstudio/generated/rusefi_mre_f7.ini | 6 +++--- .../generated/rusefi_prometheus_405.ini | 6 +++--- .../generated/rusefi_prometheus_469.ini | 6 +++--- .../generated/rusefi_proteus_f4.ini | 6 +++--- .../generated/rusefi_proteus_f7.ini | 6 +++--- 19 files changed, 45 insertions(+), 45 deletions(-) diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index ffc9cfc866..9f81016590 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2076618072 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.2076618072" +#define SIGNATURE_HASH 2235815951 +#define TS_SIGNATURE "rusEFI 2020.07.26.all.2235815951" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 01c02a6775..afb83eed56 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2772550075 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.2772550075" +#define SIGNATURE_HASH 1539618028 +#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.1539618028" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index ced9535154..15a246b54a 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3069735362 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.3069735362" +#define SIGNATURE_HASH 1216152725 +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.1216152725" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index d31fa28852..f5d5e20f26 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 842562518 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.842562518" +#define SIGNATURE_HASH 3434942081 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.3434942081" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 91388e3ba1..a009a2ca83 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 842562518 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.842562518" +#define SIGNATURE_HASH 3434942081 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.3434942081" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 13b1fb0c26..7645c8d5b4 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2396681692 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.2396681692" +#define SIGNATURE_HASH 1885274251 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.1885274251" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 68f1052c4a..048f7b7ad8 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2396681692 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.2396681692" +#define SIGNATURE_HASH 1885274251 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.1885274251" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 93cc7f457a..77df2e3bec 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 4132953239 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.4132953239" +#define SIGNATURE_HASH 148023744 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.148023744" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index c4e14a012d..1f20c84724 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 4132953239 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.4132953239" +#define SIGNATURE_HASH 148023744 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.148023744" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index fe5d3ce52dd57a81a3246d3b1579a406c9e15a5f..b7f865c304c3ff65f6344d5fda7cefa4e0ce1c31 100644 GIT binary patch delta 91276 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 Date: Sun, 26 Jul 2020 14:11:48 -0400 Subject: [PATCH 124/182] Weird VAG: DC motor idle valve not ETB #1637 TS project logic --- firmware/tunerstudio/rusefi.input | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 69f17fe5df..c1942aeb1a 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2854,13 +2854,13 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" panel = veTableMap, South dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@} + field = "pFactor", etb_pFactor + field = "iFactor", etb_iFactor + field = "dFactor", etb_dFactor + field = "pid min", etb_minValue + field = "pid max", etb_maxValue + field = "iTermMin", etb_iTermMin + field = "iTermMax", etb_iTermMax dialog = etbIdleDialog, "ETB Idle" field = "use ETB for idle", useETBforIdleControl @@ -2868,12 +2868,12 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = etbDialogLeft field = "https://rusefi.com/s/etb" - field = "Late 90s German DC Motor idle", dcMotorIdleValve + field = "Late 90s German DC Motor idle", dcMotorIdleValve, { throttlePedalPositionAdcChannel == @@ADC_CHANNEL_NONE@@ } field = "Detailed status in console", isVerboseETB field = "Disable ETB Motor", pauseEtbControl ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ || (useStepperIdle && useHbridges) || dcMotorIdleValve } + panel = hbridgeHardware, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ || (useStepperIdle && useHbridges) || dcMotorIdleValve } dialog = etbAutotune, "PID Autotune" commandButton = "Start ETB PID Autotune", cmd_etb_autotune @@ -2885,8 +2885,8 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" field = "Debug mode", debugMode dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog + panel = etbIdleDialog, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ } + panel = etbPidDialog, { (throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@) || dcMotorIdleValve } panel = etbAutotune ; Neutral position handling not yet implemented! From d8214bc0196fbd70b511bf448815152f097bbddf Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 26 Jul 2020 18:13:38 +0000 Subject: [PATCH 125/182] Auto-generated configs and docs --- .../controllers/generated/signature_all.h | 4 +-- .../generated/signature_frankenso_na6.h | 4 +-- .../controllers/generated/signature_kin.h | 4 +-- .../controllers/generated/signature_mre_f4.h | 4 +-- .../controllers/generated/signature_mre_f7.h | 4 +-- .../generated/signature_prometheus_405.h | 4 +-- .../generated/signature_prometheus_469.h | 4 +-- .../generated/signature_proteus_f4.h | 4 +-- .../generated/signature_proteus_f7.h | 4 +-- firmware/tunerstudio/generated/cache.zip | Bin 843587 -> 843803 bytes firmware/tunerstudio/generated/rusefi.ini | 28 +++++++++--------- .../generated/rusefi_frankenso_na6.ini | 28 +++++++++--------- .../tunerstudio/generated/rusefi_kinetis.ini | 28 +++++++++--------- .../tunerstudio/generated/rusefi_mre_f4.ini | 28 +++++++++--------- .../tunerstudio/generated/rusefi_mre_f7.ini | 28 +++++++++--------- .../generated/rusefi_prometheus_405.ini | 28 +++++++++--------- .../generated/rusefi_prometheus_469.ini | 28 +++++++++--------- .../generated/rusefi_proteus_f4.ini | 28 +++++++++--------- .../generated/rusefi_proteus_f7.ini | 28 +++++++++--------- 19 files changed, 144 insertions(+), 144 deletions(-) diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 9f81016590..9961fc9306 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2235815951 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.2235815951" +#define SIGNATURE_HASH 4076325589 +#define TS_SIGNATURE "rusEFI 2020.07.26.all.4076325589" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index afb83eed56..7ae73d3c7e 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1539618028 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.1539618028" +#define SIGNATURE_HASH 745580086 +#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.745580086" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 15a246b54a..531221d3e1 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1216152725 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.1216152725" +#define SIGNATURE_HASH 1070143055 +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.1070143055" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index f5d5e20f26..b76ab37d2e 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3434942081 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.3434942081" +#define SIGNATURE_HASH 3137936475 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.3137936475" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index a009a2ca83..54807b7baa 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3434942081 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.3434942081" +#define SIGNATURE_HASH 3137936475 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.3137936475" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 7645c8d5b4..deb5be0b91 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1885274251 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.1885274251" +#define SIGNATURE_HASH 132846161 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.132846161" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 048f7b7ad8..6357fd3668 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1885274251 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.1885274251" +#define SIGNATURE_HASH 132846161 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.132846161" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 77df2e3bec..bba5387b80 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 148023744 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.148023744" +#define SIGNATURE_HASH 2137439002 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.2137439002" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 1f20c84724..6ca4cefe41 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 148023744 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.148023744" +#define SIGNATURE_HASH 2137439002 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.2137439002" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index b7f865c304c3ff65f6344d5fda7cefa4e0ce1c31..2982ee9d5d604038707d2fab894737af5ee3ad21 100644 GIT binary patch delta 76062 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 Date: Sun, 26 Jul 2020 14:15:24 -0400 Subject: [PATCH 126/182] two bytes of dead code --- java_console/ui/src/test/java/com/rusefi/FullServerTest.java | 4 ++-- .../proxy_server/src/main/java/com/rusefi/server/Backend.java | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index a1a8fe281c..52fdbecc6a 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -67,8 +67,8 @@ public class FullServerTest { int applicationTimeout = 7 * SECOND; try (Backend backend = new Backend(userDetailsResolver, httpPort, applicationTimeout) { @Override - protected void onRegister(ControllerConnectionState controllerConnectionState) { - super.onRegister(controllerConnectionState); + public void register(ControllerConnectionState controllerConnectionState) { + super.register(controllerConnectionState); controllerRegistered.countDown(); } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 5959a6cbfe..5456c47b28 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -353,10 +353,6 @@ public class Backend implements Closeable { controllers.add(controllerConnectionState); controllersByKey.put(controllerConnectionState.getControllerKey(), controllerConnectionState); } - onRegister(controllerConnectionState); - } - - protected void onRegister(ControllerConnectionState controllerConnectionState) { } public void close(ControllerConnectionState inactiveClient) { From 30e0d2c9fb37e278b0cf256041dfc8b2f330f04d Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 14:27:07 -0400 Subject: [PATCH 127/182] refactoring --- .../io/src/test/java/com/rusefi/TestHelper.java | 10 +++++++++- .../src/test/java/com/rusefi/BackendTestHelper.java | 8 +++----- .../ui/src/test/java/com/rusefi/FullServerTest.java | 8 +++----- .../ui/src/test/java/com/rusefi/ServerTest.java | 13 ++++++------- .../rusefi/io/TcpCommunicationIntegrationTest.java | 9 ++++----- .../proxy/client/LocalApplicationProxyTest.java | 13 ++++++------- 6 files changed, 31 insertions(+), 30 deletions(-) diff --git a/java_console/io/src/test/java/com/rusefi/TestHelper.java b/java_console/io/src/test/java/com/rusefi/TestHelper.java index 160302dca6..61b8af35e2 100644 --- a/java_console/io/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/io/src/test/java/com/rusefi/TestHelper.java @@ -83,7 +83,7 @@ public class TestHelper { public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage) throws InterruptedException { CountDownLatch controllerCreated = new CountDownLatch(1); BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown()); - assertTrue(controllerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + assertLatch(controllerCreated); return server; } @@ -92,4 +92,12 @@ public class TestHelper { return new SessionDetails(ci, authToken, SessionDetails.createOneTimeCode()); } + + public static void assertLatch(String message, CountDownLatch reconnectCounter) throws InterruptedException { + assertTrue(message, reconnectCounter.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + } + + public static void assertLatch(CountDownLatch reconnectCounter) throws InterruptedException { + assertTrue(reconnectCounter.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + } } diff --git a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java index dddad0ce29..8ca507dc0a 100644 --- a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java +++ b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java @@ -10,22 +10,20 @@ import org.jetbrains.annotations.NotNull; import java.net.MalformedURLException; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import static com.rusefi.Timeouts.READ_IMAGE_TIMEOUT; -import static org.junit.Assert.assertTrue; +import static com.rusefi.TestHelper.assertLatch; public class BackendTestHelper { public static void runApplicationConnectorBlocking(Backend backend, int serverPortForRemoteUsers) throws InterruptedException { CountDownLatch applicationServerCreated = new CountDownLatch(1); backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown()); - assertTrue(applicationServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + assertLatch(applicationServerCreated); } public static void runControllerConnectorBlocking(Backend backend, int serverPortForControllers) throws InterruptedException { CountDownLatch controllerServerCreated = new CountDownLatch(1); backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); - assertTrue(controllerServerCreated.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + assertLatch(controllerServerCreated); } @NotNull diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 52fdbecc6a..9c74430ac6 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -22,9 +22,7 @@ import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import static com.rusefi.TestHelper.createIniField; -import static com.rusefi.TestHelper.prepareImage; -import static com.rusefi.Timeouts.READ_IMAGE_TIMEOUT; +import static com.rusefi.TestHelper.*; import static com.rusefi.Timeouts.SECOND; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -101,7 +99,7 @@ public class FullServerTest { NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); - assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); + TestHelper.assertLatch("controllerRegistered", controllerRegistered); SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, MockRusEfiDevice.TEST_TOKEN_3, networkConnectorResult.getOneTimeToken()); ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(TestHelper.TEST_TOKEN_1)); @@ -126,7 +124,7 @@ public class FullServerTest { System.out.println("Failed"); } }); - assertTrue("Proxied ECU Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch("Proxied ECU Connection established", connectionEstablishedCountDownLatch); BinaryProtocol clientStreamState = clientManager.getCurrentStreamState(); Objects.requireNonNull(clientStreamState, "clientStreamState"); diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index 396e6afcb2..793d722822 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -16,10 +16,9 @@ import java.io.IOException; import java.net.MalformedURLException; import java.util.List; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +import static com.rusefi.TestHelper.assertLatch; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; /** * integration test of the rusEFI online backend process @@ -69,14 +68,14 @@ public class ServerTest { }) { backend.runControllerConnector(serverPortForControllers, parameter -> serverCreated.countDown()); - assertTrue(serverCreated.await(30, TimeUnit.SECONDS)); + assertLatch(serverCreated); assertEquals(0, backend.getControllersCount()); new MockRusEfiDevice(TestHelper.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1).connect(serverPortForControllers); new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2).connect(serverPortForControllers); - assertTrue("onConnected", onConnected.await(30, TimeUnit.SECONDS)); + assertLatch("onConnected", onConnected); List clients = backend.getControllers(); assertEquals(2, clients.size()); @@ -86,7 +85,7 @@ public class ServerTest { allConnected.countDown(); - assertTrue("allClientsDisconnected", allClientsDisconnected.await(30, TimeUnit.SECONDS)); + assertLatch("allClientsDisconnected", allClientsDisconnected); } } @@ -151,7 +150,7 @@ covered by FullServerTest IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); new HelloCommand("hello").handle(authenticatorToProxyStream); - assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch(disconnectedCountDownLatch); } } @@ -180,7 +179,7 @@ covered by FullServerTest IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); - assertTrue(disconnectedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch(disconnectedCountDownLatch); } } } diff --git a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java index 4550221cb0..40d8851af0 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java +++ b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java @@ -12,11 +12,10 @@ import org.junit.Test; import java.util.Objects; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import static com.rusefi.TestHelper.assertLatch; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; public class TcpCommunicationIntegrationTest { private static final Logger LOGGER = Logger.CONSOLE; @@ -42,7 +41,7 @@ public class TcpCommunicationIntegrationTest { } }); - assertTrue(failedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch(failedCountDownLatch); } @Test @@ -70,7 +69,7 @@ public class TcpCommunicationIntegrationTest { System.out.println("Failed"); } }); - assertTrue("Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch("Connection established", connectionEstablishedCountDownLatch); assertEquals(0, server.unknownCommands.get()); @@ -112,7 +111,7 @@ public class TcpCommunicationIntegrationTest { System.out.println("Failed"); } }); - assertTrue("Connection established", connectionEstablishedCountDownLatch.await(30, TimeUnit.SECONDS)); + assertLatch("Connection established", connectionEstablishedCountDownLatch); clientManager.close(); } diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java index e9b715e4cd..4b39fd8b4d 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -20,16 +20,15 @@ import org.junit.Test; import java.io.IOException; import java.net.MalformedURLException; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import static com.rusefi.BackendTestHelper.createTestUserResolver; import static com.rusefi.TestHelper.TEST_TOKEN_1; +import static com.rusefi.TestHelper.assertLatch; import static com.rusefi.Timeouts.SECOND; import static com.rusefi.binaryprotocol.BinaryProtocol.findCommand; import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; import static com.rusefi.shared.FileUtil.close; -import static org.junit.Assert.assertTrue; public class LocalApplicationProxyTest { private static final AtomicInteger portNumber = new AtomicInteger(4000); @@ -48,7 +47,7 @@ public class LocalApplicationProxyTest { sleep(Timeouts.SECOND); close(socket); }, parameter -> backendCreated.countDown()); - assertTrue(backendCreated.await(30, TimeUnit.SECONDS)); + assertLatch(backendCreated); SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); @@ -56,7 +55,7 @@ public class LocalApplicationProxyTest { CountDownLatch disconnected = new CountDownLatch(1); LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); - assertTrue(disconnected.await(30, TimeUnit.SECONDS)); + assertLatch(disconnected); mockBackend.close(); } @@ -89,7 +88,7 @@ public class LocalApplicationProxyTest { }, parameter -> backendCreated.countDown()); - assertTrue(backendCreated.await(30, TimeUnit.SECONDS)); + assertLatch(backendCreated); SessionDetails sessionDetails = TestHelper.createTestSession(TEST_TOKEN_1, Fields.TS_SIGNATURE); ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); @@ -98,10 +97,10 @@ public class LocalApplicationProxyTest { LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); // wait for three output requests to take place - assertTrue("gaugePokes", gaugePokes.await(30, TimeUnit.SECONDS)); + assertLatch("gaugePokes", gaugePokes); // but there must be a disconnect after some time - assertTrue("disconnected", disconnected.await(30, TimeUnit.SECONDS)); + assertLatch("disconnected", disconnected); mockBackend.close(); } From 192860996bdded3b57ac9e86fdf8f6b2d6571963 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 14:50:17 -0400 Subject: [PATCH 128/182] Weird VAG: DC motor idle valve not ETB #1637 --- firmware/tunerstudio/rusefi.input | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index c1942aeb1a..6152e24619 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -2256,7 +2256,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != @@ADC_CHANNEL_NONE@@ } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle From 69c7663c778665de7f678caa3138a7330c2ca2b3 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 26 Jul 2020 18:51:56 +0000 Subject: [PATCH 129/182] Auto-generated configs and docs --- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 843803 -> 843587 bytes firmware/tunerstudio/generated/rusefi.ini | 8 ++++---- .../generated/rusefi_frankenso_na6.ini | 8 ++++---- .../tunerstudio/generated/rusefi_kinetis.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f4.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f7.ini | 8 ++++---- .../generated/rusefi_prometheus_405.ini | 8 ++++---- .../generated/rusefi_prometheus_469.ini | 8 ++++---- .../generated/rusefi_proteus_f4.ini | 8 ++++---- .../generated/rusefi_proteus_f7.ini | 8 ++++---- 19 files changed, 54 insertions(+), 54 deletions(-) diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 9961fc9306..3faec04c45 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 4076325589 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.4076325589" +#define SIGNATURE_HASH 3783538497 +#define TS_SIGNATURE "rusEFI 2020.07.26.all.3783538497" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 7ae73d3c7e..4bf2dbe434 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 745580086 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.745580086" +#define SIGNATURE_HASH 1057184674 +#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.1057184674" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 531221d3e1..6ca19e6688 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1070143055 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.1070143055" +#define SIGNATURE_HASH 750447579 +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.750447579" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index b76ab37d2e..3dbfe2ead9 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3137936475 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.3137936475" +#define SIGNATURE_HASH 2826625487 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.2826625487" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 54807b7baa..899090d1af 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3137936475 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.3137936475" +#define SIGNATURE_HASH 2826625487 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.2826625487" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index deb5be0b91..bbf7e553fe 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 132846161 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.132846161" +#define SIGNATURE_HASH 345567173 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.345567173" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 6357fd3668..b73dfb806f 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 132846161 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.132846161" +#define SIGNATURE_HASH 345567173 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.345567173" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index bba5387b80..7e73bdc51a 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2137439002 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.2137439002" +#define SIGNATURE_HASH 1813333646 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.1813333646" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 6ca4cefe41..89f5b5dea4 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2137439002 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.2137439002" +#define SIGNATURE_HASH 1813333646 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.1813333646" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 2982ee9d5d604038707d2fab894737af5ee3ad21..147d3632431b0b9e355957afdb74e1d763b5f6dc 100644 GIT binary patch delta 82636 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 delta 83055 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Ǽs-(4G=Xz)BsTfL=6x%K-2(H z14IoFH9*t=Q3FH`5HǼs-(4G=Xz)BsTfL=6x%K-2(H14IoFH9*t=Q3FH`5H z{C^NN3fL70Nb__325D&H_ZZOOGWAfb#7QX059{(v;;*nq=a(IRwKP9AAb@K>M5g*R z;RmY0{Tr!K2mu^#8p`r}F7PzK(*REcJPq(Pz|#Ov13V4zG{DmU zPXjy+@HD{F08axv4e&I;(*REcJPq(Pz|#Ov13V4zG{DmUPXjy+@HD{F08axv4e&I; z)BIOGP0nAQh6>JGjm?BzjX*U&*MCqAB8osYa=!+CdKyFk;c3)<4g91uhya4pDEt!m zi_hTZ{KjYC-x+Xte#rrB2Cx~xW&oQ3YzD9yz-9oO0c-}a8Ng-$n*nSFuo=K+0Gk19 z2Cx~xW&oQ3YzD9yz-9oO0c-}a8Ng-$n*nSFuo=K+0Gk192C$j`Hk;unz`2H9gAg-6 z*WY5M4-YE+Yv6yxj6V_d=C6T|M9^qtWQ3S;AcfxH{Cg{!+b9ribre)$2m})o^1GZt zhR{O@;Dbd_lK7nzf?s!w)5Gw$hJEaz?!k|%Ae$>Xbk#^`9W3R;L#LvuT$)bJc<-u* zDZOB39(t9aXeDcyRD0>B3yuk8>6SS`OC z)khm#wnuH(Kl5Jlb?oWrm4CS3Mp{{2GhmU#DcPS}eTbBG$co)=pB%*$#ShbRSRURj zPO#X2P4a|3se-GNhNf&S&JWq`;2W0HVP@T%aj1~gO)MTgJvtN9vB8qd0hS-M zSk=oUm}pP7I8_zPPrk#EGN9CO*K{auop?Hwl^;1h4sJC7l_z|KkTlxrNXW#HpX>#3 zy>{{Oz|9y@no7O-A)U&#df^YIyf3 z;%vfN81bcK^#9Z1zvOX`A@VkLFyPHP7?MAJ4gZpphR8v_st0czgNpI~8UMXUmfueL z7|t*b5W`Vm+LMi_(EA>YfR2dV_UkfFJ4^2QBdH>w&_wHDK zJHSUc!v`quzis`aJ7n&Dc+dx^Ab-XGQ&$s0Sn+#w)QOW&a>73=f3_ASh6U#r!;<>( z!2TuYuf{CJvEq3d+2Oq6SXX}h<@_`6e`}3b;;%bU!)2$S1b>_Z@gZ?)(})g(Ti_3; zpu9vsJ|OPbH!Q>l#KC#Hpj61LZ19CC#JkU*32^Kg#EWYRF8dMj;`*0x^hde19hW-oVx0o{c3BT<#;30xms{IR8IO5zg?(`BBQNvE${~$p3n`Ao?-w z>(?d_*zm6=P;OG=#P_q&{Ljni&&0o)LBXKMi8p5_hi5V%VZ&v;P>6p#o_|UH(Hc?{ zJZ=Um#Q$gbe`_k1@#h`>YUt@hoStv9e6Y%j1q(oh0o$aIer}O zUvjp7KWottFK`H?4e?DY4}pA2ha!IZKjKO&3IG5A diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index a9f3604312..88e1838125 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.all.4076325589" + signature = "rusEFI 2020.07.26.all.3783538497" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.all.4076325589" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.all.3783538497" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:12:58 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:15 UTC 2020 pageSize = 20000 page = 1 @@ -3551,7 +3551,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 6617e6b205..95c73faca9 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.frankenso_na6.745580086" + signature = "rusEFI 2020.07.26.frankenso_na6.1057184674" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.frankenso_na6.745580086" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.frankenso_na6.1057184674" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:13:02 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:19 UTC 2020 pageSize = 20000 page = 1 @@ -3551,7 +3551,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index e64cef1ff9..71628ec530 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.kin.1070143055" + signature = "rusEFI 2020.07.26.kin.750447579" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.kin.1070143055" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.kin.750447579" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 18:13:09 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 18:51:27 UTC 2020 pageSize = 20000 page = 1 @@ -3552,7 +3552,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index e982abfb0d..1b11d2dc9d 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f4.3137936475" + signature = "rusEFI 2020.07.26.mre_f4.2826625487" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f4.3137936475" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.mre_f4.2826625487" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:13:01 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:18 UTC 2020 pageSize = 20000 page = 1 @@ -3534,7 +3534,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index c5d3ba3781..ab5e922578 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f7.3137936475" + signature = "rusEFI 2020.07.26.mre_f7.2826625487" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f7.3137936475" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.mre_f7.2826625487" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:13:00 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:16 UTC 2020 pageSize = 20000 page = 1 @@ -3534,7 +3534,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index d5b52e1048..c4b1fa7e25 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_405.132846161" + signature = "rusEFI 2020.07.26.prometheus_405.345567173" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_405.132846161" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.prometheus_405.345567173" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:13:05 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:22 UTC 2020 pageSize = 20000 page = 1 @@ -3547,7 +3547,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 389f302c6b..2f4a3df879 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_469.132846161" + signature = "rusEFI 2020.07.26.prometheus_469.345567173" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_469.132846161" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.prometheus_469.345567173" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:13:04 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:21 UTC 2020 pageSize = 20000 page = 1 @@ -3547,7 +3547,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 71391ef7af..9ec3bd18b1 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f4.2137439002" + signature = "rusEFI 2020.07.26.proteus_f4.1813333646" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f4.2137439002" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.proteus_f4.1813333646" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:13:08 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:25 UTC 2020 pageSize = 20000 page = 1 @@ -3526,7 +3526,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 10a6d1d716..b9f8946240 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f7.2137439002" + signature = "rusEFI 2020.07.26.proteus_f7.1813333646" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f7.2137439002" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.proteus_f7.1813333646" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:13:06 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:24 UTC 2020 pageSize = 20000 page = 1 @@ -3526,7 +3526,7 @@ cmd_set_engine_type_default = "w\x00\x31\x00\x00" dialog = idleSettings, "", yAxis field = "Idle IAC control mode", idleMode field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl + field = "use ETB for idle", useETBforIdleControl, { throttlePedalPositionAdcChannel != 16 } field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle field = "Use separate VE Table for idle", useSeparateVeForIdle From 43b5634b4991b9089aebcde31d188dee302576bc Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 14:57:42 -0400 Subject: [PATCH 130/182] Weird VAG: DC motor idle valve not ETB #1637 clarification --- firmware/integration/rusefi_config.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 813fd55734..b5690901ad 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -707,7 +707,7 @@ bit is_enabled_spi_2 bit useIdleTimingPidControl bit useTPSBasedVeTable bit is_enabled_spi_4 - bit pauseEtbControl;+Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle. + bit pauseEtbControl;+Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle. bit alignEngineSnifferAtTDC bit useETBforIdleControl;+This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle. bit idleIncrementalPidCic From a8f45d960ab305ec03e2133008a12ecb645db377 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 15:07:45 -0400 Subject: [PATCH 131/182] Weird VAG: DC motor idle valve not ETB #1637 etbTarget gauge in DC idle mode --- firmware/controllers/actuators/electronic_throttle.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/actuators/electronic_throttle.cpp b/firmware/controllers/actuators/electronic_throttle.cpp index 6ec1ec9ec7..599a2e42b4 100644 --- a/firmware/controllers/actuators/electronic_throttle.cpp +++ b/firmware/controllers/actuators/electronic_throttle.cpp @@ -170,6 +170,9 @@ expected EtbController::getSetpoint() const { // VW ETB idle mode uses an ETB only for idle (a mini-ETB sets the lower stop, and a normal cable // can pull the throttle up off the stop.), so we directly control the throttle with the idle position. if (CONFIG(dcMotorIdleValve)) { +#if EFI_TUNER_STUDIO + tsOutputChannels.etbTarget = m_idlePosition; +#endif // EFI_TUNER_STUDIO return clampF(0, m_idlePosition, 100); } @@ -206,7 +209,7 @@ expected EtbController::getSetpoint() const { if (m_myIndex == 0) { tsOutputChannels.etbTarget = targetPosition; } -#endif +#endif // EFI_TUNER_STUDIO return targetPosition; } From 5e6a953b706d528eb309d57f7fd8ea5e91b3a717 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Sun, 26 Jul 2020 19:09:43 +0000 Subject: [PATCH 132/182] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 8 ++++---- .../controllers/algo/rusefi_generated.h | 4 ++-- ...ngine_configuration_generated_structures.h | 8 ++++---- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 4 ++-- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 843587 -> 843650 bytes firmware/tunerstudio/generated/rusefi.ini | 8 ++++---- .../generated/rusefi_frankenso_na6.ini | 8 ++++---- .../tunerstudio/generated/rusefi_kinetis.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f4.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f7.ini | 8 ++++---- .../generated/rusefi_prometheus_405.ini | 8 ++++---- .../generated/rusefi_prometheus_469.ini | 8 ++++---- .../generated/rusefi_proteus_f4.ini | 8 ++++---- .../generated/rusefi_proteus_f7.ini | 8 ++++---- .../com/rusefi/config/generated/Fields.java | 5 +++-- java_console/rusefi.xml | 2 +- 29 files changed, 74 insertions(+), 73 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index a553c99748..02faa5a771 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:57:46 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1460,8 +1460,8 @@ struct engine_configuration_s { offset 744 bit 26 */ bool is_enabled_spi_4 : 1; /** - * Disable the electronic throttle motor for testing. - * This mode is for testing ETB position sensors, etc without actually driving the throttle. + * Disable the electronic throttle motor and DC idle motor for testing. + * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle. offset 744 bit 27 */ bool pauseEtbControl : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 14:57:46 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index e43e800901..00e03a4d67 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1076,7 +1076,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 987820688 +#define SIGNATURE_HASH 2735505253 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.987820688" +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index 7613941c1f..e813ce50e5 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -1460,8 +1460,8 @@ struct engine_configuration_s { offset 744 bit 26 */ bool is_enabled_spi_4 : 1; /** - * Disable the electronic throttle motor for testing. - * This mode is for testing ETB position sensors, etc without actually driving the throttle. + * Disable the electronic throttle motor and DC idle motor for testing. + * This mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle. offset 744 bit 27 */ bool pauseEtbControl : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 8b6d1733e6..f8061c8950 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 3bf11dc0bd..2a72c4a745 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index cb801038e1..f46e7172d4 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 95d6f57d6f..942b35e90e 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index c9c989b62f..c0d3d184cf 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1076,7 +1076,7 @@ #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 4158533130 +#define SIGNATURE_HASH 1848812543 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.all.4158533130" +#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 3faec04c45..551f4619e6 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3783538497 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.3783538497" +#define SIGNATURE_HASH 1848812543 +#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 4bf2dbe434..b39a979bc1 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1057184674 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.1057184674" +#define SIGNATURE_HASH 2964705052 +#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.2964705052" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 6ca19e6688..7209efa488 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 750447579 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.750447579" +#define SIGNATURE_HASH 2735505253 +#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 3dbfe2ead9..49d7a37413 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2826625487 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.2826625487" +#define SIGNATURE_HASH 667710833 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.667710833" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 899090d1af..32c51d18cc 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2826625487 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.2826625487" +#define SIGNATURE_HASH 667710833 +#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.667710833" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index bbf7e553fe..350be31347 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 345567173 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.345567173" +#define SIGNATURE_HASH 2603514747 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.2603514747" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index b73dfb806f..7d34426963 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 345567173 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.345567173" +#define SIGNATURE_HASH 2603514747 +#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.2603514747" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 7e73bdc51a..808253fa23 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1813333646 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.1813333646" +#define SIGNATURE_HASH 3819164208 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.3819164208" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 89f5b5dea4..57c42c4072 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1813333646 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.1813333646" +#define SIGNATURE_HASH 3819164208 +#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.3819164208" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 147d3632431b0b9e355957afdb74e1d763b5f6dc..836de805be81598268c9d583561613d554d5e901 100644 GIT binary patch delta 230006 zcmV)7K*ztszB7WqGk}BvgaU*Ev;;T?6C0WOP_O8=wN+;T026Eh0384kmx0azTD*R38L&-X3=Ckq?)G#92%|1Qj3n&xm;c!ZM*=@A zm+uAy9)H0<+(*}mgJ2pRa0?D~=wmDU|8PSK^PrJoFq=U)5wz@vvGwG~6Km&(ovk16 z{}ecB7~l(mixA%UDX8u{a~7kcxdXMat+5ZjI?FkKruutot)?L3IBXt`Jf z0MG<}&jM)4AMz-kCOC7cUSVX*=?Horcv2Ps#2E>eu{BtRRCG9T=MM}al>!0Vb6e-km=iz|s0b-3S|r{NFup)t^5GUp(uA6sr`o;AfdBZ8JBTPz!8~u6V zSvZu6?A9%+Li->7ANB;m7x1P?c5D>D`VL`M-65U~%a3;vFsS%T*Lq~lTo`Z!rw)hd&xfIhP+)~#~XNTDa1$VWsM z!5mtLX~10%2<5?}Md2aPRNrwa7=Te1AqqypCx#2_&OL8L8^fCV4->*lseulbJj<62 zJsl*09z39aK=+Nnxt_V9>2LPzl$>i8*BkN1Kc`1bI|n6 z9ns2Tn`u-ih&$8AE;PGbjBvZttOC-em6H~hVTij2^M9}!geybuzm|T;vwueDM5^cQ zFgRDZC%`YTU%V&xYz`F0K!(8&OC4y zAq?c}8q~g}#|e9(+P=B5TYojDS#MqSuVG8jZioOM?+m8F@C%IS(jCIW>|{2)YU85W zuKw6)T{)L_wcqYqhuDIiNSHgvZrRQDmD6b9DXz9}TYc*=DN?m>IIFjs*QDyPS~BaLx25ldtY&DM4m#UisK5T4zSZcDsM=bnNPnbu}d1Ao=->xH5SJyFhe)zEb}D{4beQ>gD|0 zoCQF?y+*&DhU3TpW2Fdza+H&w1}C>3ft25=3D%9>ffc`k<)O|_QyKS-R;_)na&%V1 zt~#AY&AGX4_E$1nc7L}EbuMt1-ZyG>{sntLj^;{*Dm20?PC3QnB&Tb)Xs=?CMh&-r zQtmX}fG(O>g6i6}JG)g~*M_Q}Q_9%kFyoC@-D$NOy$!(h8#kLlxyw{eHe2=9!LtG# z)K(7?9uQ6}C5iU!XQ$S1>gPotxc~209CuMH=Aqn z^5;G2`KskK+qN2uv9_4g@AUFBx}BROBgr8!aSL@CEtOv~D>l~W)~{d=uI*N<-qaJT z2ME*GX(z}|rC;AWH}+@P5>=R@TK%(CJXygvy#|~D8z(R6w!Bh`k!fBDK(&o3;oP5o zhJtAj6Ho{3UrCB6P7Og?S0)$69^)asWuVwwxPSGNjZ>CS^o&$!&b ze*H=a4mTqFCW=#N*Vt;y(CnPu!J3_z#2*jP@WWls9U}lkIoO{6f>=Bhr>?G1uScGXAU}#_j(`m9D zpg+DoI^BA&hjd=Kke6HUR_lCQ=j8V5H&B4d#FY|ut(GcqnAgHh5Bkl^urIr562ZvA z+tQrNBui#>UCkT22PA#7eGdf^6afb!Z?Q@SihqCuwYdnPhrWFQNBz`1S&TLaHJ=)% z(MT>Hrw%ve+|>Km?V3Zsd-Z-FI<&UOz+*U(7vl-qUSFPokkWL{Hk36fO{wC}-D&XP z_;c7;8)~Wx&#XG~AN<&zs=BEO#{bz>KrsSen#@r-uvd&6MEeRIx7w}ry?J4G5g&KE zD}N-yjeQ9itJ<#7t;kpLk%6i&`#=Zv?QY+>ZZ~WBM1oNWnzDa-u~fa)ZB(x_m+){2 z9NNqpFTE)*g%iI!1fnpF_Rr71N>YNj&(B%5vTIq^Wx0fZ&fAxluoupEtzTZ(!f(6V zvuGQu!hc2nTaZscG58B;U;a^2us(VUQh)3JDWrb}Kmo=A{r}n78G@yOa>t>D>a8%{ z7EZqvrjhrsz59-4D>Hrkt8}z42}LVeY<=#W)32w_@-%)2tsB^ZyGtd!0PW_=0O+GT zU3!~Wx^yJK7S;edE|+9;z82Qp)&3)3g$rS2U&f2bq5m1jC`lB zZ=SXEWbTy^9q>mS>w}1s!NO0;XCv`JEcy%+3 zR#ySWKR_VSMRI-UEQe0Ghq@_0PX5xS^{ zgpW+g!(#C?Go~cd1Pv$KV=^T)A*tzjUH#v7t?kh=em2nxZLWeAzDDslc7KMzeK^DM zgA;AN17_?LFyGAmYL7;h3eE}<0G7t5I9Z6Aj<6l0eAk-=j~-N6Ex$*Fsr(Wu6px_> z3fQZ{ic&w@kvD{jbfFjIFN0g!^5!FlAx=Xcaf1RuV>I=;-UA@X?qXK?c;QX)feoeN zFjKq44*F2U3aJbV*@3cVT{>Fn)}MERCokkqZG0M7)9C_><#qY?PDh?Q8n|=l@E+eF zhSMPO_zepI3?&tTM4lTkxZt z+fE8z*#CEz9|;8b8}f)oLy2ItGK0BKEx}ZZWTBH{PvIX>8U^SVYGx^S^ETY>eXB5h7}Z& z?rG4dW}$d3e?Bm~sBPj8Mb(DK4Xol43YL!wdxu8_=zHJ#bq*aTa}H_N=Y+Dz8AR%M z;lS*D(>pf?X;n0QrY_ZiYYKyt-lFvagW zqh=%*u!X7Aq((#k0Y&mv7$t5SOk=5J4R5$@^`=t9e~-I6z`P_^#2qf!QU6&99FsSMX_~&uK}nal(Te?OBT9-q&O4jt@X41@r+QT= z4=i~BZ?>=UhI{H14|RI4Q?EAcCJhf34*^6$|g4- z;2$63^!{(mnO3Et5~W~G-02uUOIJS=Kt8JYv@U2GS^ZFzz?P2Gk7M=YL<67n_7dof zdo$3PfY00ra4qae_rW;4F#ojR(5#IyiXnTc4+r-^imShS zHL4aJ45q>007ebS>A;^44}hD59vyCVe}6(KdJga~w#4g3It1=P16~He4}nJ@%sznK zBr0D~wDk1YX{^EAQ`L|TBIcEt4>e+X&XXZWKHh@v+zXb`^f?(joc{hzxs)C=cLGxn zzyVQ>*A(DboWUp<$E5fd4JY1c3HY6sixdxG%}y=%(eOG7 z&yIhyrl<-@s*L;?jPNEqc@Vn(oZpR{1^iN*8DD+qW;1Y83Qu+HBL6AzpK=C|b?hVl zbIgBE_|GZ-Ia@;{z2+zMe3XS|P05Qg|2gD8N8i!w|F@r=D$ii`5Zr z<4t94YeYeDqJm z1zbBjoJ|=!O67WnB)3}${)_h=G+{PZM#l>E%O z?>ZL@(FH?v!4O?AL>B}R{w>PilKhpHiqce(+p2Q$DwnQu;VPG{a?$G1>aEqOaxbFf1pYmte^2S(Gx`^Ml-mRUl=x4X{~Yq4qirPy+3s9Y`AaH( zNu@8T@FkVKJfeT8vrFpik~+IQ<62UgYjbCp+}R~}c4>4*{asO&mnA3y7JoY9T2h&7 zbAMOd-xc?FmF|zayrx>$ROy=PTvL^6s&P$SUQ?IX)a5mGd40yUq%zm$F0Z-EYwq$I zyZrBp%>Rd8Q4000BIti(;D2M_e`DZ(W8i-oT=hQ`1E;x!H}eN6&On-4Mdq(-am^)Q zN>@!L;@>yKzi)_t-w^*3Z-0n>vwmDUEI4w+)MqLESx$c*razC;pU3IXll14QoK^LG zmibl(KS?NN6H3{HayB6YU@-$>Q9!(@mdj@+B{g{USxSGF)1Qaw&!hBbrsb3Lry9Ka zKFfUT!Rv%#HldVFC}$Hg02VV4t_(f{WAQZeeU_P>LgqU=dvyHe>3`MOSM*s*f0omq zhw0Cw^yhK<^CbOg>?`^{%Y2*riW7?2gigy!+MY#XJD^VqckV&n)js#kvZ-Dr*wzd)i2y>)R>UkWp z-Q|=NG2|!uX7R$<8-HP1us{{fV2Vl;4u21E_DcZnYG!pDhnw=;jz6ztQvE1cO^t?MDA82G z(KF4O+w%6S=ege@l@(F;s5bkwO>O#vT2-V}LupErNGGhm1%IWL#C2DCrnBnbO8p=Y zG(-C3FckXY{a5tFm1>>>o-u;T9^1FIk;W#&G3 z`<1j&n<&L6%IPq3m#91J&4I8|;85cbfu4yg$TR$=lx{_*B6X=L&= z;x>nFC%>Eh9*Hu(p4wney1F%(VVK&vSs5m88M614n{c{K|eIXI;mGM2~qx$6N2RdmXjT?XP~MCYxW9rlgwom8Vs0&tzj5d(xfy4|CLU zx%8(~XXY*{mF*=QJw>@@b?=mojXC?jWGyIuBLFU7heB&gFFxCvXvVLq#{ZHr()bNk z6s0lI3V-}QbAyyo2~SBHi7AsTKSU=w5vq77T~YL(wNbCA{F`N}tJdnRUb}e8Dqo$? zhcH_FdEIW+?DB=(#gA6K-EzZcYN?1#IALEc33Lx z6`***Xxzr%7eO?fSfza;7jE3&M{ZG?LGYRJqkmsn)sjT4fsd3^vUVsQ^Dd1Nt9^2w zH!GLKL)fk^K&J;PV9C&%x`IT0gbN{t&G;0AU(n6LA`BjIUQPD`?r6AjTd)9Plkj1U z;Ne2?_1kY^+iPNvu$?Ci$g<_tqVV`dVYgEpxnh_%XhUrNsW+iHFB`75!{6{&tj?lw zv47?5XXQCcw3}hcSq=P4#}(wnspNhls%(E*xVfld?+_8gslpB=X>Z~`OmZ5;UH*`a{m_lJ2%|Hd&ZNi$xQ&EC0y?>^`N-kWgi1@1{3)EdyNC)IvVaw1}0QQtk zsQfkiH#|Ef0NnfYQSkJwL)y?}{-9_SS}p$@hO_CE2!)oj8w`hQaLA!8l*IZd_9F?mG z)kx7ufs>?K!I@JnZNoiawz1MmQGZivnN~`F7%Zi4h9zeilS5sFHOx8c!)5r0uAh`8 z(bl_F1i{N+$u25<=~d04PsOuih9u1xJXwnG-L`LQ4aa6{i(0#ORd{wDcC6Db8}(kF=*m{3*Rxwrr`x!xcWq6_q9+L`s4FyDP4s7Xtbd!n`U!rQ z&;Ik~VtXqMG=KH+`bH)8PX`C$T@rQJpZqWW0ib&C>;7W0_*?A9Q}3@g?tJM^Kd}vt zgEiTH$Y|I4yoJ_HlGK}%%j521)}O$Mngr8PMJ#wC&Jw@6z#uDwRFe+`=ELkEr@77M zO67uSuB5gNn~1><&<2(8?|+jRV!{6tmQjT$Pq`!}Ga!u{L=+${TPOYy*gI=DJec`# z_YIc=e`pQi`1`Q;pfsxBL(VdWNxNXfvnMo^e>jM&zoPwW>FDh2VXk`%n$Skmw0m6=w|i(9yFwbswyzeMJkFPE}sCAh%+okChcOI8*KFe$=(`JjuNjcDQR1>jdVAViXN){=rRb0-l#Dj zEy)(KLdj$W1bmsj{0Q3dN5zViz4Mo$+6feY%q^-@$w*AHDk2ve{sYn;Iqg6WY$}oJ zQi31dx;6jNA9$l~m?QISan2-dc~on_T%Lsv7>yx^>Co{vjZ*16Fyz z{7A;~Wa5JSkvkiVTn$hy`jOWOU2M*u>Cw>YX97zNyq*(`I_KbZ< zL;4=3vmDKWyt7iFNd4Wlu1md6xnPX~tJUt4oCtl;C>IYQYlbxED;ldEk%G8nW`S zw;Z_P5;%uvn0@vps08PaXeVgF7=2}bDIWzhkIM+An)#yWx7Lto+m)Re?micgfRyCABBQ)jiRD>z?>^-VA~-ku~+d zcouAjkQ`hmqE;Bt@?o;8%8S!>w3kZ!f-|r%?NxsWyB^M~%q=N$X#9aE7~NifyKG|% zg~=w}N0*XF+A%#SO{oVUZB9FJhhHixx4~{h;PO(P@tGXJ62PT^68MhXEF__($)O7; z^d6Q|GN0Aq04Bh6!D0`W%Nb0=oX_2q3@62|vQ8&<#GSx5@@{NdnaTl(e88TmGyt}{ zB##F-Zae{Km3{0kJrmrxi``3q|EnquXkY;-m#jOR-lI2-8uPk&T`PnVErGc>J9J9N zD=8-{DW@wbXW5i;VI`%w8~KiS{M?eE#WenH;!{plsfugm4-YAGiEEe@RwsKu1Xk&ii&C%;U zeD%<$Ok5Mu%uVzL`GRs9BCmpE({CkdOp zByhiKJg|4e2aiQ+AMfdY(oPWGvzLUSOZP5Pgh&P`uf1??M`5sk_<%ll=`M4pLqw=> zZIZ=0g-w8i8cp1B{44N04?r3KH;0H89Rmx7mhcJ@`{8GgFmzRCoG1(lP=|$KpAG3( zp1TopsIYJFC|h}=O?(?V$Cv;U7f`^WN7=v5DapqaTgl)AkwZHf=6E=bD`If#0eI{K zS(yim7g!iGJy@ZC`~_dOJ(HJ48sdj+tG*ip=S;3lkyO4P4;*2`m*>gcb=f?98F-#V9e_v=V#8Q#@R!EA34D z#Tjr`cr)XKg!X*YtF(t{o!nN7=j zmj4X~>4sl_2pe?eC9w@B&Bw#BHw^qKzS=*z6sv=Z;$B=Xh&E&@2Y}7l5?#h}2fYRpA8T2wfpy5U#dUM7f6ibjnW2IfR6= zN;q|Z;B$_hBj>~^LB^5FfO3#nhNR=fi>}dpuBVLbgB}c`jo#`7S{zhyue^7-SK^-~ z_*qtesqn!+kKp4t`8>r!kZ`njV%9rSHK8@GB6;)&;4jk%RH`a{imgyMflw^$ooOhb1xMgGfzKkseg-+k5>!E8`8gYN@i!$>E*8V`3hc5PPO(JI zma+6P!B@omGX?qyHG70msmV$PajFL>Ww3OA)=GUPAG<1I&wBRPZNAK+^Jg2s(jr}4 zemS}PS7BHaUsgV##s7`x+ZDGz8m`z*TbGJChlJAK=jXymFjhW z>h+q1Y8s9HPoytlUs|>wT1@L1mD36m86mvU^9JP*aXpp~?D_dtPGiV@+tY_21X{^( z)D_FaGP2n!JRC9V|FuMRI(|;9zg1T zFAo&88Mk|eKNp&6QUZ&8mmDr#xG{TwSnAP5Y?1f3?X8tg6iwSu8R$7F5tNg2QtfXI zjuQ|b56{Z+ns`y92kw1~LS&%);GmJz5VDhKBN8kzfwV8-#G>WH1BdYvRjTx`_E!P+ z^8sZ6SdNc4da@vGKitZrPnjNoR(9v)Fh`4cBNh*ieTt&@;NgQ35+wmF;(ls>o~evE zNmx0+KqL4Rpl}OPXFjYWZzJ*ji97~LuQ*mBi^Oyz`?7%EXxjuP)em5%hcEy_3T9pj zlagG1+Ft1aX)bDz_UBx}--+yZyRYPv1MJ-LW=nn!-Bxbo(yL*8HYE^G!97$Zu=VB>KJ74+UGBh^AwJjWSp(IXpwB?yq?r2t zgre6ck4K4mmNH&C<37gdeDZ_cT*n1VSXEv$((rQ0IR%bXAu2vwk$OXmvg~SqOps`HmEc`J z#J%#d3`_q=5uV!P`&yr5ImikrE#w6V%j<1vRUwIx*FEtEq<;r{5J>1a^atoVF9MvE z=}>($0$?Hzo5r1lQ-Np%okOZdJi~Kh^bGyX_H%%+m`fVSqR<}H97-VIr_c5KYP&!32bf{S|2Ux_!fX|Nib>hN;LBm6J?W86WuO78!RYvMuGXJY11F0yW?8=oNHzyb( zQ_n4LGf};zXt^q;lR?V7N~uHYin%U zIE}!kb5P>_w=SuF8rs7&7`Rh$w!4o@pCO>=F967?nftenAWXeeN!IwLhWvQR1;x}WE*IHFjDMRf@ zhYp{C*U10ONDnCb6S)D0OlqK|3BQ(w)xaB%{h^P7gpXZ+oa2LGl7y&$>{7JEQ(nFz ztuxiBUhG?!NjNkX^zD>(P;8rMRY}FjI(lTeRB8X{ai0W5JH`Fu=U(%C1mh& zHt;Z1b?kG02)YLsqf^g_&=OGC)Z^tLa=4-7ZWJXG(}(ofoww)x#63H(mq9=Zp^!t? z3wwBclLGkkz#QVPXeCA|t;E;JhYIT;8INB8Wjy}lVNvrU;@;i@=r7y=vi{}<2l8+p zp;$B0!r=&u%eGHUT;2mX*S~+@-Iyx6Ykip=OkP}<6Bq^-60@(iE#hr|uGv=iGf6!z zZtjVdPY6f>h?hSt1TF%9SeI`t1Ret2AeWCV1V<3?@Z_{${A2~5#c+IjbaI%NKLH3C ze?7S9e%iY8y(cf+-bytFAD8sI!m_f#^QDBZmq_y!e2*DyBvoByD7DKIk4ddPv>k zi!c~^5o=N-#wP2{N#LyG%hdZv;PQ zOhscM3fU1YFj5B=P6(sSNKi&Znk@Xzx^5(T42h=B6l*0q<0E!B(*+!~6@Tznx_ zcUTlK7q6r)%v6O+G6g`cE@>&Xq~cmUwWf(Gn6hu>r?=$gH-K9{WSvbjRHs9ue}gVa z2&q&6MnI(lnTAS)aI`LcbXDC9qNwt*uwUe%Jp{qXR7YD%h@P+OMJ5y@q@eDdM0Twr zh6wB^6pj-M*SDPrs{$kc-NW!!q6MtT^{o283L^k~jyHWDeaM&)Z5a{6rsY!Z%i1a~ z8pA;%R0Mr{MkrGS1gm6=+*~oZO#$*BBL;*hiU4+t9WCHmBR%q91c#;N!Qv`qZ^87o z@%w_5z;B!rj^z;`vbVZy2}$OORLVDIXuuQ_nTN;ai6vONW=i(F-sJ z#|lR4?%tRGF9aZeXqEo{vsFGQAF}&%SNscf>7x3PC(dg2EOUg_i>`Id#-LE!DYBc3 zbfz`bHmK!;q7{Ad7Ymg8tWFDG<;ijZvBJCLp?s)*(8`L==gCK!guergXBAKP@ZFBO zzi)JMwuI0^C|}UEKK~sy?C_a46!h7!|I_K5Cd>2lk@U-dp%S{@-2ZAF9;%M``}jEN znn(VlRV?vhV$~DbMI{6D-rZ-(K1va~i9jcH7G4*KA?N&@pKra(G!-j)*-S^o_6~I} zP#Vl};BLJ3+^f0Ih03~|qT~Q-Zo{n7Et^94ZM3*@m7j;H3FO!wtu} z;1t`yhw`&vqbPq%^0zF1Q*>kgPq-*kor)$-Z{gP{X~oh9)kz$Rshl-EEWV*^X{GGU z9j9(*(cT&}Re@Sl!T_`U2;au4I;dF15G+xDM*OoP&$(Re3+7Ym4hIm!Aa)8Upb#moe-K7Xj>-5cvpK0WO!J z> zoGlnRt+_@mvfp@RKXa^t^-1iWO^zlG)hEwdEXf|NTZ3WaEX13W7b)N zsXzY`k%kst90Op0_Vb`y)BD<$9lOS&rsu(B{G5010XYaswcv@0&@DE9bi;^MNnCZ$ z#eo`*C&EjrCU-msaZ@(rKx{tEGZ45s=4Mr6;M_sv6*NYi@^_d5T`i!oGk&Qxt{RqS7n4JZFmLs5FLpb(J6a^*gMX_Q`i(h!M@ylLdh z&`U4K&|hpMk5uP|zKLKL7+$8>HA$o&Eb6mG{M>ivU&II$Xpg%Mq(?EKIFGB$ zwDm3(3L5zw62DOp_xp?Xu2sKk0~xQ~U*d}n(d`s~6E$rSBNz`3s8js}$Z$!N)j#j4 zAy10X?>4Tk>Rpz9B;*kZLL-qtK?sc1vnL{`YP9CMh~43YV}A=5 z)Iyezgq&`wSg49^tz12;+@egR_NJLqYH^3iBh*o^SZk1fNnClnJ~5~?+VP9JB6~Zq z5301UC{}M}yW@pJjz^t%@jW_XPoPM9FXxD%?f9fv65&Xs%kGsD_99dG_zi_ig|`$w z+*p`hQ_+JJhEoPEaXIpV$3@=;qp58UMlm9St&E;`Xh98k#6=wd_@ z%!u=bsVB{UwaUl8D~Vd7Psj0W+2l5MzmTFLn%fV_Y>f0p=g%D3oVB@Np%!SgP}#0_ zxAh@5#8M1MS%fgf456aVb+2)A+qBW8%=)vP;(sc27uEF1_olV*y&;>ezYl@dS99F#Q(F2XR8X!J@iM@An6v2Tz{36z&(w0QqR+_)a z;Rz(9j<^3JKgLD|sBf&)Q}WQlH_r|p$t;Uy1*M6m&suI622WyFTCzBUS6%a{S!aa{buE=d=@qagxN+9(G%jGEEXsD5O@Leu2_V z2G_M_0Xa|~u{UJQf`!Rut02^<8$6w|Dgr|x(}s`~$+Qe#eiVHDg+CPIrjerCIj1=s z^@gG6%_T{E2Z{TXirKczNEI&>-~#OyK9m7}`GrxUmn2OP8WzvNWdqM4kjnv3P0C{t zTr0Xt;rb(?iHtAc_@jJ2vH-g8JswCCiLETHU=D}H7z|gZ zR%JZLDI^T_Xbtu=W)4P{RqtOMsEQd)s)#}bXf0Nt8rhOgTk=d2qE#k}9@SE=k?go% ztLlk>-p1@2N{?^t_UK<&L?6X}xF^Zv17SpWX3CBsLFlu9-6)73DZyfXs5~2DRfTxq zXJZb?nK+Lru9iPE5wh*gKI3KNp#$-qY?=IiO?3Ug9>1QBQs@Ha_Rc~eq6hb9`HlV!c-@R}x zZ)P$$IpQUgb<59c%;W1|%1<_HS-+%^;^ZUCxx>jx;ZHQpVHZ0aaU{&`6V3| z&>s=e2ncy(HEIS4|ETXpJUYPIAcf67o|8Zgs{M4h1{4H26MO`P@{b#6XMWQ)A}*}s zu+W=UE_($Bo}6mDoxxInPtm2{gu%IneYBas$s=ShdyO`1i<=v}Rm*OVhlL-kp;?6+tNywjszi$Ov!`<55eo_4>sUKxj zhfxl%m|@qp0UvucMDZg$DCE9dnFpX(10Z>P7JEf&{WWP8E4xvDc*#x+FYvl6QdHBC z(dy$SQ3`ZaYsS-I-W%s?Q95;Pc{J9~#o`Z26ZBk<9|{tBz@4J;#Iy4Glo5i^9QBNM zTQUp~oj1h3)Fr=0BLz7khmL#N@1n-rgs->W<-8aWT)jA0TrA_5Uw+f%k!Q&6l{coD zyMS|fvBYbp34_ppa91gf(T+jj;0~yH;yDzZq%ESvSB2@TEEj?77t#$1 z#i)oy#2&~!L@%_Y?FG$vHz*F(G7H2(%8#A-z+2eeP{;kcp^mB|9um<1@7mSKc< z%GRQFQADe9yH>eTN>V;Q?6Q8QtYKxFA=@NmftfG_EGeab45qxuqg^6JL~)w=08Gb> z4*Q-J&C#e`3035tM8<{OLXOBS4_wP+K+J)PfGW(DBBr~}lW@92Lx`C32sKP!!AZoe zkuyRKYaM5cuwa4&4b=3au7z?1gtr(5p+T!LSgDe3+`26ur*W+M?=31F?=l^{c$p-R z_Q@4MZ3x|e=a>^jV3R8pz({Q@9yGaZ7`f{p&JhcgTuFYe9ofCd%gE64-shI}U zLN*@{FxO6Z{Ey%nol$;av*=a8RKA@v8kKjkzFKvCR*kdLqzl@U!##HkiR$SzF?~>4 zSZLLuO&^r?n4lC=OXqlXsLEnjtMw-7x!3!4qgk(6Y-UbxkHDaQEv~ho6m8^GpX=QA zYiB`!IUt^&Z)F-Wj8oV&P(-pac#Fj{mT-J@E{s{2x#M&^9hrzn(vg3p0X-5q_gL1$ zSgEvOBpll?zZ;BCwDoSawV6^;`Z{AV+DCnFY;4alN#0Qm6y z{H}i8s5a|PqjlM)^5^GhE=kf3yH{;A%xTCio-|G%IRX;3z5>nW)^m#M#sO%wGz7+* zS_T*t%5BzLSN-eFE$0+Za~CfmaZxW2g=fOzC~b#1_oIn7LfHpCK4`QPv6Ml4A}q*% z0Wq)#_!LgWXGDG}48;$VP&F;Nc>`%Qm`m8QJ_+l7_EMDjcPPUw7kQv*6Y;LM2*Q|r zTQ3ag*66yJFO8arL7(3OujRAq`8Ka>TB zBIy&hpLr`WU#TX;Xh@vYY^Lb*q_g3F1YZwAfAoM}?Hgky>PMDI`KrI(lLG8u7kGO8 zaFAtcNZ72$!6I5ys>F`T*-z_g`b7{ZDLuP&6{haunRc34q3X`>qR32X%;y2dJZM(s zxd$E8UoU6wybD|%mJmPnN~ArG8xM0}=ZT!XaZ!73Ir7X&*j0`r(3~Q1nnIL+kr5fx z<&;Gj(2gU~h`4|mE<=2LQ^5-e0qt8>B8Qw&3=7M1BcFZb;+yTRNb|_^7`l{Z*B@e4 zFh?0IG=g$}dLcAqnqmx}eFmD-a~!?KwM$C9Mc!XV!yA;8qL7CS59mQ4QM|tLLYTtj zz`7yq!;wYe#j`^62^ec+bM@1Ih?dBTEY^5=()&b*B=syYkFd}ax01G)&w#o&g9Doy>6@i3TkjNsmKvhC!O+yIM9rZ4l+29z ze%9Zjh)cD-_bSw9i#MtUKCNTrTpcQ`!D;F?ogV zO(E01DM?FOH-a!{-P`80eOg%4xOjYD%(@s92AySLY#1^)WMaa9f;?hPxTM8Ihdidy z@%`q$@der*QE(fg)5zVa#VM~8l%^Xb!iVEq4`(5jb!p~PH-Xq*BUi|C4TmR47Mz>yLMK{(? zY0oKEPkzf)5+0;lZuW}UDtYdCLwoYs0){-(;5AMeDJMW`o8u;tiQKRAJ8_mpHb)az zyStqG|7Dn0k)^95`t~ubD_(!Bz z0U_pxe8*3rjx`2c%L*j{yP26LY9(4{tYKFxA3GtQB?&UYs)K1^RHhQ_eyJ3ZMuDm+ z^qSw!oeVr zgGQcbj>;z{Yr_hqtRfD-BXp)0>|$g%eTOBWD)-VFGDEvX>+zw0FRfg}t{x&`3nPm4 zL4(@yQZX)f(CewV1H#!<&Yp(>YJa*hb5zyNEwVj-Lr-{-$cFue%Ev@!R5>Rm zXVT=#ik!V-C@gtxU*Niu>tL*#DBl5KZdjeh$_)YOP%$^0)i*8Wazk^!ROrhtHSlx7u=0cDAMWMZ=^e8xw7@kD`EHbMxXTpiOX+=A zQ0e7#dQqhxrqfF*{b8T_*DP{G(X&`E-oO(pI$?3JsH9Ff37J$7oM^I) zO-)5K`eWCuLpMb2#Od=7W-o^fo*yg)gQ<9ot4IV|p8@JH^diyXWEo1gKkI?Fqf2cRk@`L$!WO=#bLzAa|+%IJ6`IxmSIeBP2IhENz$yWG!EBUvrk zJ?*+qSzDoEGv0J_?+FE*STJJk*vK7wz^aTr@)WzPu32_`W`q;Sbb-iqybMV#Fmddk zL8p;&l%IuH`;z%*K$MiPiGB!NlLr?Q z`hjH2T?sHtn%aSQ+b7~R7!H?VqAT6=FkEBo35TpB&(hQ-^aZj4TyTvK{jrjtCwkz9 zqBp67Q#R1+1AmH9X$H??Goc#{S@=Pejf9>MuSXGDGl`**sNza_gi?nm!x80FU5F+X=|aM}nRPY%X?6AmMS-J-WEK^9CPZr6_7mf_jCIXDY%iq_ zoIU`_qTIb^J?OwCi-5&t=0!uBT{|v0;KDe8G{d|pyO+dvd{Sc$tnyKCk8-dkoLO=< z5$B^V#azWLxQ$r<959Q2y4L4G+6lfKGmbuy=r_U@gnr?EoeLKQ)lmT(&KhbeMw1|j z)!IeUqe+LruEHA@P_Jyh$Rn+?IrNLcG%*}I`d6p0%R;T^MT1F5KrX5sYhjFxwIOS; zXAWBvO%xl)@oDtkvagMSRG@B$N;tZN-Ues})AjL;)JG4v6=ZFHDj)B=gn-M<|%M zgewG){?=MNm2mp&&xShJ$??$l)(W1I)1nLLx`c31BsuZ`k&aw6QxvEKnnaKitpcVv zIS#f#6mT*Vi66axD0_!k?;Cc1*Qz$*A0$g@Vkz7=9NuKoGC{kf)A7_zEHrox@P;QW zt@@q@!I$Mi?sK?#NYZZAP@xOZGY8j3^`PWd#tV5+DkMR~U5r+K1J~FKeY@Ht_zsTX zMqhk8vNZ1t`-Q#Ye&GYhzL;V7cS3ITluRN#ATj3b?;ntV7+h<6xFm85PrXn~Dld#D zwNw~!;qzwbZ&E_Aer%v#+9H^07Fvfs5;;84F$IJP2<1PMN}*iQT10J34-hP;ht2?B z4iEE_kMfg`^OH~VlTY)L&vKK?h5Y2AX@cz~GNqpXyO&kXe$l=6ii$Rn_P3~d!4dvG zqB<=;L8;e&?-&iexG+tmAZrf(M}D@K3sUd!S$iwTR*g=B?+*2M5_LK+7-0(bGgCoU z-Z%()6mNKN1zh6p%|xN?-FG;Z|Nl7fW3Pj3vQ-jUS&?1#CL(+9ky*&mkTMcS9YSQ4 zS$4>Z%m`)gN=8{lHoxQD=lZ_kCT*@p|Z%W;S&T zztRz^e4|);B~8&R(iC4WVEpyqYhI(kD1`zOD%=whdeonfWRi9h=NLYHfUG?i)fv6G zKEXD7ef%_neDuW%Dl=Dcb@&n`T3XC#GeYaTFe$@2u$vAXL5Y& zV@@yHm_W{a$d*5ZM;L59BFL2`RK+>x#Zh#v+`CSMsZgf(l~h{(m3_MLG9CT?JtCs? zBbvis6`hLhgNpS+gx=4G8&2A^d~{fD;ys^Ken>ea)GyPo5X80{Esxeqzr$lKa`ng`37HJsJ>dHQ>*{X;}db8ldjtOvmX8ie@3`?Lv5HiI@@`Pu^BZ(;9+442?to^C> z&3D#Cn$^=~XO!NAhz^W59*WhlJ3Sui;_Jlww|cPY?yVY}borX>rHmyUeXf67;> z_Nu0ocH)t1>Ps7_VBI|P>NVR8zv=Uy)d7Bz1yY6cTT;9d5i*#bkv1m`RZ4fL_=(NSmNPfCX*Qmh%zSseX=5WU8fTmM8A>%{#VoD8gS5^484@lGH_> zS{{+gRae{A$+|j4p}KV@DojLPmwv3 zJ0eA0a`NZGX%iL)Q0>QtDiY)cxKuB=+2WVAsS%XE#eVRP?>7IXh>b>#@%IGEPRry% zpC8sRyL39gTZ%Wie3wZhTla1_*(%W`(vs_nnb%ilb5@jzNH$gKrC09<-HV9Gl#tzn~Ja12^iKajQbomorM@KIYF>@2-6I&_R3nAfr?@6q8~uG>tR4 z&{CUbjEVWFskj=jHaj&p3V9Svi5evfjhb;6)-Kyrd@HirrRxekt?+GfR8^Gp{A&(7 z@^He4L7UjJoaDe9TNI9l6&!h0d%f2_iPz>$$YI-wRGF2G4P87QQdl*&1?_ z#4xmGt5`70Qh3SqWYYH4bq}RE)yF!@ocDWKk84=MOE+LzZ$OIkf}s1OsKpbNFgepB z=f|d9jqtm^(Y6cw`mHL>W(b#i1Ti=xhL(@9B9|0#G+NH6SFxbbc?DPbL~JgZKW+{T z>lzTJD3@XTNY>PTq^Hn3JEdJSy;lWiD__lCePY}BHsRhVdFoIB>o#fMWpV_LY<^gK zy7qdBPfr>1r_`%g@xCgpnmeSRiah1c%*IxEO0cGBEzO(MPMC)r8_DJwkP>DS@MP#| zVs9b5-YFQ)?VA{PT;1!tMvY&eQ(uZvbx+=t+vnmu?#<-4$GG8kRi#Glzdk8_MEM>U$2%-mB{ zWo{Nx9T*)d_v&WJaSu$WEK*g3UKGwHF?#Cr@5*Z5A&&Wh+bMa1X5GLP&lEn_fV zrMZL76Vt!vur|n=?iyWlyoWyWW{J38*AA1EB>m_MGgLjH)vWmB-6MDbPNknI1RwQu z6FJH=sW-f6T^PJ>{;ELv`%sxvbE|e#Nyz%E(A1-sSdKKFrK_nfIkT}4_CvS=r+LiK zQ(c}Zp_D|a`C>?4$QwSUE%ousH)}7xJ1@}}|IP2wi7~g;_Avc|6BI<#bB8um17!}W zSmf-+-5eH4K{YTZ5k5JaB%M+I1+QA>NR6m|??@l%nYP6Yckv8&Wk&hfi5=Z`*&W@t zMvMZhVe_($#S9J!euXR-BIn-G{;Mj zX1IEOvD~iv2&IsiHf<;I60&KOc9Bk{vT;$v|3^bpXy6 zmC;eWajwt-xi2a4z0U%b)@Yke^GI$_jD~xf3W=p<7Ccnp3y&zCyC3xZXo0(kUT}`r z`!_2UV%7d=)K#LViQ;us@A(a$;qM9>4z;)XE}*V4A3Z-WGhC@yw`ufbuPtZ$W4}jP z(UPg?dx|oZvq4n}FEXFJrA)s(cQ#@Zv7Fu9=J$v?uc%tRcrdfR@Y2f-U#~;yNlqyC z!Sx%np%GRqmeWVM$#rL~YaF(&PnK=^`WT|n|?vsIv1ZTk!8x1o;o)DG_rpx zGuh)av+HJLxyi97Iu^4Cdm&Q+md{L4^0{9$jjjw2X}vzxFGzN$wI?`()3N<&ZN;Y+ z;+`JAM!{}Il)80yADXAZlUn6foeD|%gY{+R>W}vt#h!Qu%#Tf|mLY`c^*p#3I1GvD zP_kVUieo(P-Q+DD{!?v+@f+biW!lBxt{s(`r*>D|{*fu=x?^dowJ<1ba&~@Gi1MaWHH4izAx9)7iq|l z8#bKcLYz%(oCGU2BqVjA~)u8-Tx zaM00)Dw)gs=o?oRts#8(%@PoDW_pjs8I|ns;5*(fU^5yl5{qM-X1`dN#@jg=Ew?1# zuC#aQVAt#bn6t5Bk=zk${GJ{+9%V8>s5C`SboCH-)6zdqY&uDNf81 z&W^o_<|10WkeM-S7#or!(~?kQA5gszG=od`b&fyQo0ckO8if?I`K z<1Y73rn4UEC8j&*j>`6RE~@UFuzgF7fD#6>vx7sPqxn1!HEnB?i?3gxUwhcPu}0nh z!S&3sDe^Ny$eLj9819pa!u$?&F662jQJZK(iuNb{t&4POwT~pe_jwAV!Yl_CeXDBj zJL}0h78^t#T7OAwhm^TiG+NygDNOk3q)%t>)MJBSQ`8Cr?rZFtR1^9ycXFEI-$OH#ZiuQ z%!aXm+}^YOtE;MlT$Eg%b{A=C)))C1dT@5-QB+Us#78X`8e?$%Fi%RrMi#)eM zP(F!U*R+cgV(8k6<1n(FGioX@D6At9pfNgq`!R1x`m6i%7rBk%1H{qSXy5duO3kwl zGsSJ6JYI}@)>*i^L&+;8+91X4NBWPBvK?MC`yPew1W$H)kCi^Y(_0}P%Tk#!a7f>c zNb$YqO2RZwpZ&%xol^RWA9);r^Z%vBm`DR8EiC zW(-28Z<3vCVv3!7V#;)?)>ANxSq`{LfB_(C@NrM6ZNq=yqK27PvW=q~j{LX??hos~4 z3wWMqQ~9C@CHcIsYQ5h&8YJTJ1aXlmEV$a=u_AZP>~*m4WH$LqQH}0+WnzMHne{+F z{?a9L@xv{s%aO(JM>v}a_b%TaXg$e4uHg8J&B2CeeIC0e){oD3x;gvFrh2G{#c8Tb zsuNltODR}Z}Wf;K?m!MBiR>XXYLfSk=36@ECre-R*KEANqagXg9c=VEdA+P0e zljkCpN~dK2&P%bSgfqQoTh*epwU6^p>ppbTT9C-q_$lA-+9iLJ!OV2;LV25?x6P+(o0~En1vbgX{CRPw8!iZ> z^mkqewI0hkdh_nYx?*r*ZZ~C=fBJcj?@JZuY*g!tFG-=fr`*)h?E;I@TJ1iUq~*o@ zqr|??ubha=MP((te$_J+X(ML;F7snFT6|-e<5PB3O;-)&E5Xc5Z!MTR@5yB2%DRwO z`54d%O?xP}t%Jj!_DOH{&^sNcPw{N5#&b6X$dq41D_vIbz>Q$L2ec}rBdp=i!I1IvhzU(gd zJwH}|VnNSdhugzccKE?Y!8_i;h&`oKE-~z!Kltx_p{>!T8e2m z|Mojs6I%RGv+uioiaO}or?-QY*$8_+3Ou+?Z{SU&Mc*qD7-f~}J8IE1?D6a}e;YA= z7*PyT&x+UbvKLBZ!Yp`FaangynAnA`^kc6z=kU=i%}+OuKMV3Q!PyGZv+4>?Ns0d! z+I2-`P*dK6Y2*HK((IQ@-Q?c$Z}$u^UTU}M-3(81xrjZs{1p0y@97WW)n?`(iySJM zn$tCH8!Q2VLkV?U!FVQIkxRo?<&*WR;48F?Q|y_iFzV zPs_fPbe|Q2x<%iwymu^IqN~4uH{;rOs^bapqmUkWs~3DWP%*Dw^HI->rpQAh5wH4! zc($ifDerBstsyEc_bU-aP9-zVH`kV`g3^oG9?MV|c-d7Yyc(OCSxzLF{9Ha{iKkFx zXY5sQSp0}O-eNbZ!8iE1gGhY*k=LJ);$L}Xu@e`i`_DnXCL`mZ_8!i>5D!>N6uw#Fq7QzoC^#T zF72k2za34T#COGn4t4YMIn#Szp7Ws#3U;`p=FzdFEu74e#wR<@M}$m27u?1!xab+M z-Q`zpqCxUX)$-PR``nYuv`sd*2T!6sdQOQSvwjzsGqC1Oo_8#lE~#cAlSJ#7k#JB> zMO8HR--JR2&vP$mI-eD6aSh7p%lo0@DwT8P?7AdMG^wRn>A2hqYF+sn;|gAegw67k zi0njdIwoH;0gsSHBQb%4_3Rq*_ZE1}he+eJYaAp}LXvJiefdbuL_gWs@74X1JPD_@~rnq5U;CH9BG1WTQSAn zKP(TIImoPc(vOH+Vn4)Fn57cFrc;)%OHSGG4CkK1N(}Du{iRkyly5*@=$JkCLg5}Y zOTgMva)uetEY;jd+Mt%mkfWpHpo|+!eV!9zd2*HZPP)dhhQOVNR1PvGM;ld7NldUk zHv1~f$>hCb-(B)p>N~25Il1RES>WoHu|4Jel&gK){yb6GltT6A6S#?9)VfstrsczHsAbxfza}1-E(W2kFgzDb2~?c4^`oiGV+N(Oum{(q~k+da@M*3IMWf; zj!M$U*C~r>ckYjJ>`7t&#rL@TTO;Q>uZz-WWccV~=EnNB@(fFxQI|HYjD{Y#kX+&$ zn0gje5itBo^Pg-9oIg%&Vr; zTdR=c`0%an<)wZxQ|UgDc-AES53`z9XLIz-$NQ7!tULD=2x^t=>_wgLp1Zj7fOE3? z4jWEL<^wx|%O|Z7A&#r4;^Jw`n@KyRq;I|jAFquM4Of|ebbdw+&y?i~aUx|flceT{ zbeJOscsV@fHhxmQOxPHY3Oc)x|W-o!w(dZ>%!;*3yDg? z`kZF{ccxqP_wJl%*(Z6wTrK$QVb0ZSZUTEcOuLq%Q-PwSwu3pDsHpvtIr(EtE`cN# z^J(lmB@}WOIck4=MdJv*?VB4ga5NJrdaLj-FJ1OrD|Ppw_;kscB**>ecO`{wD3Yjz z#QW1Z!Y8sAxU*J=)vgIRqeSYuN9%TO##<)b`-c6S_cUsgL^9Y~kz#+4L~;j{aOk_U zLJo4gG*3>d=~J<2!|)@5MnQ__m3P0rMhj?sRnI*sbkemwz2$-LP-3;QL4WO6hxQL* zFAK*y?)$f>4Y8l}=g(9WFs0^`?NcUN4tX+WOVjIXOZFnElxxz3f2|!=b5ZSV=zurP z*l6GNsZ&L>3nv)Xs(Ks>W>%%v0?CaN=n>!1@4k%eR=soTn@_dweB=GWf8eC9HeK46 z$_e+;%yyRS_NRQ$#&acd2PD>v%wLSWsLE}uk}oP8)4VUO-Pm83M&we`q?U`X z)={jaZJ_kkp>EuLXxBd=3pHtyYqhrYy0=F?(T0=ZvOpZK@woxV+^_eql0^;`d+H{r zP_X4M6tQxchD2AM4>9? zt1mT6r3P=I`t2-iKHGa_Clep_EO7tv+J)){n(XRK|J;CQn&5_gA~Mk9-SfxW{_D9E z8H(mS{QlNgTg&{cY)h*Xc~?(Wmn$!n@6%j(%Kvd@VKll8f8Nn`L_GLxNU`jUczYPC zoqo^x>{Mz=7^*A$2A8=Xs%p(*shn(t_+#CxY1*x`3q?|O7B%fYmP^A|bMF*BxAh^3 zbMaDUHdMqdp7Yr5bDg2@cRy|3+}L*9wQ?}zvFNQs>g^f3Tf>JL%(q*r&T|CKF|>~u zJ_(oz)wXKSwRu(J&~w;)rg*6K$*zV#O!wuJD7v)S=&>7TufOiL*A79U*ZnKPh%=nm ztt{Kg_K&;HD{r3BzkfWWU|cMhN7zM{Yo{m-V_p(+!SmwCr@mdZk?o_vm~qhxiNdUH z{Wb9)=K>y3q!A_r%xTG)NHTYH3w5ao4~+TO#RMR0<8aHVt|}LmP29f4Tu?WV_u`e- zw)(aD;#22S{k~J3nke_WkMbWeG(54gRaL9LcDN@ZjjPZo#>V%;O`TXbdYZb>6yJ%p zw_d_YHBXXTii;SBJUi3Z$fx#`uumB0sMi(QHRO#)wuDU7Uy527OXaqRI_Xm`p$Fbq z=j9y^SR>bM`+l7_&w{>xV0OIxqB6l9rJ`DCHnkyDRmG=)TBjf08TCV5T_dZ0LUg@% zZ|&HS^Vw5+HEM^NgM?j}e4giZrxrZB>M44xiH@+A3qV)|vD{p4aIjB53Yj{Y6NVQF++qm~f zBi<>7>C2v*=MPQd27Xkc;Uh&+#mNm0UuETvS5epAmA!MLuBO2g zZ;JneMvW=CHxdQs3PLUgO`FjRr+u>8w2F?bj8-p-6EM2Irs%h>mDN$@yGb*2=ly`b zivCC4fzvmCoMEKCY_M{~e22L38$%@fmk%wvJI7{qeCN)oqf zo*{hjYBhJv4M8x-P<*XTGhiM?*?LtlFE;U$g9R(6xJX&=xug9Wx3BuDhxvPFh&IH8 zg_akti{(wYm|1Y0pbI>&^j<;uM^M#V#|Zsn`}34}jWWLP3OOa_l)h3Nc^6(fzMq2^ zmf5p$Wh!fgcCWIh%I!#=hRfz&FiWP!SOD{GVA)ueTfN~X?N(9CaPFMG7%G8(&|c`w zNMesg>Bv=<2@c{9FQuROU&;HH(sMa6v6nt#*y|9FeaGt1?4@ku-08brm9>tZb%D3L zKHW*-VM6!g^cI`DOQa-?(-A6(C_gDF#1W?P^c_OTE(oGFBlY&PH&gF<4$QM~4)WgD zH^D>)mS7ja^^JdbWxJemWN;XzEO&fQnh1ZzB1(cYs^wT})6iHtnPbHudizCjnXmQq zW^v4_u=38~?EnkLES|&W3H}^kKWbO^<@ww{?M+X?a!*C@Nie0raT~I=uWFh_?z9;s zrV~lqw(t375r*u@8_r#!f!@?AS27lQdc@0h>c(*JZ!g*S*1G$D!alZh%?jjI=S`)jZm=JMGVP?w7|?lMRm38V;AaU)9zKuD&M9qjO!29BYkjI zk;w+>{TrJzshPx^gk5+a$Bi5qDUfm6D&z9eHpfmpkg&@zHi@_|!Eh$tCY<}?(mIP_ z|F8fpBJBoVo=$^8k7blbkrPUB#b4rb`Bq0I!;cTstuwQNPj9?3O|K<5ZBpZaSTrccFA8uiAcU;Hj zfmD0brM2n`L#KVW<4JgFvAV1tYo<+nUPm8y9-d-6?bw-`pYkr{{b6n~{6vQDK6Fxo z?wsdS&Lgh`5a*k?*uJmEgnn4yt=A)xc3il5#`PPO%dNg)rmt>onGE__TF(30Dq8cG z2zB+FUzYj{mc5!FeqO@-X*zk`M#YoePeoS#U`ie6! zlK=hnqo}QrmN;unj)z}yGRh>!w5Ha5H=*ESpP@!Sf-u2HRluXV?Z}(1FjTHr-0;9g z@vRGy0_*YPYFq8j`%ZM;B2SrHW!`ieY7i4>JEflrKuEg8*aVcSaLwrZZ(^L56f@hE4y znBq+*-gA+`J>}J6d1kHjPJK%T1V({R`vez89O@id8T9X2eo!*?TpK3b34a}ZOhEm? zHIwfnUW-;NDmnU2cvpP%xiv3_`^gC;RrV>@jTGXY@H5>DYLSvvw7D_*8RernP!uDJ z*L_D}Hb%cFy-CDXl~Xz=*@M0{&xu-E@&oD3>%`CO(xV^J#Q9uj_{KWiXU_F1ev|Q5 zQ=}1J?2+D`AA6pb7fNwCi1GFdC+>CM<8l%T+uE)=W_{_)=3V!vlu5SLdG(iYzFsr9 zt9V?f)bLjP^X8^&_Ge1v`67cl&F|Kn)IQ38t@#vzYrDwZ_OFN&=SGhc2!EeXl~+hl zfAAFlo%H8?qe5SU;hl))s=Pb+egf>h?xcR{#?hN3ZId{ttl6}EuPug;CHG$H7+OZr z=xX5M(;^VW#0cg@%zJlyanir#i3(Z|{BnF;Y~YRe?*S_lLVLV}fR8`E;I9?221F}i zRR4r6j-u<3^q9pr#Pp;sSl8m`2CfCT7T{WdYXPnWxEA1AfNKG+1-KUAT7YW-t_8Rj z;97ud0j>qO7T{WdYXPnWxEA1AfNKG+1-KUAT7YW-t_8Rj;97ud0j>qO7T{WdYXPnW zxEA1AfNKG+1-KUAT7YW-t_8Rj;97ud0j>qO7T{WdYXPnWxEA1AfNKG+1-KUAT7YW- zt_8Rj;97ud0j>qO7T{WdYXPnWxEA1AfNKG+1-KUAT7YW-t_8Rj;97ud0j>qO7T{Wd zYXPnWxEA1AfNKG+1-KUAT7YW-t_8Rj;97ud0j|aWjB6opMZa9de2rA5_LL@Dwt_Mj&PL3dI!}=FLH}EgOzX1ON{0s0ez`p?h0{jc`FTlS5 z{{s9A@Gro>0RIB~3-B+%zX1ON{0s0ez`p?h0{jc`FTlS5{{s9A@Gro>0RIB~3-B+% zzX1ON{0s0ez`p?h0{jc`FTlS5{{s9A@Gro>0RIB~3-B+%zX1ON{0s0ez`p?h0{jc` zFTlS5{{s9A@Gro>0RIB~3-B+%zX1ON{0s0ez`p?h0{jc`FTlS5{{s9A@Gro>0RIB~ z3-B+%zX1ON{0s0ez`p?h0{jc`FTlS5{{s9A@Gro>0RIB~3-B-gH~b5hL=4uyV895O z5OS0L%}@LX!N5kb2nGXY+>B6!?C&}FkQYE+0C@rA1&|j&UI2Lk&}FkQYE+0C@rA1&|j&UI2Lk&}FkQYE+0C@rA1&|j& zUI2Lk&}FkQYE+0C@rA1&|j&UI2Lk&}FkQYE+0C@rA1&|j&UI2Lk&}FkQYE+0C@rA z1&|j&UI2Lk)E5>~E5S6)ngr zfsxZE%ErY8XY`3wnSTjde#AxSYT)71A`ryH2yBA70g=qF!^RpAt%Utky|_0-BthDN zRWE*Spk9D_0qO;)7oc8%dI9PMs28AKfO-My1*jLGUVwT5>IJA5pk9D_0qO;)7oc8% zdI9PMs28AKfO-My1*jLGUVwT5>IJA5pk9D_0qO;)7oc8%dI9PMs28AKfO-My1*jLG zUVwT5>IJA5pk9D_0qO;)7oc8%dI9PMs28AKfO-My1*jLGUVwT5>IJA5pk9D_0qO;) z7oc8%dI9PMs28AKfO-My1*jLGUVwT5>IJA5pk9D_0qO;)7oc8%dI9PMs28AKfO-My z1*jLGUVwT5>IJA5pkDmXs2BVS#7e)&6Mw509H&XxFxqsuOc>8WBm+4)g6J2YLRN|R z@_~NwLWx-Ymud`B`RD#y%EYq2?63HVUT`FC={}n+FEeyRAZXk$oo|RGNZ(-5i=P{y z7l2*>dI9JKpcjB%0D1xF1)vvzUI2Ol=mnq`fL;K40q6yw7l2*>dI9JKpcjB%0D1xF z1)vvzUI2Ol=mnq`fL;K40q6yw7l2*>dI9JKpcjB%0D1xF1)vvzUI2Ol=mnq`fL;K4 z0q6yw7l2*>dI9JKpcjB%0D1xF1)vvzUI2Ol=mnq`fL;K40q6yw7l2*>dI9JKpcjB% z0D1xF1)vvzUI2Ol=mnq`fL;K40q6yw7l2*>dI9JKpcjB%0D1xF1)vvzUI2Ol=mnq` zfL;K40q6yw7yldR1xF$Vi(asympKVBaxai14+fER2fW4K62*TI3~VA6!O;7asQAmh z!0yMo7Y74SVRWzIGXI+J7l46HzycU-=t&Mr%(5g2)h`J@B@C+HB@7${54x7?FlO-$ zF+FJ~7R30u0f+%027nje0Dl4e1@ITZUjTmr`~~nA zz+V7=0sIB<7re0Dl4e1@ITZUjTmr`~~nAz+V7=0sIB<7re0Dl4e1@ITZUjTmr`~~nAz+V7=0sIB<7re0Dl4e1@ITZUjTmr z`~~nAz+V7=0sIB<7re0Dl4e1@ITZUjTmr`~~nAz+V7=0sIB<7re0Dl4e1@ITZUjTmr`~~nA{~P=TXCem6Unu+{Py9!|zy`4Lh5E07pXdcP zfJHCP{u03a1zlkGW1$OX3IJA5pk9D_0qO;)7oc8%dI9PM zs28AKfO-My1*jLGUVwT5>IJA5pk9D_0qO;)7oc8%dI9PMs28AKfO-My1*jLGUVwT5 z>IJA5pk9D_0qO;)7oc8%dI9PMs28AKfO-My1*jLGUVwT5>IJA5pk9D_0qO;)7oc8% zdI9PMs28AKfO-My1*jLGUVwT5>IJA5pk9D_0qO;)7oc8%dI9PMs28AKfO-My1*jLG zUVwT5>IJA5{~PKBS0d&OB~q63Z+YTB>IF6sM1wT^H84zrjK;;q2At`Uc8CA2V70_U z=xX5M(;^VW#0YGBh8`*LYatfCm>%gDblSUId;}su9D!g*kRbm4dh3n}?LyLF=DLtn)c-EUAm1Wc@LRm` z5t#bpq@1S+5Jdk@+R_bfN}QYyLm;?3a1o5Zjqia$y+v{e|EcKNY1;0BSonHa2%?4NET8RR|15)x4or<1V*?I$tL{IJeJ?4;h)_Et`J}@6=K_| z>p{{}xBa6Rmc+k$A>uM2JU9mCaV>T>LW6M+9h~qVk`J1~>Bd<1BG3G3tb=~=W-JIX zOBRHJ|HlvqJ>ea@8oYq@k2!D24PgzL^S#OnyF~a3Y226K9l1uR4WBuOq@!w7$1;aUj z6#Q2a$3JHD_nrqar~#y?@SA_MdQkL#w|ZNY1ij48@?a3jNd521pZ&_7Ccy}wCXqRq z+CSv{)h&%A30jcr1V&Jjgk1EGdH=tDrzHP60t-fd2uUUM?_+G~{yNn>zx}RQ>M_@b zkb*Rw|Lz+j*n(unX~j$oAx}~NJB}e8#a@(w82MrB%kU53=wa+M3hv0x`vU5 z{*<(gO~S<$z$gqOnSQH0?x*wVjxz?)_!LwEA9 z{`Xb*@5H~F!NahVp)F1@V$wKqNHOxhc(ey|_J`zy)^Id1v7<;)>OX`Jn!;n}`Z?CY z%|-B^N&nWHetjSrVYJ7P{L}}J#$TUe*hgaY7i27oL W0rpmaKr~{%*%T27?Gz;Tr~e17yU?=$ delta 230047 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 DCUPw? diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 88e1838125..c54f77e07e 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.all.3783538497" + signature = "rusEFI 2020.07.26.all.1848812543" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.all.3783538497" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.all.1848812543" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:15 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 95c73faca9..61c82f5680 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.frankenso_na6.1057184674" + signature = "rusEFI 2020.07.26.frankenso_na6.2964705052" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.frankenso_na6.1057184674" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.frankenso_na6.2964705052" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:19 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:57 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 71628ec530..803ce6c06f 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.kin.750447579" + signature = "rusEFI 2020.07.26.kin.2735505253" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.kin.750447579" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.kin.2735505253" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 18:51:27 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 1b11d2dc9d..58ad30fb24 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f4.2826625487" + signature = "rusEFI 2020.07.26.mre_f4.667710833" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f4.2826625487" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.mre_f4.667710833" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:18 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:56 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index ab5e922578..3823196c9c 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f7.2826625487" + signature = "rusEFI 2020.07.26.mre_f7.667710833" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f7.2826625487" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.mre_f7.667710833" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:16 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:55 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index c4b1fa7e25..1d3f5a0834 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_405.345567173" + signature = "rusEFI 2020.07.26.prometheus_405.2603514747" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_405.345567173" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.prometheus_405.2603514747" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:22 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:59 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 2f4a3df879..24ea251add 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_469.345567173" + signature = "rusEFI 2020.07.26.prometheus_469.2603514747" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_469.345567173" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.prometheus_469.2603514747" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:21 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:58 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 9ec3bd18b1..d663c65beb 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f4.1813333646" + signature = "rusEFI 2020.07.26.proteus_f4.3819164208" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f4.1813333646" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.proteus_f4.3819164208" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:25 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:09:02 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index b9f8946240..4c7c4eea48 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f7.1813333646" + signature = "rusEFI 2020.07.26.proteus_f7.3819164208" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f7.1813333646" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.26.proteus_f7.3819164208" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 18:51:24 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:09:00 UTC 2020 pageSize = 20000 page = 1 @@ -1237,7 +1237,7 @@ page = 1 isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." + pauseEtbControl = "Disable the electronic throttle motor and DC idle motor for testing.\nThis mode is for testing ETB/DC idle position sensors, etc without actually driving the throttle." useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." acIdleExtraMin = "Additional idle PID minValue while A/C is active" sdCardPeriodMs = "SD card logging period, in milliseconds" diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index 6547ddffa2..84305b9f26 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 14:57:37 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1057,6 +1057,7 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; + public static final int SIGNATURE_HASH = 1848812543; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1303,7 +1304,7 @@ public class Fields { public static final int TS_RESPONSE_COMMAND_OK = 7; public static final int TS_RESPONSE_OK = 0; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.07.26.all.4158533130"; + public static final String TS_SIGNATURE = "rusEFI 2020.07.26.all.1848812543"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index f7d824ac1c..457521fdac 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - + From e070a2854ab2f08caacdd97b6933ce0d8e4976ad Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 15:15:28 -0400 Subject: [PATCH 133/182] nicer thread names --- .../io/src/main/java/com/rusefi/io/ByteReader.java | 8 ++------ .../main/java/com/rusefi/io/tcp/BinaryProtocolServer.java | 8 +++++++- .../io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java | 4 ---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index a72321b867..ffcffc67f3 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -2,10 +2,9 @@ package com.rusefi.io; import com.devexperts.logging.Logging; import com.opensr5.io.DataListener; -import com.rusefi.NamedThreadFactory; import com.rusefi.config.generated.Fields; import com.rusefi.io.serial.AbstractIoStream; -import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.io.tcp.BinaryProtocolServer; import java.io.IOException; import java.util.Arrays; @@ -15,9 +14,6 @@ import java.util.concurrent.Executors; import static com.devexperts.logging.Logging.getLogging; public interface ByteReader { - NamedThreadFactory THREAD_FACTORY = new NamedThreadFactory("TCP connector loop", true); - - Logging log = getLogging(ByteReader.class); static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, AbstractIoStream ioStream) { @@ -26,7 +22,7 @@ public interface ByteReader { * * @see #COMMUNICATION_EXECUTOR */ - Executor threadExecutor = Executors.newSingleThreadExecutor(THREAD_FACTORY); + Executor threadExecutor = Executors.newSingleThreadExecutor(BinaryProtocolServer.getThreadFactory(loggingPrefix + "TCP reader")); threadExecutor.execute(() -> { log.info(loggingPrefix + "Running TCP connection loop"); diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 1e459db757..0104bcd1fa 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -11,6 +11,7 @@ import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; import com.rusefi.io.commands.HelloCommand; import com.rusefi.server.rusEFISSLContext; +import org.jetbrains.annotations.NotNull; import java.io.*; import java.net.ServerSocket; @@ -88,7 +89,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } public static ServerSocketReference tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { - ThreadFactory threadFactory = THREAD_FACTORIES_BY_NAME.computeIfAbsent(threadName, NamedThreadFactory::new); + ThreadFactory threadFactory = getThreadFactory(threadName); Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback"); ServerSocket serverSocket = nonSecureSocketFunction.apply(port); @@ -114,6 +115,11 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { return holder; } + @NotNull + public static ThreadFactory getThreadFactory(String threadName) { + return THREAD_FACTORIES_BY_NAME.computeIfAbsent(threadName, NamedThreadFactory::new); + } + @SuppressWarnings("InfiniteLoopStatement") private void runProxy(LinkManager linkManager, Socket clientSocket) throws IOException { TcpIoStream stream = new TcpIoStream("[proxy] ", clientSocket); diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 92e9bf8aaa..0b3bd7cacb 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -26,10 +26,6 @@ public class TcpIoStream extends AbstractIoStream { private final Socket socket; private final IncomingDataBuffer dataBuffer; - public TcpIoStream(Socket socket) throws IOException { - this("", socket); - } - public TcpIoStream(String loggingPrefix, Socket socket) throws IOException { this(loggingPrefix, socket, DisconnectListener.VOID); } From 5c66581a2f2b6e71d12d4df7c6fd0f27d53dbdb1 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 15:17:29 -0400 Subject: [PATCH 134/182] proxy progress --- .../main/java/com/rusefi/proxy/NetworkConnector.java | 2 +- .../src/main/java/com/rusefi/server/Backend.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index ed608f04c9..2d4075a661 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -69,7 +69,6 @@ public class NetworkConnector { Semaphore proxyReconnectSemaphore = new Semaphore(1); try { while (true) { - log.info("Connecting to proxy server"); proxyReconnectSemaphore.acquire(); try { @@ -99,6 +98,7 @@ public class NetworkConnector { Socket socket; try { + log.info("Connecting to proxy server " + HttpUtil.RUSEFI_PROXY_HOSTNAME + " " + serverPortForControllers); socket = rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers); } catch (IOException e) { // socket open exception is a special case and should be handled separately diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 5456c47b28..88472b4d99 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -10,7 +10,9 @@ import com.rusefi.io.IoStream; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.ServerSocketReference; import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.shared.FileUtil; import com.rusefi.tools.online.ProxyClient; import net.jcip.annotations.GuardedBy; import org.jetbrains.annotations.NotNull; @@ -85,6 +87,8 @@ public class Backend implements Closeable { public final static AtomicLong totalSessions = new AtomicLong(); public int serverPortForApplications; public int serverPortForControllers; + private ServerSocketReference applicationConnector; + private ServerSocketReference controllerConnector; public Backend(UserDetailsResolver userDetailsResolver, int httpPort) { this(userDetailsResolver, httpPort, APPLICATION_INACTIVITY_TIMEOUT); @@ -162,7 +166,7 @@ public class Backend implements Closeable { // connection from authenticator app which proxies for Tuner Studio // authenticator pushed hello packet on connect log.info("Starting application connector at " + serverPortForApplications); - BinaryProtocolServer.tcpServerSocket(applicationSocket -> () -> { + applicationConnector = BinaryProtocolServer.tcpServerSocket(applicationSocket -> () -> { log.info("new application connection!"); totalSessions.incrementAndGet(); // connection from authenticator app which proxies for Tuner Studio @@ -245,7 +249,7 @@ public class Backend implements Closeable { public void runControllerConnector(int serverPortForControllers, Listener serverSocketCreationCallback) { this.serverPortForControllers = serverPortForControllers; log.info("Starting controller connector at " + serverPortForControllers); - BinaryProtocolServer.tcpServerSocket(controllerSocket -> () -> { + controllerConnector = BinaryProtocolServer.tcpServerSocket(controllerSocket -> () -> { totalSessions.incrementAndGet(); ControllerConnectionState controllerConnectionState = new ControllerConnectionState(controllerSocket, getUserDetailsResolver()); try { @@ -367,6 +371,8 @@ public class Backend implements Closeable { @Override public void close() { isClosed = true; + FileUtil.close(applicationConnector); + FileUtil.close(controllerConnector); } public boolean isClosed() { From b2db6b604dcd4608ca658be6235c6402a78e8380 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 15:22:14 -0400 Subject: [PATCH 135/182] Weird VAG: DC motor idle valve not ETB #1637 misc progress --- firmware/controllers/actuators/idle_thread.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/firmware/controllers/actuators/idle_thread.cpp b/firmware/controllers/actuators/idle_thread.cpp index d91634e050..a397d33a51 100644 --- a/firmware/controllers/actuators/idle_thread.cpp +++ b/firmware/controllers/actuators/idle_thread.cpp @@ -579,11 +579,8 @@ static percent_t automaticIdleController(float tpsPos DECLARE_ENGINE_PARAMETER_S } engine->engineState.idle.currentIdlePosition = iacPosition; -#if ! EFI_UNIT_TEST - applyIACposition(engine->engineState.idle.currentIdlePosition); -#endif /* EFI_UNIT_TEST */ - } - + applyIACposition(engine->engineState.idle.currentIdlePosition PASS_ENGINE_PARAMETER_SUFFIX); +} IdleController idleControllerInstance; From 9721033f2c381a607cc245c79ed3069f7c293223 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 16:52:58 -0400 Subject: [PATCH 136/182] https://github.com/rusefi/web_backend/issues/83 --- .../rusefi/io/tcp/BinaryProtocolServer.java | 18 +++-- .../java/com/rusefi/io/tcp/TcpIoStream.java | 13 ++-- .../rusefi/proxy/BaseBroadcastingThread.java | 15 ++--- .../com/rusefi/proxy/NetworkConnector.java | 30 +++++---- .../rusefi/proxy/NetworkConnectorContext.java | 10 +++ .../src/test/java/com/rusefi/TestHelper.java | 11 ++-- .../rusefi/tools/NetworkConnectorStartup.java | 2 +- .../test/java/com/rusefi/FullServerTest.java | 7 +- .../java/com/rusefi/MockRusEfiDevice.java | 41 ------------ .../src/test/java/com/rusefi/ServerTest.java | 41 ++++++++++-- .../io/TcpCommunicationIntegrationTest.java | 4 +- .../rusefi/proxy/NetworkConnectorTest.java | 66 +++++++++++++++++-- .../client/LocalApplicationProxyTest.java | 4 +- .../main/java/com/rusefi/server/Backend.java | 3 +- .../server/ControllerConnectionState.java | 2 +- 15 files changed, 171 insertions(+), 96 deletions(-) delete mode 100644 java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 0104bcd1fa..5da1d462e3 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -58,15 +58,15 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { private static ConcurrentHashMap THREAD_FACTORIES_BY_NAME = new ConcurrentHashMap<>(); public void start(LinkManager linkManager) { - start(linkManager, DEFAULT_PROXY_PORT, Listener.empty()); + start(linkManager, DEFAULT_PROXY_PORT, Listener.empty(), new Context()); } - public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback) { + public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback, Context context) { log.info("BinaryProtocolServer on " + port); Function clientSocketRunnableFactory = clientSocket -> () -> { try { - runProxy(linkManager, clientSocket); + runProxy(linkManager, clientSocket, context); } catch (IOException e) { log.info("proxy connection: " + e); } @@ -107,7 +107,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { log.info("Client socket closed right away " + e); continue; } - log.info("Binary protocol proxy port connection"); + log.info("Accepting binary protocol proxy port connection on " + port); threadFactory.newThread(clientSocketRunnableFactory.apply(clientSocket)).start(); } }; @@ -121,7 +121,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { } @SuppressWarnings("InfiniteLoopStatement") - private void runProxy(LinkManager linkManager, Socket clientSocket) throws IOException { + private void runProxy(LinkManager linkManager, Socket clientSocket, Context context) throws IOException { TcpIoStream stream = new TcpIoStream("[proxy] ", clientSocket); IncomingDataBuffer in = stream.getDataBuffer(); @@ -133,7 +133,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { handled.set(true); }; - int length = getPacketLength(in, protocolCommandHandler); + int length = getPacketLength(in, protocolCommandHandler, context.getTimeout()); if (handled.get()) { continue; } @@ -305,4 +305,10 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { return crc; } } + + public static class Context { + public int getTimeout() { + return Timeouts.BINARY_IO_TIMEOUT; + } + } } \ No newline at end of file diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 0b3bd7cacb..862d1c93c1 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -47,9 +47,14 @@ public class TcpIoStream extends AbstractIoStream { @Override public void close() { - super.close(); + // we need to guarantee only one onDisconnect invocation for retry logic to be healthy + synchronized (this) { + if (!isClosed()) { + super.close(); + disconnectListener.onDisconnect("on close"); + } + } FileUtil.close(socket); - disconnectListener.onDisconnect(); } @Override @@ -79,9 +84,9 @@ public class TcpIoStream extends AbstractIoStream { } public interface DisconnectListener { - DisconnectListener VOID = () -> { + DisconnectListener VOID = (String message) -> { }; - void onDisconnect(); + void onDisconnect(String message); } } diff --git a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index b25cc05dee..c88af8a363 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -2,11 +2,9 @@ package com.rusefi.proxy; import com.devexperts.logging.Logging; import com.rusefi.NamedThreadFactory; -import com.rusefi.Timeouts; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.config.generated.Fields; import com.rusefi.io.commands.HelloCommand; -import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.SessionDetails; @@ -21,29 +19,30 @@ import static com.rusefi.shared.FileUtil.close; public class BaseBroadcastingThread { private static final Logging log = getLogging(BaseBroadcastingThread.class); - private static final NamedThreadFactory BASE_BROADCASTING_THREAD = new NamedThreadFactory("BaseBroadcastingThread"); + private static final NamedThreadFactory BASE_BROADCASTING_THREAD = new NamedThreadFactory("network connector"); private final Thread thread; @SuppressWarnings("InfiniteLoopStatement") - public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, TcpIoStream.DisconnectListener disconnectListener) throws IOException { - + public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, TcpIoStream.DisconnectListener disconnectListener, NetworkConnectorContext context) { thread = BASE_BROADCASTING_THREAD.newThread(() -> { TcpIoStream stream = null; try { - stream = new TcpIoStream("[broadcast] ", socket, disconnectListener); + stream = new TcpIoStream("[network connector] ", socket, disconnectListener); IncomingDataBuffer in = stream.getDataBuffer(); boolean isFirstHello = true; while (true) { int ioTimeout; if (isFirstHello) { log.info("Waiting for proxy server to request session details"); - ioTimeout = Timeouts.CMD_TIMEOUT; + ioTimeout = context.firstPacketTimeout(); } else { - ioTimeout = BinaryProtocolProxy.USER_IO_TIMEOUT; + ioTimeout = context.consecutivePacketTimeout(); } + log.info("TEMPLOG READ " + ioTimeout); int length = getPacketLength(in, () -> { throw new UnsupportedOperationException(); }, ioTimeout); + log.info("TEMPLOG len " + 0); BinaryProtocolServer.Packet packet = readPromisedBytes(in, length); byte[] payload = packet.getPacket(); diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index 2d4075a661..f7d873c591 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -17,6 +17,7 @@ import com.rusefi.server.rusEFISSLContext; import com.rusefi.tools.online.HttpUtil; import org.jetbrains.annotations.NotNull; +import java.io.Closeable; import java.io.IOException; import java.net.Socket; import java.util.concurrent.CountDownLatch; @@ -29,10 +30,11 @@ import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; * Connector between rusEFI ECU and rusEFI server * see NetworkConnectorStartup */ -public class NetworkConnector { +public class NetworkConnector implements Closeable { private final static Logging log = Logging.getLogging(NetworkConnector.class); + private boolean isClosed; - public static NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { + public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { LinkManager controllerConnector = new LinkManager() .setCompositeLogicEnabled(false) .setNeedPullData(false); @@ -65,19 +67,20 @@ public class NetworkConnector { int oneTimeToken = SessionDetails.createOneTimeCode(); - new Thread(() -> { + BinaryProtocolServer.getThreadFactory("Proxy Reconnect").newThread(() -> { Semaphore proxyReconnectSemaphore = new Semaphore(1); try { - while (true) { + while (!isClosed) { proxyReconnectSemaphore.acquire(); try { - runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, () -> { - log.error("Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); + runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> { + log.error(message + " Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); sleep(context.reconnectDelay() * Timeouts.SECOND); + log.debug("Releasing semaphore"); proxyReconnectSemaphore.release(); reconnectListener.onReconnect(); - }, oneTimeToken, controllerInfo); + }, oneTimeToken, controllerInfo, context); } catch (IOException e) { log.error("IO error", e); } @@ -85,13 +88,13 @@ public class NetworkConnector { } catch (InterruptedException e) { throw new IllegalStateException(e); } - }, "Proxy Reconnect").start(); + }).start(); return new NetworkConnectorResult(controllerInfo, oneTimeToken); } @NotNull - private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo) throws IOException { + private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException { IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken); @@ -102,12 +105,12 @@ public class NetworkConnector { socket = rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers); } catch (IOException e) { // socket open exception is a special case and should be handled separately - disconnectListener.onDisconnect(); + disconnectListener.onDisconnect("on socket open"); return deviceSessionDetails; } BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, deviceSessionDetails, - disconnectListener) { + disconnectListener, context) { @Override protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { super.handleCommand(packet, stream); @@ -138,6 +141,11 @@ public class NetworkConnector { return new ControllerInfo(vehicleName, engineMake, engineCode, controllerSignature); } + @Override + public void close() { + isClosed = true; + } + public static class NetworkConnectorResult { static NetworkConnectorResult ERROR = new NetworkConnectorResult(null, 0); private final ControllerInfo controllerInfo; diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java index b200296095..5336f4758c 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnectorContext.java @@ -1,5 +1,7 @@ package com.rusefi.proxy; +import com.rusefi.Timeouts; +import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.tools.online.ProxyClient; public class NetworkConnectorContext { @@ -7,6 +9,14 @@ public class NetworkConnectorContext { return 15; // this one is seconds } + public int firstPacketTimeout() { + return Timeouts.CMD_TIMEOUT; + } + + public int consecutivePacketTimeout() { + return BinaryProtocolProxy.USER_IO_TIMEOUT; + } + public int serverPortForControllers() { return ProxyClient.SERVER_PORT_FOR_CONTROLLERS; } diff --git a/java_console/io/src/test/java/com/rusefi/TestHelper.java b/java_console/io/src/test/java/com/rusefi/TestHelper.java index 61b8af35e2..d7e2ec0ec8 100644 --- a/java_console/io/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/io/src/test/java/com/rusefi/TestHelper.java @@ -31,6 +31,7 @@ public class TestHelper { public static final String TEST_SIGNATURE_2 = "rusEFI 2020.07.11.proteus_f4.1986715563"; public static final ControllerInfo CONTROLLER_INFO = new ControllerInfo("name", "make", "code", Fields.TS_SIGNATURE); public static final String TEST_TOKEN_1 = "00000000-1234-1234-1234-123456789012"; + public static final String TEST_TOKEN_3 = "33333333-3333-1234-1234-123456789012"; @NotNull public static ScalarIniField createIniField(Field field) { @@ -46,7 +47,7 @@ public class TestHelper { } @NotNull - public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback) { + public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, BinaryProtocolServer.Context context) { BinaryProtocolState state = new BinaryProtocolState(); state.setController(ci); state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]); @@ -54,12 +55,12 @@ public class TestHelper { LinkManager linkManager = new LinkManager(); linkManager.setConnector(LinkConnector.getDetachedConnector(state)); BinaryProtocolServer server = new BinaryProtocolServer(); - server.start(linkManager, port, serverSocketCreationCallback); + server.start(linkManager, port, serverSocketCreationCallback, context); return server; } @NotNull - public static IoStream secureConnectToLocalhost(int controllerPort, Logger logger) { + public static IoStream secureConnectToLocalhost(int controllerPort) { IoStream targetEcuSocket; try { targetEcuSocket = new TcpIoStream("[local]", rusEFISSLContext.getSSLSocket(LOCALHOST, controllerPort)); @@ -80,9 +81,9 @@ public class TestHelper { return targetEcuSocket; } - public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage) throws InterruptedException { + public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage, BinaryProtocolServer.Context context) throws InterruptedException { CountDownLatch controllerCreated = new CountDownLatch(1); - BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown()); + BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), context); assertLatch(controllerCreated); return server; } diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index f053ccdf3c..87e8fd3589 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -25,7 +25,7 @@ public class NetworkConnectorStartup { NetworkConnectorContext connectorContext = new NetworkConnectorContext(); - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, connectorContext, NetworkConnector.ReconnectListener.VOID); + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext, NetworkConnector.ReconnectListener.VOID); log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); } } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 9c74430ac6..244b2a7ad3 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -6,6 +6,7 @@ import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.generated.Fields; import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.LinkManager; +import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; import com.rusefi.proxy.NetworkConnectorContext; @@ -86,7 +87,7 @@ public class FullServerTest { // create virtual controller to which "rusEFI network connector" connects to int controllerPort = 7002; ConfigurationImage controllerImage = prepareImage(value, createIniField(Fields.CYLINDERSCOUNT)); - TestHelper.createVirtualController(controllerPort, controllerImage); + TestHelper.createVirtualController(controllerPort, controllerImage, new BinaryProtocolServer.Context()); NetworkConnectorContext networkConnectorContext = new NetworkConnectorContext() { @Override @@ -96,12 +97,12 @@ public class FullServerTest { }; // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); TestHelper.assertLatch("controllerRegistered", controllerRegistered); - SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, MockRusEfiDevice.TEST_TOKEN_3, networkConnectorResult.getOneTimeToken()); + SessionDetails authenticatorSessionDetails = new SessionDetails(controllerInfo, TEST_TOKEN_3, networkConnectorResult.getOneTimeToken()); ApplicationRequest applicationRequest = new ApplicationRequest(authenticatorSessionDetails, userDetailsResolver.apply(TestHelper.TEST_TOKEN_1)); // start authenticator diff --git a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java deleted file mode 100644 index ccd36daf82..0000000000 --- a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.rusefi; - -import com.rusefi.config.generated.Fields; -import com.rusefi.io.commands.GetOutputsCommand; -import com.rusefi.io.tcp.BinaryProtocolServer; -import com.rusefi.io.tcp.TcpIoStream; -import com.rusefi.proxy.BaseBroadcastingThread; -import com.rusefi.server.SessionDetails; -import com.rusefi.server.rusEFISSLContext; - -import java.io.IOException; -import java.net.Socket; - -import static com.rusefi.TestHelper.LOCALHOST; - -public class MockRusEfiDevice { - public static final String TEST_TOKEN_3 = "33333333-3333-1234-1234-123456789012"; - private final SessionDetails sessionDetails; - - public MockRusEfiDevice(String authToken, String signature) { - sessionDetails = TestHelper.createTestSession(authToken, signature); - } - - public void connect(int serverPort) throws IOException { - Socket socket = rusEFISSLContext.getSSLSocket(LOCALHOST, serverPort); - BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, - sessionDetails, - TcpIoStream.DisconnectListener.VOID) { - @Override - protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { - super.handleCommand(packet, stream); - - if (packet.getPacket()[0] == Fields.TS_OUTPUT_COMMAND) { - GetOutputsCommand.sendOutput(stream); - } - } - }; - baseBroadcastingThread.start(); - } - -} diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index 793d722822..df25aeacc3 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -3,7 +3,12 @@ package com.rusefi; import com.opensr5.Logger; import com.rusefi.config.generated.Fields; import com.rusefi.io.IoStream; +import com.rusefi.io.commands.GetOutputsCommand; import com.rusefi.io.commands.HelloCommand; +import com.rusefi.io.tcp.BinaryProtocolServer; +import com.rusefi.io.tcp.TcpIoStream; +import com.rusefi.proxy.BaseBroadcastingThread; +import com.rusefi.proxy.NetworkConnectorContext; import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.server.*; import com.rusefi.tools.online.HttpUtil; @@ -14,9 +19,11 @@ import org.junit.Test; import java.io.IOException; import java.net.MalformedURLException; +import java.net.Socket; import java.util.List; import java.util.concurrent.CountDownLatch; +import static com.rusefi.TestHelper.LOCALHOST; import static com.rusefi.TestHelper.assertLatch; import static org.junit.Assert.assertEquals; @@ -72,8 +79,8 @@ public class ServerTest { assertEquals(0, backend.getControllersCount()); - new MockRusEfiDevice(TestHelper.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1).connect(serverPortForControllers); - new MockRusEfiDevice("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2).connect(serverPortForControllers); + new MockNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.TEST_SIGNATURE_1).connect(serverPortForControllers); + new MockNetworkConnector("12345678-1234-1234-1234-123456789012", TestHelper.TEST_SIGNATURE_2).connect(serverPortForControllers); assertLatch("onConnected", onConnected); @@ -147,7 +154,7 @@ covered by FullServerTest BackendTestHelper.runApplicationConnectorBlocking(backend, serverPortForRemoteUsers); // start authenticator - IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); + IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers); new HelloCommand("hello").handle(authenticatorToProxyStream); assertLatch(disconnectedCountDownLatch); @@ -176,10 +183,36 @@ covered by FullServerTest ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, BackendTestHelper.createTestUserResolver().apply(TestHelper.TEST_TOKEN_1)); // start authenticator - IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers, logger); + IoStream authenticatorToProxyStream = TestHelper.secureConnectToLocalhost(serverPortForRemoteUsers); LocalApplicationProxy.sendHello(authenticatorToProxyStream, applicationRequest); assertLatch(disconnectedCountDownLatch); } } + + private static class MockNetworkConnector { + private final SessionDetails sessionDetails; + + private MockNetworkConnector(String authToken, String signature) { + sessionDetails = TestHelper.createTestSession(authToken, signature); + } + + public void connect(int serverPort) throws IOException { + Socket socket = rusEFISSLContext.getSSLSocket(LOCALHOST, serverPort); + BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, + sessionDetails, + TcpIoStream.DisconnectListener.VOID, new NetworkConnectorContext()) { + @Override + protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { + super.handleCommand(packet, stream); + + if (packet.getPacket()[0] == Fields.TS_OUTPUT_COMMAND) { + GetOutputsCommand.sendOutput(stream); + } + } + }; + baseBroadcastingThread.start(); + } + + } } diff --git a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java index 40d8851af0..1c34f7e38d 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java +++ b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java @@ -51,7 +51,7 @@ public class TcpCommunicationIntegrationTest { ConfigurationImage serverImage = TestHelper.prepareImage(value, iniField); int port = 6100; - BinaryProtocolServer server = TestHelper.createVirtualController(port, serverImage); + BinaryProtocolServer server = TestHelper.createVirtualController(port, serverImage, new BinaryProtocolServer.Context()); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); @@ -88,7 +88,7 @@ public class TcpCommunicationIntegrationTest { int controllerPort = 6102; // create virtual controller - TestHelper.createVirtualController(controllerPort, serverImage); + TestHelper.createVirtualController(controllerPort, serverImage, new BinaryProtocolServer.Context()); int proxyPort = 6103; diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java index 57121d599e..854b685536 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java @@ -1,18 +1,32 @@ package com.rusefi.proxy; +import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; import com.rusefi.BackendTestHelper; import com.rusefi.TestHelper; +import com.rusefi.Timeouts; import com.rusefi.config.generated.Fields; +import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.server.Backend; +import com.rusefi.server.ControllerConnectionState; +import org.junit.Before; import org.junit.Test; +import java.net.MalformedURLException; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import static org.junit.Assert.assertTrue; +import static com.devexperts.logging.Logging.getLogging; +import static com.rusefi.TestHelper.assertLatch; +import static com.rusefi.binaryprotocol.BinaryProtocol.sleep; public class NetworkConnectorTest { + private static final Logging log = getLogging(NetworkConnectorTest.class); + + @Before + public void setup() throws MalformedURLException { + BackendTestHelper.commonServerTest(); + } + @Test public void testReconnect() throws InterruptedException { int serverPortForControllers = 7504; @@ -21,7 +35,14 @@ public class NetworkConnectorTest { // create virtual controller to which "rusEFI network connector" connects to int controllerPort = 7502; ConfigurationImage controllerImage = new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE); - TestHelper.createVirtualController(controllerPort, controllerImage); + BinaryProtocolServer.Context patientController = new BinaryProtocolServer.Context() { + @Override + public int getTimeout() { + // we need controller to not timeout while we are playing with all backend shutdowns + return 5 * Timeouts.MINUTE; + } + }; + TestHelper.createVirtualController(controllerPort, controllerImage, patientController); NetworkConnectorContext connectorContext = new NetworkConnectorContext() { @Override @@ -29,6 +50,16 @@ public class NetworkConnectorTest { return 3; } + @Override + public int firstPacketTimeout() { + return 3 * Timeouts.SECOND; + } + + @Override + public int consecutivePacketTimeout() { + return 3 * Timeouts.SECOND; + } + @Override public int serverPortForControllers() { return serverPortForControllers; @@ -44,14 +75,35 @@ public class NetworkConnectorTest { reconnectCounter.countDown(); } }; - NetworkConnector.NetworkConnectorResult networkConnectorResult = NetworkConnector.runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener); + new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener); - assertTrue(reconnectCounter.await(30, TimeUnit.SECONDS)); + assertLatch(reconnectCounter); + // start backend, assert connection, stop backend + log.info("First backend instance"); + assertWouldConnect(serverPortForControllers, httpPort); - Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort); -// BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); + // giving http server time to shut down + sleep(3 * Timeouts.SECOND); + // now let's do this again with a new backend instance + log.info("Second backend instance"); + assertWouldConnect(serverPortForControllers, httpPort); + } + + private void assertWouldConnect(int serverPortForControllers, int httpPort) throws InterruptedException { + CountDownLatch onControllerRegistered = new CountDownLatch(1); + Backend backend = new Backend(BackendTestHelper.createTestUserResolver(), httpPort) { + @Override + public void register(ControllerConnectionState controllerConnectionState) { + super.register(controllerConnectionState); + onControllerRegistered.countDown(); + } + }; + BackendTestHelper.runControllerConnectorBlocking(backend, serverPortForControllers); + + // assert that reconnect actually happened + assertLatch(onControllerRegistered); backend.close(); } } diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java index 4b39fd8b4d..2680c2308f 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/client/LocalApplicationProxyTest.java @@ -53,7 +53,7 @@ public class LocalApplicationProxyTest { ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); CountDownLatch disconnected = new CountDownLatch(1); - LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, (String message) -> disconnected.countDown(), LocalApplicationProxy.ConnectionListener.VOID); assertLatch(disconnected); mockBackend.close(); @@ -94,7 +94,7 @@ public class LocalApplicationProxyTest { ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, createTestUserResolver().apply(TEST_TOKEN_1)); CountDownLatch disconnected = new CountDownLatch(1); - LocalApplicationProxy.startAndRun(context, applicationRequest, -1, disconnected::countDown, LocalApplicationProxy.ConnectionListener.VOID); + LocalApplicationProxy.startAndRun(context, applicationRequest, -1, (String message) -> disconnected.countDown(), LocalApplicationProxy.ConnectionListener.VOID); // wait for three output requests to take place assertLatch("gaugePokes", gaugePokes); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index 88472b4d99..baaba549eb 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -173,7 +173,7 @@ public class Backend implements Closeable { IoStream applicationClientStream = null; ApplicationConnectionState applicationConnectionState = null; try { - applicationClientStream = new TcpIoStream("[app] ", applicationSocket); + applicationClientStream = new TcpIoStream("[backend-application connector] ", applicationSocket); // authenticator pushed hello packet on connect String jsonString = HelloCommand.getHelloResponse(applicationClientStream.getDataBuffer()); @@ -370,6 +370,7 @@ public class Backend implements Closeable { @Override public void close() { + log.info("Closing..."); isClosed = true; FileUtil.close(applicationConnector); FileUtil.close(controllerConnector); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java index 93e2ee4536..153986e2b9 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java @@ -43,7 +43,7 @@ public class ControllerConnectionState { this.clientSocket = clientSocket; this.userDetailsResolver = userDetailsResolver; try { - stream = new TcpIoStream("[controller] ", clientSocket); + stream = new TcpIoStream("[backend-controller connector] ", clientSocket); incomingData = stream.getDataBuffer(); } catch (IOException e) { close(); From 23a659b0c95d565499c49d4497982ddd89aef35e Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 16:58:53 -0400 Subject: [PATCH 137/182] https://github.com/rusefi/web_backend/issues/83 --- .../java/com/rusefi/ts_plugin/RemoteTab.java | 38 ++++++++----------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index d56e78b639..384dc59adf 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -20,8 +20,6 @@ import org.putgemin.VerticalFlowLayout; import javax.swing.*; import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.io.IOException; import java.util.List; import java.util.concurrent.Executor; @@ -56,15 +54,12 @@ public class RemoteTab { JButton refresh = new JButton("Refresh List"); refresh.addActionListener(e -> requestListDownload()); - disconnect.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - LocalApplicationProxy localApplicationProxy = RemoteTabController.INSTANCE.getLocalApplicationProxy(); - if (localApplicationProxy != null) - localApplicationProxy.close(); - RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); - requestListDownload(); - } + disconnect.addActionListener(e -> { + LocalApplicationProxy localApplicationProxy = RemoteTabController.INSTANCE.getLocalApplicationProxy(); + if (localApplicationProxy != null) + localApplicationProxy.close(); + RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); + requestListDownload(); }); @@ -173,17 +168,14 @@ public class RemoteTab { RemoteTabController.INSTANCE.setState(RemoteTabController.State.CONNECTING); setStatus("Connecting to " + publicSession.getUserDetails().getUserName()); - LocalApplicationProxy.ConnectionListener connectionListener = new LocalApplicationProxy.ConnectionListener() { - @Override - public void onConnected(LocalApplicationProxy localApplicationProxy) { - RemoteTabController.INSTANCE.setConnected(localApplicationProxy); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - setConnectedStatus(publicSession.getUserDetails()); - } - }); - } + LocalApplicationProxy.ConnectionListener connectionListener = localApplicationProxy -> { + RemoteTabController.INSTANCE.setConnected(localApplicationProxy); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + setConnectedStatus(publicSession.getUserDetails()); + } + }); }; new Thread(() -> { @@ -214,7 +206,7 @@ public class RemoteTab { try { AtomicReference serverHolderAtomicReference = new AtomicReference<>(); - TcpIoStream.DisconnectListener disconnectListener = () -> SwingUtilities.invokeLater(() -> { + TcpIoStream.DisconnectListener disconnectListener = message -> SwingUtilities.invokeLater(() -> { setStatus("Disconnected"); RemoteTabController.INSTANCE.setState(RemoteTabController.State.NOT_CONNECTED); ServerSocketReference serverHolder = serverHolderAtomicReference.get(); From 5f0acc9018c508800cd9c3122814489d9ee46c42 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 18:04:06 -0400 Subject: [PATCH 138/182] ops --- .../src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index c88af8a363..85776cf00c 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -38,11 +38,9 @@ public class BaseBroadcastingThread { } else { ioTimeout = context.consecutivePacketTimeout(); } - log.info("TEMPLOG READ " + ioTimeout); int length = getPacketLength(in, () -> { throw new UnsupportedOperationException(); }, ioTimeout); - log.info("TEMPLOG len " + 0); BinaryProtocolServer.Packet packet = readPromisedBytes(in, length); byte[] payload = packet.getPacket(); From ffa14cd8000fc055f82f18b5b527c99adca98c82 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 15:10:15 -0700 Subject: [PATCH 139/182] clear cal mode upon leaving ETB autocal --- firmware/controllers/bench_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index e82d195225..d2fa9daed7 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -271,6 +271,7 @@ static void handleCommandX14(uint16_t index) { return; case 0x10: engine->etbAutoTune = false; + tsOutputChannels->calibrationMode = TsCalmode::None; return; #endif case 0xF: From 7a40ca004a6ae1d91ec1549620cc490705915875 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 18:10:51 -0400 Subject: [PATCH 140/182] proxy progress? --- .../java/com/rusefi/binaryprotocol/BinaryProtocol.java | 2 ++ .../ui/src/test/java/com/rusefi/FullServerTest.java | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java index fe78dbeb60..37bf3d93f4 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -93,6 +93,8 @@ public class BinaryProtocol implements BinaryProtocolCommands { return "HELLO"; case Fields.TS_READ_COMMAND: return "READ"; + case Fields.TS_GET_TEXT: + return "TS_GET_TEXT"; case Fields.TS_GET_FIRMWARE_VERSION: return "GET_FW_VERSION"; case Fields.TS_CHUNK_WRITE_COMMAND: diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 244b2a7ad3..3df6febfa4 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -1,5 +1,6 @@ package com.rusefi; +import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; import com.opensr5.ini.field.ScalarIniField; import com.rusefi.binaryprotocol.BinaryProtocol; @@ -23,12 +24,15 @@ import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.TestHelper.*; import static com.rusefi.Timeouts.SECOND; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; public class FullServerTest { + private static final Logging log = getLogging(FullServerTest.class); + @Before public void setup() throws MalformedURLException { BackendTestHelper.commonServerTest(); @@ -76,7 +80,7 @@ public class FullServerTest { super.close(applicationConnectionState); applicationClosed.countDown(); } - }; LinkManager clientManager = new LinkManager()) { + }; LinkManager clientManager = new LinkManager().setNeedPullData(false)) { int serverPortForControllers = 7001; @@ -137,11 +141,10 @@ public class FullServerTest { assertEquals(1, applicationClosed.getCount()); // now let's test that application connector would be terminated by server due to inactivity - System.out.println("Sleeping twice the application timeout"); + log.info("Sleeping twice the application timeout"); assertTrue(applicationClosed.await(2 * applicationTimeout, TimeUnit.MILLISECONDS)); assertEquals("applications size", 0, backend.getApplications().size()); } } - } From b04646f599c1368af318ed721f1e59868acf6a8e Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 18:17:06 -0400 Subject: [PATCH 141/182] he says he wants a dot --- firmware/controllers/bench_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index d2fa9daed7..b9f28f6517 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -271,7 +271,7 @@ static void handleCommandX14(uint16_t index) { return; case 0x10: engine->etbAutoTune = false; - tsOutputChannels->calibrationMode = TsCalmode::None; + tsOutputChannels.calibrationMode = TsCalmode::None; return; #endif case 0xF: From e1d7abbafaa468f82abd3b6d577dbed090637ba4 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 18:24:02 -0400 Subject: [PATCH 142/182] fixing build --- firmware/controllers/bench_test.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index b9f28f6517..de04c6419b 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -271,7 +271,9 @@ static void handleCommandX14(uint16_t index) { return; case 0x10: engine->etbAutoTune = false; +#if EFI_TUNER_STUDIO tsOutputChannels.calibrationMode = TsCalmode::None; +#endif // EFI_TUNER_STUDIO return; #endif case 0xF: From 21dcf19db506f77197368abc45cb1c6fe9109142 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 18:34:47 -0400 Subject: [PATCH 143/182] maybe now? --- firmware/controllers/bench_test.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index de04c6419b..2f56c8c8eb 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -40,6 +40,7 @@ #include "electronic_throttle.h" #include "cj125.h" #include "malfunction_central.h" +#include "tunerstudio_outputs.h" #if EFI_PROD_CODE #include "rusefi.h" From 370dc062857e978389af63cb11267355c72ec784 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 15:39:26 -0700 Subject: [PATCH 144/182] I can't type --- firmware/controllers/bench_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/bench_test.cpp b/firmware/controllers/bench_test.cpp index b9f28f6517..099d75eae7 100644 --- a/firmware/controllers/bench_test.cpp +++ b/firmware/controllers/bench_test.cpp @@ -271,7 +271,7 @@ static void handleCommandX14(uint16_t index) { return; case 0x10: engine->etbAutoTune = false; - tsOutputChannels.calibrationMode = TsCalmode::None; + tsOutputChannels.calibrationMode = TsCalMode::None; return; #endif case 0xF: From 3112f4d15316015db83e50df12faf75c0629949c Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Mon, 27 Jul 2020 00:33:02 +0000 Subject: [PATCH 145/182] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 4d04e204fd..9444b9690d 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200726 +#define VCS_DATE 20200727 From e5133de70f67ec604118082e47cc4bbafffea336 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 20:33:18 -0700 Subject: [PATCH 146/182] add mock airmass mode --- firmware/controllers/algo/auto_generated_enums.cpp | 2 ++ firmware/controllers/algo/engine.h | 5 +++++ firmware/controllers/algo/fuel_math.cpp | 3 +++ firmware/controllers/algo/rusefi_enums.h | 3 +++ 4 files changed, 13 insertions(+) diff --git a/firmware/controllers/algo/auto_generated_enums.cpp b/firmware/controllers/algo/auto_generated_enums.cpp index 3174670568..f7b61ecdb6 100644 --- a/firmware/controllers/algo/auto_generated_enums.cpp +++ b/firmware/controllers/algo/auto_generated_enums.cpp @@ -735,6 +735,8 @@ case LM_SPEED_DENSITY: return "LM_SPEED_DENSITY"; case LM_ALPHA_N_2: return "LM_ALPHA_N_2"; +case LM_MOCK: + return "LM_MOCK"; } return NULL; } diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 6ec879af4e..7ecc25b9cf 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -16,6 +16,7 @@ #include "accel_enrichment.h" #include "trigger_central.h" #include "local_version_holder.h" +#include "airmass.h" #if EFI_SIGNAL_EXECUTOR_ONE_TIMER // PROD real firmware uses this implementation @@ -334,6 +335,10 @@ public: void knockLogic(float knockVolts DECLARE_ENGINE_PARAMETER_SUFFIX); void printKnockState(void); +#if EFI_UNIT_TEST + AirmassModelBase* mockAirmassModel = nullptr; +#endif + private: /** * By the way: diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 7de041a545..4711e33a39 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -179,6 +179,9 @@ AirmassModelBase* getAirmassModel(DECLARE_ENGINE_PARAMETER_SIGNATURE) { case LM_SPEED_DENSITY: return &sdAirmass; case LM_REAL_MAF: return &mafAirmass; case LM_ALPHA_N_2: return &alphaNAirmass; +#if EFI_UNIT_TEST + case LM_MOCK: return engine->mockAirmassModel; +#endif default: return nullptr; } } diff --git a/firmware/controllers/algo/rusefi_enums.h b/firmware/controllers/algo/rusefi_enums.h index 9736c26d92..915318e7b4 100644 --- a/firmware/controllers/algo/rusefi_enums.h +++ b/firmware/controllers/algo/rusefi_enums.h @@ -446,6 +446,9 @@ typedef enum { // todo: rename after LM_ALPHA_N is removed LM_ALPHA_N_2 = 5, + // This mode is for unit testing only, so that tests don't have to rely on a particular real airmass mode + LM_MOCK = 100, + Force_4_bytes_size_engine_load_mode = ENUM_32_BITS, } engine_load_mode_e; From a7f6fefc2f58c3e9403017e51a12f56bebfce87c Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 26 Jul 2020 23:34:37 -0400 Subject: [PATCH 147/182] proxy progress? that should be a positive change --- .../src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 5da1d462e3..327c519eab 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -232,7 +232,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { int fromPacket = IoHelper.getCrc32(packet); if (crc != fromPacket) throw new IllegalStateException("CRC mismatch crc=" + Integer.toString(crc, 16) + " vs packet=" + Integer.toString(fromPacket, 16) + " len=" + packet.length + " data: " + IoStream.printHexBinary(packet)); -// todo?! in.onPacketArrived(); + in.onPacketArrived(); return new Packet(packet, crc); } From 42c6a641ad6ff7e3e7fd30fb45b697ef1654bf6c Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 20:35:36 -0700 Subject: [PATCH 148/182] add mock --- unit_tests/mocks.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/unit_tests/mocks.h b/unit_tests/mocks.h index dcaad8ebb4..71c0bc3530 100644 --- a/unit_tests/mocks.h +++ b/unit_tests/mocks.h @@ -52,3 +52,8 @@ public: MOCK_METHOD(void, scheduleByTimestampNt, (scheduling_s *scheduling, efitime_t timeUs, action_s action), (override)); MOCK_METHOD(void, scheduleForLater, (scheduling_s *scheduling, int delayUs, action_s action), (override)); }; + +class MockAirmass : public AirmassModelBase { +public: + MOCK_METHOD(AirmassResult, getAirmass, (int rpm), (override)); +}; From 50fc127555a7cb2c426109ea4abc3a8d41c0c4f4 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 20:39:42 -0700 Subject: [PATCH 149/182] put mock in enginetesthelper --- unit_tests/engine_test_helper.cpp | 4 ++++ unit_tests/engine_test_helper.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index a62a9ce011..ad223147b6 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -83,6 +83,10 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType, configuration_callb // this is needed to have valid CLT and IAT. //todo: reuse initPeriodicEvents(PASS_ENGINE_PARAMETER_SIGNATURE) method engine->periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE); + + // Setup running in mock airmass mode + engineConfiguration->injectionMode = LM_MOCK; + engine->mockAirmassModel = &mockAirmass; } EngineTestHelper::~EngineTestHelper() { diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index 9431eb10ac..799254b36f 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -83,6 +83,8 @@ public: Engine engine; persistent_config_s persistentConfig; + MockAirmass mockAirmass; + private: void writeEvents(const char *fileName); }; From 3071ee4334af3cc845b0f9badc3bb843937f5d78 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Sun, 26 Jul 2020 20:46:23 -0700 Subject: [PATCH 150/182] didn't need that --- firmware/controllers/algo/engine.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 7ecc25b9cf..0f62747976 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -335,9 +335,7 @@ public: void knockLogic(float knockVolts DECLARE_ENGINE_PARAMETER_SUFFIX); void printKnockState(void); -#if EFI_UNIT_TEST AirmassModelBase* mockAirmassModel = nullptr; -#endif private: /** From 8237e2dab9c40189505717e2b29c722cf30e419b Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 00:16:38 -0400 Subject: [PATCH 151/182] code comments --- .../src/main/java/com/rusefi/ts_plugin/RemoteTab.java | 2 +- .../test/java/com/rusefi/ts_plugin/PluginBodySandbox.java | 4 +++- .../test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java | 3 +++ .../src/com/rusefi/ts_plugin/PluginLauncherSandbox.java | 3 +++ .../src/com/rusefi/ts_plugin/TsPluginLauncher.java | 5 +++++ .../src/com/rusefi/ts_plugin/Updater.java | 8 ++++++-- 6 files changed, 21 insertions(+), 4 deletions(-) diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 384dc59adf..8e048270b1 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -29,7 +29,7 @@ import java.util.concurrent.atomic.AtomicReference; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; /** - * see RemoteTabSandbox + * @see RemoteTabSandbox */ public class RemoteTab { private static final String APPLICATION_PORT = "application_port"; diff --git a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java index aa8dc15c1b..c7fdacc9be 100644 --- a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java +++ b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/PluginBodySandbox.java @@ -14,7 +14,9 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; /** - * @see PluginLauncherSandbox + * Sandbox for plugin body + * + * @see PluginLauncherSandbox for plugin auto-update launcher */ public class PluginBodySandbox { diff --git a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java index f2f8ee4b61..12facbfd40 100644 --- a/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java +++ b/java_tools/ts_plugin/src/test/java/com/rusefi/ts_plugin/RemoteTabSandbox.java @@ -2,6 +2,9 @@ package com.rusefi.ts_plugin; import com.rusefi.ui.util.FrameHelper; +/** + * @see PluginBodySandbox + */ public class RemoteTabSandbox { public static void main(String[] args) { new FrameHelper().showFrame(new RemoteTab().getContent()); diff --git a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/PluginLauncherSandbox.java b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/PluginLauncherSandbox.java index 7805fbca63..61f375c8bb 100644 --- a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/PluginLauncherSandbox.java +++ b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/PluginLauncherSandbox.java @@ -2,6 +2,9 @@ package com.rusefi.ts_plugin; import javax.swing.*; +/** + * Sandbox for {@link TsPluginLauncher} + */ public class PluginLauncherSandbox { public static void main(String[] args) { JFrame frame = new JFrame(); diff --git a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java index 0f47aca0a2..c07cab8391 100644 --- a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java +++ b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/TsPluginLauncher.java @@ -7,7 +7,12 @@ import org.putgemin.VerticalFlowLayout; import javax.swing.*; /** + * This class is the more permanent part of the plug, it's responsible for refreshing and launcher PluginEntry via reflections. + * which downloads the main more volatile UI part (PluginEntry) + * * by the way TS installs stuff into %user%\.efianalytics\TunerStudio\plugins folder + * @see PluginLauncherSandbox sandbox for this + * see PluginEntry */ public class TsPluginLauncher implements ApplicationPlugin { public static final int BUILD_VERSION = 3; diff --git a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java index 3fdb229e5d..2a91be9391 100644 --- a/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java +++ b/java_tools/ts_plugin_launcher/src/com/rusefi/ts_plugin/Updater.java @@ -20,9 +20,13 @@ import java.util.concurrent.atomic.AtomicInteger; import static com.rusefi.ts_plugin.TsPluginLauncher.VERSION; +/** + * Download fresh copy of {@link #PLUGIN_BODY_JAR} and launch {@link #PLUGIN_ENTRY_CLASS} via reflection. + */ public class Updater { + private static final String PLUGIN_ENTRY_CLASS = "com.rusefi.ts_plugin.PluginEntry"; private static final String PLUGIN_BODY_JAR = "rusefi_plugin_body.jar"; - public static final String LOCAL_JAR_FILE_NAME = FileUtil.RUSEFI_SETTINGS_FOLDER + File.separator + PLUGIN_BODY_JAR; + private static final String LOCAL_JAR_FILE_NAME = FileUtil.RUSEFI_SETTINGS_FOLDER + File.separator + PLUGIN_BODY_JAR; private static final String TITLE = "rusEFI plugin installer " + VERSION; private final JPanel content = new JPanel(new VerticalFlowLayout()); @@ -187,7 +191,7 @@ public class Updater { private static Class getPluginClass() throws MalformedURLException, ClassNotFoundException { URLClassLoader jarClassLoader = AutoupdateUtil.getClassLoaderByJar(LOCAL_JAR_FILE_NAME); - return Class.forName("com.rusefi.ts_plugin.PluginEntry", true, jarClassLoader); + return Class.forName(PLUGIN_ENTRY_CLASS, true, jarClassLoader); } private void replaceWith(TsPluginBody instance) { From 9ff5dcca97ecf56cbd4224356df34cac960f566b Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 00:48:04 -0400 Subject: [PATCH 152/182] broadcast tab seems to work now?! --- .../com/rusefi/autodetect/PortDetector.java | 10 +++- .../rusefi/autodetect/SerialAutoChecker.java | 0 .../com/rusefi/proxy/NetworkConnector.java | 4 ++ .../rusefi/tools/NetworkConnectorStartup.java | 3 +- .../com/rusefi/ts_plugin/BroadcastTab.java | 58 ++++++++++++++++++- .../com/rusefi/ts_plugin/PluginEntry.java | 8 +++ .../java/com/rusefi/ts_plugin/RemoteTab.java | 6 +- .../java/com/rusefi/ts_plugin/UploadTab.java | 3 +- 8 files changed, 82 insertions(+), 10 deletions(-) rename java_console/{ui => io}/src/main/java/com/rusefi/autodetect/PortDetector.java (89%) rename java_console/{ui => io}/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java (100%) diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java similarity index 89% rename from java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java rename to java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java index f4d7778adc..d06ce4e72e 100644 --- a/java_console/ui/src/main/java/com/rusefi/autodetect/PortDetector.java +++ b/java_console/io/src/main/java/com/rusefi/autodetect/PortDetector.java @@ -1,6 +1,6 @@ package com.rusefi.autodetect; -import com.rusefi.FileLog; +import com.devexperts.logging.Logging; import com.rusefi.NamedThreadFactory; import com.rusefi.io.IoStream; import com.rusefi.io.LinkManager; @@ -19,19 +19,23 @@ import java.util.function.Function; * Andrey Belomutskiy, (c) 2013-2020 */ public class PortDetector { + private final static Logging log = Logging.getLogging(PortDetector.class); + private static final NamedThreadFactory AUTO_DETECT_PORT = new NamedThreadFactory("AutoDetectPort"); /** * Connect to all serial ports and find out which one respond first * @param callback + * @return port name on which rusEFI was detected or null if none */ + @Nullable public static String autoDetectSerial(Function callback) { String[] serialPorts = getPortNames(); if (serialPorts.length == 0) { - System.err.println("No serial ports detected"); + log.error("No serial ports detected"); return null; } - FileLog.MAIN.logLine("Trying " + Arrays.toString(serialPorts)); + log.info("Trying " + Arrays.toString(serialPorts)); List serialFinder = new ArrayList<>(); CountDownLatch portFound = new CountDownLatch(1); AtomicReference result = new AtomicReference<>(); diff --git a/java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java b/java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java similarity index 100% rename from java_console/ui/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java rename to java_console/io/src/main/java/com/rusefi/autodetect/SerialAutoChecker.java diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index f7d873c591..f4893a41e6 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -34,6 +34,10 @@ public class NetworkConnector implements Closeable { private final static Logging log = Logging.getLogging(NetworkConnector.class); private boolean isClosed; + public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) { + return runNetworkConnector(authToken, controllerPort, context, ReconnectListener.VOID); + } + public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { LinkManager controllerConnector = new LinkManager() .setCompositeLogicEnabled(false) diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index 87e8fd3589..0e8d529000 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -5,7 +5,6 @@ import com.rusefi.auth.AutoTokenUtil; import com.rusefi.autodetect.PortDetector; import com.rusefi.proxy.NetworkConnector; import com.rusefi.proxy.NetworkConnectorContext; -import com.rusefi.tools.online.ProxyClient; import com.rusefi.ui.AuthTokenPanel; public class NetworkConnectorStartup { @@ -25,7 +24,7 @@ public class NetworkConnectorStartup { NetworkConnectorContext connectorContext = new NetworkConnectorContext(); - NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext, NetworkConnector.ReconnectListener.VOID); + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); } } diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java index e7781fcdef..00946947bb 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java @@ -1,15 +1,69 @@ package com.rusefi.ts_plugin; +import com.rusefi.auth.AutoTokenUtil; +import com.rusefi.autodetect.PortDetector; +import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.proxy.NetworkConnector; +import com.rusefi.proxy.NetworkConnectorContext; +import com.rusefi.ui.AuthTokenPanel; +import com.rusefi.ui.util.URLLabel; +import org.putgemin.VerticalFlowLayout; import javax.swing.*; +/** + * @see PluginEntry + */ public class BroadcastTab { - private final JComponent content = new JPanel(); + private final JComponent content = new JPanel(new VerticalFlowLayout()); + + private final JLabel help = new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING); + + private final JLabel status = new JLabel(); public BroadcastTab() { -// NetworkConnector + JButton broadcast = new JButton("Broadcast"); + broadcast.addActionListener(e -> { + String authToken = AuthTokenPanel.getAuthToken(); + if (!AutoTokenUtil.isToken(authToken)) { + status.setText("Auth token is required to broadcast ECU"); + return; + } + + new Thread(() -> { + String autoDetectedPort = PortDetector.autoDetectSerial(null); + SwingUtilities.invokeLater(() -> { + startBroadcasting(authToken, autoDetectedPort); + }); + + }).start(); + }); + + content.add(broadcast); + content.add(status); + content.add(help); + content.add(new JLabel(PluginEntry.LOGO)); + + AutoupdateUtil.trueLayout(content); + } + + private void startBroadcasting(String authToken, String autoDetectedPort) { + if (autoDetectedPort == null) { + status.setText("rusEFI ECU not detected.
    Please make sure that TunerStudio is currently not connected to ECU."); + } else { + status.setText("rusEFI detected at " + autoDetectedPort); + + NetworkConnectorContext connectorContext = new NetworkConnectorContext(); + + new Thread(() -> { + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); + + SwingUtilities.invokeLater(() -> status.setText("One time password to connect to this ECU: " + networkConnectorResult.getOneTimeToken())); + + }).start(); + } + AutoupdateUtil.trueLayout(content); } public JComponent getContent() { diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java index 9f9a011387..f96efc3498 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/PluginEntry.java @@ -1,6 +1,7 @@ package com.rusefi.ts_plugin; import com.efiAnalytics.plugin.ecu.ControllerAccess; +import com.rusefi.autoupdate.AutoupdateUtil; import com.rusefi.ts_plugin.util.ManifestHelper; import com.rusefi.tune.xml.Constant; @@ -11,10 +12,17 @@ import java.util.function.Supplier; /** * {@link TsPluginLauncher} creates an instance of this class via reflection. + * @see UploadTab upload tune & TODO upload logs + * @see RemoteTab remote ECU access & control + * @see BroadcastTab offer your ECU for remove access & control + * @see PluginBodySandbox */ public class PluginEntry implements TsPluginBody { private final JPanel content = new JPanel(new BorderLayout()); + static final ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png"); + + /** * the real constructor - this one is invoked via reflection */ diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 8e048270b1..c5a1d57eb4 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -29,10 +29,14 @@ import java.util.concurrent.atomic.AtomicReference; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; /** + * remote ECU access & control + * * @see RemoteTabSandbox + * @see PluginEntry */ public class RemoteTab { private static final String APPLICATION_PORT = "application_port"; + public static final String HOWTO_REMOTE_TUNING = "https://github.com/rusefi/rusefi/wiki/HOWTO-Remote-Tuning"; private final JComponent content = new JPanel(new BorderLayout()); private final JPanel list = new JPanel(new VerticalFlowLayout()); @@ -87,7 +91,7 @@ public class RemoteTab { topPanel.add(oneTimePasswordControl); topLines.add(topPanel); - topLines.add(new URLLabel("https://github.com/rusefi/rusefi/wiki/HOWTO-Remote-Tuning")); + topLines.add(new URLLabel(HOWTO_REMOTE_TUNING)); content.add(topLines, BorderLayout.NORTH); content.add(list, BorderLayout.CENTER); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java index 9862103691..6b36fa6f75 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/UploadTab.java @@ -142,8 +142,7 @@ public class UploadTab { content.add(uploadView.getContent()); content.add(upload); - ImageIcon LOGO = AutoupdateUtil.loadIcon("/rusefi_online_color_300.png"); - content.add(new JLabel(LOGO)); + content.add(new JLabel(PluginEntry.LOGO)); content.add(tokenPanel.getContent()); content.add(new URLLabel(REO_URL)); From 2e581ec6cd0f316c86460d2247cb586ecdf941a9 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 00:54:48 -0400 Subject: [PATCH 153/182] broadcast tab seems to work now?! --- .../com/rusefi/proxy/NetworkConnector.java | 10 ++++---- .../rusefi/tools/NetworkConnectorStartup.java | 2 +- .../test/java/com/rusefi/FullServerTest.java | 2 +- .../src/test/java/com/rusefi/ServerTest.java | 5 +--- .../rusefi/proxy/NetworkConnectorTest.java | 2 +- .../com/rusefi/ts_plugin/BroadcastTab.java | 23 +++++++++++++++---- 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java index f4893a41e6..0c8024d606 100644 --- a/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_console/io/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -34,11 +34,11 @@ public class NetworkConnector implements Closeable { private final static Logging log = Logging.getLogging(NetworkConnector.class); private boolean isClosed; - public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context) { - return runNetworkConnector(authToken, controllerPort, context, ReconnectListener.VOID); + public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context) { + return start(authToken, controllerPort, context, ReconnectListener.VOID); } - public NetworkConnectorResult runNetworkConnector(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { + public NetworkConnectorResult start(String authToken, String controllerPort, NetworkConnectorContext context, ReconnectListener reconnectListener) { LinkManager controllerConnector = new LinkManager() .setCompositeLogicEnabled(false) .setNeedPullData(false); @@ -78,7 +78,7 @@ public class NetworkConnector implements Closeable { proxyReconnectSemaphore.acquire(); try { - runNetworkConnector(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> { + start(context.serverPortForControllers(), controllerConnector, authToken, (String message) -> { log.error(message + " Disconnect from proxy server detected, now sleeping " + context.reconnectDelay() + " seconds"); sleep(context.reconnectDelay() * Timeouts.SECOND); log.debug("Releasing semaphore"); @@ -98,7 +98,7 @@ public class NetworkConnector implements Closeable { } @NotNull - private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException { + private static SessionDetails start(int serverPortForControllers, LinkManager linkManager, String authToken, final TcpIoStream.DisconnectListener disconnectListener, int oneTimeToken, ControllerInfo controllerInfo, final NetworkConnectorContext context) throws IOException { IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); SessionDetails deviceSessionDetails = new SessionDetails(controllerInfo, authToken, oneTimeToken); diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index 0e8d529000..c98b29f468 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -24,7 +24,7 @@ public class NetworkConnectorStartup { NetworkConnectorContext connectorContext = new NetworkConnectorContext(); - NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(authToken, autoDetectedPort, connectorContext); log.info("Running with oneTimeToken=" + networkConnectorResult.getOneTimeToken()); } } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 3df6febfa4..8c57c8919a 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -101,7 +101,7 @@ public class FullServerTest { }; // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); + NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, networkConnectorContext, NetworkConnector.ReconnectListener.VOID); ControllerInfo controllerInfo = networkConnectorResult.getControllerInfo(); TestHelper.assertLatch("controllerRegistered", controllerRegistered); diff --git a/java_console/ui/src/test/java/com/rusefi/ServerTest.java b/java_console/ui/src/test/java/com/rusefi/ServerTest.java index df25aeacc3..39cf0ef246 100644 --- a/java_console/ui/src/test/java/com/rusefi/ServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/ServerTest.java @@ -1,6 +1,5 @@ package com.rusefi; -import com.opensr5.Logger; import com.rusefi.config.generated.Fields; import com.rusefi.io.IoStream; import com.rusefi.io.commands.GetOutputsCommand; @@ -34,8 +33,6 @@ import static org.junit.Assert.assertEquals; * https://github.com/rusefi/web_backend/blob/master/documentation/rusEFI%20remote.png */ public class ServerTest { - private final static Logger logger = Logger.CONSOLE; - @Before public void setup() throws MalformedURLException { BackendTestHelper.commonServerTest(); @@ -126,7 +123,7 @@ covered by FullServerTest TestHelper.createVirtualController(controllerPort, new ConfigurationImage(Fields.TOTAL_CONFIG_SIZE), logger); // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); + SessionDetails deviceSessionDetails = NetworkConnector.start(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); assertTrue(controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); diff --git a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java index 854b685536..19ab1938e0 100644 --- a/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java +++ b/java_console/ui/src/test/java/com/rusefi/proxy/NetworkConnectorTest.java @@ -75,7 +75,7 @@ public class NetworkConnectorTest { reconnectCounter.countDown(); } }; - new NetworkConnector().runNetworkConnector(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener); + new NetworkConnector().start(TestHelper.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, connectorContext, reconnectListener); assertLatch(reconnectCounter); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java index 00946947bb..bce97a6c7e 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/BroadcastTab.java @@ -10,6 +10,8 @@ import com.rusefi.ui.util.URLLabel; import org.putgemin.VerticalFlowLayout; import javax.swing.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; /** * @see PluginEntry @@ -17,12 +19,13 @@ import javax.swing.*; public class BroadcastTab { private final JComponent content = new JPanel(new VerticalFlowLayout()); - private final JLabel help = new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING); - private final JLabel status = new JLabel(); + private final JButton disconnect = new JButton("Disconnect"); + private NetworkConnector networkConnector; public BroadcastTab() { JButton broadcast = new JButton("Broadcast"); + disconnect.setEnabled(false); broadcast.addActionListener(e -> { String authToken = AuthTokenPanel.getAuthToken(); @@ -40,9 +43,18 @@ public class BroadcastTab { }).start(); }); + disconnect.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + networkConnector.close(); + disconnect.setEnabled(false); + } + }); + content.add(broadcast); content.add(status); - content.add(help); + content.add(disconnect); + content.add(new URLLabel(RemoteTab.HOWTO_REMOTE_TUNING)); content.add(new JLabel(PluginEntry.LOGO)); AutoupdateUtil.trueLayout(content); @@ -53,11 +65,14 @@ public class BroadcastTab { status.setText("rusEFI ECU not detected.
    Please make sure that TunerStudio is currently not connected to ECU."); } else { status.setText("rusEFI detected at " + autoDetectedPort); + disconnect.setEnabled(true); NetworkConnectorContext connectorContext = new NetworkConnectorContext(); new Thread(() -> { - NetworkConnector.NetworkConnectorResult networkConnectorResult = new NetworkConnector().runNetworkConnector(authToken, autoDetectedPort, connectorContext); + networkConnector = new NetworkConnector(); + + NetworkConnector.NetworkConnectorResult networkConnectorResult = networkConnector.start(authToken, autoDetectedPort, connectorContext); SwingUtilities.invokeLater(() -> status.setText("One time password to connect to this ECU: " + networkConnectorResult.getOneTimeToken())); From 779b21d1c5e00e247dae7a31ab4d7b576e089673 Mon Sep 17 00:00:00 2001 From: kon Date: Sun, 26 Jul 2020 21:58:22 -0700 Subject: [PATCH 154/182] updated TS terminology --- firmware/integration/rusefi_config.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index b5690901ad..76b5a3b8e3 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -432,7 +432,7 @@ ThermistorConf iat; float knockBandCustom;+We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override;"kHz", 1, 0.0, 0.0, 10.0, 2 -float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On single-coil or wasted spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2 +float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On Single-Coil or Wasted Spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2 float[DWELL_CURVE_SIZE] sparkDwellValues;;"ms", 1, 0.0, 0.0, 30.0, 2 struct_no_prefix specs_s @@ -457,7 +457,7 @@ int sensorSnifferRpmThreshold;+Disable sensor sniffer above this rpm;"RPM", int rpmHardLimit;set rpm_hard_limit X;"rpm", 1, 0, 0, 20000.0, 2 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" custom engine_load_mode_e 4 bits, U32, @OFFSET@, [0:2], @@engine_load_mode_e_enum@@ @@ -470,8 +470,8 @@ injection_mode_e injectionMode;+This is where the fuel injection type is defined angle_t extraInjectionOffset;+this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?;"deg", 1, 0.0, -720, 720, 2 angle_t crankingTimingAngle;+Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X; "deg", 1, 0.0, -360, 360, 2 -custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" -ignition_mode_e ignitionMode;+"One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X +custom ignition_mode_e 4 bits, U32, @OFFSET@, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" +ignition_mode_e ignitionMode;+"Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X angle_t ignitionOffset;+this value could be used to offset the whole ignition timing table by a constant;"RPM", 1, 0, 0, 3000.0, 0 @@ -932,7 +932,7 @@ bit useFSIO6ForRevLimiter; adc_channel_e vRefAdcChannel; uint8_t etbNeutralPosition;+Expected neutral position;"%", 1, 0, 0, 100, 0 -custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Automatic", "Manual" +custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Closed Loop", "Open Loop" idle_mode_e idleMode;See also idleRpmPid; bit isInjectionEnabled;+Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings. @@ -950,7 +950,7 @@ custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Automatic", "Manual" bit isManualSpinningMode;Usually if we have no trigger events that means engine is stopped\nUnless we are troubleshooting and spinning the engine by hand - this case a longer\ndelay is needed bit twoWireBatchInjection;+This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection bit useOnlyRisingEdgeForTrigger;+VR sensors are only precise on rising front\nenable trigger_only_front - bit twoWireBatchIgnition;+This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + bit twoWireBatchIgnition;+This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). bit useFixedBaroCorrFromMap bit useSeparateAdvanceForCranking;+This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant. bit useAdvanceCorrectionsForCranking;+This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle). From 8b22f000ccf6e0d998a8259e54b43a90dfa1db70 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Mon, 27 Jul 2020 05:00:36 +0000 Subject: [PATCH 155/182] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 10 +++++----- .../controllers/algo/rusefi_generated.h | 8 ++++---- ...ngine_configuration_generated_structures.h | 10 +++++----- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 8 ++++---- .../controllers/generated/signature_all.h | 6 +++--- .../generated/signature_frankenso_na6.h | 6 +++--- .../controllers/generated/signature_kin.h | 6 +++--- .../controllers/generated/signature_mre_f4.h | 6 +++--- .../controllers/generated/signature_mre_f7.h | 6 +++--- .../generated/signature_prometheus_405.h | 6 +++--- .../generated/signature_prometheus_469.h | 6 +++--- .../generated/signature_proteus_f4.h | 6 +++--- .../generated/signature_proteus_f7.h | 6 +++--- firmware/tunerstudio/generated/cache.zip | Bin 843650 -> 843551 bytes firmware/tunerstudio/generated/rusefi.ini | 16 ++++++++-------- .../generated/rusefi_frankenso_na6.ini | 16 ++++++++-------- .../tunerstudio/generated/rusefi_kinetis.ini | 16 ++++++++-------- .../tunerstudio/generated/rusefi_mre_f4.ini | 16 ++++++++-------- .../tunerstudio/generated/rusefi_mre_f7.ini | 16 ++++++++-------- .../generated/rusefi_prometheus_405.ini | 16 ++++++++-------- .../generated/rusefi_prometheus_469.ini | 16 ++++++++-------- .../generated/rusefi_proteus_f4.ini | 16 ++++++++-------- .../generated/rusefi_proteus_f7.ini | 16 ++++++++-------- .../com/rusefi/config/generated/Fields.java | 8 ++++---- java_console/rusefi.xml | 2 +- 29 files changed, 126 insertions(+), 126 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 02faa5a771..23249f1dd7 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 05:00:27 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single-Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -2143,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 05:00:27 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 00e03a4d67..b7c795320d 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -305,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2735505253 +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3491848358 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" +#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3491848358" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index e813ce50e5..8c53516355 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single-Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -2143,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index f8061c8950..768f6d6128 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 2a72c4a745..a94902ec75 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index f46e7172d4..6358971982 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 942b35e90e..2d181c1f7c 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index c0d3d184cf..25de9b2743 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -305,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1848812543 +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 488619068 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" +#define TS_SIGNATURE "rusEFI 2020.07.27.all.488619068" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 551f4619e6..4776974625 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1848812543 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 488619068 +#define TS_SIGNATURE "rusEFI 2020.07.27.all.488619068" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index b39a979bc1..466d3beefc 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2964705052 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.2964705052" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3281572063 +#define TS_SIGNATURE "rusEFI 2020.07.27.frankenso_na6.3281572063" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 7209efa488..3de7f03257 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2735505253 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3491848358 +#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3491848358" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 49d7a37413..0d4120a71c 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 667710833 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.667710833" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 1424059058 +#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f4.1424059058" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 32c51d18cc..2cd4726351 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 667710833 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.667710833" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 1424059058 +#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f7.1424059058" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 350be31347..26b04527ca 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2603514747 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.2603514747" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3892536504 +#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_405.3892536504" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 7d34426963..01ad89fd07 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2603514747 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.2603514747" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3892536504 +#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_469.3892536504" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 808253fa23..109aa5d9c6 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3819164208 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.3819164208" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 2425277939 +#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f4.2425277939" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 57c42c4072..34bd42e683 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3819164208 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.3819164208" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 2425277939 +#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f7.2425277939" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 836de805be81598268c9d583561613d554d5e901..e0b9e823c7565f5978d8c0e63ec9cbe73a086db7 100644 GIT binary patch delta 220194 zcmV(;K-<59zcZh{Gk}BvgaU*Ev;;T?6bUH%P;B>`#!6=Z04i(&0384k0GFW^0wN7! zUmjm#Umjm#UmjoVx6l;=I|+ZNz_h)Gh4Zfi;~4^J@W0xYT{%;@3?rZSEntBS5}Z29 zNZpMO-rNkM)lGo$4-iQ7k&oBjo>(h)YAx4`h``+tGVr`?rtSv!&CTor7jA^)~4^A&KdDTm9b-jofq{z36C#HdkH=U&Ck? zSrgzstjX-b3imz$Gj5*ib4CGj&MppbJHefXbkd9oSnJV9r54!Muan%)CenMRk$n6QJ}Sogi3y9p9cN z0AVS%v4C_2$mfEaFu{aiDFmxXmMeU(q{ohUDD*VxhIq1}ms~yG`Z}sS5*HAo_T-wGvmntC%~-Mn zn!jl^2gEkFpBzO&jDk8TB=#XSu5E=su5nThSg#t+!hWe9&>vt1BG^}yBNtBWy|FX% z1N;MD{AP|DWeR)JU+Ej8idew+reT5tanC-_{4IEk|qOM zJEVtU_mOo_U}EisYSvh-7XZtXJB{YY`sOmyIJ+n}R$))Be1KOz-70VZ`0XF%(+hX$ z!f1a9y|VTR<}~ZK&OsfxoI{%NC8jJg29Y=(Svzj(jMonqOtGVOoVkEi^lZQwc%X6j;Jl(b%fb;W=y(AP z6R*njK113ENUkXG7x>*|)Qsc;wy+R2snLJHeL#_X9Y%@U2Gdw7*}xkvC*M>G_;Gg! zn3v>=xWmQxsTG)e{#7Sze?-`xW*Jew9Kqdih<}C+pa%k^J#t}C!9PEG{^TqEz$qx4 z63h$OLxJzP6QCdhKZ+J~=$g;YWDS#oziW;Mt2}bT$T-2*08|jN`9{f^>t_S-!=r!0 zUnEau*hAw_1)i@VY5`fiZanDb7ZSwd^I5^7gFTFZ5TG{de=igX*t*%pKR0Hd{x}iL zC6#E7YJVzH)37*0II0BksM9=$|1!X!vJHF@Fu0Y}GD3T>W)GZRLtaZ?)FEEJC&S2J z;aA6Ad%U7p%Y-RHjWji|_yxSvyUKqW?zvSctMp;NS#O&i8Xhc2xukxT74FivtioOJ z-|YrtpZ{DT1h%os^#}OJ$0)h~+aA-ZG*qG#jJds-;b-ycX9CDY6`yX6rjgYTWeIGl zB7dC9A7={qxVP6pXWW~DP6vExhk$EgN7@hC;f4991z$YbFSIwhsB4yW2PA*%D{yW% zZh-DP?X>m{AR+j-NdJ~tr>uQ*K`&WSwT5);jCTE2DT3Mb6jz_S zW4AX1QkfpP)XP@E_z$DVkBLHq6X}0@g`_g?YN;J$*s>908o(+BjGm?5)jWz;;pdZ+ z2RE9p$H#DRPegI~_ozYD!jpgT!XKZ&r~x^hxZdOhxJl^I;#QC6grYrwhp{DIH=;w} z9u(ju0K5!50%7(s>?Wb|6^3g^jh)8odycGzbPzGG#C*sR({r8}a_HhMXnT&o4i_)+ z*x~e#Zc4@En7I>}dH@cHYP_ZZ$Kniz{wyNJzi={lrfb0Ov|OZk2y1_KZrG2uyFkW6 zHM6u|#*S)i2Gg^vF@ARZo3TJuNK$3w$6$mv-pS*@c0GPKvR3d*Zf1P-p_@&^O$j{J zHw*ly$bU*HJk~cW{O6SaobjJ?{&TT~NP5dp=(&=HW=qLhiT{-OPvtv${r~o}U*{RD zpZ%*q^xybrzsb9@dAfhAOnP_rn}xzVdoof-=b!oU&-nWP|MBlpz2!?u<Nkf_6oFPIrVxzS|4 zk^9q6Kfz#97oK+2@qd{Y9$Ynfd6qNpyS`bD^IyI1pb5RX0(S?$iegdWXDR+!j(_rf z*RRFZYlZk{G5(ox-}P$@QH>$0F+??ns74Us--7sC6n{la1<_Q2+p2T%I+w0<;X0SC zbJ2Qb^VaIuxz~UCg{Ur@5$%Xx>!R1X=(R3-ZE*1hmu_(32A6Gc(S|6=y*9Yl2KU;y z5Y=Tfq8-s|L-g7Zy*5Oz&Ah<<{D%uSxooqXzD?lYGy3d@4R)zkh&RW!2i#lsva4mmPnQL=rE$*zvowc;isJ|sEm4_kbC=iLZ)r_DH!F{s_%=`?BrA5>Dfz7U$LZ5b+MfIswBQn6JKYEFT(x* zU5S4xK?v#8%G*ew4f+O%A7gJXCV((U6iPggL$O$c=cK`kc4R?L-$e+!`?mez*D!=RKr9Eq+{%!T3Jwv%XE8~7-k3k0Oqa7MfH2HtT zu6rWr$e9YYG1A9V{%&CDBFCmD0`!nXdRXWShMWfB>-O=l9;yVnTZ{+8{;~#&=vq>Y9rxCX~bUXiD@3$h9@zvD&9_i{fV1{98 zJ-sqa-a26KEAcCc@cSZWDxO(8*7(KM+BIJ4b~Ymg`-V;>cyv96Podxs`0<1j5K~j6-CjQ&!oa#?@EfHYfPF9;sL zAlU5$M=lxW9oi7Pf2vKW&&!Uht^6Avi_KZoF1D=wEImgF?PgeVRs;Xqw*_+IRB}HN zR&!rhb|z{#DkEYzm)M~w+MBx%^Na>D`Q0tF<8mCh&J2IE3>)rMo9u9sZqjICeo1;r`VHOCtrk$&L^Du<>~>+z!nsg_ zF21F~Y9?H=i11fQ7O01)kPgVT%9f#<031o1Q1MsqU-Rq~190zpQ~&8(hqR-~>_O2e zlv@5b3}@FV5foa+ZqOXA!95!Q!5oQt@va!D456^WXj2>&w39@tTZL*w9#S-v3kb9B zEGF(64$EI+JE`W+%3m-V`LGq+efWNKC+6g_ zz=o{!UykrKR~9yo(p7|)p*jICf9oe{NwoK26G8CuSJR6MUusn|=u_d@F-4N544w?h z_vXyoM%yyk+M>~GTs18sJPQ{WM9{Q)gN9`e`|Uv!(@s@dtKA%qh_39mheNY#^#|>n z=D<{REP9fFf~rEh+d+SJr>g0zpWt`t;y-U{xxFON{58Vs8Ti)7Eu6pJ*xuS+d}bRQ3v06dkk+p8We=^JMAFbBm&b$Eax{k%HTM_O zs<7Y*IZOD}1qN9fr0RSiFdupk8O`lBS1RRob0xWL*hCC=fHJ6rf1iXQ7W_Y98Ci(( zq)TEl15&s_hysMm*10i-XVA5)Ac=m*b z@((AW@mI88Emkfr&d$#Z#$Sw&i}A@k`1GrnnaN#zI)P(WiHqb5u;dqK7gUCeRCAMM z34h@9q`it9k{1N_gHYTP*Zwx|fxj7JJBm8?L){Moq9Sw%~kMN3&lf6JLgRVo>YiL9!S3r+q3X^)(CA`WaKk?K-{8{XOt_tBj?)9OK6 z9I9K>pk}31=1DpWzNz0DkFFhG`BSPI{LQ$v$>RROC$9rW>A3Vr#`0w1g8Y%a98YcI zf0qso_n2HKzZeS#YM{e6MkVF)ap6~wO#Pkbl`kAt&jR#$f9|q@O5yC;c(C!@LVsjr z2^a~goe`&`kE#={%NIOHPBgXv2UyXQZ{bKnKp~wb5VIHTLmJYLFrDRS2IO57^9Abf zu6tb^_DgwV>KonOh~z}*gFY@UR-xgqVUCCX!ts1}iq??TgW-B?2W#LQUSRgwo1he& zKcbzW0b_Kff2DlrFC8u;FxAqXP7zVDnOP`WrUQa*uc3GJPDozm*{q%BpO1~qj^Jig zeahY#WWdT#!)YBzw0oO8%~un9BG}v$gZJ)jjz5s&D{vV7g$j zC+qbRrorQLw;;nwVOQCt6FcQj;2U{2wyaF#07Nce&qNvkJ6My)gBv@V1GLgU_K=esbIDB&8Ii;J>VJl#k++ekUzNV!O-l=2%X zg~QObgvZZA&z{=yqe}Q%IB{8pH*hzyc`s~bw#Ype=4j}d109GmD~M-OL=k}MK1%VW z_i&V-i=YY6V!H2EYXG27*aA6=e?kE|w^&jXiVmXvTy3q%9jXG5Ql%s( zgsKz|0j=dI?bztT*0^I|r9Zq4K4|Y9@aX{3TS|joN#G2Oe7{396k5#F!^%`x8f@I~bAq8mbmI&b)p;O@3&j95I(Y(go#b}E>eU@21u{HaBio8f4};KK6mLZvlkOYsBmqP#X5yefP)&&?OF6I z@H`Jd8UQzkh!!0K3k)s7D}?NapFP6RRh@F8Fd;xK7KVM%q+eO?M#!PUvBsn9Wr;TN zZRiqX0?chd0jnWp|LReaiz%j*!3jhT?WCCF$s(!>gIfo{V;{)UJXm;vg)!5Ee-+AK z@MYW4d1<5}en_|K+7WQhiw5odZBOYBjYQKMXN1ysyWC=1H_UZ^!UhZTH3SxZ!kzZfA~t+U?5%+ zd!8|L@o*f~eRqMc_V+f$>KI~C+>7fK(S}Ur0C4;m#)nnDV31%r=KKq~G+X}Cq}m@| zhmYP$5HTWp`mn9dlHyP^#LsBk7rU!r%4kA_q7-}RX@?w~CW5_%C`4S=a*;yvV^Ym^ zb|8-pA(<3UsYU>YKr84Le{{n+MEdPC@fHT%K_R&L%ZEng&^SFb&JK<9L*wF*oNE;z zzfgR`L)r!$so}|BCo>nX3d;|s=n4UYaP_PL$~DAKt7H|eG9;8_!np+mpLJ?gtTU?! z85NlUs4e;XpO6gJo*FhmuLhsRhB--R;V@Ab%mNZg(l99&N=Cn;HgLu3i+c8 z1qHNV2{_K+vw*N)Ku)0uRS;Ny&cF6c4{+5-c=Gd{um7&C-KQyP0_;5DDC1*l1uJlFoq%7Tv61 zoazB+W!oc%IZDJEvUqUjQWU)h2OpG>DDhztj}!Aue`WMZ!pc4d8o{RkiCd65b738M z8wuZ^$YYT7ien|RNK7?yEEdq2=5$~Z{Qzcq2z(%|xQ6-=3m%nAP5iw>|It|KyH=|2ARC%J9GZEaZQn74mEhez#G}%w7?%2xAUu`F_pLt3 zGLaQ^j_d#-dbKktiSU=sB9I~;Y(}^!qre@b54{kOSE^_E&6pt32kt7I7DOrNC{niL zXkHY<7wB+#oB@r&9Mf1V5ba0Bt&r0#WNQ*<{A0b>r?{ms*9$xNbetNHz%!~cVkBUX zf5{*1lg~Vgv0AJj=wM@#BBKwPlgFwu&MB5=G4a%AwVW3Wg7_fzHJuXVJjkYKJeiqbyXEt*uE{YZoe+D?mCzCh{Q2|-1C>f}D3k#JNRli<4Hd=9jG#35s z7xz(+8|zt#ilI??WJy)=xbk>RqNDx7@#*Pn#Y>N{^axqjfKh4TFjg0mimQ((z}3f@ zq&P{0Es>pk91NA3eM=jUEvp*gdIWIy0Oza_U0I~l11_y%C3sKM+Dsgd0+$3-N*y!aW zfOGx(C*F;TqKC%U<;ncjf2AvKm9g2L<&7t=SR|n8mM`4b3S+A~^D1W$xBGL$GzMQt z4pO_hCpxE?FN#m2$#w{tay8XA{OXP;q{T&KogH7-$oRweaN#(szI23MH@jm*Z*vk; zvww6rBbpw}8zqg(Qg9`lIKP$TD<&n4xiWH&7>ZqnsGrzNA^h0Le@^8UMc!t)@MXCq zN5s-qxA9T&R?7GDr#F}aYz)s{j@^efaECpa!&Jil5M8kflpn@~(30FyBW9e@T@fu_ zj*S~6$WiEgB;3czYN%Q868nggG9Z+R9~-X>QMjgC1wi?WHZaQ;bcBqA30Oq=8)im{ zIfHsk`6UO9dr7)Vf9A*jcTxAA*#7frxqNn>*M71}&uTI|ubh<=v!3cle9}ZKSTL+0 z2QGgDBt-PFS6vb`IS)2Eq&Dtc=gA3jdx^&2qeZ`~EIk{)v_wFA5qrLhFEmrQJq^qqjA#Ge7Sj5yX`O&7>jS9=?y*08e>oI{6Ys)fLowC#j@=h} zKXDr=D-gQJwH^|;_$u%xPRP2|h_T6@bDp}F<#j!AgUOmyJrWj@hl2QE>nM+Id4I+) z^|5{EAyd%I8^O;dQ_)z6f_Q{0jNO5SW5Osk5|kQ|ZVSJ>ZX1ajL#(^Az*?~uc>?@n zLpEarw}t{Ve;eOSyMqC*e}rDJB-hgh0Wz=v@Hx)nWB4g$ zRJ5nX5L=XrnQv{IxM&6kiBJ*r?P$SGB@nEnEhOoZ!S#{O@dr7}B2 zw}r=n0bNu-^28aPp`nkkUK<#vY#s`=tpYo~e@JE;6J?cJIw=_8S9i5S@$Kfc@Kqi! z7Z5AFOCCyP`GZzgXn~#`&?NjFXgs5EeuOW1)ct+CpRpwbErjv~RqM;&VZ%;dctb&- zZSy~^{&~DSKUYM*96Vv*cCZQ&|%z=zU?>9-5wZ&Ca$iN6WDG5aT6 zl!;D-Zq9J!HYjPs_6HSAEQ+$6HbyMGqik`b?9!ekZfBv-HDjs*^{4~`% zr8EV|Gx=zN5gyiK*0v?@8E)zsN$V$ED*!;Um@xfgVTdBdspFLm>V!;23$ zBCpv?lC1&NQn#0+1}JE-Klv&ZsQbM1T&bB<%&>$cerMvBVlf`=K zXsj&0+U%pErX9TOOB`^B4+d@;e+2CI&JJ7>np0FDDW1eQSn(skM2rKUdq%xR&-l~n zDa?v8N1p|9n}$2g8Mj$8T2TLA!lKb^4c@ou|A`ij?}jDDn|Si|CBgOCOYtC*itlIh zUR5p1lp^?9-#9i0!9D$}$DH0o>Vof96W`AL+hF1fo?IH9B8Hij!OMRx+4x(&>?GjXgjmvmys> z@1Ws|TVQ*UA^gEyBWrQAe;#;gG7N3e(#iFcYd+QbEmXJX6;pZQRVA|)DL$qBTA_Mz za-wPCt9$XiwO}c{cC@8eH0IvKcGAVr_BtBimi6Ma=)WvR_@ug3hZJ zGg^TH-_VWdH1C=bdOM27sCrmFIMzoe}YOK_6xiF9st#qKye9Waw+>4c3J+Rj0QX75CcFoR&SExwu-t8RO1MM0o&y{yBeH_fLh zt5DpGD5IYOA?34ze{f3%?fk5a>A1Y5%5+@Wnsd4}=PcdP!z#3bXZ)ycW<)Y0fq{@x z?XQK%2L{+%NvB6R7 zjPb(tzJ{c;g%`&d7@*@U=(hB}b!BI^wy4Q@uo*vR-FrX|e?n5jf1)CEi%skxWQ7u2 z-gA*JhvNw0B~=r5Jco6YR^>o!K6xn!Y!!vGt}t-sAhHT-BTjfgOn@#IP}>>5G}>3~ zes7dMNmKX1jgX9qP+86=b=o@cW$Z{T6D&v3Hf)otdo?3HC zBMJsX>m=_ae=JcClNBamTsXl$0%KDuoL4HL#y}?SF^mo=goeWxZ-N#wi3YMpA9JG( z&NUL*3TcmD;8sWD3=9VwYM6BbGm-KfIbjd7Td1-)J6^jC$5(F)E?LmI^##WdZrNd! z>;i_@DRxB?sRxVZauvOdZ11Zu3kBNaZU^a6h^dZrOK6Px zO%3gRNCbyQK8M6_6xRK|);lzsS3Mx(l|xK?(IL8>LUN++En)=i!2z|bp8y%IiL(0V zJvC%We-TE5_SIE$z>&9&;m-=#z?)~DkLw`_zP*q6uz-ELm z9uQ^p;w;61K>x#*W0eddwHA1p!(qj%e;$3(2Rl6Jd$Y^%kYbHMW1!;An>1rrD@UN3|@7`qmp|N z#$`HfmxaExrb!>xpZ2QCDUZdL3{wk7GssU?}peodsW3}F`$PL(H|e{d>G zB2@#|vb4q)scZw9bkHI5uK7ktrApU4iX>N$O?*!Keh|e;EbU=OCJAFD;Twh2ijyx; zipk)*#?mL3>QnZQj9IWS>1-L68g+vg3syy7D8#fOBn2`y!?=hkHQEf zCITWxE`-b}ic=(B^1K2kv3{=~OQ6P@1A z){$yDaU{f~g=vd0zWK=_e}X9~mlVCp3V!Xy%O-T+$=-&V2yL?0klMziQXKnmC)CXr zsK;vCx9thp{h>Dv0dopUp^uK>Aisz96f0r=)HdtVI7k48TZSo`P`OnI93&FuSjKRx zviT4V1Mex=tyoYl>;erhrKu3xr$5Y5RgwOnSb~(lX=j`3$Uj1&e+e;;@LDB@*7aed zVUTvg2R9t#Ph<3jRoGgg?@k3qj1fhDSVNx$cWf4!iImHny23-)jK-pg*m{;$FoVNl z42G-Is57496cUCyvllf2GE^b$g6z2GK_m?nyHFKp4@%nY3ew5&F_+#|px;l)z$cAblNT zRf%}uXWIkhOq|C8SIeE~2-$R&U+^+=(53i(I!y&wE)~%e1=K=Q%tJOcq)Um^+iZ_5 zE67=u^B`VP$s`oT4nzb2C4p9onOs??ch#<2X4mZe^fQntfAwp#+iiBz1PY-N6HwmE z?@q9lH`5uM4DpiAx@Bjzz3AFs@RQ9})-Nt3xvU?IO6m0cEPqiz#|Op#Q@l7T91810 zeo2P~bf-i#0z#e|?S@9eKdO5Xj}EXlNMW&Q*`k+!QfoOKHAOSWD&BhVY>(0;^xNeHqzVUVdeT; zXx5$ea26EL97-=cxOaim!DEw*^YTmcYP4;KO3@<8>|)KrHQab_Qkv1laJS}QRFFT4 z@<$2PVWbNzX4sW&z`?MAD1M3ug&cZI^8oa703?sge`2q2s|P2=Vx>0RdgI(IN~f+T9*xy=vG5S32zsu^4+SwjU@y>k;zfFaN(n(| zj)vO1Eg1#~oj1h3)Fr=0BLz7n7mr8E6Qjc0gs=BLWV{#A+w}3!S*>9cx)EA4;V$+A#Df+y;LRWIsAE6xs3WTgpNZ(TBOW%p z&(H!srEAf;NTO9bVyoUrB`KF5c3D4DtYJ0Be~|4GvcODe0+xhQ22)<-<1UsWqBu=| z0H$L`hyBP1Jv4KdLKSgOBI81iBB$i22d-r@Am-3TKow?65tChKNjU9^CPd75gqkF; z;5Y`?)S9A(wTiq&STII{8ftn~*Fri6!dnc((xBBCtW;4oZrm15lQ>rX_a2pw52+4b zf4xlNNBj5+pf&{EXXz7Qw9@y$hYz_s^z*?!tUjbbW2aajSj3-b^i{ZI(Q2%cuyh{+ zA|QPg)Xew~y!Xb4E7?wI<9vf<$%(Fy}n*Z-)(|BSLQLldW7HEU<_z{ zYNidfkj=*f%(asp|HFSl_mp4REP4|#nQvx{M&{MFSF3N&YH(JPbU}M^xaV#mQ9hl< zrVmmJ3#~eo>4UT$6DWn$(m8@1sBpe?l8M z(dRZt{>pt&28frJd#Oe=;}kXx6e3wMc!R|~1h((cXv6)|OI9nG8*1VC#eSs9iTZR)5fJwZ9lSnUF)jZYYjk z5Ty~{HJr!$fBOLtglxJw81x2K?Y7k-x%1CWj3frYi4hBu4alOI z5BTu%@~(N^u6LSNyW8qf`O8Z*mn3P2Ijpza`ZQz~j~geDECCX=z5&hd)-#H$#sO%w zGz7+*S_T*-%I!3}SEK9QEoT%@au=^5aiLxy6rKr-qqH67+zsc>6lEXyfB2x#PRLRQ z;S*s+E{TCXz^8B`K11?Lp(%dogsN`I%^OIe!A!!I^+{OwbC{saze5>jy~+YjnTQXZ zl^;ap?Rup_w?)@Qe`!=iB)W`p$?po#bLategB~pDgy(s>3O&p!e?ZbfgsObHqbgI( z_#rJgBuO8${mfel^Obr$e~h+>oSM!Q`aH>OIKkKBz@0vzpZoSqiu#ddlHTjDk3<1> zxeGkKdN@ckH6(0S<6sf3E>&Vz#3tpf5M@39D(K(vC|Zy zjI>yxHm9rtpLQIHMuZEP$vVKtHyO@=5YVw<#B#_bMYS*-J9OD=F230w3TYnsB10$B z?D|7k6?iCvg+@^BPcMX;Oj8)cr=Nj5dXA&lxL#4Jw}|(b>Es3_r6}Yf!vlH{h!wA| zoB*aUKCpHG`*3QIW_a-;AASbL8rfX+G@>N3LKdsNJgI%6f|NRjFpn_MH@BR#><0H` zsIa(l?2cHgz66YiV$=OFEy?{De!?d$+Vv#3sJW3+-Rt3kb&d4h(w4msl0ZugQMkcS)T)T1LH8+{8T0+Df4+qxF4cBE%HW?y z?ZqGr{wa4Dlj;b8q@6PRG+w24cfg8a%Hh8)EoUW*rBu;V6T2ck5s874cBDQt`q;L# zvukj98r&`b#OSuQotZAi7rRlXB^jk1)FvWzkw=|s?#I>q4Z1h^RQtLlEpA;4%ba$2 zo6+`peoN!R2mER|f50#?=qwAP#gM@v6B7pH5o^LF4JJCoV;UXbZ|)mkpv@_TyCFJ_ z9H1JU@&a%knXl^T~m!A7ynt2sjx=Nz& zcqde;C$&-if7TlIfQjw3HyG7uvbN-d2#SbsOZ;+L`AsP|_7>9`YPi*PR~$`m`UZ_h zDfTaZ!&5==ZBGR{6@%}T_s+E~xgJy&;R_q@>)5_qsj2XfP_hDon4j<+zkoW%3~((g zl=$psW)Z8ED4nskS+5@S13XJ2>;$V0CWTR{O0fGyf2EK#3S>=D57shKZ+E~K;*iM6 z0xB%7okP}}l3G*3$rby!Wo<+j5DCQ}iuZ7A#BGqvl~MH`9x=JSfP|v z#Nl^{&h-34j1{NuuozV7a9Tm8X}2gnJ{0gJm5bQbLnzq7kfMLkp!S_a)XRPJdMexj z;cQCxf6o&iwLk5MIjVa97TKPOBY2U}g#!_dw6~S&L98<>-4&C2X>w&n&R#J%mUwMn z;kuGDVXPY~-vMBDP+vsS4FTy;F*lsnH$#Z+6Zlt(wLg7UhZ+We#ba5{C4vAFy%*#p>A(Hc_G<#+XcO`WLrIOwJ}kjZRnkV=n%nZl+e2C{NgLCw9^~Y^0$RJo<%1@`X$;Cih)lrk9fG1({w>rWa*; zWlvA8h=6}U`e^%CFH)g+S}YiE`NCaA60_xE8e&U2nn%83O- zR*?(05d#mEN1$z_ z?a>_}msjXq`HPo=O~&uyZV($hVSJ!uaAm7dK0B4;$O<;c>hdB^n56#Na0G?AK=RI! z1sSt5Lg%-D)xu?W;cUAX^3x6>q%raup$Mb4L%UUIM9Wzr@-fnTSNA%5e+JK?8nx`) z339?6y@-{oLKmt?B}liS#;W9oSniLwWQAh=09YpnZYOjG$>zHv?kuTm`@-cuQLz4G zvJPT}>7j#B93w}t$toZ%OZ+DNg;Zy46bQ=lTJ8g1JOQq7Z|K&{2~k| zRD%IaK#05%5h;Z0qYzD+e}uJ>(8m?cA$4$Uu#`jAk1%qZmM;t^q)t3pk4Vqzf^w1p zFhrC$y{>{ksnfoq;BfSs%<>{fhe&SQQEcIsGO@Xb?Im@BlLsJPl)JaA2OYS05wN(J zd7-Aw{vFpGbzv4mn&RN3@k?w#K5sA^Ry`27M|xQk>{)y^(Xj~{e^hufc)@MRO6Y)D z?*uw0riT_ z7doU`=0U$0V-usaqmy-t#wv4Kt8os0?q zg)PnYCNX?*6u)is7;fa#t~rng{i7a*K%`R}Z50Jn0-9Kw5^e$}f7v;XxItuaJQJ}qy)b=; z7$4i_=+LNl;2)$-X<{h~I2_)1(o(U!M5nWb9h+(J8sH62SX%bI@cpmrmAKF0=1GJ_ zW05hQ<-Pb;#tV5|%*V0CZ46?51J~FqecQ?{_&$!{MqPaSVrf3+kMl=`#iTKrR27^a{llt>o0&^Z>zfUbe>gd|1v-u4E^lW+$IzC!c30Ut}hi z^4ZA+-45G{1xrKscPFi%{i=`e4Lxlj?Qc>4f&>2@f1pk+zC+0;@CdEFxG+tmK-L@+ zkeqF=SES?NvI7QPXL&hsILG?pRMBaC&;+7L)lOygJ|0abuTNVh_^r12%f;#}+g z`2Eo?f9RnD(7=ry&FeC9uNk$`i*@zDj6}?FW$O*e(v+73gc5@s1rB@bT0%plCGzY{ z&|>^=nul>+Du_`7zOn%rky04+kQ6zP*g%81-VK-Wtp|Zt3dHxYI{woTry77IS@_oWj`*>npnICz(I~&I zyuV55Ob>C4Fi;ZtM%9(HpGO{x=bMv>voL4SsS=j*rWiVtu!_E0KMUndMmc{f7fQ5S z-nvtS?T_NxhZs3>jSR;-P|c0m{};wG9NfER4sb080}6 zZgmw>ATcG-BVmo^L0yk6hT&5QQ30n0#~YDU)&bYf_?aZ_if@HR;Erq!9SwPihKp*P z$%jpjbsSc=TI6OnMUG-+Gb8D*jBWxM>xBG=iF?3~1W|weBrH#KGrNvoUHP z;q^~RG@c1m=~QVU$?-is*}y@ss|ReON|G`%jwF#Iy{RBaf(rgZ;`UW2oV#J@u1MN| zw<*7361b>(jkl}-?AX{atlS2koH170-0+N9l{ro{uIe812DZD9*N*fLuI`<8`YMlm z&5pG5ebIk(Hu^|8*ZZ#4b0_LHw%!5>rBvqv%wTG46sJ$W$7R6VTogL7@gm?)6aLv4#cedQ~c}wtyqG z0&okU+iAQ`EBQYgQ`Fz(YgP!H#ZxE;(p4cCp^x^=xEIYY)|R>n-BG94Z?m`ge4%!N=HONJz4gd+1$5h0Q(#P9g_ z^uBq%-rt|kUn|#kU#_**efH|!dmoo`_UFh&*QDL5FSb7-X*XG~6uU}t^3ejbn}^g( z`WrFo*~+s9a<>i>7EuKGoJ(k>31Z{rV64etdHx9PA?L?XxWtIS4K$;dR4aZ#UnC_u z{3$mm06DL!u2PzOf`-P1k+ATep>pbGlr6; zZ`7uSRLvi9Eq-RvKXkO`YsHA*x%6Xm-GkKEewJKNH!xH+KnbuslbB+=?U*cSqH!2E zO2jnR4jmrb!nt8Bd6}M&Ylvz~Y5F47(o8uOn^H&{9>P}STJC)A3wBXr1xypkyM_hU z$8FOKLGUImJ z<*TLUA1qt#80zQk8Y?F0%Rl2g7~O5WV;<**n#t*otgBtYq3%1>Jn8+-=j{b0t0erA z*36ubClt?cZPT(cJ}fFe_aeJYBkf$?t-mCSUdmHmw4XjfeDSfqXaBRVWA&sfmaIoXrs5&iR;3;4xBo&>oSG|^Fkam527BNsI8DTiH%j(#OGcbRwThbC2v zSl@_IPmSDG_?zN8IZs(cS>2x*;kKW;ugiC$f74u6yflAC@LThdnId6bGAdoo>z@mH z)7Ku|5s^CHIG1_lIG+4%D~fRG(x%{>9~Wj>Co6Qr-YR6xXBbSah6dfcWyQ!p%OVhw zer3H!%A!~52#USUBbe{Jdhi1`L58C~H(cr)DwAJS*u`^flWs-DyNgl0b>G4m7$aHG z@>NZl_sMNs()dy+#}40k%0Dd_>wPaMX`U^ImiO87SAS)DyV2(zRz605!^%FaKt@e} z3a@C^oA2R9A2(*q(+wBBOz>MZb@=E6WaO}mOu6?1zSMJ1FYER8OWD7|2wd+< z3$iG)kRH4olH&56NpbY;s#Z7gnRMM4pWPkF5%y4{MFUnkwe)rWwK%;|wkp5Wn4t0O zEWZb`>3eS)<~bjPeJxI#&2WV<8$rBcGjYv7N@P{!K~@=WbNh~NH(T4)0<~QYI-y`f?l<#m{*hZowGoX@ z^|7WhY_c|p8Q$jJlBTu@rtPe4K`sk}H@YkRcP2&HbIvSJ+;KbqSC`-Ww>T*`61<;f zlon5kw0qt?p&%QIf9HjF?UN+O?(72hG7G6GXGd$=IgMJOCQkLAG1pEAIwz1SArRZ9$qDUupDMU`ubw)S<&&nW#Y@exhRGYdqOY7tMp2Y2ELc6GJWHSPbz9AHlMHh-UFy{58rmId zw6EBu7BpuE-_-{;u{0K%bwfXS4=;bhczNQ`phMHIpugOX5OPs|vO0U=jMPWInmLb@ zC}hceLa8N5N79W7HATu5{qfYJHXmj@%wx60IeE_$I-KoQ&J~t1S&7?h6v6nLT`(M0 z)9hr9+gZ_Xei-6o`$ET5O!C{O(>YIBgU-Zt-jR$)>E~VYBH3gWPidDBej(1zR)Brw zjc$dEV-BaS6(RHmHzmRDEr!wyhZ(KG+w*~>@GWYrdd#LG9Ic)kmS=xMh>+|0P^#k- z{H-6u7VP&t#_^F=ORNkNi(~nYgXy1@F9~XIanKP5<%ncbXv?95tF3RvW}B*Ra<4Pn zua#i`r2Vy+QD9)Sib;3Jc+qz;C5(gM?0GSk09K|S>tEl^o~%D1!#c{%DSyZSUASJ6 zVVj*y`^ZCx<0kEHj>oVsE3wlkIFFZMWK})Tx7e%QeQdy8|9uY(3|q z>@JJgvUUxq5+v0fkaZb%<4Y0ZtV`?t%am^QOY6o0Rez&}9QPzyfEX&x%{z`qC_{|< z0_{7-_(X;c-eTrEy2VqX#iAMJ(a zf8ezS&gw)IAL+o$!ytN329t$7Zo4E~6u|!zuLSof?=yJ=@|R7*DZ=b0o%BO!(O)nk z*$kCc&kH@*Jx{4$;x&85A-MATkZyKCD3Q9r4aKa0)MxX%Mgp~l^&8hVy~oqrg9sfL zw)=?CT%x|&VsoF}{5ehE1sqfHi*{}Ix?HNl7X9P?V3=yuc~ukJwc@WWagkTs@(Zom zh|0Kz#}7xO-b#wMGQXYnps`ZMu>2L8AbU6pU-tvP@Y+?LmG1FnMs+7qRa@^vWa&*K zD!hVK9(vy{u2sZGr)Y5gbH-Pc6uO=9zLe_5N^f~8TaQh(J^Ub59Z6EsnO0nUx3a=yXy`1zJ9HA^9oykLV^=yroil6qf;n-xqP@t<@W+Suy zQM;7)k*k8POZ>KVV+7^#`LK_15_){O?Y4#wQ5(UvC$9RW-*2^kn((nNaJ6dCS`fWU z`LjY_AaR`8n>fPwZu_8s#WQwKmzT7rF3~0l8`=aF+zZ^ye}&zyAj9wH`s*}@qh^T* zu_c@1V)Fuxs$gEcht${C?zPDUNg}9fXJzIUlU`M6YU)&}`Sz5FBPAWDKW^wP8YKEF zGz~PcQGBCI&U+y@qx9%{!KwC_(-S2ablp{@mB>}C=<=jWUHm2Hhl#m1smFe*u5wfw z^^>9R`tfVkw@t?RXoOe|;dk<`TI4pztRx<3WV_vdR7xbr>2x3(M_shZlQ4z!-Mglx zz@{Ox;p<^q?H1}UgFVJY8Dp=q5b?6^dh&%Mo@H>{M|TT7m^!BH%m|I%=G3qJQU%4@$z&ll}um#S4##{`jejpjoUw7 zw7Yd=wn$r5DSC^rJqnLa7)7ho+(Aeq{g&L8Uw=XH(1lW;L$*(MG4B|VbSXr%lSuV0 zVIc-1IZnqIkL0KYZ9n_c5WQ2x3iY(k=oaoNk0_tI*rws`$AQd|>7PwDdIzHL6^|SC zjv#XJ^xCczJnZD&#t%H_LB_i^8$=RPimO^FghuE)Uv`gdIX#GCcfS+voR`UIni%=H zCOMFmXsMz9fr5k4X6muExR@691O)%g`y1iv*Eu*`rA86DlLMa@$m+VipM@5beMHY+ zOzch*ag^2|_v+D^rf_ArN&axt+ty&wLfK^|BKE@8 zN`fh7+{i03J#Ix+tB>=du9Xeq=Lf0N3$We}6zJCd3nz*>)1;?`Ku|A8DU`RXKZfO+ znuX~#BQ?xTzp)SJmX^KC=CHT+ILHm5P4D{tl_&q>!G*q|Y5g?KSaTKm3fGcOIr9m{ zynB}!0{nmU*&{b3RkS0-$y617N7->r- zt#fUWlaJ#XKUU36Ix0PM!y_LOSG|DNVh<`P%fMaNe^ozvDCY~u!cWf+N9oqK9^xBb zKsCP5LmG?TbYSHF7Tn)NbXOlRbyMZ5SIp z(hXlEu87<=P~Rrs3|LUycZlEkd(9bXA$ijPtHQO5@`26J!otgOl` z6I@+$+%0ge=0e(377|caM0SgKzFS3;8ErAhl%=2act>>4Dt+uqU}CLPMXhv`C%d-8 zWKF+yiOe(p$Y@Clg80~MGOjuP)YatN#4}2lC$KM0zdxL8s#|2!7tAPGTxZVPqn#6U z`D(J}C(~Hc4<%h8pEtRq-8J-_sFQw>GGb&n>@2c8S1H?rH$NjC6zW;nw|?9sMIVZi zy6&f9w(IW6Wz?@+-eOA6 z-S*67xc8#c{5~)3{LyJ4Ra>KBI-SEiBd2XlBp4TUg&l{^29N6m4h)O?R1CC;mOuZd zVo%^Mj?|rUkzP+cBd^N(u`Wqu+Kde?RU)6IA2s?dJUd1+$gGw3)%11RFZ{$}-$YD< zGLwrpD+U*&5m=NUt;)|u`B>XB*16pqdFyQ@aM#_)T6XQdN2##HKz)H< zcm``7#rBPc7W&0SH;(0c(q3B6lR zLAIFC>V5BPThMYY>F_Q-OMLdXwCbcTlKNZm8;K?NO+S+UM1&7WR6eB=DZypfdpGR=^jaTPA#F`9dVz~rm*1o(z}b&*VRJPxc)*BfR>xUg49ESLYw@InK}E=g?~T>h4^c%VC;q~>INYU}#a2e2%c&uwc{~dxKNy)WcP^&o=7q{>BihpEHDIz*s69l7QRyVA%`oHY)Ho(So|b)XUX17PvF-ESWmzY_qnnt} zY5miJ{wrV1@+j^m2ls9H@qJVs8=I+l5g0YD?w-cQSHpBaoMEV{vNnJxI_FZw=$lXe zwFMVRQr3AI&Xg@rHeXS}mx` zI0uMDw*2_s`09shmZ#QYWwUk6Ut&>Oyd5s5jiPQ^c*P{*hZ+Vl#XrA@qB3f`_Q*er z^X%Y}>r;_FcRgk<%JrrlZF#eBd@x0z=;oDjPdty?D@_Zocl--~&_t};T9idxl2o33 zjMn6i-C>rx!)!cPIjBkAu|-I`L3itJf37@L&xa}$&baP7qNO8`xtJR4iOH7aiZL<5 zy8uFPa zN-I@4o4WS7O5{@_%ManX4Ti;+>W=G-@?R{_aVt^s4pP>^7k{$WJGTs$4g5I1eZfp2 zaDYIVrl(<)V6G^DEaeBC4O*0n+JZ)WE9|kadz44&IkE{A`O)mDM&l`nZ46kk%iNN*onxnC++)c*>2bDVE?CjJT;xp_RVvtcRmOv7zWPep2CzT zTRVTX4p!1C)zO%ZOONlZ-wwZHogBZ+CdV;_zDeA3k1n@;Lbr4$M^)#jHg)t!@4di^ zkj{!+kqifOJ5#Fjp|*pDbSEphI*u;%B|f=;c8wQ^dcRcZXTh}4_2G#E!~9u|W=koR zh7A>_poXoVWAVBg2{FYJ?uL;esTH3D*DrA6<5+dD_*{Cw#5*^TeVNblU6GnxOqS%l zbSjyR?K8w{y?#%J*uD2GIR%GGzU?5cs__ps%tlzg$x+&a4PkZ)hOZ>SxzEP?N8O87;i9731cCi84O&5mBxE^5`+T@PeuQgX&@awb%> zZGJ9B*qzVO;kZY9f?ktGD05ESe69U?#H;xfX};G-2r1OurwKZE<+|6>O4h6TIW{@NB)h>YUKaDSQDLxl4d==`)i>=bMPba_W!z;E$;GdAyg1{Z zOM1^o^|2H1Qg7}QOS+7mvR>-wKD_ce-&Q&9^$TNawTNf>TJw#Y@fLFp%`;?%#xv*r zT+uPj3p2bW-Dc_{PhZEh;eDY$;^qXOT}9yn_<(Q zSL8x2hJUl3^d=d(xonnhS!(|IsR#LM%03m-fm?NWUXn673&%Nd9?!a~ue#3B^4Ti1GOvZ@-iN55Bu-1J?%(DUaX$h$foaj3)IEyc3( z<%!|^s&ByEP04K9(8%hu;?dofl=7-i%ym{s{0xJn>l4R`Pm1oZ!^74qMz%H87`LayN*a+KE<6u?_mDp$)nol ziOS(Vfg5Ht!yO-Q(J&Ef5}B7G)x{HQ+)J&*ue-4GEsR^;PM2z;mQ34H^r6X06eFx5 z8JSueTEB4LK3RIjfsZlMiGS_3(wVO%*GD72&H8#J`?-tOWj<~G>+9!*;mobeUPtm{ zZQXd#2|?RG%nCG}H7;TA?D8o)@`gi@NSsikO|9Fk*C&kn82!{0k3pkD6S)2#RjCC@ zC~uz}Xbz(0xudRi`lmc8A==`)`C^4!HY2r{zvNBn${yc#b8?Z0t%-%RH`U7g0?t>E zFz9URv_<7M4Roc=9 z;~kf8XNq{ zlkW-nDmcZZtXfs|T`OAV_dIgF!Z;z1QPkp5hmD_iK~KMbEoH37{FZ@9MxWDYd!Xxa zi~ITIQQ1<=cv^#oL6z6j_=Wn8sXJPZmsMFys<`enoxW49Ifrx}ELuO_-?>B*mhGH# z#{4}xB)sCccZ%ks*VgatC9aq ztF|H_Y77t?3m0Wg4Wzn%IZ7aH%ua9ZV{^Y@MBe8P%H9@+Z?4m0vWiKWPDZvvp^xIW zYQH{eGtTZlYwmf9H9dM+xjOBJuu&PWUF4L0G@55%GwXAgerYC!QLVx^`ol=Z$OM^A z#)bIU%E}Y2@3^^5_@m@Ne^p)Kt{gSz4lAlz*)A)j5`OQ?~q~5gYX`|03E9BpZ#+sKGe~!t& zFSrxEdsgm+wi<0SX<@VeJDK9yh%aHsQI(n_WqjxjV=2pbq~uO5?Z=P?`GNTu#dbeD zRQh8y_jf`6;P2XH!K52k>Yv_Yu&4?nQtX`FS1Kvuh^L)C;81W(T`Po~!n-PsA+ldAba=-T&-JpBgFHT67b4QPUMrx57 zU&`M}!eaWOqlCoi@5HSZS9+vsUS<%WpFS#6DRx3TB}vwh&5<`7Xx>p`YE3PpvhC%0 zxaF+*rnpKy%!*p0V7PaDtJxX1_JSW@E|dSH$t%X@`;JlpalJEu-coUO)l&oU}m&Q5mVMh!pN{yN`$7gz_zgJ!5$S1M@Rj}yVQgLSm;Mtma>bYYGg9@- zswd&w(sx@=ZPs!`AOtYCzTu0KIbf~&-y2xxSUG(RInb*2nkJAYJCC*Me{W#bgH;b!Jy`W%)q_#G^qVh=>q-8IETNPyAW` zH(O82x25m4p4zPCh(HKniUtW~$Q-e3{qGIfdSL5;tp~Oq*m_{=fvpF&9@u(d>w&EY zwjS7eVC#Xc2euyAdSL5;tp~Oq*m_{=fvpF&9@u(d>w&EYwjS7eVC#Xc2euyAdSL5; ztp~Oq*m_{=fvpF&9@u(d>w&EYwjS7eVC#Xc2euyAdSL5;tp~Oq*m_{=fvpF&9@u(d z>w&EYwjS7eVC#Xc2euyAdSL5;tp~Oq*m_{=fvpF&9@u(d>w&EYwjS7eVC#Xc2euyA zdSL5;tp~Oq*m_{=fvpF&9@u(d>w&EYwjS8}e~Ych0`eFGMIsf_-();?{F|-c3u(&` zvtUls;vUA744~-A$qW<9e@1@k_0-sqzT0|gvz8+Q zA>f9C;6qSiUJRlH4`JPWXDnm?djrNE7<*vsfw2e19vFLI?18Zd#vT}ZVC;dh2gV*4 zdtmH=u?NN;7<*vsfw2e19vFLI?18Zd#vT}ZVC;dh2gV*4dtmH=u?NN;7<*vsfw2e1 z9vFLI?18Zd#vT}ZVC;dh2gV*4dtmH=u?NN;7<*vsfw2e19vFLI?18Zd#vT}ZVC;dh z2gV*4dtmH=u?NN;7<*vsfw2e19vFLI?18Zd#vT}ZVC;dh2gV*4dtmH=u?NN;7<*vs zfw2e19vFLI?18Zd#vT}ZVC;dh2gd&2WbFHRNluaeCgZW=A8`G3K@!bjOU(`n^yt8>!~L&@ZcgFNC$~852?k888=xNe=y)^9!xtOTnV`j0sNs zDF4j(8?Ptdhu2?xKq^M&hQ;fDZ-CbWUJrOZ;Prsl16~h!J>d0#*8^S;cs=0tfY$?F z4|qM`^?=s{UJrOZ;Prsl16~h!J>d0#*8^S;cs=0tfY$?F4|qM`^?=s{UJrOZ;Prsl z16~h!J>d0#*8^S;cs=0tfY$?F4|qM`^?=s{UJrOZ;Prsl16~h!J>d0#*8^S;cs=0t zfY$?F4|qM`^?=s{UJrOZ;Prsl16~h!J>d0#*8^S;cs=0tfY$?F4|qM`^?=s{UJrOZ z;Prsl16~h!J>d0#*8^S;cs=0tfY<+9cs&-7$Dj_OPLlp6P|eh8ktGFT_ZL zipE9mg$n3U_Dp|NStAkp+DJSa1cHbNv6sM0kCNI~>&Zzv6H%p~j?xn&Bi;wsKkPzD zAG5>4_4?X4xHO1gbL^#gUDS2Wl0)gOk$3-ygdk}j}-5V6U*a1`PyRD}-YdIni z0&X}6u6;#u+jt2tP&AmG9uyt5{eL%w(dkApA%z_9F_T5uG=+yKd`w6n?xDRV4oWZB zOCNH?$B;SUOZ{I-UwctZxZj*HqCF__10U4jEsBXm%oQJT(fhph1!;`edlakKKOc_d z&sF)a#vH!kV;+@Yce!C0+nK{ZI>Xlf>I}!60Ha_|z`wVv2PN(GgHwvh>_y2PILTfs z$Yv{ogg81*%+a@~LkDK<^@B@bgURYe(PDz%qbS7=c&vS^B)D&tWTy!dnCY1?6K}D- zoIju!;&<5H7}X_AD4}QnpY=H?@gg=6_qGAXwhzUOasP=V!9040I(*=qBiK}&4$Q_o zl&r`BQ|&tvdG_t@QH)I=>ZsU1i%9>mU_$$foCXOoj|T}w_6~feAzL_p zO|y565&dTt_IYk!L)`n8WamC6b`&KSm1q delta 243049 zcmV)BK*PVEzB7WqGk}BvgaU*Ev;;T?5gVEMP_O8=wN+;T026Eh03Da#Z3GsVfY%HR zKMeo}#?&2O#?&2O#?&2O?0so>;!2X}=kl-6b)Ozrb$Ma&TD*R38L&-X3=Ckq?)G#9 z2%|1Qj3n&x{q--lml6F07JuspE1vj~HTI{THS)&(+>0Q^v&KO3?Y>4d7kA?qX4HI+Ja?^mm@zo02oFy zZ$JJTQ?dX2WL*a^#=vq%BWn)Bg|?@o=x>l`e}ajdk1Tg??JVa@Si&7^;KObRE&jB8 z*aq*H(bAp5WZ-_8EFV0{tj|Zk{03tVU6{z2a=kf@0sez2bAM+ZrAdR)auCISyo^1g zZSMgll@{KeKO4Z&`a<0Z8;ShiJ#N*XKL%es>%p7L)b9_lV;I_EA@I?@!xN;aND8itN@cszUo8{vY-P zz!&hQNOo)#z<>GIvvT8C-CT@MK5!J|dt zA<$IcaVZ#pQ5PW!M!_eB3+v83Z$ulzn)(kD!b+)u4wgL2mkmA3u&1U|91+g)zSZ)0 zXfyu-*Ie+3QGOf-Gi>y-(X2an^=_}xZefK~KcC*4bD1hyDwGO^a)Lj(Y~Ij z%ckACc4~It)^k-X6beP0D8L@Pd6t7ceT@*hw0|A~fe#QL+)1&ZJ%3IW7NI|L;gIM` zyR=z%@My|rfvULQT)c+h?n-T4+&GwbkXyGZYwr^W~>o6%&wQo49x0=_hckkMgd}>r_w|Z@WoffFmZTH*N zcGKzGSJt+5zMYh-_b;4_h7AqhcJJzHh(<&GZsY2z-gWvvb?VM>!6`vzZeID=DOzVn z#df=Y?R4zwk99R9+#vb+jJPs+1iL_Vet*7F{`~wenN;fK{M?)cK)=04zn+HU$N*!d z2!V2xlb;4Bw;q9%->C`KjopD2zk=nV&Q4Pq_l;JqeXnwKR>Q73okq>Mxo!4WGFx`H z3w17Vm)G`VVG~2csi?Ozt z)9>{1GrFCdBqPZoFmVfY8ZDJyGJh*J*5}r*U=FVBR;%9B6RQUZ)7NPy$WEnS-#a(< zXV?-|n4((!vsFAzcOdI z2ReGk82k0Ee%+|ThHJDg+q^hsV_#g}LQko=PUWN*F1bP4?OxxgcACjCs(&R}oq7%S zXTMErp4}zA{v}L4ZL-ztrsdS?mo{RW3%ggh3Sa5YgGdqEG20<#`r4|g6nS`T)K>|Zf7kD@#@}QC` zJYUYd&>vcl!8CS}hysprB!46p^BYnJ`KM(BMTpzjIX}nQEIJoI38KbvAaXrF-$A+u z#_;4Bj7Go5?4}TWGxxzC;)JM4ThkhhA=w!1CS1VvY_VG7&MNE|N=#yUktZZL5IaJ^ z0SLsM;$*?JE?{PnWSo1z`s@*vOzb4mR9J**8DMB&1k-7<9iTtHK7Tshdas9cUb&E$ zTklrud|T(__UkuLfXT#_5_YYYDsY(B!c7nQ&C9SayJ-@^$imywoXaFjW_4Z78@mT2 zeY1TJ1rihi2O@8=N(PF61GTvbp@+VG0Z0ARJXwr32sNJ?r_o3*9;XgB<=oW!*X^1^ zzkBt5A3C(Q$G~Gak$)HC3EEy?o`8_jbj~)EH7QN0;?CV^@Zk7!*jO8CsteDoI`SX< z*qy4nsR_pa*;PO>0$-ZUQ8}_;9MgCimPe3vF z3us^dQBtrzdJ0nO|0$$@20#JE0{#El*%^YRfpW*8hU%>_-4;&26{eB*u)X_^W-Bv& z{Ht`dF9}5}S$}MO?wr%Fr_S;;eg~}^*nzuCCA8OJCGuTY=4>6_txQ&ZnC3cWoBZWuVjAPiH-ERD>l z=WNnu_+QZgKurP-^PrXZm}%(z2bR>Qra8qAP}6Cq;(sOBUaoJRwe)1}l@J~9M@fU} z&L5`UzYdHi2&BdT8e4YZjo>nj1KziQ1y)FK>L@35Gd_5AGmKVO0meT-Akjx5S$lWr zEc}r(TTWvFcSXp+^Rk+{8QfPlvk6?d5z>=82!bfqTL5-@nkV8Dkl}`2g7kH50GNF6 z&(GJj1RlR+RdQ0O6{RIWOm`9 zC);B(B{U(a>3CiJ-*&C-(K3EE(F$#@f)>6;@i=ydzy#r?K6fob+{c4X! zl?u)Z5dfCPr#M-NnvSp?qkPw!1&KiiQvgo<>b z7vwL4TiWvGBZnbQLmqL10zqRm^}5~zAj$4xR{410P4R&ZrQ$GCyTlIqP{azU3<}wS zz4Za+ZOA8>H!z#I7fG?CFOotEl=h<+hRb;~a7QUXSc+{;A)NsVxZo;GFdlWj5$wreVQ!2HVt;{P zK8jML&=KRTcNuK;OI9}K$MmB7n}ubn zNQii&aoF=}iIkz%Og0p07o0igFRlpZ`P91Z2~p zl?HdU%7WI38L;#fDO7(k^`R>gaaNoCU3_BMMM;wdt?kmou>Z(9C@`_^R5xoamQ#S` z$sfg&eRFeJS)5%`8>_gbR)0RkE1zx^H~{?ikMilMKl5R~ z(5Pmicr89KyQppA4@K36#|^CF5(<`&3VVk~1?YR<`gIN+Cvy&I*5`z>$QeZHc;xN4 zkvCXAI55SY-f{L6R&nkE#=rxOy9ehL)mf&Vte`g!VVHPTX7?G=K7T-R#bGeT?>eJq zBp0xSsnn!KL;nFq@>LimZW~NvsbmdrxNY^OQpAtDJHWgoSHvAIBrk zdzxiL`Dz4ry&nGQ)qoxdk@nb*!Xy0i<2)FC!5=sU#bbhb3VSFF=Kc^Uh%kubDIL1{ zS8uq4Nx|P2-W*oB?|((Hb%3t{s37F>jk0YozgmDF9zFgdc`CymS$`_>eDzQZ$l-P4 zLDxT%AReF3iVhv@UJQf)wNd?hu|&XD?H2yIu{-p~i(xLQM7@9UrxG;{i_?RnN)Y#( z^;7sS2Mj7(!xsUITgfaVv!;>ukwa_>J$%kdaqNjHtZ%14;JLGtbZM9++}WAjl1B#+ZD#X@ac#U*vck1AK)J! zY12_!kW)-e?Kw{HJ9!Yg{+!>9oCW++n;Bny=w>r;QwmRY>>~du@t<-Ak9F)L{&UQK zPWaC$|2bPjB)#S*^n8?sW=+Y9GXFW`KS$ru>wo{ZpPeetVD;o*1)~4PKRb2amG$FI zWwN`oQ!f_Z*prnxI{(a%f5zAU|Bru<>NQ_lDxbyUaBn9x&Wgyr@acpoi+uD?#06YC zJDg1!J4)qxh9v2D>U|{+{|g#20QCT6umY>a7&Tmm4D+oo^WbSNO2@!p#abO6saw22 zMSrOV20D!H3)!nNZ>KRr9M7?{*0N?lOGQ!E4e@Y^b-swbKx0R9siem z;lWi?P-i*!zU$bBN&buX9W-G!SLE*CS4kEXewLG;hsjUA?>ZMr^^0Qivy}YIx$im` z4ABKcbioi^Fhmyw5&kX8-;(^5mWt9;k$>B&a`7scu5#fjm#uQq>e1@0)v0o?)ibHC znvr&-*Q)edm0qjTYmJN7xO9yR*SKtri`Jwh_gdp#Yusz?OscD9q#fzCCcW0A*P8TN zF9`1EKU}!ZW$TC8+XVhSp?^>5-!u9bdz9M)|CIPong1N}pQCLh2HEahQu#|Nej`bx zFRAb)mAyQof2p%e>gReNmYpQWgU0zd{*VN@Tb$NZpwWKoF<}R9q zUQr75t|I7vW8i;d;D2M_e`DZ(8C>;06a%NZgg5gCDb7HeT1DosYjMpbU`kg_CgR^W z#J_Kdf8P-Q6K{WrezSgDIxIMH#MEag{aH?b9;QE!(x1oa&y)1$shm~yeU|xF2R}(D zW)n);gmN|^17I-&VNpQ5sg}!UCnYs_^;t@PmeZey>CdC|XQt(o^rsrU`aa8i>%r@U zVm6_aO(_?okHe2J9~8e<>`Ob*jMyfN`IEqpNHwsqx9!- z`tv0HY3wWdKFfTY`-&5a*@RLyp`1;~09edGSj>P}%)qFoR)3#mW~Y$(&dy$D`buSU zs!NBducOr0aq8Kfrv9`7n0tj=YQ0jRcvfbsB6fxu{ z`eyOM*c*RgTChMB&0va36s#lSn75z6F1!mBe*ddZx4L-%9-;4>UvjE0w+V zF0~8c-^$0HhpUbrI(!nkqb?M_V|VUv&~P`H?*-$r?B4x~q4K+opBv*k>fcsAHpVEI zXJy>?>@mniL#xA9^A1f?I6TY6E{Xp3TxtqBYNgW<>CMaK9o0vMF{!iVP)n%c>9&KQJW~m zC(7wCbC;+)?9GSI#zc)(8a9bq+c;Hj3=sCvwGOEX2UcP7JO1(JE@@=)G~zagZYRH+ z{T_)jzMk4(PP)1^m|>XOxmg(|ZyB=pmE?aFMEt(UOeHhxCK|uETARj8-Hykkfc(mS zA!l93gG7&cL&sb1vU?r1&h4*$q$ZnRlBT4Z_LZkqZO>$57<c74G1B-ARTQN$(F%Y3 zK68VVQ3+2;8i^^BEI&jiIuWXPC|yzXpS4l1sQjB{s;k!OtzNr$$|_%-&xbHt{CVAO z)$H=mGR!D!sZ z-xonNoLHrOA{TDl-$!mynnCcH@uPoVS=Ew6tbvb|Q?hm_9`i1Z603c3o;NF(#6#Gw zESgg*Xaj}2p?PujV zO0=6{$yp8jOUD)D#Hr+dBC2eES-82VVeb$T!>Pg!C24QsKTL8O#N;=(xZybBpUPHx zswPiW{$1Hphy~7O3g5i}*X5W)ppk!O7OnF^=zC+#vRt@VU9!VTyGf&o`6cZk={Iyk zx0pg<8_hrk*=@p_#Zys&F1>%I!AdS%s)+cjBn#ACR7eNpT4Br3RRH#sO{n}e`!_s0 zB>>#}^HK2htwY+-Wd5LN6k09+8-}y#ln8~Evl|SDYjDqoKrqKrFWD7+ogoSvj5g({ zpq*6JDOO_gkYb=*K$ul;I`o%tSpJgONo5a9O1a-`vQ+uDdgV9QgIRy`(Jpc5!8j`0 z?a6H2(Zc(9L+#Rc)h@rKwz4N0_-^EIBS@Zimec9pa$%_y!Cgv$hV*9M&`S>b2>fZX z&$0-l?N2S0DVvVm{e+8P%4p=>T5R|3`_Y}u$zzcXS?RxR!q;3`Y#f!V2-Qf@NP&~2 zTEUr9Ep5X+V79T+N>P7PYME9_e;6#KZ-ymj8Iwa@g*D7M>ceIDh_0WMCDGQqRRqDy zU&$^ieCbuqp-;uLV}>Nn7(7{u@7=a`=1S#)X|ANU z4V#F;4$uab@b7<<7-GTy6P8hhC{MX0CNm(78$=W!E?X!55ZF6wI6Rp7aQ6+D1Ak}@ z;rRQo_nVmQGb(v>>-)qK}moGdNT2>f{Z8Rc0u+L8IP*7e9I4 zJXuAO8KNly8+)S#I2lAlhRNO

    vF>D=BGPvW;{%kcu9v{pd0Xhu)|$A1%oiu|mmY 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 diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index c54f77e07e..b4813c11b0 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.all.1848812543" + signature = "rusEFI 2020.07.27.all.488619068" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.all.1848812543" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.all.488619068" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PB0", "PB1", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "Disabled", "PB12", "PB13", "PC14", "PC15", "PC16", "PC17", "PD3", "PD4", "PE2", "PE6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 61c82f5680..acf48284a3 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.frankenso_na6.2964705052" + signature = "rusEFI 2020.07.27.frankenso_na6.3281572063" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.frankenso_na6.2964705052" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.frankenso_na6.3281572063" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:57 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:21 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 803ce6c06f..f498407f71 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.kin.2735505253" + signature = "rusEFI 2020.07.27.kin.3491848358" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.kin.2735505253" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.kin.3491848358" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 05:00:27 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "PA2", "PA3", "INVALID", "PD3", "INVALID", "INVALID", "INVALID", "PB12", "PB13", "INVALID", "PE2", "INVALID", "PC14", "PC15", "PC16", "PC17", "Disabled", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 58ad30fb24..96ac2a6f1b 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f4.667710833" + signature = "rusEFI 2020.07.27.mre_f4.1424059058" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f4.667710833" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.mre_f4.1424059058" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:56 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:20 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index 3823196c9c..a9d228b1f9 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.mre_f7.667710833" + signature = "rusEFI 2020.07.27.mre_f7.1424059058" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.mre_f7.667710833" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.mre_f7.1424059058" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:55 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:18 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index 1d3f5a0834..f6ff268df0 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_405.2603514747" + signature = "rusEFI 2020.07.27.prometheus_405.3892536504" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_405.2603514747" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.prometheus_405.3892536504" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:59 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:23 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 24ea251add..f973dd421c 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.prometheus_469.2603514747" + signature = "rusEFI 2020.07.27.prometheus_469.3892536504" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.prometheus_469.2603514747" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.prometheus_469.3892536504" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:58 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:22 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index d663c65beb..83ac17b91a 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f4.3819164208" + signature = "rusEFI 2020.07.27.proteus_f4.2425277939" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f4.3819164208" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.proteus_f4.2425277939" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:09:02 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:26 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 4c7c4eea48..fd80feeb04 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.26.proteus_f7.3819164208" + signature = "rusEFI 2020.07.27.proteus_f7.2425277939" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.26.proteus_f7.3819164208" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.27.proteus_f7.2425277939" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:09:00 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:25 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -672,7 +672,7 @@ page = 1 acSwitchAdc = bits, U08, 1469, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" vRefAdcChannel = bits, U08, 1470, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" + idleMode = bits, U32, 1472, [0:0], "Closed Loop", "Open Loop" isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index 84305b9f26..39128f8d75 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 05:00:16 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1057,7 +1057,7 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; - public static final int SIGNATURE_HASH = 1848812543; + public static final int SIGNATURE_HASH = 488619068; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1304,7 +1304,7 @@ public class Fields { public static final int TS_RESPONSE_COMMAND_OK = 7; public static final int TS_RESPONSE_OK = 0; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.07.26.all.1848812543"; + public static final String TS_SIGNATURE = "rusEFI 2020.07.27.all.488619068"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; @@ -1506,7 +1506,7 @@ public class Fields { public static final Field CYLINDERBORE = Field.create("CYLINDERBORE", 408, FieldType.FLOAT); public static final Field SENSORSNIFFERRPMTHRESHOLD = Field.create("SENSORSNIFFERRPMTHRESHOLD", 412, FieldType.INT); public static final Field RPMHARDLIMIT = Field.create("RPMHARDLIMIT", 416, FieldType.INT); - public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID"}; + public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID"}; public static final Field FUELALGORITHM = Field.create("FUELALGORITHM", 420, FieldType.INT, engine_load_mode_e); public static final Field CRANKINGINJECTIONMODE = Field.create("CRANKINGINJECTIONMODE", 424, FieldType.INT); public static final Field INJECTIONMODE = Field.create("INJECTIONMODE", 428, FieldType.INT); diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 457521fdac..c3f5dd6c62 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - + From 4b54274bb144dacdc6f9e9f3ea9581aeed8f44b1 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 09:45:52 -0400 Subject: [PATCH 156/182] docs --- firmware/integration/rusefi_config.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index b5690901ad..313da9ac2c 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -18,6 +18,9 @@ ! rename the bit or substitute unused integer with any new fields of the same size ! invoke gen_config.bat to apply the tools which would generate .h and .ini files ! +! Q: Which files to include into Pull Requests? +! A: Please only include source files (.txt and .input) into a PR, we have amazing GitHub Actions which would do the rest really +! really nicely! ! ! each field is declared as ! type name;comment From 30e70cf8b72a80c99b8e1fd5ed7998eafa9564f4 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Mon, 27 Jul 2020 13:48:00 +0000 Subject: [PATCH 157/182] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 4 ++-- .../controllers/algo/rusefi_generated.h | 6 +++--- ...ngine_configuration_generated_structures.h | 4 ++-- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 6 +++--- .../controllers/generated/signature_all.h | 6 +++--- .../generated/signature_frankenso_na6.h | 6 +++--- .../controllers/generated/signature_kin.h | 6 +++--- .../controllers/generated/signature_mre_f4.h | 6 +++--- .../controllers/generated/signature_mre_f7.h | 6 +++--- .../generated/signature_prometheus_405.h | 6 +++--- .../generated/signature_prometheus_469.h | 6 +++--- .../generated/signature_proteus_f4.h | 6 +++--- .../generated/signature_proteus_f7.h | 6 +++--- firmware/tunerstudio/generated/cache.zip | Bin 843650 -> 844595 bytes firmware/tunerstudio/generated/rusefi.ini | 6 +++--- .../generated/rusefi_frankenso_na6.ini | 6 +++--- .../tunerstudio/generated/rusefi_kinetis.ini | 6 +++--- .../tunerstudio/generated/rusefi_mre_f4.ini | 6 +++--- .../tunerstudio/generated/rusefi_mre_f7.ini | 6 +++--- .../generated/rusefi_prometheus_405.ini | 6 +++--- .../generated/rusefi_prometheus_469.ini | 6 +++--- .../generated/rusefi_proteus_f4.ini | 6 +++--- .../generated/rusefi_proteus_f7.ini | 6 +++--- .../com/rusefi/config/generated/Fields.java | 6 +++--- java_console/rusefi.xml | 2 +- 29 files changed, 72 insertions(+), 72 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index 02faa5a771..dd3fa64da6 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 13:47:20 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Sun Jul 26 19:09:03 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 13:47:20 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index 00e03a4d67..a16044703c 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2735505253 +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3345389999 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" +#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3345389999" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index e813ce50e5..a08202790d 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index f8061c8950..6f4c6a76e7 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 2a72c4a745..04caf03810 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index f46e7172d4..a6ab3fe490 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 942b35e90e..9e6aed85d0 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Sun Jul 26 19:08:53 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index c0d3d184cf..87cda6cf84 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1848812543 +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 173557045 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" +#define TS_SIGNATURE "rusEFI 2020.07.27.all.173557045" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 551f4619e6..8698c1d093 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 1848812543 -#define TS_SIGNATURE "rusEFI 2020.07.26.all.1848812543" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 173557045 +#define TS_SIGNATURE "rusEFI 2020.07.27.all.173557045" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index b39a979bc1..1dc8d1fa55 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2964705052 -#define TS_SIGNATURE "rusEFI 2020.07.26.frankenso_na6.2964705052" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3571395030 +#define TS_SIGNATURE "rusEFI 2020.07.27.frankenso_na6.3571395030" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 7209efa488..fda207018a 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2735505253 -#define TS_SIGNATURE "rusEFI 2020.07.26.kin.2735505253" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 3345389999 +#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3345389999" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 49d7a37413..6d3337c833 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 667710833 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f4.667710833" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 1134990267 +#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f4.1134990267" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 32c51d18cc..7cede4e937 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 667710833 -#define TS_SIGNATURE "rusEFI 2020.07.26.mre_f7.667710833" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 1134990267 +#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f7.1134990267" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 350be31347..783e7cfd67 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2603514747 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_405.2603514747" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 4282686897 +#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_405.4282686897" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 7d34426963..16f1fe23e3 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 2603514747 -#define TS_SIGNATURE "rusEFI 2020.07.26.prometheus_469.2603514747" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 4282686897 +#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_469.4282686897" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 808253fa23..444cc7ebef 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3819164208 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f4.3819164208" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 2278110458 +#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f4.2278110458" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 57c42c4072..0f2f6705da 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.26 -#define SIGNATURE_HASH 3819164208 -#define TS_SIGNATURE "rusEFI 2020.07.26.proteus_f7.3819164208" +#define SIGNATURE_DATE 2020.07.27 +#define SIGNATURE_HASH 2278110458 +#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f7.2278110458" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 836de805be81598268c9d583561613d554d5e901..aee5e28c82b025ed453284cf9a09b0e6a572b44b 100644 GIT binary patch delta 236456 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 delta 235393 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 d00$YFe~l%;eq - + From a59d269114281a0e28cdb438f13e1dc03965529a Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 19:42:29 -0400 Subject: [PATCH 158/182] QC build is broken that's kind of funny --- .github/workflows/build-firmware.yaml | 3 +- .../generated/rusefi_frankenso.ini | 4454 ----------------- .../generated/rusefi_microrusefi.ini | 4425 ---------------- .../generated/rusefi_prometheus.ini | 4450 ---------------- .../tunerstudio/generated/rusefi_proteus.ini | 4421 ---------------- 5 files changed, 2 insertions(+), 17751 deletions(-) delete mode 100644 firmware/tunerstudio/generated/rusefi_frankenso.ini delete mode 100644 firmware/tunerstudio/generated/rusefi_microrusefi.ini delete mode 100644 firmware/tunerstudio/generated/rusefi_prometheus.ini delete mode 100644 firmware/tunerstudio/generated/rusefi_proteus.ini diff --git a/.github/workflows/build-firmware.yaml b/.github/workflows/build-firmware.yaml index 3a65b143ae..d01e3a5d6e 100644 --- a/.github/workflows/build-firmware.yaml +++ b/.github/workflows/build-firmware.yaml @@ -18,6 +18,7 @@ jobs: # Board configurations - build-target: frankenso_na6 folder: frankenso + ini-file: rusefi_frankenso_na6.ini - build-target: kinetis folder: kinetis @@ -28,7 +29,7 @@ jobs: - build-target: mre_f4_hardware_QC_special_build folder: microrusefi - ini-file: rusefi_microrusefi.ini + ini-file: rusefi_mre_f4.ini - build-target: mre_f7 folder: microrusefi diff --git a/firmware/tunerstudio/generated/rusefi_frankenso.ini b/firmware/tunerstudio/generated/rusefi_frankenso.ini deleted file mode 100644 index d2b1ca752a..0000000000 --- a/firmware/tunerstudio/generated/rusefi_frankenso.ini +++ /dev/null @@ -1,4454 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly. -enable2ndByteCanID = false - -;#unset tuneByMAF - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.frankenso_na6.2468827536" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.frankenso_na6.2468827536" ; signature is expected to be 7 or more characters. - -[Constants] -; new packet serial format with CRC - messageEnvelopeFormat = msEnvelope_1.0 - - endianness = little - nPages = 1 - - - pageIdentifier = "\x00\x00" - pageReadCommand = "R\x00\x00%2o%2c" - burnCommand = "B\x00\x00" - pageActivate = "P\x00\x00" - pageValueWrite = "W\x00\x00%2o%v" - pageChunkWrite = "C\x00\x00%2o%2c%v" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;communication settings - pageActivationDelay = 500 ; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/ -;e.g. put writeblocks off and add an interwrite delay - writeBlocks = on - interWriteDelay = 10 - blockReadTimeout = 3000; Milliseconds general timeout - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; max chunk size -;end communication settings - - ; name = bits, type, offset, bits - ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits - ; name = scalar, type, offset, units, scale, translate, lo, hi, digits - -; see PAGE_0_SIZE in C source code -; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:47 UTC 2020 - -pageSize = 20000 -page = 1 - engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" - engineSnifferRpmThreshold = scalar, S32, 4, "RPM", 1, 0, 0,30000, 0 - injector_flow = scalar, F32, 8, "cm3/min", 1, 0, 0, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [0:4], "One Cylinder", "1-3-4-2", "1-2-4-3", "1-3-2-4", "1-5-3-6-2-4", "1-8-4-3-6-5-7-2", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1_2_3_4_5_6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [0:5], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperStepPin = bits, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_solenoidPinMode = bits, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins2 = bits, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins3 = bits, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins4 = bits, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins5 = bits, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins6 = bits, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins7 = bits, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins8 = bits, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins9 = bits, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins10 = bits, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins11 = bits, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins12 = bits, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins2 = bits, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins3 = bits, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins4 = bits, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins5 = bits, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins6 = bits, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins7 = bits, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins8 = bits, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins9 = bits, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins10 = bits, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins11 = bits, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins12 = bits, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPinMode = bits, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_e = bits, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db4 = bits, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db5 = bits, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db6 = bits, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db7 = bits, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_rx_pin = bits, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_tx_pin = bits, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - malfunctionIndicatorPinMode = bits, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect2 = bits, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect3 = bits, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect4 = bits, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125CsPin = bits, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps1_2AdcChannel = bits, U08, 681, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_2AdcChannel = bits, U08, 682, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins2 = bits, U08, 701, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins3 = bits, U08, 702, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canRxPin = bits, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins2 = bits, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins3 = bits, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPinModes1 = bits, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins2 = bits, U08, 749, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins3 = bits, U08, 750, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins4 = bits, U08, 751, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs2 = bits, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs3 = bits, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs4 = bits, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs5 = bits, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs6 = bits, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs7 = bits, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs8 = bits, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1misoPin = bits, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1sckPin = bits, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2mosiPin = bits, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2misoPin = bits, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2sckPin = bits, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3mosiPin = bits, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3misoPin = bits, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3sckPin = bits, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickAPin = bits, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickBPin = bits, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCPin = bits, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickDPin = bits, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs2 = bits, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs3 = bits, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs4 = bits, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs5 = bits, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs6 = bits, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs7 = bits, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs8 = bits, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs9 = bits, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs10 = bits, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs11 = bits, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs12 = bits, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs13 = bits, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs14 = bits, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs15 = bits, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs16 = bits, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPin = bits, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialTxPin = bits, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialRxPin = bits, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - knockNoise = array, F32, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins2 = bits, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins3 = bits, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - dizzySparkOutputPinMode = bits, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "Analog 3O","Analog 3L","Analog 3M","Analog 3J","Analog 3I","INVALID","Analog 3H","Analog 3G","INVALID","INVALID","INVALID","Analog 3P","Analog 3Q","Analog 3N","Analog VBatt","Analog 3E","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","Injector 3Y","Injector 3W","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Coil 1H","INVALID","Coil 1F","INVALID","INVALID","INVALID","Injector 2M","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3U","INVALID","Injector 3X","INVALID","Injector 2N","Coil 1O","Coil 1P","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3V","Injector 3S","Injector 3T","Injector 2O","Injector 2P","INVALID","Coil 1L","INVALID","Coil 1I","INVALID","Coil 1M","INVALID","Coil 1G","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \nset cranking_rpm X" - crankingChargeAngle = "While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft\ndegrees, not in absolute time as in running mode.\nset cranking_charge_angle X" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override" - cylinderBore = "Cylinder diameter, in mm." - sensorSnifferRpmThreshold = "Disable sensor sniffer above this rpm" - fuelAlgorithm = "This setting controls which fuel quantity control algorithm is used.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" - crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" - ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." - globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - ignMathCalculateAtIndex = "At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - mapAveragingSchedulingAtIndex = "At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - tachPulseTriggerIndex = "Trigger cycle index at which we start tach pulse (performance consideration)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[CurveEditor] -; xAxis = leftValue, rightValue, step -; yAxis = bottomValue, topValue, step - - - curve = knockThresholdCurve, "Engine knock threshold RPM based" - columnLabel = "RPM", "Threshold" - xAxis = 0, 8000, 10 - yAxis = 0, 8, 10 - xBins = knockNoiseRpmBins, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - curve = mapAccelTaper, "Engine Load Acceleration Enrichment Taper" - columnLabel = "Distance", "Multiplier" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = mapAccelTaperBins - yBins = mapAccelTaperMult - - curve = dwellCorrection, "Dwell time RPM based" - columnLabel = "RPM", "Dwell" - xAxis = 0, 8000, 10 - yAxis = 0, 30, 10 - xBins = sparkDwellRpmBins, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - curve = injectorsDeadTime, "Injector Dead Time by VBatt" - columnLabel = "Voltage", "Dead Time" - xAxis = 8, 21, 10 - yAxis = -3, 3, 10 - xBins = injector_battLagCorrBins, VBatt - yBins = injector_battLagCorr - gauge = VBattGauge - - curve = mafDecodingCurve, "MAF sensor" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - yBins = baroCorrPressureBins, baroPressure - zBins = baroCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTableTbl, ignitionTableMap, "Ignition Table", 1 - ; constant, variable - xBins = ignitionRpmBins, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionIatCorrTableTbl, ignitionIatCorrTableMap, "Ignition Intake Air Temp correction", 1 - ; constant, variable - xBins = ignitionIatCorrRpmBins, RPMValue - yBins = ignitionIatCorrLoadBins, intake - zBins = ignitionIatCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = veTableTbl, veTableMap, "VE Table", 1 - ; constant, variable - xBins = veRpmBins, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - zBins = veTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - - table = injPhaseTableTbl, injPhaseTableMap, "Injection Phase", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - - table = afrTableTbl, afrTableMap, "Target AFR Table", 1 - ; constant, variable - xBins = afrRpmBins, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - egt1Gauge = egt1, "EGT#1", "C", 0, 2000 - egt2Gauge = egt2, "EGT#2", "C", 0, 2000 - egt3Gauge = egt3, "EGT#3", "C", 0, 2000 - egt4Gauge = egt4, "EGT#4", "C", 0, 2000 - egt5Gauge = egt5, "EGT#5", "C", 0, 2000 - egt6Gauge = egt6, "EGT#6", "C", 0, 2000 - egt7Gauge = egt7, "EGT#7", "C", 0, 2000 - egt8Gauge = egt8, "EGT#8", "C", 0, 2000 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 1, 1 - knockCountGauge = knockCount,"Knock count", "count", 0, 120, 10, 10, 100, 100, 1, 1 - knockLevelGauge = knockLevel,"Knock level", "volts", 0, 7, 10, 10, 100, 100, 1, 2 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "Mass air flow", "v", 0, 5, 0, 1, 3, 4, 1, 1 - VBattGauge = VBatt, "Battery voltage", "V", 8, 21, 9, 10, 17, 19, 1, 1 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - iatCorrectionGauge = iatCorrection, "fuel: IAT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - cltCorrectionGauge = cltCorrection, "fuel: CLT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - injectorDutyCycleGauge=injectorDutyCycle, "fuel: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - gauge5 = afr1Gauge - gauge6 = VBattGauge - gauge7 = dwellGauge - gauge8 = ignadvGauge - - - -; = expression, off-label, on-label, off-bg, off-fg, on-bg, on-fg - ; important status - indicator = { ind_hasFatalError }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; error codes - indicator = { ind_tps_error}, "tps", "tps error", white, black, red, black - indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black - indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - subMenu = fsioOutputsDialog, "FSIO outputs" - subMenu = fsioTable1Tbl, "FSIO Table #1" - subMenu = fsioTable2Tbl, "FSIO Table #2" - subMenu = fsioTable3Tbl, "FSIO Table #3" - subMenu = fsioTable4Tbl, "FSIO Table #4" - subMenu = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = cj125Function, "CJ125 settings (wbo decoder)" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - subMenu = egtInputs, "EGT" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = lcdScreen, "LCD" - subMenu = joystickPanel, "Joystick" - subMenu = spiFunction, "SPI" - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = allPins1, "Full pinout 1/3" - subMenu = allPins2, "Full pinout 2/3" - subMenu = allPins3_1_and_2 "Full pinout 3/3" - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = hipFunction, "HIP9011 settings (knock sensor) (alpha version)" - subMenu = std_separator - - subMenu = etbDialog, "Electronic throttle body (beta version)" - subMenu = etbTpsBiasCurve, "Electronic throttle body bias curve" - subMenu = pedalToTpsTbl, "Electronic Pedal Map" - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[ControllerCommands] -; commandName = command1, command2, commandn... -; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order. -; This does not include any resultant protocol envelope data, only the response data itself. - -; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands -; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition -; and may create error messages. -; It is expected that these commands would not typically alter any ram mapped to a Constant. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -cmd_test_spk1 = "w\x00\x12\x00\x01" -cmd_test_spk2 = "w\x00\x12\x00\x02" -cmd_test_spk3 = "w\x00\x12\x00\x03" -cmd_test_spk4 = "w\x00\x12\x00\x04" -cmd_test_spk5 = "w\x00\x12\x00\x05" -cmd_test_spk6 = "w\x00\x12\x00\x06" -cmd_test_spk7 = "w\x00\x12\x00\x07" -cmd_test_spk8 = "w\x00\x12\x00\x08" -cmd_test_spk9 = "w\x00\x12\x00\x09" -cmd_test_spk10 = "w\x00\x12\x00\x0a" -cmd_test_spk11 = "w\x00\x12\x00\x0b" -cmd_test_spk12 = "w\x00\x12\x00\x0c" -cmd_test_spk13 = "w\x00\x12\x00\x0d" -cmd_test_spk14 = "w\x00\x12\x00\x0e" -cmd_test_spk15 = "w\x00\x12\x00\x0f" -cmd_test_spk16 = "w\x00\x12\x00\x10" - - -cmd_test_inj1 = "w\x00\x13\x00\x01" -cmd_test_inj2 = "w\x00\x13\x00\x02" -cmd_test_inj3 = "w\x00\x13\x00\x03" -cmd_test_inj4 = "w\x00\x13\x00\x04" -cmd_test_inj5 = "w\x00\x13\x00\x05" -cmd_test_inj6 = "w\x00\x13\x00\x06" -cmd_test_inj7 = "w\x00\x13\x00\x07" -cmd_test_inj8 = "w\x00\x13\x00\x08" -cmd_test_inj9 = "w\x00\x13\x00\x09" -cmd_test_inj10 = "w\x00\x13\x00\x0a" -cmd_test_inj11 = "w\x00\x13\x00\x0b" -cmd_test_inj12 = "w\x00\x13\x00\x0c" -cmd_test_inj13 = "w\x00\x13\x00\x0d" -cmd_test_inj14 = "w\x00\x13\x00\x0e" -cmd_test_inj15 = "w\x00\x13\x00\x0f" -cmd_test_inj16 = "w\x00\x13\x00\x10" - -cmd_test_fuel_pump = "w\x00\x14\x00\x01" -cmd_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -cmd_test_radiator_fan = "w\x00\x15\x00\x01" -cmd_test_check_engine_light = "w\x00\x16\x00\x01" -cmd_test_idle_valve = "w\x00\x17\x00\x01" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - field = "Enabled", isIgnitionEnabled - field = "Mode", ignitionMode, {isIgnitionEnabled == 1} - field = "#Wasted spark with individual coils" - field = "Two wire wasted", twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2} - field = "Timing Mode", timingMode, {isIgnitionEnabled == 1} - field = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - field = "Extra cyl #1", timing_offset_cylinder1 - field = "Extra cyl #2", timing_offset_cylinder2, {cylindersCount > 1} - field = "Extra cyl #3", timing_offset_cylinder3, {cylindersCount > 2} - field = "Extra cyl #4", timing_offset_cylinder4, {cylindersCount > 3} - field = "Extra cyl #5", timing_offset_cylinder5, {cylindersCount > 4} - field = "Extra cyl #6", timing_offset_cylinder6, {cylindersCount > 5} - field = "Extra cyl #7", timing_offset_cylinder7, {cylindersCount > 6} - field = "Extra cyl #8", timing_offset_cylinder8, {cylindersCount > 7} - field = "Extra cyl #9", timing_offset_cylinder9, {cylindersCount > 8} - field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} - field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} - field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - dialog = joystickPanel, "Joystick" - field = "joustick center button", joystickCenterPin - field = "joustick button A", joystickAPin - field = "joustick button B", joystickBPin - field = "joustick button C", joystickCPin - field = "joustick button D", joystickDPin - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "ETB#1 Dir #1", etbIo1_directionPin1 - field = "ETB#1 Dir #2", etbIo1_directionPin2 - field = "ETB#1 Control #1", etbIo1_controlPin1 - field = "ETB#1 Disable", etbIo1_disablePin - field = "ETB#2 Dir #1", etbIo2_directionPin1 - field = "ETB#2 Dir #2", etbIo2_directionPin2 - field = "ETB#2 Control #1", etbIo2_controlPin1 - field = "ETB#2 Disable", etbIo2_disablePin - field = "SD CS Pin", sdCardCsPin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - field = "Injection Pin 1", injectionPins1 - field = "Injection Pin 2", injectionPins2 - field = "Injection Pin 3", injectionPins3 - field = "Injection Pin 4", injectionPins4 - field = "Injection Pin 5 ", injectionPins5 - field = "Injection Pin 6 ", injectionPins6 - field = "Injection Pin 7 ", injectionPins7 - field = "Injection Pin 8 ", injectionPins8 - field = "Injection Pin 9 ", injectionPins9 - field = "Injection Pin 10 ", injectionPins10 - field = "Injection Pin 11 ", injectionPins11 - field = "Injection Pin 12 ", injectionPins12 - field = "FSIO dig inp #1", fsioDigitalInputs1 - field = "FSIO dig inp #2", fsioDigitalInputs2 - field = "FSIO dig inp #3", fsioDigitalInputs3 - field = "FSIO dig inp #4", fsioDigitalInputs4 - field = "FSIO dig inp #5", fsioDigitalInputs5 - field = "FSIO dig inp #6", fsioDigitalInputs6 - field = "FSIO dig inp #7", fsioDigitalInputs7 - field = "FSIO dig inp #8", fsioDigitalInputs8 - field = "FSIO dig inp #9", fsioDigitalInputs9 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - field = "Ignition Pin 1", ignitionPins1 - field = "Ignition Pin 2", ignitionPins2 - field = "Ignition Pin 3", ignitionPins3 - field = "Ignition Pin 4", ignitionPins4 - field = "Ignition Pin 5", ignitionPins5 - field = "Ignition Pin 6", ignitionPins6 - field = "Ignition Pin 7", ignitionPins7 - field = "Ignition Pin 8", ignitionPins8 - field = "Ignition Pin 9", ignitionPins9 - field = "Ignition Pin 10", ignitionPins10 - field = "Ignition Pin 11", ignitionPins11 - field = "Ignition Pin 12", ignitionPins12 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - field = "GPS RX", gps_rx_pin - field = "GPS TX", gps_tx_pin - field = "CAN RX pin", canRxPin - field = "CAN TX pin", canTxPin - field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE 8888 spi", tle8888spiDevice - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - field = "low voltage", afr_v1 - field = "low value", afr_value1 - field = "high voltage", afr_v2 - field = "high value", afr_value2 - field = "Correction", egoValueShift - - dialog = egoSettings_IO, "EGO Sensor I/O" - field = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; Engine->EGT inputs - dialog = egtInputs, "EGT inputs" - field = "SPI", max31855spiDevice - field = "CS #1", max31855_cs1 - field = "CS #2", max31855_cs2 - field = "CS #3", max31855_cs3 - field = "CS #4", max31855_cs4 - field = "CS #5", max31855_cs5 - field = "CS #6", max31855_cs6 - field = "CS #7", max31855_cs7 - field = "CS #8", max31855_cs8 - -; Engine->idle Settings - dialog = idleSolenoid, "Solenoid" - field = "Idle Solenoid Pin Mode", idle_solenoidPinMode, !useStepperIdle - field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle - field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "Pin", mainRelayPin - field = "Pin mode", mainRelayPinMode - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - field = "Warning Period", warningPeriod - -; Engine->hip9011 Settings - dialog = hipFunction, "HIP9011 Settings (knock decoder)" - field = "Enabled", isHip9011Enabled - field = "Threshold", knockVThreshold, {isHip9011Enabled == 1} - field = "!ECU reboot needed to apply these settings" - field = "IntHold pin (hip9011 input)", hip9011IntHoldPin, {isHip9011Enabled == 1} - field = "IntHold pin (hip9011 input) mode", hip9011IntHoldPinMode, {isHip9011Enabled == 1} - field = "ChipSelect pin", hip9011CsPin, {isHip9011Enabled == 1} - field = "ChipSelect mode", hip9011CsPinMode, {isHip9011Enabled == 1} - field = "hip Output/stm input", hipOutputChannel, {isHip9011Enabled == 1} - field = "prescaler & SDO", hip9011PrescalerAndSDO, {isHip9011Enabled == 1} - field = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {isCJ125Enabled == 1} - - dialog = spiFunction, "SPI settings" - field = "!ECU reboot needed to apply these settings" - field = "SPI1 enable", is_enabled_spi_1 - field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} - field = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {activateAuxPid1 == 1} - field = "#PID control" - field = "offset", auxPid1_offset, {activateAuxPid1 == 1} - field = "P factor", auxPid1_pFactor, {activateAuxPid1 == 1} - field = "I factor", auxPid1_iFactor, {activateAuxPid1 == 1} - field = "D factor", auxPid1_dFactor, {activateAuxPid1 == 1} - field = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {activateAuxPid1 == 1} - field = "FSIO pin #2", auxPidPins2 - field = "FSIO pin #3", auxPidPins3 - field = "FSIO pin #4", auxPidPins4 - -; Engine->Battery & Alternator - dialog = batteryDialog, "Battery Settings", yAxis - field = "vBatt ADC input", vbattAdcChannel - field = "Battery Input Divider Coefficient", vbattDividerCoeff - dialog = alternator, "Alternator Settings", yAxis - field = "Enabled", isAlternatorControlEnabled - field = "simple on/off mode", onOffAlternatorLogic, {isAlternatorControlEnabled == 1} - field = "Target", targetVBatt, {isAlternatorControlEnabled == 1} - field = "Pin", alternatorControlPin, {isAlternatorControlEnabled == 1} - field = "Pin Mode", alternatorControlPinMode, {isAlternatorControlEnabled == 1} - field = "PWM frequency", alternatorPwmFrequency, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Off Above TPS", alternatorOffAboveTps, {isAlternatorControlEnabled == 1} - field = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {isAlternatorControlEnabled == 1} - field = "#PID control" - field = "offset", alternatorControl_offset, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "P factor", alternatorControl_pFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "I factor", alternatorControl_iFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "D factor", alternatorControl_dFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider ratio", analogInputDividerCoefficient - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - field = "RX pin", canRxPin - field = "TX pin", canTxPin - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - dialog = gpsReceiver, "GPS Receiver" - field = "gps RX", gps_rx_pin - field = "gps TX", gps_tx_pin - - dialog = lcdScreen, "LCD screen" - field = "display Mode", displayMode - field = "height", HD44780height - field = "width", HD44780width - field = "RS pin", HD44780_rs - field = "E pin", HD44780_e - field = "D4 pin", HD44780_db4 - field = "D5 pin", HD44780_db5 - field = "D6 pin", HD44780_db6 - field = "D7 pin", HD44780_db7 - - dialog = tle8888, "TLE8888", yAxis - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE8888 SPI", tle8888spiDevice - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = tsPort - panel = canBus - panel = auxSerial - panel = sdCard - panel = gpsReceiver - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - dialog = fsioFrequency, "Frequency" - field = "freq #1", fsioFrequency1 - field = "freq #2", fsioFrequency2 - field = "freq #3", fsioFrequency3 - field = "freq #4", fsioFrequency4 - field = "freq #5", fsioFrequency5 - field = "freq #6", fsioFrequency6 - field = "freq #7", fsioFrequency7 - field = "freq #8", fsioFrequency8 - field = "freq #9", fsioFrequency9 - field = "freq #10", fsioFrequency10 - field = "freq #11", fsioFrequency11 - field = "freq #12", fsioFrequency12 - field = "freq #13", fsioFrequency13 - field = "freq #14", fsioFrequency14 - field = "freq #15", fsioFrequency15 - field = "freq #16", fsioFrequency16 - field = "" - field = "" - - dialog = fsioSetting, "Setting" - field = "Set number is not associated with the output number." - field = "Set number, only the cell number with some numbers." - field = "set #1", fsio_setting1 - field = "set #2", fsio_setting2 - field = "set #3", fsio_setting3 - field = "set #4", fsio_setting4 - field = "set #5", fsio_setting5 - field = "set #6", fsio_setting6 - field = "set #7", fsio_setting7 - field = "set #8", fsio_setting8 - field = "set #9", fsio_setting9 - field = "set #10", fsio_setting10 - field = "set #11", fsio_setting11 - field = "set #12", fsio_setting12 - field = "set #13", fsio_setting13 - field = "set #14", fsio_setting14 - field = "set #15", fsio_setting15 - field = "set #16", fsio_setting16 - - dialog = fsioOutputsDialog, "FSIO outputs", border - panel = fsioIO, West - panel = fsioFrequency, Center - panel = fsioSetting, East - - dialog = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - dialog = testSpark, "Spark" - commandButton = "Spark #1", cmd_test_spk1 - commandButton = "Spark #2", cmd_test_spk2 - commandButton = "Spark #3", cmd_test_spk3 - commandButton = "Spark #4", cmd_test_spk4 - commandButton = "Spark #5", cmd_test_spk5 - commandButton = "Spark #6", cmd_test_spk6 - commandButton = "Spark #7", cmd_test_spk7 - commandButton = "Spark #8", cmd_test_spk8 - - dialog = testInjectors, "Fuel" - commandButton = "Injector #1", cmd_test_inj1 - commandButton = "Injector #2", cmd_test_inj2 - commandButton = "Injector #3", cmd_test_inj3 - commandButton = "Injector #4", cmd_test_inj4 - commandButton = "Injector #5", cmd_test_inj5 - commandButton = "Injector #6", cmd_test_inj6 - commandButton = "Injector #7", cmd_test_inj7 - commandButton = "Injector #8", cmd_test_inj8 - - dialog = testMisc, "Misc" -; commandButton = "Come To Pit", cmd_call_from_pit - commandButton = "Fuel Pump", cmd_test_fuel_pump - commandButton = "Radiator Fan", cmd_test_radiator_fan - commandButton = "Check Engine", cmd_test_check_engine_light - commandButton = "Idle Air Valve", cmd_test_idle_valve - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF - commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP - commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2 - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - commandButton = "Proteus M73 v12", cmd_set_engine_type_Proteus_M73 - - - commandButton = "ETB test bench", cmd_set_engine_type_etb_test - commandButton = "TLE8888 test bench", cmd_set_engine_type_8888_test - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - field = "" - field = "digipot spi", digitalPotentiometerSpiDevice - field = "digipot CS #0", digitalPotentiometerChipSelect1 - field = "digipot CS #1", digitalPotentiometerChipSelect2 - field = "digipot CS #2", digitalPotentiometerChipSelect3 - field = "digipot CS #3", digitalPotentiometerChipSelect4 - field = "" - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - field = "" - field = "Logic input channel 1", logicAnalyzerPins1 - field = "Logic input channel 2", logicAnalyzerPins2 - field = "Logic input channel 3", logicAnalyzerPins3 - field = "Logic input channel 4", logicAnalyzerPins4 - field = "" - field = "Engine chart size", engineChartSize - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - diff --git a/firmware/tunerstudio/generated/rusefi_microrusefi.ini b/firmware/tunerstudio/generated/rusefi_microrusefi.ini deleted file mode 100644 index 72cbb26b71..0000000000 --- a/firmware/tunerstudio/generated/rusefi_microrusefi.ini +++ /dev/null @@ -1,4425 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly. -enable2ndByteCanID = false - -;#unset tuneByMAF - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.mre_f7.73329661" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.mre_f7.73329661" ; signature is expected to be 7 or more characters. - -[Constants] -; new packet serial format with CRC - messageEnvelopeFormat = msEnvelope_1.0 - - endianness = little - nPages = 1 - - - pageIdentifier = "\x00\x00" - pageReadCommand = "R\x00\x00%2o%2c" - burnCommand = "B\x00\x00" - pageActivate = "P\x00\x00" - pageValueWrite = "W\x00\x00%2o%v" - pageChunkWrite = "C\x00\x00%2o%2c%v" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;communication settings - pageActivationDelay = 500 ; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/ -;e.g. put writeblocks off and add an interwrite delay - writeBlocks = on - interWriteDelay = 10 - blockReadTimeout = 3000; Milliseconds general timeout - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; max chunk size -;end communication settings - - ; name = bits, type, offset, bits - ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits - ; name = scalar, type, offset, units, scale, translate, lo, hi, digits - -; see PAGE_0_SIZE in C source code -; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:43 UTC 2020 - -pageSize = 20000 -page = 1 - engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" - engineSnifferRpmThreshold = scalar, S32, 4, "RPM", 1, 0, 0,30000, 0 - injector_flow = scalar, F32, 8, "cm3/min", 1, 0, 0, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [0:4], "One Cylinder", "1-3-4-2", "1-2-4-3", "1-3-2-4", "1-5-3-6-2-4", "1-8-4-3-6-5-7-2", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1_2_3_4_5_6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [0:5], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperStepPin = bits, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_solenoidPinMode = bits, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins2 = bits, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins3 = bits, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins4 = bits, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins5 = bits, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins6 = bits, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins7 = bits, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins8 = bits, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins9 = bits, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins10 = bits, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins11 = bits, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins12 = bits, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins2 = bits, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins3 = bits, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins4 = bits, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins5 = bits, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins6 = bits, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins7 = bits, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins8 = bits, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins9 = bits, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins10 = bits, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins11 = bits, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins12 = bits, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPinMode = bits, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_e = bits, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db4 = bits, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db5 = bits, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db6 = bits, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db7 = bits, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_rx_pin = bits, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_tx_pin = bits, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - malfunctionIndicatorPinMode = bits, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect2 = bits, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect3 = bits, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect4 = bits, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125CsPin = bits, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps1_2AdcChannel = bits, U08, 681, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_2AdcChannel = bits, U08, 682, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins2 = bits, U08, 701, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins3 = bits, U08, 702, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canRxPin = bits, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins2 = bits, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins3 = bits, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPinModes1 = bits, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins2 = bits, U08, 749, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins3 = bits, U08, 750, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins4 = bits, U08, 751, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs2 = bits, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs3 = bits, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs4 = bits, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs5 = bits, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs6 = bits, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs7 = bits, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs8 = bits, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1misoPin = bits, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1sckPin = bits, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2mosiPin = bits, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2misoPin = bits, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2sckPin = bits, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3mosiPin = bits, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3misoPin = bits, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3sckPin = bits, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickAPin = bits, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickBPin = bits, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCPin = bits, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickDPin = bits, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs2 = bits, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs3 = bits, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs4 = bits, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs5 = bits, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs6 = bits, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs7 = bits, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs8 = bits, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs9 = bits, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs10 = bits, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs11 = bits, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs12 = bits, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs13 = bits, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs14 = bits, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs15 = bits, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs16 = bits, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPin = bits, U08, 969, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","25 - Hall Cam","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","45 - VR/Hall Crank","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialTxPin = bits, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialRxPin = bits, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - knockNoise = array, F32, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins2 = bits, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins3 = bits, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - dizzySparkOutputPinMode = bits, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Brake Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Clutch Switch","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "18 - AN temp 1","23 - AN temp 2","24 - AN temp 3","22 - AN temp 4","28 - AN volt 10","INVALID","26 - AN volt 2","31 - AN volt 3","36 - AN volt 8","40 - AN volt 9","27 - AN volt 1","Battery Sense","19 - AN volt 4","20 - AN volt 5","32 - AN volt 6","30 - AN volt 7","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV10 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PA15","AUX AV8 reuse","AUX AV9 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PB8","AUX J2 PB9","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX AV6 reuse","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","AUX J2 PC12","INVALID","INVALID","INVALID","INVALID","12 - Ignition 4","11 - Ignition 3","10 - Ignition 2","9 - Ignition 1","INVALID","13 - GP Out 6","14 - GP Out 5","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","35 - GP Out 1","7 - Lowside 1","3 - Lowside 2","42 - Injector 4","41 - Injector 3","38 - Injector 2","37 - Injector 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","34 - GP Out 2","33 - GP Out 3","43 - GP Out 4","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \nset cranking_rpm X" - crankingChargeAngle = "While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft\ndegrees, not in absolute time as in running mode.\nset cranking_charge_angle X" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override" - cylinderBore = "Cylinder diameter, in mm." - sensorSnifferRpmThreshold = "Disable sensor sniffer above this rpm" - fuelAlgorithm = "This setting controls which fuel quantity control algorithm is used.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" - crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" - ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." - globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - ignMathCalculateAtIndex = "At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - mapAveragingSchedulingAtIndex = "At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - tachPulseTriggerIndex = "Trigger cycle index at which we start tach pulse (performance consideration)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[CurveEditor] -; xAxis = leftValue, rightValue, step -; yAxis = bottomValue, topValue, step - - - curve = knockThresholdCurve, "Engine knock threshold RPM based" - columnLabel = "RPM", "Threshold" - xAxis = 0, 8000, 10 - yAxis = 0, 8, 10 - xBins = knockNoiseRpmBins, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - curve = mapAccelTaper, "Engine Load Acceleration Enrichment Taper" - columnLabel = "Distance", "Multiplier" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = mapAccelTaperBins - yBins = mapAccelTaperMult - - curve = dwellCorrection, "Dwell time RPM based" - columnLabel = "RPM", "Dwell" - xAxis = 0, 8000, 10 - yAxis = 0, 30, 10 - xBins = sparkDwellRpmBins, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - curve = injectorsDeadTime, "Injector Dead Time by VBatt" - columnLabel = "Voltage", "Dead Time" - xAxis = 8, 21, 10 - yAxis = -3, 3, 10 - xBins = injector_battLagCorrBins, VBatt - yBins = injector_battLagCorr - gauge = VBattGauge - - curve = mafDecodingCurve, "MAF sensor" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - yBins = baroCorrPressureBins, baroPressure - zBins = baroCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTableTbl, ignitionTableMap, "Ignition Table", 1 - ; constant, variable - xBins = ignitionRpmBins, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionIatCorrTableTbl, ignitionIatCorrTableMap, "Ignition Intake Air Temp correction", 1 - ; constant, variable - xBins = ignitionIatCorrRpmBins, RPMValue - yBins = ignitionIatCorrLoadBins, intake - zBins = ignitionIatCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = veTableTbl, veTableMap, "VE Table", 1 - ; constant, variable - xBins = veRpmBins, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - zBins = veTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - - table = injPhaseTableTbl, injPhaseTableMap, "Injection Phase", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - - table = afrTableTbl, afrTableMap, "Target AFR Table", 1 - ; constant, variable - xBins = afrRpmBins, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - egt1Gauge = egt1, "EGT#1", "C", 0, 2000 - egt2Gauge = egt2, "EGT#2", "C", 0, 2000 - egt3Gauge = egt3, "EGT#3", "C", 0, 2000 - egt4Gauge = egt4, "EGT#4", "C", 0, 2000 - egt5Gauge = egt5, "EGT#5", "C", 0, 2000 - egt6Gauge = egt6, "EGT#6", "C", 0, 2000 - egt7Gauge = egt7, "EGT#7", "C", 0, 2000 - egt8Gauge = egt8, "EGT#8", "C", 0, 2000 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 1, 1 - knockCountGauge = knockCount,"Knock count", "count", 0, 120, 10, 10, 100, 100, 1, 1 - knockLevelGauge = knockLevel,"Knock level", "volts", 0, 7, 10, 10, 100, 100, 1, 2 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "Mass air flow", "v", 0, 5, 0, 1, 3, 4, 1, 1 - VBattGauge = VBatt, "Battery voltage", "V", 8, 21, 9, 10, 17, 19, 1, 1 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - iatCorrectionGauge = iatCorrection, "fuel: IAT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - cltCorrectionGauge = cltCorrection, "fuel: CLT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - injectorDutyCycleGauge=injectorDutyCycle, "fuel: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - gauge5 = afr1Gauge - gauge6 = VBattGauge - gauge7 = dwellGauge - gauge8 = ignadvGauge - - - -; = expression, off-label, on-label, off-bg, off-fg, on-bg, on-fg - ; important status - indicator = { ind_hasFatalError }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; error codes - indicator = { ind_tps_error}, "tps", "tps error", white, black, red, black - indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black - indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - subMenu = fsioOutputsDialog, "FSIO outputs" - subMenu = fsioTable1Tbl, "FSIO Table #1" - subMenu = fsioTable2Tbl, "FSIO Table #2" - subMenu = fsioTable3Tbl, "FSIO Table #3" - subMenu = fsioTable4Tbl, "FSIO Table #4" - subMenu = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = spiFunction, "SPI" - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = allPins1, "Full pinout 1/3" - subMenu = allPins2, "Full pinout 2/3" - subMenu = allPins3_1_and_2 "Full pinout 3/3" - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = std_separator - - subMenu = etbDialog, "Electronic throttle body (beta version)" - subMenu = etbTpsBiasCurve, "Electronic throttle body bias curve" - subMenu = pedalToTpsTbl, "Electronic Pedal Map" - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[ControllerCommands] -; commandName = command1, command2, commandn... -; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order. -; This does not include any resultant protocol envelope data, only the response data itself. - -; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands -; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition -; and may create error messages. -; It is expected that these commands would not typically alter any ram mapped to a Constant. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -cmd_test_spk1 = "w\x00\x12\x00\x01" -cmd_test_spk2 = "w\x00\x12\x00\x02" -cmd_test_spk3 = "w\x00\x12\x00\x03" -cmd_test_spk4 = "w\x00\x12\x00\x04" -cmd_test_spk5 = "w\x00\x12\x00\x05" -cmd_test_spk6 = "w\x00\x12\x00\x06" -cmd_test_spk7 = "w\x00\x12\x00\x07" -cmd_test_spk8 = "w\x00\x12\x00\x08" -cmd_test_spk9 = "w\x00\x12\x00\x09" -cmd_test_spk10 = "w\x00\x12\x00\x0a" -cmd_test_spk11 = "w\x00\x12\x00\x0b" -cmd_test_spk12 = "w\x00\x12\x00\x0c" -cmd_test_spk13 = "w\x00\x12\x00\x0d" -cmd_test_spk14 = "w\x00\x12\x00\x0e" -cmd_test_spk15 = "w\x00\x12\x00\x0f" -cmd_test_spk16 = "w\x00\x12\x00\x10" - - -cmd_test_inj1 = "w\x00\x13\x00\x01" -cmd_test_inj2 = "w\x00\x13\x00\x02" -cmd_test_inj3 = "w\x00\x13\x00\x03" -cmd_test_inj4 = "w\x00\x13\x00\x04" -cmd_test_inj5 = "w\x00\x13\x00\x05" -cmd_test_inj6 = "w\x00\x13\x00\x06" -cmd_test_inj7 = "w\x00\x13\x00\x07" -cmd_test_inj8 = "w\x00\x13\x00\x08" -cmd_test_inj9 = "w\x00\x13\x00\x09" -cmd_test_inj10 = "w\x00\x13\x00\x0a" -cmd_test_inj11 = "w\x00\x13\x00\x0b" -cmd_test_inj12 = "w\x00\x13\x00\x0c" -cmd_test_inj13 = "w\x00\x13\x00\x0d" -cmd_test_inj14 = "w\x00\x13\x00\x0e" -cmd_test_inj15 = "w\x00\x13\x00\x0f" -cmd_test_inj16 = "w\x00\x13\x00\x10" - -cmd_test_fuel_pump = "w\x00\x14\x00\x01" -cmd_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -cmd_test_radiator_fan = "w\x00\x15\x00\x01" -cmd_test_check_engine_light = "w\x00\x16\x00\x01" -cmd_test_idle_valve = "w\x00\x17\x00\x01" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - field = "Enabled", isIgnitionEnabled - field = "Mode", ignitionMode, {isIgnitionEnabled == 1} - field = "#Wasted spark with individual coils" - field = "Two wire wasted", twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2} - field = "Timing Mode", timingMode, {isIgnitionEnabled == 1} - field = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - field = "Extra cyl #1", timing_offset_cylinder1 - field = "Extra cyl #2", timing_offset_cylinder2, {cylindersCount > 1} - field = "Extra cyl #3", timing_offset_cylinder3, {cylindersCount > 2} - field = "Extra cyl #4", timing_offset_cylinder4, {cylindersCount > 3} - field = "Extra cyl #5", timing_offset_cylinder5, {cylindersCount > 4} - field = "Extra cyl #6", timing_offset_cylinder6, {cylindersCount > 5} - field = "Extra cyl #7", timing_offset_cylinder7, {cylindersCount > 6} - field = "Extra cyl #8", timing_offset_cylinder8, {cylindersCount > 7} - field = "Extra cyl #9", timing_offset_cylinder9, {cylindersCount > 8} - field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} - field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} - field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - dialog = joystickPanel, "Joystick" - field = "joustick center button", joystickCenterPin - field = "joustick button A", joystickAPin - field = "joustick button B", joystickBPin - field = "joustick button C", joystickCPin - field = "joustick button D", joystickDPin - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "SD CS Pin", sdCardCsPin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - field = "Injection Pin 1", injectionPins1 - field = "Injection Pin 2", injectionPins2 - field = "Injection Pin 3", injectionPins3 - field = "Injection Pin 4", injectionPins4 - field = "Injection Pin 5 ", injectionPins5 - field = "Injection Pin 6 ", injectionPins6 - field = "Injection Pin 7 ", injectionPins7 - field = "Injection Pin 8 ", injectionPins8 - field = "Injection Pin 9 ", injectionPins9 - field = "Injection Pin 10 ", injectionPins10 - field = "Injection Pin 11 ", injectionPins11 - field = "Injection Pin 12 ", injectionPins12 - field = "FSIO dig inp #1", fsioDigitalInputs1 - field = "FSIO dig inp #2", fsioDigitalInputs2 - field = "FSIO dig inp #3", fsioDigitalInputs3 - field = "FSIO dig inp #4", fsioDigitalInputs4 - field = "FSIO dig inp #5", fsioDigitalInputs5 - field = "FSIO dig inp #6", fsioDigitalInputs6 - field = "FSIO dig inp #7", fsioDigitalInputs7 - field = "FSIO dig inp #8", fsioDigitalInputs8 - field = "FSIO dig inp #9", fsioDigitalInputs9 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - field = "Ignition Pin 1", ignitionPins1 - field = "Ignition Pin 2", ignitionPins2 - field = "Ignition Pin 3", ignitionPins3 - field = "Ignition Pin 4", ignitionPins4 - field = "Ignition Pin 5", ignitionPins5 - field = "Ignition Pin 6", ignitionPins6 - field = "Ignition Pin 7", ignitionPins7 - field = "Ignition Pin 8", ignitionPins8 - field = "Ignition Pin 9", ignitionPins9 - field = "Ignition Pin 10", ignitionPins10 - field = "Ignition Pin 11", ignitionPins11 - field = "Ignition Pin 12", ignitionPins12 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE 8888 spi", tle8888spiDevice - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - field = "low voltage", afr_v1 - field = "low value", afr_value1 - field = "high voltage", afr_v2 - field = "high value", afr_value2 - field = "Correction", egoValueShift - - dialog = egoSettings_IO, "EGO Sensor I/O" - field = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; Engine->EGT inputs - dialog = egtInputs, "EGT inputs" - field = "SPI", max31855spiDevice - field = "CS #1", max31855_cs1 - field = "CS #2", max31855_cs2 - field = "CS #3", max31855_cs3 - field = "CS #4", max31855_cs4 - field = "CS #5", max31855_cs5 - field = "CS #6", max31855_cs6 - field = "CS #7", max31855_cs7 - field = "CS #8", max31855_cs8 - -; Engine->idle Settings - dialog = idleSolenoid, "Solenoid" - field = "Idle Solenoid Pin Mode", idle_solenoidPinMode, !useStepperIdle - field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle - field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "microRusEFI main relay control is hard wired on pin #29" - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - field = "Warning Period", warningPeriod - -; Engine->hip9011 Settings - dialog = hipFunction, "HIP9011 Settings (knock decoder)" - field = "Enabled", isHip9011Enabled - field = "Threshold", knockVThreshold, {isHip9011Enabled == 1} - field = "!ECU reboot needed to apply these settings" - field = "IntHold pin (hip9011 input)", hip9011IntHoldPin, {isHip9011Enabled == 1} - field = "IntHold pin (hip9011 input) mode", hip9011IntHoldPinMode, {isHip9011Enabled == 1} - field = "ChipSelect pin", hip9011CsPin, {isHip9011Enabled == 1} - field = "ChipSelect mode", hip9011CsPinMode, {isHip9011Enabled == 1} - field = "hip Output/stm input", hipOutputChannel, {isHip9011Enabled == 1} - field = "prescaler & SDO", hip9011PrescalerAndSDO, {isHip9011Enabled == 1} - field = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {isCJ125Enabled == 1} - - dialog = spiFunction, "SPI settings" - field = "!ECU reboot needed to apply these settings" - field = "SPI1 enable", is_enabled_spi_1 - field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} - field = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {activateAuxPid1 == 1} - field = "#PID control" - field = "offset", auxPid1_offset, {activateAuxPid1 == 1} - field = "P factor", auxPid1_pFactor, {activateAuxPid1 == 1} - field = "I factor", auxPid1_iFactor, {activateAuxPid1 == 1} - field = "D factor", auxPid1_dFactor, {activateAuxPid1 == 1} - field = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {activateAuxPid1 == 1} - field = "FSIO pin #2", auxPidPins2 - field = "FSIO pin #3", auxPidPins3 - field = "FSIO pin #4", auxPidPins4 - -; Engine->Battery & Alternator - dialog = batteryDialog, "Battery Settings", yAxis - field = "vBatt ADC input", vbattAdcChannel - field = "Battery Input Divider Coefficient", vbattDividerCoeff - dialog = alternator, "Alternator Settings", yAxis - field = "Enabled", isAlternatorControlEnabled - field = "simple on/off mode", onOffAlternatorLogic, {isAlternatorControlEnabled == 1} - field = "Target", targetVBatt, {isAlternatorControlEnabled == 1} - field = "Pin", alternatorControlPin, {isAlternatorControlEnabled == 1} - field = "Pin Mode", alternatorControlPinMode, {isAlternatorControlEnabled == 1} - field = "PWM frequency", alternatorPwmFrequency, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Off Above TPS", alternatorOffAboveTps, {isAlternatorControlEnabled == 1} - field = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {isAlternatorControlEnabled == 1} - field = "#PID control" - field = "offset", alternatorControl_offset, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "P factor", alternatorControl_pFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "I factor", alternatorControl_iFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "D factor", alternatorControl_dFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - dialog = gpsReceiver, "GPS Receiver" - field = "gps RX", gps_rx_pin - field = "gps TX", gps_tx_pin - - dialog = lcdScreen, "LCD screen" - field = "display Mode", displayMode - field = "height", HD44780height - field = "width", HD44780width - field = "RS pin", HD44780_rs - field = "E pin", HD44780_e - field = "D4 pin", HD44780_db4 - field = "D5 pin", HD44780_db5 - field = "D6 pin", HD44780_db6 - field = "D7 pin", HD44780_db7 - - dialog = tle8888, "TLE8888", yAxis - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE8888 SPI", tle8888spiDevice - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = canBus - panel = auxSerial - panel = sdCard - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - dialog = fsioFrequency, "Frequency" - field = "freq #1", fsioFrequency1 - field = "freq #2", fsioFrequency2 - field = "freq #3", fsioFrequency3 - field = "freq #4", fsioFrequency4 - field = "freq #5", fsioFrequency5 - field = "freq #6", fsioFrequency6 - field = "freq #7", fsioFrequency7 - field = "freq #8", fsioFrequency8 - field = "freq #9", fsioFrequency9 - field = "freq #10", fsioFrequency10 - field = "freq #11", fsioFrequency11 - field = "freq #12", fsioFrequency12 - field = "freq #13", fsioFrequency13 - field = "freq #14", fsioFrequency14 - field = "freq #15", fsioFrequency15 - field = "freq #16", fsioFrequency16 - field = "" - field = "" - - dialog = fsioSetting, "Setting" - field = "Set number is not associated with the output number." - field = "Set number, only the cell number with some numbers." - field = "set #1", fsio_setting1 - field = "set #2", fsio_setting2 - field = "set #3", fsio_setting3 - field = "set #4", fsio_setting4 - field = "set #5", fsio_setting5 - field = "set #6", fsio_setting6 - field = "set #7", fsio_setting7 - field = "set #8", fsio_setting8 - field = "set #9", fsio_setting9 - field = "set #10", fsio_setting10 - field = "set #11", fsio_setting11 - field = "set #12", fsio_setting12 - field = "set #13", fsio_setting13 - field = "set #14", fsio_setting14 - field = "set #15", fsio_setting15 - field = "set #16", fsio_setting16 - - dialog = fsioOutputsDialog, "FSIO outputs", border - panel = fsioIO, West - panel = fsioFrequency, Center - panel = fsioSetting, East - - dialog = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - dialog = testSpark, "Spark" - commandButton = "Spark #1", cmd_test_spk1 - commandButton = "Spark #2", cmd_test_spk2 - commandButton = "Spark #3", cmd_test_spk3 - commandButton = "Spark #4", cmd_test_spk4 - commandButton = "Spark #5", cmd_test_spk5 - commandButton = "Spark #6", cmd_test_spk6 - commandButton = "Spark #7", cmd_test_spk7 - commandButton = "Spark #8", cmd_test_spk8 - - dialog = testInjectors, "Fuel" - commandButton = "Injector #1", cmd_test_inj1 - commandButton = "Injector #2", cmd_test_inj2 - commandButton = "Injector #3", cmd_test_inj3 - commandButton = "Injector #4", cmd_test_inj4 - commandButton = "Injector #5", cmd_test_inj5 - commandButton = "Injector #6", cmd_test_inj6 - commandButton = "Injector #7", cmd_test_inj7 - commandButton = "Injector #8", cmd_test_inj8 - - dialog = testMisc, "Misc" -; commandButton = "Come To Pit", cmd_call_from_pit - commandButton = "Fuel Pump", cmd_test_fuel_pump - commandButton = "Radiator Fan", cmd_test_radiator_fan - commandButton = "Check Engine", cmd_test_check_engine_light - commandButton = "Idle Air Valve", cmd_test_idle_valve - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - - - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - field = "" - field = "digipot spi", digitalPotentiometerSpiDevice - field = "digipot CS #0", digitalPotentiometerChipSelect1 - field = "digipot CS #1", digitalPotentiometerChipSelect2 - field = "digipot CS #2", digitalPotentiometerChipSelect3 - field = "digipot CS #3", digitalPotentiometerChipSelect4 - field = "" - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - field = "" - field = "Logic input channel 1", logicAnalyzerPins1 - field = "Logic input channel 2", logicAnalyzerPins2 - field = "Logic input channel 3", logicAnalyzerPins3 - field = "Logic input channel 4", logicAnalyzerPins4 - field = "" - field = "Engine chart size", engineChartSize - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - diff --git a/firmware/tunerstudio/generated/rusefi_prometheus.ini b/firmware/tunerstudio/generated/rusefi_prometheus.ini deleted file mode 100644 index 7022c6e2ba..0000000000 --- a/firmware/tunerstudio/generated/rusefi_prometheus.ini +++ /dev/null @@ -1,4450 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly. -enable2ndByteCanID = false - -;#unset tuneByMAF - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.prometheus_469.3099387383" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.prometheus_469.3099387383" ; signature is expected to be 7 or more characters. - -[Constants] -; new packet serial format with CRC - messageEnvelopeFormat = msEnvelope_1.0 - - endianness = little - nPages = 1 - - - pageIdentifier = "\x00\x00" - pageReadCommand = "R\x00\x00%2o%2c" - burnCommand = "B\x00\x00" - pageActivate = "P\x00\x00" - pageValueWrite = "W\x00\x00%2o%v" - pageChunkWrite = "C\x00\x00%2o%2c%v" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;communication settings - pageActivationDelay = 500 ; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/ -;e.g. put writeblocks off and add an interwrite delay - writeBlocks = on - interWriteDelay = 10 - blockReadTimeout = 3000; Milliseconds general timeout - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; max chunk size -;end communication settings - - ; name = bits, type, offset, bits - ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits - ; name = scalar, type, offset, units, scale, translate, lo, hi, digits - -; see PAGE_0_SIZE in C source code -; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:48 UTC 2020 - -pageSize = 20000 -page = 1 - engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" - engineSnifferRpmThreshold = scalar, S32, 4, "RPM", 1, 0, 0,30000, 0 - injector_flow = scalar, F32, 8, "cm3/min", 1, 0, 0, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [0:4], "One Cylinder", "1-3-4-2", "1-2-4-3", "1-3-2-4", "1-5-3-6-2-4", "1-8-4-3-6-5-7-2", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1_2_3_4_5_6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [0:5], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperStepPin = bits, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_solenoidPinMode = bits, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins2 = bits, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins3 = bits, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins4 = bits, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins5 = bits, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins6 = bits, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins7 = bits, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins8 = bits, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins9 = bits, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins10 = bits, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins11 = bits, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins12 = bits, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins2 = bits, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins3 = bits, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins4 = bits, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins5 = bits, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins6 = bits, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins7 = bits, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins8 = bits, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins9 = bits, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins10 = bits, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins11 = bits, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins12 = bits, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPinMode = bits, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_e = bits, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db4 = bits, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db5 = bits, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db6 = bits, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db7 = bits, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_rx_pin = bits, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_tx_pin = bits, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - malfunctionIndicatorPinMode = bits, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect2 = bits, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect3 = bits, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect4 = bits, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125CsPin = bits, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps1_2AdcChannel = bits, U08, 681, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_2AdcChannel = bits, U08, 682, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins2 = bits, U08, 701, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins3 = bits, U08, 702, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canRxPin = bits, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins2 = bits, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins3 = bits, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPinModes1 = bits, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins2 = bits, U08, 749, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins3 = bits, U08, 750, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins4 = bits, U08, 751, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs2 = bits, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs3 = bits, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs4 = bits, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs5 = bits, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs6 = bits, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs7 = bits, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs8 = bits, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1misoPin = bits, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1sckPin = bits, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2mosiPin = bits, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2misoPin = bits, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2sckPin = bits, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3mosiPin = bits, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3misoPin = bits, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3sckPin = bits, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickAPin = bits, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickBPin = bits, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCPin = bits, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickDPin = bits, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs2 = bits, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs3 = bits, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs4 = bits, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs5 = bits, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs6 = bits, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs7 = bits, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs8 = bits, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs9 = bits, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs10 = bits, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs11 = bits, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs12 = bits, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs13 = bits, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs14 = bits, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs15 = bits, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs16 = bits, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPin = bits, U08, 969, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE", "INVALID", "INVALID", "PA1", "PA2", "PA3", "INVALID", "PA5", "PA6", "PA7", "PA8", "PA9", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PA15", "INVALID", "INVALID", "INVALID", "PB3", "PB4", "PB5", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PC6", "PC7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PE5", "PE6", "INVALID", "INVALID", "PE9", "INVALID", "PE11", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialTxPin = bits, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialRxPin = bits, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - knockNoise = array, F32, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins2 = bits, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins3 = bits, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - dizzySparkOutputPinMode = bits, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "Analog 3O","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Injector 3Z","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \nset cranking_rpm X" - crankingChargeAngle = "While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft\ndegrees, not in absolute time as in running mode.\nset cranking_charge_angle X" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override" - cylinderBore = "Cylinder diameter, in mm." - sensorSnifferRpmThreshold = "Disable sensor sniffer above this rpm" - fuelAlgorithm = "This setting controls which fuel quantity control algorithm is used.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" - crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" - ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." - globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - ignMathCalculateAtIndex = "At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - mapAveragingSchedulingAtIndex = "At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - tachPulseTriggerIndex = "Trigger cycle index at which we start tach pulse (performance consideration)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[CurveEditor] -; xAxis = leftValue, rightValue, step -; yAxis = bottomValue, topValue, step - - - curve = knockThresholdCurve, "Engine knock threshold RPM based" - columnLabel = "RPM", "Threshold" - xAxis = 0, 8000, 10 - yAxis = 0, 8, 10 - xBins = knockNoiseRpmBins, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - curve = mapAccelTaper, "Engine Load Acceleration Enrichment Taper" - columnLabel = "Distance", "Multiplier" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = mapAccelTaperBins - yBins = mapAccelTaperMult - - curve = dwellCorrection, "Dwell time RPM based" - columnLabel = "RPM", "Dwell" - xAxis = 0, 8000, 10 - yAxis = 0, 30, 10 - xBins = sparkDwellRpmBins, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - curve = injectorsDeadTime, "Injector Dead Time by VBatt" - columnLabel = "Voltage", "Dead Time" - xAxis = 8, 21, 10 - yAxis = -3, 3, 10 - xBins = injector_battLagCorrBins, VBatt - yBins = injector_battLagCorr - gauge = VBattGauge - - curve = mafDecodingCurve, "MAF sensor" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - yBins = baroCorrPressureBins, baroPressure - zBins = baroCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTableTbl, ignitionTableMap, "Ignition Table", 1 - ; constant, variable - xBins = ignitionRpmBins, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionIatCorrTableTbl, ignitionIatCorrTableMap, "Ignition Intake Air Temp correction", 1 - ; constant, variable - xBins = ignitionIatCorrRpmBins, RPMValue - yBins = ignitionIatCorrLoadBins, intake - zBins = ignitionIatCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = veTableTbl, veTableMap, "VE Table", 1 - ; constant, variable - xBins = veRpmBins, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - zBins = veTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - - table = injPhaseTableTbl, injPhaseTableMap, "Injection Phase", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - - table = afrTableTbl, afrTableMap, "Target AFR Table", 1 - ; constant, variable - xBins = afrRpmBins, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - egt1Gauge = egt1, "EGT#1", "C", 0, 2000 - egt2Gauge = egt2, "EGT#2", "C", 0, 2000 - egt3Gauge = egt3, "EGT#3", "C", 0, 2000 - egt4Gauge = egt4, "EGT#4", "C", 0, 2000 - egt5Gauge = egt5, "EGT#5", "C", 0, 2000 - egt6Gauge = egt6, "EGT#6", "C", 0, 2000 - egt7Gauge = egt7, "EGT#7", "C", 0, 2000 - egt8Gauge = egt8, "EGT#8", "C", 0, 2000 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 1, 1 - knockCountGauge = knockCount,"Knock count", "count", 0, 120, 10, 10, 100, 100, 1, 1 - knockLevelGauge = knockLevel,"Knock level", "volts", 0, 7, 10, 10, 100, 100, 1, 2 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "Mass air flow", "v", 0, 5, 0, 1, 3, 4, 1, 1 - VBattGauge = VBatt, "Battery voltage", "V", 8, 21, 9, 10, 17, 19, 1, 1 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - iatCorrectionGauge = iatCorrection, "fuel: IAT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - cltCorrectionGauge = cltCorrection, "fuel: CLT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - injectorDutyCycleGauge=injectorDutyCycle, "fuel: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - gauge5 = afr1Gauge - gauge6 = VBattGauge - gauge7 = dwellGauge - gauge8 = ignadvGauge - - - -; = expression, off-label, on-label, off-bg, off-fg, on-bg, on-fg - ; important status - indicator = { ind_hasFatalError }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; error codes - indicator = { ind_tps_error}, "tps", "tps error", white, black, red, black - indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black - indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - subMenu = fsioOutputsDialog, "FSIO outputs" - subMenu = fsioTable1Tbl, "FSIO Table #1" - subMenu = fsioTable2Tbl, "FSIO Table #2" - subMenu = fsioTable3Tbl, "FSIO Table #3" - subMenu = fsioTable4Tbl, "FSIO Table #4" - subMenu = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = cj125Function, "CJ125 settings (wbo decoder)" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - subMenu = egtInputs, "EGT" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = lcdScreen, "LCD" - subMenu = joystickPanel, "Joystick" - subMenu = spiFunction, "SPI" - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = allPins1, "Full pinout 1/3" - subMenu = allPins2, "Full pinout 2/3" - subMenu = allPins3_1_and_2 "Full pinout 3/3" - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = std_separator - - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[ControllerCommands] -; commandName = command1, command2, commandn... -; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order. -; This does not include any resultant protocol envelope data, only the response data itself. - -; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands -; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition -; and may create error messages. -; It is expected that these commands would not typically alter any ram mapped to a Constant. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -cmd_test_spk1 = "w\x00\x12\x00\x01" -cmd_test_spk2 = "w\x00\x12\x00\x02" -cmd_test_spk3 = "w\x00\x12\x00\x03" -cmd_test_spk4 = "w\x00\x12\x00\x04" -cmd_test_spk5 = "w\x00\x12\x00\x05" -cmd_test_spk6 = "w\x00\x12\x00\x06" -cmd_test_spk7 = "w\x00\x12\x00\x07" -cmd_test_spk8 = "w\x00\x12\x00\x08" -cmd_test_spk9 = "w\x00\x12\x00\x09" -cmd_test_spk10 = "w\x00\x12\x00\x0a" -cmd_test_spk11 = "w\x00\x12\x00\x0b" -cmd_test_spk12 = "w\x00\x12\x00\x0c" -cmd_test_spk13 = "w\x00\x12\x00\x0d" -cmd_test_spk14 = "w\x00\x12\x00\x0e" -cmd_test_spk15 = "w\x00\x12\x00\x0f" -cmd_test_spk16 = "w\x00\x12\x00\x10" - - -cmd_test_inj1 = "w\x00\x13\x00\x01" -cmd_test_inj2 = "w\x00\x13\x00\x02" -cmd_test_inj3 = "w\x00\x13\x00\x03" -cmd_test_inj4 = "w\x00\x13\x00\x04" -cmd_test_inj5 = "w\x00\x13\x00\x05" -cmd_test_inj6 = "w\x00\x13\x00\x06" -cmd_test_inj7 = "w\x00\x13\x00\x07" -cmd_test_inj8 = "w\x00\x13\x00\x08" -cmd_test_inj9 = "w\x00\x13\x00\x09" -cmd_test_inj10 = "w\x00\x13\x00\x0a" -cmd_test_inj11 = "w\x00\x13\x00\x0b" -cmd_test_inj12 = "w\x00\x13\x00\x0c" -cmd_test_inj13 = "w\x00\x13\x00\x0d" -cmd_test_inj14 = "w\x00\x13\x00\x0e" -cmd_test_inj15 = "w\x00\x13\x00\x0f" -cmd_test_inj16 = "w\x00\x13\x00\x10" - -cmd_test_fuel_pump = "w\x00\x14\x00\x01" -cmd_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -cmd_test_radiator_fan = "w\x00\x15\x00\x01" -cmd_test_check_engine_light = "w\x00\x16\x00\x01" -cmd_test_idle_valve = "w\x00\x17\x00\x01" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - field = "Enabled", isIgnitionEnabled - field = "Mode", ignitionMode, {isIgnitionEnabled == 1} - field = "#Wasted spark with individual coils" - field = "Two wire wasted", twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2} - field = "Timing Mode", timingMode, {isIgnitionEnabled == 1} - field = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - field = "Extra cyl #1", timing_offset_cylinder1 - field = "Extra cyl #2", timing_offset_cylinder2, {cylindersCount > 1} - field = "Extra cyl #3", timing_offset_cylinder3, {cylindersCount > 2} - field = "Extra cyl #4", timing_offset_cylinder4, {cylindersCount > 3} - field = "Extra cyl #5", timing_offset_cylinder5, {cylindersCount > 4} - field = "Extra cyl #6", timing_offset_cylinder6, {cylindersCount > 5} - field = "Extra cyl #7", timing_offset_cylinder7, {cylindersCount > 6} - field = "Extra cyl #8", timing_offset_cylinder8, {cylindersCount > 7} - field = "Extra cyl #9", timing_offset_cylinder9, {cylindersCount > 8} - field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} - field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} - field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - dialog = joystickPanel, "Joystick" - field = "joustick center button", joystickCenterPin - field = "joustick button A", joystickAPin - field = "joustick button B", joystickBPin - field = "joustick button C", joystickCPin - field = "joustick button D", joystickDPin - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "ETB#1 Dir #1", etbIo1_directionPin1 - field = "ETB#1 Dir #2", etbIo1_directionPin2 - field = "ETB#1 Control #1", etbIo1_controlPin1 - field = "ETB#1 Disable", etbIo1_disablePin - field = "ETB#2 Dir #1", etbIo2_directionPin1 - field = "ETB#2 Dir #2", etbIo2_directionPin2 - field = "ETB#2 Control #1", etbIo2_controlPin1 - field = "ETB#2 Disable", etbIo2_disablePin - field = "SD CS Pin", sdCardCsPin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - field = "Injection Pin 1", injectionPins1 - field = "Injection Pin 2", injectionPins2 - field = "Injection Pin 3", injectionPins3 - field = "Injection Pin 4", injectionPins4 - field = "Injection Pin 5 ", injectionPins5 - field = "Injection Pin 6 ", injectionPins6 - field = "Injection Pin 7 ", injectionPins7 - field = "Injection Pin 8 ", injectionPins8 - field = "Injection Pin 9 ", injectionPins9 - field = "Injection Pin 10 ", injectionPins10 - field = "Injection Pin 11 ", injectionPins11 - field = "Injection Pin 12 ", injectionPins12 - field = "FSIO dig inp #1", fsioDigitalInputs1 - field = "FSIO dig inp #2", fsioDigitalInputs2 - field = "FSIO dig inp #3", fsioDigitalInputs3 - field = "FSIO dig inp #4", fsioDigitalInputs4 - field = "FSIO dig inp #5", fsioDigitalInputs5 - field = "FSIO dig inp #6", fsioDigitalInputs6 - field = "FSIO dig inp #7", fsioDigitalInputs7 - field = "FSIO dig inp #8", fsioDigitalInputs8 - field = "FSIO dig inp #9", fsioDigitalInputs9 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - field = "Ignition Pin 1", ignitionPins1 - field = "Ignition Pin 2", ignitionPins2 - field = "Ignition Pin 3", ignitionPins3 - field = "Ignition Pin 4", ignitionPins4 - field = "Ignition Pin 5", ignitionPins5 - field = "Ignition Pin 6", ignitionPins6 - field = "Ignition Pin 7", ignitionPins7 - field = "Ignition Pin 8", ignitionPins8 - field = "Ignition Pin 9", ignitionPins9 - field = "Ignition Pin 10", ignitionPins10 - field = "Ignition Pin 11", ignitionPins11 - field = "Ignition Pin 12", ignitionPins12 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - field = "GPS RX", gps_rx_pin - field = "GPS TX", gps_tx_pin - field = "CAN RX pin", canRxPin - field = "CAN TX pin", canTxPin - field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE 8888 spi", tle8888spiDevice - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - field = "low voltage", afr_v1 - field = "low value", afr_value1 - field = "high voltage", afr_v2 - field = "high value", afr_value2 - field = "Correction", egoValueShift - - dialog = egoSettings_IO, "EGO Sensor I/O" - field = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; Engine->EGT inputs - dialog = egtInputs, "EGT inputs" - field = "SPI", max31855spiDevice - field = "CS #1", max31855_cs1 - field = "CS #2", max31855_cs2 - field = "CS #3", max31855_cs3 - field = "CS #4", max31855_cs4 - field = "CS #5", max31855_cs5 - field = "CS #6", max31855_cs6 - field = "CS #7", max31855_cs7 - field = "CS #8", max31855_cs8 - -; Engine->idle Settings - dialog = idleSolenoid, "Solenoid" - field = "Idle Solenoid Pin Mode", idle_solenoidPinMode, !useStepperIdle - field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle - field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "Pin", mainRelayPin - field = "Pin mode", mainRelayPinMode - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - field = "Warning Period", warningPeriod - -; Engine->hip9011 Settings - dialog = hipFunction, "HIP9011 Settings (knock decoder)" - field = "Enabled", isHip9011Enabled - field = "Threshold", knockVThreshold, {isHip9011Enabled == 1} - field = "!ECU reboot needed to apply these settings" - field = "IntHold pin (hip9011 input)", hip9011IntHoldPin, {isHip9011Enabled == 1} - field = "IntHold pin (hip9011 input) mode", hip9011IntHoldPinMode, {isHip9011Enabled == 1} - field = "ChipSelect pin", hip9011CsPin, {isHip9011Enabled == 1} - field = "ChipSelect mode", hip9011CsPinMode, {isHip9011Enabled == 1} - field = "hip Output/stm input", hipOutputChannel, {isHip9011Enabled == 1} - field = "prescaler & SDO", hip9011PrescalerAndSDO, {isHip9011Enabled == 1} - field = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {isCJ125Enabled == 1} - - dialog = spiFunction, "SPI settings" - field = "!ECU reboot needed to apply these settings" - field = "SPI1 enable", is_enabled_spi_1 - field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} - field = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {activateAuxPid1 == 1} - field = "#PID control" - field = "offset", auxPid1_offset, {activateAuxPid1 == 1} - field = "P factor", auxPid1_pFactor, {activateAuxPid1 == 1} - field = "I factor", auxPid1_iFactor, {activateAuxPid1 == 1} - field = "D factor", auxPid1_dFactor, {activateAuxPid1 == 1} - field = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {activateAuxPid1 == 1} - field = "FSIO pin #2", auxPidPins2 - field = "FSIO pin #3", auxPidPins3 - field = "FSIO pin #4", auxPidPins4 - -; Engine->Battery & Alternator - dialog = batteryDialog, "Battery Settings", yAxis - field = "vBatt ADC input", vbattAdcChannel - field = "Battery Input Divider Coefficient", vbattDividerCoeff - dialog = alternator, "Alternator Settings", yAxis - field = "Enabled", isAlternatorControlEnabled - field = "simple on/off mode", onOffAlternatorLogic, {isAlternatorControlEnabled == 1} - field = "Target", targetVBatt, {isAlternatorControlEnabled == 1} - field = "Pin", alternatorControlPin, {isAlternatorControlEnabled == 1} - field = "Pin Mode", alternatorControlPinMode, {isAlternatorControlEnabled == 1} - field = "PWM frequency", alternatorPwmFrequency, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Off Above TPS", alternatorOffAboveTps, {isAlternatorControlEnabled == 1} - field = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {isAlternatorControlEnabled == 1} - field = "#PID control" - field = "offset", alternatorControl_offset, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "P factor", alternatorControl_pFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "I factor", alternatorControl_iFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "D factor", alternatorControl_dFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Analog divider ratio", analogInputDividerCoefficient - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - field = "RX pin", canRxPin - field = "TX pin", canTxPin - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - dialog = gpsReceiver, "GPS Receiver" - field = "gps RX", gps_rx_pin - field = "gps TX", gps_tx_pin - - dialog = lcdScreen, "LCD screen" - field = "display Mode", displayMode - field = "height", HD44780height - field = "width", HD44780width - field = "RS pin", HD44780_rs - field = "E pin", HD44780_e - field = "D4 pin", HD44780_db4 - field = "D5 pin", HD44780_db5 - field = "D6 pin", HD44780_db6 - field = "D7 pin", HD44780_db7 - - dialog = tle8888, "TLE8888", yAxis - field = "TLE8888 Chip Select", tle8888_cs - field = "TLE8888 SPI", tle8888spiDevice - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = tsPort - panel = canBus - panel = auxSerial - panel = sdCard - panel = gpsReceiver - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - dialog = fsioFrequency, "Frequency" - field = "freq #1", fsioFrequency1 - field = "freq #2", fsioFrequency2 - field = "freq #3", fsioFrequency3 - field = "freq #4", fsioFrequency4 - field = "freq #5", fsioFrequency5 - field = "freq #6", fsioFrequency6 - field = "freq #7", fsioFrequency7 - field = "freq #8", fsioFrequency8 - field = "freq #9", fsioFrequency9 - field = "freq #10", fsioFrequency10 - field = "freq #11", fsioFrequency11 - field = "freq #12", fsioFrequency12 - field = "freq #13", fsioFrequency13 - field = "freq #14", fsioFrequency14 - field = "freq #15", fsioFrequency15 - field = "freq #16", fsioFrequency16 - field = "" - field = "" - - dialog = fsioSetting, "Setting" - field = "Set number is not associated with the output number." - field = "Set number, only the cell number with some numbers." - field = "set #1", fsio_setting1 - field = "set #2", fsio_setting2 - field = "set #3", fsio_setting3 - field = "set #4", fsio_setting4 - field = "set #5", fsio_setting5 - field = "set #6", fsio_setting6 - field = "set #7", fsio_setting7 - field = "set #8", fsio_setting8 - field = "set #9", fsio_setting9 - field = "set #10", fsio_setting10 - field = "set #11", fsio_setting11 - field = "set #12", fsio_setting12 - field = "set #13", fsio_setting13 - field = "set #14", fsio_setting14 - field = "set #15", fsio_setting15 - field = "set #16", fsio_setting16 - - dialog = fsioOutputsDialog, "FSIO outputs", border - panel = fsioIO, West - panel = fsioFrequency, Center - panel = fsioSetting, East - - dialog = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - dialog = testSpark, "Spark" - commandButton = "Spark #1", cmd_test_spk1 - commandButton = "Spark #2", cmd_test_spk2 - commandButton = "Spark #3", cmd_test_spk3 - commandButton = "Spark #4", cmd_test_spk4 - commandButton = "Spark #5", cmd_test_spk5 - commandButton = "Spark #6", cmd_test_spk6 - commandButton = "Spark #7", cmd_test_spk7 - commandButton = "Spark #8", cmd_test_spk8 - - dialog = testInjectors, "Fuel" - commandButton = "Injector #1", cmd_test_inj1 - commandButton = "Injector #2", cmd_test_inj2 - commandButton = "Injector #3", cmd_test_inj3 - commandButton = "Injector #4", cmd_test_inj4 - commandButton = "Injector #5", cmd_test_inj5 - commandButton = "Injector #6", cmd_test_inj6 - commandButton = "Injector #7", cmd_test_inj7 - commandButton = "Injector #8", cmd_test_inj8 - - dialog = testMisc, "Misc" -; commandButton = "Come To Pit", cmd_call_from_pit - commandButton = "Fuel Pump", cmd_test_fuel_pump - commandButton = "Radiator Fan", cmd_test_radiator_fan - commandButton = "Check Engine", cmd_test_check_engine_light - commandButton = "Idle Air Valve", cmd_test_idle_valve - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF - commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP - commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2 - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - commandButton = "Proteus M73 v12", cmd_set_engine_type_Proteus_M73 - - - commandButton = "ETB test bench", cmd_set_engine_type_etb_test - commandButton = "TLE8888 test bench", cmd_set_engine_type_8888_test - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - field = "" - field = "digipot spi", digitalPotentiometerSpiDevice - field = "digipot CS #0", digitalPotentiometerChipSelect1 - field = "digipot CS #1", digitalPotentiometerChipSelect2 - field = "digipot CS #2", digitalPotentiometerChipSelect3 - field = "digipot CS #3", digitalPotentiometerChipSelect4 - field = "" - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - field = "" - field = "Logic input channel 1", logicAnalyzerPins1 - field = "Logic input channel 2", logicAnalyzerPins2 - field = "Logic input channel 3", logicAnalyzerPins3 - field = "Logic input channel 4", logicAnalyzerPins4 - field = "" - field = "Engine chart size", engineChartSize - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - diff --git a/firmware/tunerstudio/generated/rusefi_proteus.ini b/firmware/tunerstudio/generated/rusefi_proteus.ini deleted file mode 100644 index a04f83feba..0000000000 --- a/firmware/tunerstudio/generated/rusefi_proteus.ini +++ /dev/null @@ -1,4421 +0,0 @@ -; This is a TunerStudio project for the RusEFI.com engine management system -; -; This file has been generated by invoking gen_config.bat. -; The input files are -; rusefi.input the common template -; rusefi_config.txt the project specific file -; -; In TunerStudio some fields have little question mark on the left of the name for additional field tips. -; Those tips are defined in ../integration/rusefi_config.txt -; -; For example -; -; float bias_resistor;+Pull-up resistor value on your board;"Ohm" -; here 'bias_resistor' is internal field name and the text between semicolons is what produces the tooltip -; Note that '+' sign is required after first semicolon for tooltop to appear in TunerStudio -; -; -; field = "# blue text" -; field = "! red text" -; field = "normal text" -; -; - -; this should stop TS from looking for the CAN ID in the 2nd byte location and allow the page reads to work correctly. -enable2ndByteCanID = false - -;#unset tuneByMAF - -[SettingGroups] - ; the referenceName will over-ride previous, so if you are creating a - ; settingGroup with a reference name of lambdaSensor, it will replace the - ; setting group defined in the settingGroups.xml of the TunerStudio config - ; folder. If is is an undefined referenceName, it will be added. - ; keyword = referenceName, DisplayName - - settingGroup = tuneVeMode, "VE Autotune Mode" - settingOption = tuneByTPS, "TPS-Based (See Injection -> Inj.Settings)" - settingOption = tuneByMAF, "MAF-Based" - settingOption = tuneByLoad, "Load-Based (Default)" - -; settingGroup = fAlgorithmSetting, "Fuel Logic / Tables" -; settingOption = FA_PLAIN_MAF, "Plain MAF" -; settingOption = FA_TPS, "AlphaN/TPS" -; settingOption = DEFAULT, "Speed Density" ; DEFAULT will be over looked and this will fall into the #else block of the statement. - -[MegaTune] - ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.06.proteus_f7.3224456380" - -[TunerStudio] - queryCommand = "S" - versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.06.proteus_f7.3224456380" ; signature is expected to be 7 or more characters. - -[Constants] -; new packet serial format with CRC - messageEnvelopeFormat = msEnvelope_1.0 - - endianness = little - nPages = 1 - - - pageIdentifier = "\x00\x00" - pageReadCommand = "R\x00\x00%2o%2c" - burnCommand = "B\x00\x00" - pageActivate = "P\x00\x00" - pageValueWrite = "W\x00\x00%2o%v" - pageChunkWrite = "C\x00\x00%2o%2c%v" - ; todo: make this command shorter one day, no need to have all these zeros - crc32CheckCommand = "k\x00\x00\x00\x00\x00\x00" - retrieveConfigError = "e" - -;communication settings - pageActivationDelay = 500 ; Milliseconds delay after burn command. See https://sourceforge.net/p/rusefi/tickets/77/ -;e.g. put writeblocks off and add an interwrite delay - writeBlocks = on - interWriteDelay = 10 - blockReadTimeout = 3000; Milliseconds general timeout - - ; delayAfterPortOpen = 500 - - blockingFactor = 256 ; max chunk size -;end communication settings - - ; name = bits, type, offset, bits - ; name = array, type, offset, shape, units, scale, translate, lo, hi, digits - ; name = scalar, type, offset, units, scale, translate, lo, hi, digits - -; see PAGE_0_SIZE in C source code -; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 06 04:49:51 UTC 2020 - -pageSize = 20000 -page = 1 - engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" - engineSnifferRpmThreshold = scalar, S32, 4, "RPM", 1, 0, 0,30000, 0 - injector_flow = scalar, F32, 8, "cm3/min", 1, 0, 0, 99999, 2 - injector_battLagCorrBins = array, F32, 12, [8], "volts", 1, 0, 0.0, 20.0, 2 - injector_battLagCorr = array, F32, 44, [8], "ms", 1, 0, 0.0, 50.0, 2 - isForcedInduction = bits, U32, 76, [0:0], "false", "true" - activateAuxPid1 = bits, U32, 76, [1:1], "false", "true" - isVerboseAuxPid1 = bits, U32, 76, [2:2], "false", "true" - activateAuxPid2 = bits, U32, 76, [3:3], "false", "true" - isVerboseAuxPid2 = bits, U32, 76, [4:4], "false", "true" - activateAuxPid3 = bits, U32, 76, [5:5], "false", "true" - isVerboseAuxPid3 = bits, U32, 76, [6:6], "false", "true" - activateAuxPid4 = bits, U32, 76, [7:7], "false", "true" - isVerboseAuxPid4 = bits, U32, 76, [8:8], "false", "true" - isCJ125Verbose = bits, U32, 76, [9:9], "false", "true" - cj125isUaDivided = bits, U32, 76, [10:10], "false", "true" - cj125isLsu49 = bits, U32, 76, [11:11], "false", "true" - etb_use_two_wires = bits, U32, 76, [12:12], "false", "true" - isDoubleSolenoidIdle = bits, U32, 76, [13:13], "false", "true" - showSdCardWarning = bits, U32, 76, [14:14], "false", "true" - cj125isUrDivided = bits, U32, 76, [15:15], "false", "true" - issue_294_unused = bits, U32, 76, [16:16], "false", "true" - useTLE8888_cranking_hack= bits, U32, 76, [17:17], "false", "true" - useInstantRpmForIdle = bits, U32, 76, [18:18], "false", "true" - absoluteFuelPressure = bits, U32, 76, [19:19], "false", "true" - launchControlEnabled = bits, U32, 76, [20:20], "false", "true" - rollingLaunchEnabled = bits, U32, 76, [21:21], "false", "true" - antiLagEnabled = bits, U32, 76, [22:22], "false", "true" - useRunningMathForCranking= bits, U32, 76, [23:23], "Fixed", "Fuel Map" - displayLogicLevelsInEngineSniffer= bits, U32, 76, [24:24], "false", "true" - issue_294_26 = bits, U32, 76, [25:25], "false", "true" - issue_294_27 = bits, U32, 76, [26:26], "false", "true" - issue_294_28 = bits, U32, 76, [27:27], "false", "true" - issue_294_29 = bits, U32, 76, [28:28], "false", "true" - issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" - unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" - tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 - tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 - tpsErrorDetectionTooLow = scalar, S16, 84, "%", 1, 0, -10, 0, 0 - tpsErrorDetectionTooHigh = scalar, S16, 86, "%", 1, 0, 100, 110, 0 - cranking_baseFuel = scalar, F32, 88, "ms", 1, 0, 0, 200, 1 - cranking_rpm = scalar, S16, 92, "RPM", 1, 0, 0, 3000, 0 - cranking_alignmentFill_at_6 = array, U08, 94, [2], "units", 1, 0, -20, 100, 0 - primingSquirtDurationMs = scalar, F32, 96, "*C", 1, 0, -40, 200, 1 - ignitionDwellForCrankingMs = scalar, F32, 100, "ms", 1, 0, 0, 200, 1 - crankingChargeAngle = scalar, F32, 104, "deg", 1, 0, 0, 3000.0, 0 - map_samplingAngleBins = array, F32, 108, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingAngle = array, F32, 140, [8], "deg", 1, 0, -720, 720, 2 - map_samplingWindowBins = array, F32, 172, [8], "", 1, 0, 0.0, 18000, 2 - map_samplingWindow = array, F32, 204, [8], "deg", 1, 0, -720, 720, 2 - map_sensor_lowValue = scalar, F32, 236, "kpa", 1, 0, -400, 800, 2 - map_sensor_highValue = scalar, F32, 240, "kpa", 1, 0, -400, 800, 2 - map_sensor_type = bits, U32, 244, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - map_sensor_hwChannel = bits, U08, 248, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - map_sensor_alignmentFill = array, U08, 249, [3], "unit", 1, 0, 0, 100, 0 - clt_tempC_1 = scalar, F32, 252, "*C", 1, 0, -40, 200, 1 - clt_tempC_2 = scalar, F32, 256, "*C", 1, 0, -40, 200, 1 - clt_tempC_3 = scalar, F32, 260, "*C", 1, 0, -40, 200, 1 - clt_resistance_1 = scalar, F32, 264, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_2 = scalar, F32, 268, "Ohm", 1, 0, 0, 200000, 1 - clt_resistance_3 = scalar, F32, 272, "Ohm", 1, 0, 0, 200000, 1 - clt_bias_resistor = scalar, F32, 276, "Ohm", 1, 0, 0, 200000, 1 - clt_adcChannel = bits, U08, 280, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clt_alignmentFill_at_29 = array, U08, 281, [3], "units", 1, 0, -20, 100, 0 - iat_tempC_1 = scalar, F32, 284, "*C", 1, 0, -40, 200, 1 - iat_tempC_2 = scalar, F32, 288, "*C", 1, 0, -40, 200, 1 - iat_tempC_3 = scalar, F32, 292, "*C", 1, 0, -40, 200, 1 - iat_resistance_1 = scalar, F32, 296, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_2 = scalar, F32, 300, "Ohm", 1, 0, 0, 200000, 1 - iat_resistance_3 = scalar, F32, 304, "Ohm", 1, 0, 0, 200000, 1 - iat_bias_resistor = scalar, F32, 308, "Ohm", 1, 0, 0, 200000, 1 - iat_adcChannel = bits, U08, 312, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - iat_alignmentFill_at_29 = array, U08, 313, [3], "units", 1, 0, -20, 100, 0 - launchRpm = scalar, S32, 316, "rpm", 1, 0, 0, 20000.0, 2 - launchTimingRetard = scalar, S32, 320, "deg", 1, 0, -180, 180, 2 - hip9011PrescalerAndSDO = scalar, S32, 324, "integer", 1, 0.0, 0.0, 32, 0 - knockBandCustom = scalar, F32, 328, "kHz", 1, 0.0, 0.0, 10.0, 2 - sparkDwellRpmBins = array, F32, 332, [8], "RPM", 1, 0.0, 0.0, 18000, 2 - sparkDwellValues = array, F32, 364, [8], "ms", 1, 0.0, 0.0, 30.0, 2 - displacement = scalar, F32, 396, "L", 1, 0, 0, 1000.0, 2 - cylindersCount = bits, U32, 400, [0:3], "INVALID", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, "INVALID", "INVALID", "INVALID" - firingOrder = bits, U32, 404, [0:4], "One Cylinder", "1-3-4-2", "1-2-4-3", "1-3-2-4", "1-5-3-6-2-4", "1-8-4-3-6-5-7-2", "1-2-4-5-3", "1-4-2-5-3-6", "1-2", "1_2_3_4_5_6", "1-2-3", "1-8-7-2-6-5-4-3", "1-5-4-2-6-3-7-8", "1-6-3-2-5-4", "1-10-9-4-3-6-5-8-7_2", "1-7-5-11-3-9-6-12-2-8-4-10", "1-7-4-10-2-8-6-12-3-9-5-11", "1-4-3-2", "1-12-5-8-3-10-6-7-2-11-4-9", "1-2-7-8-4-5-6-3", "1-3-7-2-6-5-4-8", "1-2-3-4-5-6-7-8-9", "INVALID", "1-2-3-4-5-6-7-8-9-10-11-12", "1-3-2", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 - sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 - rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "INVALID", "INVALID", "INVALID" - crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" - extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 - crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" - ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 - timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" - fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 - globalTriggerAngleOffset = scalar, F32, 456, "deg", 1, 0, -720, 720, 0 - analogInputDividerCoefficient = scalar, F32, 460, "coef", 1, 0, 0.01, 10.0, 2 - vbattDividerCoeff = scalar, F32, 464, "coef", 1, 0, 0.01, 99.0, 2 - fanOnTemperature = scalar, F32, 468, "*C", 1, 0, 0, 1000.0, 0 - fanOffTemperature = scalar, F32, 472, "*C", 1, 0, 0, 1000.0, 0 - vehicleSpeedCoef = scalar, F32, 476, "coef", 1, 0, 0.01, 2000.0, 2 - canNbcType = bits, U32, 480, [0:3], "None", "FIAT", "VAG" , "MAZDA RX8", "BMW", "W202", "BMW E90", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canSleepPeriodMs = scalar, S32, 484, "ms", 1, 0, 0, 1000.0, 2 - ambiguousOperationMode = bits, U32, 488, [0:2], "INVALID", "4 stroke without cam sensor", "4 stroke with cam sensor", "2 stroke", "4 stroke with symmetrical crank (requires VVT input)", "INVALID", "INVALID", "INVALID" - displayMode = bits, U32, 492, [0:1], "none", "hd44780", "hd44780 over pcf8574", "INVALID" - logFormat = bits, U32, 496, [0:0], "native", "Mega Log Viewer" - byFirmwareVersion = scalar, S32, 500, "index", 1, 0, 0, 300, 0 - HD44780width = scalar, S32, 504, "index", 1, 0, 0, 300, 0 - HD44780height = scalar, S32, 508, "index", 1, 0, 0, 300, 0 - tps1_1AdcChannel = bits, U08, 512, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vbattAdcChannel = bits, U08, 513, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelSensor = bits, U08, 514, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_1AdcChannel = bits, U08, 515, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAt516 = scalar, S32, 516, "units", 1, 0, -20, 100, 0 - sensorChartFrequency = scalar, S32, 520, "index", 1, 0, 0, 300, 0 ; size 4 - trigger_type = bits, U32, 524, [0:5], "custom toothed wheel", "Ford Aspire", "Dodge Neon 1995", "Miata NA", "Miata NB", "GM_7X", "Cooper R50", "Mazda SOHC 4", "60/2", "36/1", "Honda 4+24+1", "Mitsubishi", "Honda 4+24", "Honda 1+4+24", "Dodge Neon 2003", "Mazda DOHC 1+4", "1+1", "1+60/2", "Single Tooth", "Dodge Ram 1+16", "60/2 VW", "Honda 1+24", "Dodge Stratus", "36_2_2_2", "Nissan Primera", "dev 2JZ 3/34 simulator", "Rover K", "GM LS 24", "Honda CBR 600", "2JZ_1_12", "Honda CBR 600 custom", "3/1 skipped" , "Dodge Neon 2003 crank", "Miata VVT", "trg34", "trg35", "Subaru 7+6", "Jeep 18-2-2-2", "WIP", "Dodge Neon 1995 crank only", "Jeep XJ 4 cyl", "FiatIAQ_P8", "Mazda Z5", "trg43", "Renix 44-2-2", "Renix 66-2-2-2", "Honda K 12+1", "trg47", "36/2", "Subaru SVX", "trg50", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - trigger_todoRemoveMeOneDay0= bits, U32, 528, [0:0], "false", "true" - trigger_todoRemoveMeOneDay1= bits, U32, 528, [1:1], "false", "true" - trigger_useOnlyFirstChannel= bits, U32, 528, [2:2], "false", "true" - trigger_unusedBit_4_3 = bits, U32, 528, [3:3], "false", "true" - trigger_unusedBit_4_4 = bits, U32, 528, [4:4], "false", "true" - trigger_unusedBit_4_5 = bits, U32, 528, [5:5], "false", "true" - trigger_unusedBit_4_6 = bits, U32, 528, [6:6], "false", "true" - trigger_unusedBit_4_7 = bits, U32, 528, [7:7], "false", "true" - trigger_unusedBit_4_8 = bits, U32, 528, [8:8], "false", "true" - trigger_unusedBit_4_9 = bits, U32, 528, [9:9], "false", "true" - trigger_unusedBit_4_10 = bits, U32, 528, [10:10], "false", "true" - trigger_unusedBit_4_11 = bits, U32, 528, [11:11], "false", "true" - trigger_unusedBit_4_12 = bits, U32, 528, [12:12], "false", "true" - trigger_unusedBit_4_13 = bits, U32, 528, [13:13], "false", "true" - trigger_unusedBit_4_14 = bits, U32, 528, [14:14], "false", "true" - trigger_unusedBit_4_15 = bits, U32, 528, [15:15], "false", "true" - trigger_unusedBit_4_16 = bits, U32, 528, [16:16], "false", "true" - trigger_unusedBit_4_17 = bits, U32, 528, [17:17], "false", "true" - trigger_unusedBit_4_18 = bits, U32, 528, [18:18], "false", "true" - trigger_unusedBit_4_19 = bits, U32, 528, [19:19], "false", "true" - trigger_unusedBit_4_20 = bits, U32, 528, [20:20], "false", "true" - trigger_unusedBit_4_21 = bits, U32, 528, [21:21], "false", "true" - trigger_unusedBit_4_22 = bits, U32, 528, [22:22], "false", "true" - trigger_unusedBit_4_23 = bits, U32, 528, [23:23], "false", "true" - trigger_unusedBit_4_24 = bits, U32, 528, [24:24], "false", "true" - trigger_unusedBit_4_25 = bits, U32, 528, [25:25], "false", "true" - trigger_unusedBit_4_26 = bits, U32, 528, [26:26], "false", "true" - trigger_unusedBit_4_27 = bits, U32, 528, [27:27], "false", "true" - trigger_unusedBit_4_28 = bits, U32, 528, [28:28], "false", "true" - trigger_unusedBit_4_29 = bits, U32, 528, [29:29], "false", "true" - trigger_unusedBit_4_30 = bits, U32, 528, [30:30], "false", "true" - trigger_unusedBit_4_31 = bits, U32, 528, [31:31], "false", "true" - trigger_customTotalToothCount = scalar, S32, 532, "number", 1, 0.0, 0, 500.0, 0 - trigger_customSkippedToothCount = scalar, S32, 536, "number", 1, 0.0, 0, 500.0, 0 - hip9011SpiDevice = bits,U32, 540, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_1 = bits, U08, 541, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - high_fuel_pressure_sensor_2 = bits, U08, 542, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mafAdcChannel = bits, U08, 543, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - globalFuelCorrection = scalar, F32, 544, "coef", 1, 0.0, 0, 1000.0, 2 - adcVcc = scalar, F32, 548, "volts", 1, 0.0, 0, 6.0, 3 - maxKnockSubDeg = scalar, F32, 552, "Deg", 1, 0, 0, 100, 0 - camInputs1 = bits, U08, 556, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs2 = bits, U08, 557, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs3 = bits, U08, 558, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - camInputs4 = bits, U08, 559, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_hwChannel = bits, U08, 560, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - afr_alignmentFill_afr = array, U08, 561, [3], "unit", 1, 0, 0, 100, 0 - afr_v1 = scalar, F32, 564, "volts", 1, 0.0, 0, 10.0, 2 - afr_value1 = scalar, F32, 568, "AFR", 1, 0.0, 0, 1000.0, 2 - afr_v2 = scalar, F32, 572, "volts", 1, 0.0, 0, 10.0, 2 - afr_value2 = scalar, F32, 576, "AFR", 1, 0.0, 0, 1000.0, 2 - throttlePedalPositionAdcChannel = bits, U08, 580, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_cs = bits, U08, 581, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle6240_csPinMode = bits, U08, 582, [0:1], "default", "default inverted", "open collector", "open collector inverted" - throttlePedalUpPin = bits, U08, 583, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_lowValue = scalar, F32, 584, "kpa", 1, 0, -400, 800, 2 - baroSensor_highValue = scalar, F32, 588, "kpa", 1, 0, -400, 800, 2 - baroSensor_type = bits, U32, 592, [0:3] "Custom", "DENSO183", "MPX4250", "HONDA3BAR", "NEON_2003", "22012AA090", "3 Bar", "MPX4100", "Toyota 89420-02010", "MPX4250A", "Bosch 2.5", "Mazda1Bar", "type12", "type13", "INVALID", "INVALID" - baroSensor_hwChannel = bits, U08, 596, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - baroSensor_alignmentFill = array, U08, 597, [3], "unit", 1, 0, 0, 100, 0 - idle_solenoidFrequency = scalar, S32, 600, "Hz", 1, 0, 0, 3000, 0 - idle_solenoidPin = bits, U08, 604, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperDirectionPin = bits, U08, 605, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_stepperStepPin = bits, U08, 606, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - idle_solenoidPinMode = bits, U08, 607, [0:1], "default", "default inverted", "open collector", "open collector inverted" - manIdlePosition = scalar, F32, 608, "%", 1, 0, 0, 100, 0 - mapFrequency0Kpa = scalar, F32, 612, "Hz", 1, 0, 0, 100000, 2 - mapFrequency100Kpa = scalar, F32, 616, "Hz", 1, 0, 0, 100000, 2 - triggerSimulatorFrequency = scalar, S32, 620, "Rpm", 1, 0, 0,30000, 0 - injectionPins1 = bits, U08, 624, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins2 = bits, U08, 625, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins3 = bits, U08, 626, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins4 = bits, U08, 627, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins5 = bits, U08, 628, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins6 = bits, U08, 629, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins7 = bits, U08, 630, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins8 = bits, U08, 631, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins9 = bits, U08, 632, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins10 = bits, U08, 633, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins11 = bits, U08, 634, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPins12 = bits, U08, 635, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins1 = bits, U08, 636, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins2 = bits, U08, 637, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins3 = bits, U08, 638, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins4 = bits, U08, 639, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins5 = bits, U08, 640, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins6 = bits, U08, 641, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins7 = bits, U08, 642, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins8 = bits, U08, 643, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins9 = bits, U08, 644, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins10 = bits, U08, 645, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins11 = bits, U08, 646, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - ignitionPins12 = bits, U08, 647, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - injectionPinMode = bits, U08, 648, [0:1], "default", "default inverted", "open collector", "open collector inverted" - ignitionPinMode = bits, U08, 649, [0:1], "default", "default inverted", "open collector", "open collector inverted" - HD44780_rs = bits, U08, 650, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_e = bits, U08, 651, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db4 = bits, U08, 652, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db5 = bits, U08, 653, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db6 = bits, U08, 654, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - HD44780_db7 = bits, U08, 655, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_rx_pin = bits, U08, 656, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gps_tx_pin = bits, U08, 657, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPin = bits, U08, 658, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelPumpPinMode = bits, U08, 659, [0:1], "default", "default inverted", "open collector", "open collector inverted" - malfunctionIndicatorPin = bits, U08, 660, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - malfunctionIndicatorPinMode = bits, U08, 661, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPinMode = bits, U08, 662, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fanPin = bits, U08, 663, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchDownPin = bits, U08, 664, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPin = bits, U08, 665, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - alternatorControlPinMode = bits, U08, 666, [0:1], "default", "default inverted", "open collector", "open collector inverted" - clutchDownPinMode = scalar, U08, 667, "todo", 1, 0, 0, 20, 1 - digitalPotentiometerChipSelect1 = bits, U08, 668, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect2 = bits, U08, 669, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect3 = bits, U08, 670, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerChipSelect4 = bits, U08, 671, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - electronicThrottlePin1Mode = bits, U08, 672, [0:1], "default", "default inverted", "open collector", "open collector inverted" - wboHeaterPin = bits, U08, 673, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125CsPin = bits, U08, 674, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855spiDevice = bits,U32, 675, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - debugTriggerSync = bits, U08, 676, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - digitalPotentiometerSpiDevice = bits,U32, 677, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33972_cs = bits, U08, 678, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33972_csPinMode = bits, U08, 679, [0:1], "default", "default inverted", "open collector", "open collector inverted" - auxFastSensor1_adcChannel = bits, U08, 680, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps1_2AdcChannel = bits, U08, 681, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tps2_2AdcChannel = bits, U08, 682, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalPositionSecondAdcChannel = bits, U08, 683, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fuelLevelEmptyTankVoltage = scalar, F32, 684, "V", 1, 0, 0,10, 2 - fuelLevelFullTankVoltage = scalar, F32, 688, "V", 1, 0, 0,10, 2 - afr_type = bits, S32, 692, [0:2], "BPSX", "Innovate", "14Point7", "Narrow", "PLX", "Custom", "INVALID", "INVALID" - unused696 = scalar, U32, 696, "units", 1, 0, -20, 100, 0 - triggerInputPins1 = bits, U08, 700, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins2 = bits, U08, 701, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerInputPins3 = bits, U08, 702, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011CsPinMode = bits, U08, 703, [0:1], "default", "default inverted", "open collector", "open collector inverted" - tachOutputPin = bits, U08, 704, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachOutputPinMode = bits, U08, 705, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mainRelayPin = bits, U08, 706, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardCsPin = bits, U08, 707, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canTxPin = bits, U08, 708, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - canRxPin = bits, U08, 709, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - throttlePedalUpPinMode = scalar, U08, 710, "todo", 1, 0, 0, 20, 1 - unused711 = scalar, U08, 711, "units", 1, 0, -20, 100, 0 - unusedAt712 = scalar, S32, 712, "units", 1, 0, -20, 100, 0 - unusedAt716 = scalar, S32, 716, "units", 1, 0, -20, 100, 0 - unusedAt720 = scalar, S32, 720, "units", 1, 0, -20, 100, 0 - unusedAt724 = scalar, S32, 724, "units", 1, 0, -20, 100, 0 - tunerStudioSerialSpeed = scalar, U32, 728, "BPs", 1, 0, 0,1000000, 0 - compressionRatio = scalar, F32, 732, "CR", 1, 0, 0, 300.0, 1 - triggerSimulatorPins1 = bits, U08, 736, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins2 = bits, U08, 737, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPins3 = bits, U08, 738, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerSimulatorPinModes1 = bits, U08, 739, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes2 = bits, U08, 740, [0:1], "default", "default inverted", "open collector", "open collector inverted" - triggerSimulatorPinModes3 = bits, U08, 741, [0:1], "default", "default inverted", "open collector", "open collector inverted" - o2heaterPin = bits, U08, 742, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - o2heaterPinModeTodO = bits, U08, 743, [0:1], "default", "default inverted", "open collector", "open collector inverted" - is_enabled_spi_1 = bits, U32, 744, [0:0], "false", "true" - is_enabled_spi_2 = bits, U32, 744, [1:1], "false", "true" - is_enabled_spi_3 = bits, U32, 744, [2:2], "false", "true" - isSdCardEnabled = bits, U32, 744, [3:3], "false", "true" - isFastAdcEnabled = bits, U32, 744, [4:4], "false", "true" - isEngineControlEnabled = bits, U32, 744, [5:5], "false", "true" - isHip9011Enabled = bits, U32, 744, [6:6], "false", "true" - isVerboseAlternator = bits, U32, 744, [7:7], "false", "true" - useSerialPort = bits, U32, 744, [8:8], "false", "true" - useStepperIdle = bits, U32, 744, [9:9], "false", "true" - enabledStep1Limiter = bits, U32, 744, [10:10], "false", "true" - useTpicAdvancedMode = bits, U32, 744, [11:11], "false", "true" - useLcdScreen = bits, U32, 744, [12:12], "false", "true" - verboseTLE8888 = bits, U32, 744, [13:13], "false", "true" - enableVerboseCanTx = bits, U32, 744, [14:14], "false", "true" - onOffAlternatorLogic = bits, U32, 744, [15:15], "false", "true" - isCJ125Enabled = bits, U32, 744, [16:16], "false", "true" - vvtCamSensorUseRise = bits, U32, 744, [17:17], "false", "true" - measureMapOnlyInOneCylinder= bits, U32, 744, [18:18], "false", "true" - stepperForceParkingEveryRestart= bits, U32, 744, [19:19], "false", "true" - isFasterEngineSpinUpEnabled= bits, U32, 744, [20:20], "false", "true" - coastingFuelCutEnabled = bits, U32, 744, [21:21], "false", "true" - useIacTableForCoasting = bits, U32, 744, [22:22], "false", "true" - useNoiselessTriggerDecoder= bits, U32, 744, [23:23], "false", "true" - useIdleTimingPidControl = bits, U32, 744, [24:24], "false", "true" - useTPSBasedVeTable = bits, U32, 744, [25:25], "false", "true" - is_enabled_spi_4 = bits, U32, 744, [26:26], "false", "true" - pauseEtbControl = bits, U32, 744, [27:27], "false", "true" - alignEngineSnifferAtTDC = bits, U32, 744, [28:28], "false", "true" - useETBforIdleControl = bits, U32, 744, [29:29], "false", "true" - idleIncrementalPidCic = bits, U32, 744, [30:30], "false", "true" - enableAemXSeries = bits, U32, 744, [31:31], "false", "true" - logicAnalyzerPins1 = bits, U08, 748, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins2 = bits, U08, 749, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins3 = bits, U08, 750, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - logicAnalyzerPins4 = bits, U08, 751, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mainRelayPinMode = bits, U08, 752, [0:1], "default", "default inverted", "open collector", "open collector inverted" - hip9011CsPin = bits, U08, 753, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPin = bits, U08, 754, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - hip9011IntHoldPinMode = bits, U08, 755, [0:1], "default", "default inverted", "open collector", "open collector inverted" - verboseCanBaseAddress = scalar, U32, 756, "", 1, 0, 0, 536870911, 0 - mc33_hvolt = scalar, U08, 760, "v", 1, 0, 0, 100, 0 - unusedHere = array, U08, 761, [3], "units", 1, 0, -20, 100, 0 - gpioPinModes1 = bits, U08, 764, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes2 = bits, U08, 765, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes3 = bits, U08, 766, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes4 = bits, U08, 767, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes5 = bits, U08, 768, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes6 = bits, U08, 769, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes7 = bits, U08, 770, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes8 = bits, U08, 771, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes9 = bits, U08, 772, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes10 = bits, U08, 773, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes11 = bits, U08, 774, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes12 = bits, U08, 775, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes13 = bits, U08, 776, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes14 = bits, U08, 777, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes15 = bits, U08, 778, [0:1], "default", "default inverted", "open collector", "open collector inverted" - gpioPinModes16 = bits, U08, 779, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioOutputPins1 = bits, U08, 780, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins2 = bits, U08, 781, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins3 = bits, U08, 782, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins4 = bits, U08, 783, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins5 = bits, U08, 784, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins6 = bits, U08, 785, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins7 = bits, U08, 786, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins8 = bits, U08, 787, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins9 = bits, U08, 788, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins10 = bits, U08, 789, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins11 = bits, U08, 790, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins12 = bits, U08, 791, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins13 = bits, U08, 792, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins14 = bits, U08, 793, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins15 = bits, U08, 794, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioOutputPins16 = bits, U08, 795, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs1 = bits, U08, 796, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs2 = bits, U08, 797, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs3 = bits, U08, 798, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs4 = bits, U08, 799, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs5 = bits, U08, 800, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs6 = bits, U08, 801, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs7 = bits, U08, 802, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - max31855_cs8 = bits, U08, 803, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - sdCardPeriodMs = scalar, S16, 804, "ms", 1, 0, 0, 30000, 0 - unused806 = scalar, U08, 806, "units", 1, 0, -20, 100, 0 - debugMapAveraging = bits, U08, 807, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisablePin = bits, U08, 808, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - starterRelayDisableMode = bits, U08, 809, [0:1], "default", "default inverted", "open collector", "open collector inverted" - secondSolenoidPin = bits, U08, 810, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonPin = bits, U08, 811, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mapMinBufferLength = scalar, S32, 812, "count", 1, 0, 0, 24, 0 - idlePidDeactivationTpsThreshold = scalar, S16, 816, "%", 1, 0, 0, 100.0, 0 - stepperParkingExtraSteps = scalar, S16, 818, "%", 1, 0, 0, 3000.0, 0 - tps1SecondaryMin = scalar, U16, 820, "ADC", 1, 0, 0, 1000, 0 - tps1SecondaryMax = scalar, U16, 822, "ADC", 1, 0, 0, 1000, 0 - antiLagRpmTreshold = scalar, S16, 824, "rpm", 1, 0, 0, 20000, 0 - startCrankingDuration = scalar, S16, 826, "Seconds", 1, 0, 0, 30, 0 - triggerErrorPin = bits, U08, 828, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - triggerErrorPinMode = bits, U08, 829, [0:1], "default", "default inverted", "open collector", "open collector inverted" - acRelayPin = bits, U08, 830, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acRelayPinMode = bits, U08, 831, [0:1], "default", "default inverted", "open collector", "open collector inverted" - fsioFrequency1 = scalar, U16, 832, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency2 = scalar, U16, 834, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency3 = scalar, U16, 836, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency4 = scalar, U16, 838, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency5 = scalar, U16, 840, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency6 = scalar, U16, 842, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency7 = scalar, U16, 844, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency8 = scalar, U16, 846, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency9 = scalar, U16, 848, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency10 = scalar, U16, 850, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency11 = scalar, U16, 852, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency12 = scalar, U16, 854, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency13 = scalar, U16, 856, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency14 = scalar, U16, 858, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency15 = scalar, U16, 860, "Hz", 1, 0, 0, 3000, 0 - fsioFrequency16 = scalar, U16, 862, "Hz", 1, 0, 0, 3000, 0 - fsio_setting1 = scalar, F32, 864, "Val", 1, 0, 0, 18000, 2 - fsio_setting2 = scalar, F32, 868, "Val", 1, 0, 0, 18000, 2 - fsio_setting3 = scalar, F32, 872, "Val", 1, 0, 0, 18000, 2 - fsio_setting4 = scalar, F32, 876, "Val", 1, 0, 0, 18000, 2 - fsio_setting5 = scalar, F32, 880, "Val", 1, 0, 0, 18000, 2 - fsio_setting6 = scalar, F32, 884, "Val", 1, 0, 0, 18000, 2 - fsio_setting7 = scalar, F32, 888, "Val", 1, 0, 0, 18000, 2 - fsio_setting8 = scalar, F32, 892, "Val", 1, 0, 0, 18000, 2 - fsio_setting9 = scalar, F32, 896, "Val", 1, 0, 0, 18000, 2 - fsio_setting10 = scalar, F32, 900, "Val", 1, 0, 0, 18000, 2 - fsio_setting11 = scalar, F32, 904, "Val", 1, 0, 0, 18000, 2 - fsio_setting12 = scalar, F32, 908, "Val", 1, 0, 0, 18000, 2 - fsio_setting13 = scalar, F32, 912, "Val", 1, 0, 0, 18000, 2 - fsio_setting14 = scalar, F32, 916, "Val", 1, 0, 0, 18000, 2 - fsio_setting15 = scalar, F32, 920, "Val", 1, 0, 0, 18000, 2 - fsio_setting16 = scalar, F32, 924, "Val", 1, 0, 0, 18000, 2 - spi1mosiPin = bits, U08, 928, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1misoPin = bits, U08, 929, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1sckPin = bits, U08, 930, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2mosiPin = bits, U08, 931, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2misoPin = bits, U08, 932, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2sckPin = bits, U08, 933, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3mosiPin = bits, U08, 934, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3misoPin = bits, U08, 935, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3sckPin = bits, U08, 936, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cdmInputPin = bits, U08, 937, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCenterPin = bits, U08, 938, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickAPin = bits, U08, 939, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickBPin = bits, U08, 940, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickCPin = bits, U08, 941, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - joystickDPin = bits, U08, 942, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - consoleUartDevice = bits,U32, 943, [0:1], "Off", "UART1", "UART2", "UART3" - sensorChartMode = bits, S32, 944, [0:2], "none", "trigger", "MAP", "RPM ACCEL", "DETAILED RPM", "Fast Aux1", "INVALID", "INVALID" - mafSensorType = bits, S32, 948, [0:1], "v0", "v1", "v2", "v3" - fsioDigitalInputs1 = bits, U08, 952, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs2 = bits, U08, 953, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs3 = bits, U08, 954, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs4 = bits, U08, 955, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs5 = bits, U08, 956, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs6 = bits, U08, 957, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs7 = bits, U08, 958, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs8 = bits, U08, 959, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs9 = bits, U08, 960, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs10 = bits, U08, 961, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs11 = bits, U08, 962, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs12 = bits, U08, 963, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs13 = bits, U08, 964, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs14 = bits, U08, 965, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs15 = bits, U08, 966, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioDigitalInputs16 = bits, U08, 967, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vehicleSpeedSensorInputPin = bits, U08, 968, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPin = bits, U08, 969, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - frequencyReportingMapInputPin = bits, U08, 970, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","VR 1","VR 2","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - clutchUpPinMode = scalar, U08, 971, "todo", 1, 0, 0, 20, 1 - multisparkMaxRpm = scalar, U16, 972, "rpm", 1, 0, 0, 3000, 0 - multisparkMaxSparkingAngle = scalar, U08, 974, "deg", 1, 0, 0, 60, 0 - multisparkMaxExtraSparkCount = scalar, U08, 975, "count", 1, 0, 0, 5, 0 - todoClutchUpPinInverted = bits, U32, 976, [0:0], "false", "true" - todoClutchDownPinInverted= bits, U32, 976, [1:1], "false", "true" - useHbridges = bits, U32, 976, [2:2], "false", "true" - multisparkEnable = bits, U32, 976, [3:3], "false", "true" - enableLaunchRetard = bits, U32, 976, [4:4], "false", "true" - enableLaunchBoost = bits, U32, 976, [5:5], "false", "true" - launchDisableBySpeed = bits, U32, 976, [6:6], "false", "true" - enableCanVss = bits, U32, 976, [7:7], "false", "true" - enableInnovateLC2 = bits, U32, 976, [8:8], "false", "true" - showHumanReadableWarning= bits, U32, 976, [9:9], "false", "true" - stftIgnoreErrorMagnitude= bits, U32, 976, [10:10], "false", "true" - unusedBit_251_11 = bits, U32, 976, [11:11], "false", "true" - unusedBit_251_12 = bits, U32, 976, [12:12], "false", "true" - unusedBit_251_13 = bits, U32, 976, [13:13], "false", "true" - unusedBit_251_14 = bits, U32, 976, [14:14], "false", "true" - unusedBit_251_15 = bits, U32, 976, [15:15], "false", "true" - unusedBit_251_16 = bits, U32, 976, [16:16], "false", "true" - unusedBit_251_17 = bits, U32, 976, [17:17], "false", "true" - unusedBit_251_18 = bits, U32, 976, [18:18], "false", "true" - unusedBit_251_19 = bits, U32, 976, [19:19], "false", "true" - unusedBit_251_20 = bits, U32, 976, [20:20], "false", "true" - unusedBit_251_21 = bits, U32, 976, [21:21], "false", "true" - unusedBit_251_22 = bits, U32, 976, [22:22], "false", "true" - unusedBit_251_23 = bits, U32, 976, [23:23], "false", "true" - unusedBit_251_24 = bits, U32, 976, [24:24], "false", "true" - unusedBit_251_25 = bits, U32, 976, [25:25], "false", "true" - unusedBit_251_26 = bits, U32, 976, [26:26], "false", "true" - unusedBit_251_27 = bits, U32, 976, [27:27], "false", "true" - unusedBit_251_28 = bits, U32, 976, [28:28], "false", "true" - unusedBit_251_29 = bits, U32, 976, [29:29], "false", "true" - unusedBit_283_30 = bits, U32, 976, [30:30], "false", "true" - unusedBit_283_31 = bits, U32, 976, [31:31], "false", "true" - etbIo1_directionPin1 = bits, U08, 980, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_directionPin2 = bits, U08, 981, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_controlPin1 = bits, U08, 982, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo1_disablePin = bits, U08, 983, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin1 = bits, U08, 984, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_directionPin2 = bits, U08, 985, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_controlPin1 = bits, U08, 986, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo2_disablePin = bits, U08, 987, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPin = bits, U08, 988, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostControlPinMode = bits, U08, 989, [0:1], "default", "default inverted", "open collector", "open collector inverted" - antiLagActivatePin = bits, U08, 990, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - launchActivatePin = bits, U08, 991, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - boostPid_pFactor = scalar, F32, 992, "", 1, 0, -10000, 10000, 4 - boostPid_iFactor = scalar, F32, 996, "", 1, 0, -10000, 10000, 4 - boostPid_dFactor = scalar, F32, 1000, "", 1, 0, -10000, 10000, 4 - boostPid_offset = scalar, S16, 1004, "", 1, 0, -1000, 1000, 0 - boostPid_periodMs = scalar, S16, 1006, "ms", 1, 0, 0, 3000, 0 - boostPid_minValue = scalar, S16, 1008, "", 1, 0, -30000, 30000.0, 0 - boostPid_maxValue = scalar, S16, 1010, "", 1, 0, -30000, 30000.0, 0 - boostType = bits, U32, 1012, [0:0], "Open Loop", "Closed Loop" - boostPwmFrequency = scalar, S32, 1016, "Hz", 1, 0, 0, 3000.0, 0 - launchActivationMode = bits, S32, 1020, [0:1], "Switch Input", "Clutch Input", "Always Active(Disabled By Speed)","INVALID" - antiLagActivationMode = bits, S32, 1024, [0:0], "Always Active", "Switch Input" - launchSpeedTreshold = scalar, S32, 1028, "Kph", 1, 0, 0, 300.0, 0 - launchRpmTreshold = scalar, S32, 1032, "RPM", 1, 0, 0, 8000.0, 0 - launchTimingRpmRange = scalar, S32, 1036, "RPM", 1, 0, 0, 8000.0, 0 - launchFuelAdded = scalar, S32, 1040, "%", 1, 0, 0, 100.0, 0 - launchBoostDuty = scalar, S32, 1044, "%", 1, 0, 0, 100.0, 0 - hardCutRpmRange = scalar, S32, 1048, "rpm", 1, 0, 0, 3000.0, 2 - launchAdvanceRpmRange = scalar, S32, 1052, "rpm", 1, 0, 0, 20000, 0 - launchTpsTreshold = scalar, S32, 1056, "rpm", 1, 0, 0, 20000, 0 - launchActivateDelay = scalar, F32, 1060, "rpm", 1, 0, 0, 20000, 0 - stft_maxIdleRegionRpm = scalar, U08, 1064, "RPM", 50, 0, 0.0, 12000.0, 0 - stft_maxOverrunLoad = scalar, U08, 1065, "load", 1, 0, 0.0, 250, 0 - stft_minPowerLoad = scalar, U08, 1066, "load", 1, 0, 0.0, 250, 0 - stft_deadband = scalar, U08, 1067, "%", 0.1, 0, 0, 3, 1 - stft_minClt = scalar, S08, 1068, "C", 1, 0, -20, 100, 0 - stft_minAfr = scalar, U08, 1069, "afr", 0.1, 0, 10, 20, 1 - stft_maxAfr = scalar, U08, 1070, "afr", 0.1, 0, 10, 20, 1 - stft_startupDelay = scalar, U08, 1071, "seconds", 1, 0, 0, 250, 0 - stft_cellCfgs1_maxAdd = scalar, S08, 1072, "%", 1, 0, 0, 25, 0 - stft_cellCfgs1_maxRemove = scalar, S08, 1073, "%", 1, 0, -25, 0, 0 - stft_cellCfgs1_timeConstant = scalar, U16, 1074, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs2_maxAdd = scalar, S08, 1076, "%", 1, 0, 0, 25, 0 - stft_cellCfgs2_maxRemove = scalar, S08, 1077, "%", 1, 0, -25, 0, 0 - stft_cellCfgs2_timeConstant = scalar, U16, 1078, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs3_maxAdd = scalar, S08, 1080, "%", 1, 0, 0, 25, 0 - stft_cellCfgs3_maxRemove = scalar, S08, 1081, "%", 1, 0, -25, 0, 0 - stft_cellCfgs3_timeConstant = scalar, U16, 1082, "sec", 0.1, 0, 0.1, 100, 2 - stft_cellCfgs4_maxAdd = scalar, S08, 1084, "%", 1, 0, 0, 25, 0 - stft_cellCfgs4_maxRemove = scalar, S08, 1085, "%", 1, 0, -25, 0, 0 - stft_cellCfgs4_timeConstant = scalar, U16, 1086, "sec", 0.1, 0, 0.1, 100, 2 - etbIo21_directionPin1 = bits, U08, 1088, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_directionPin2 = bits, U08, 1089, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_controlPin1 = bits, U08, 1090, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo21_disablePin = bits, U08, 1091, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin1 = bits, U08, 1092, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_directionPin2 = bits, U08, 1093, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_controlPin1 = bits, U08, 1094, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbIo22_disablePin = bits, U08, 1095, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - engineMake = string, ASCII, 1096, 32 - engineCode = string, ASCII, 1128, 32 - vehicleName = string, ASCII, 1160, 32 - tcu_solenoid1 = bits, U08, 1192, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid2 = bits, U08, 1193, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid3 = bits, U08, 1194, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid4 = bits, U08, 1195, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid5 = bits, U08, 1196, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid6 = bits, U08, 1197, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid7 = bits, U08, 1198, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcu_solenoid8 = bits, U08, 1199, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - unusedAtOldBoardConfigurationEnd = array, S32, 1200, [65], "units", 1, 0, -20, 100, 0 - tps2SecondaryMin = scalar, U16, 1460, "ADC", 1, 0, 0, 1000, 0 - tps2SecondaryMax = scalar, U16, 1462, "ADC", 1, 0, 0, 1000, 0 - unusedHereWeHave = bits, U32, 1464, [0:0], "false", "true" - fuelClosedLoopCorrectionEnabled= bits, U32, 1464, [1:1], "false", "true" - isVerboseIAC = bits, U32, 1464, [2:2], "false", "true" - isVerboseETB = bits, U32, 1464, [3:3], "false", "true" - useConstantDwellDuringCranking= bits, U32, 1464, [4:4], "false", "true" - isEngineChartEnabled = bits, U32, 1464, [5:5], "false", "true" - silentTriggerError = bits, U32, 1464, [6:6], "false", "true" - useLinearCltSensor = bits, U32, 1464, [7:7], "false", "true" - canReadEnabled = bits, U32, 1464, [8:8], "false", "true" - canWriteEnabled = bits, U32, 1464, [9:9], "false", "true" - useLinearIatSensor = bits, U32, 1464, [10:10], "false", "true" - useFSIO16ForTimingAdjustment= bits, U32, 1464, [11:11], "false", "true" - tachPulseDurationAsDutyCycle= bits, U32, 1464, [12:12], "false", "true" - isAlternatorControlEnabled= bits, U32, 1464, [13:13], "false", "true" - invertPrimaryTriggerSignal= bits, U32, 1464, [14:14], "false", "true" - invertSecondaryTriggerSignal= bits, U32, 1464, [15:15], "false", "true" - cutFuelOnHardLimit = bits, U32, 1464, [16:16], "false", "true" - cutSparkOnHardLimit = bits, U32, 1464, [17:17], "false", "true" - launchFuelCutEnable = bits, U32, 1464, [18:18], "false", "true" - launchSparkCutEnable = bits, U32, 1464, [19:19], "false", "true" - hasFrequencyReportingMapSensor= bits, U32, 1464, [20:20], "false", "true" - useFSIO8ForServo1 = bits, U32, 1464, [21:21], "false", "true" - useFSIO9ForServo2 = bits, U32, 1464, [22:22], "false", "true" - useFSIO10ForServo3 = bits, U32, 1464, [23:23], "false", "true" - useFSIO11ForServo4 = bits, U32, 1464, [24:24], "false", "true" - useFSIO12ForServo5 = bits, U32, 1464, [25:25], "false", "true" - useFSIO15ForIdleRpmAdjustment= bits, U32, 1464, [26:26], "false", "true" - useFSIO5ForCriticalIssueEngineStop= bits, U32, 1464, [27:27], "false", "true" - useFSIO4ForSeriousEngineWarning= bits, U32, 1464, [28:28], "false", "true" - useFSIO12ForIdleOffset = bits, U32, 1464, [29:29], "false", "true" - useFSIO13ForIdleMinValue= bits, U32, 1464, [30:30], "false", "true" - useFSIO6ForRevLimiter = bits, U32, 1464, [31:31], "false", "true" - hipOutputChannel = bits, U08, 1468, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - acSwitchAdc = bits, U08, 1469, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - vRefAdcChannel = bits, U08, 1470, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - etbNeutralPosition = scalar, U08, 1471, "%", 1, 0, 0, 100, 0 - idleMode = bits, U32, 1472, [0:0], "Automatic", "Manual" - isInjectionEnabled = bits, U32, 1476, [0:0], "false", "true" - isIgnitionEnabled = bits, U32, 1476, [1:1], "false", "true" - isCylinderCleanupEnabled= bits, U32, 1476, [2:2], "false", "true" - secondTriggerChannelEnabled= bits, U32, 1476, [3:3], "false", "true" - unusedBit4_1476 = bits, U32, 1476, [4:4], "false", "true" - isMapAveragingEnabled = bits, U32, 1476, [5:5], "false", "true" - overrideCrankingIacSetting= bits, U32, 1476, [6:6], "false", "true" - useSeparateAdvanceForIdle= bits, U32, 1476, [7:7], "false", "true" - isTunerStudioEnabled = bits, U32, 1476, [8:8], "false", "true" - isWaveAnalyzerEnabled = bits, U32, 1476, [9:9], "false", "true" - useSeparateVeForIdle = bits, U32, 1476, [10:10], "false", "true" - verboseTriggerSynchDetails= bits, U32, 1476, [11:11], "false", "true" - isManualSpinningMode = bits, U32, 1476, [12:12], "false", "true" - twoWireBatchInjection = bits, U32, 1476, [13:13], "false", "true" - useOnlyRisingEdgeForTrigger= bits, U32, 1476, [14:14], "false", "true" - twoWireBatchIgnition = bits, U32, 1476, [15:15], "false", "true" - useFixedBaroCorrFromMap = bits, U32, 1476, [16:16], "false", "true" - useSeparateAdvanceForCranking= bits, U32, 1476, [17:17], "false", "true" - useAdvanceCorrectionsForCranking= bits, U32, 1476, [18:18], "false", "true" - useTPSAdvanceTable = bits, U32, 1476, [19:19], "false", "true" - unused1476b20 = bits, U32, 1476, [20:20], "false", "true" - useIacPidMultTable = bits, U32, 1476, [21:21], "false", "true" - isBoostControlEnabled = bits, U32, 1476, [22:22], "false", "true" - launchSmoothRetard = bits, U32, 1476, [23:23], "false", "true" - unused_1484_bit_24 = bits, U32, 1476, [24:24], "false", "true" - unused_1484_bit_25 = bits, U32, 1476, [25:25], "false", "true" - unused_1484_bit_26 = bits, U32, 1476, [26:26], "false", "true" - unused_1484_bit_27 = bits, U32, 1476, [27:27], "false", "true" - unused_1484_bit_28 = bits, U32, 1476, [28:28], "false", "true" - unused_1484_bit_29 = bits, U32, 1476, [29:29], "false", "true" - unused_1484_bit_30 = bits, U32, 1476, [30:30], "false", "true" - unused_1484_bit_31 = bits, U32, 1476, [31:31], "false", "true" - engineChartSize = scalar, U32, 1480, "count", 1, 0, 0, 300, 0 - idlePidRpmUpperLimit = scalar, S16, 1484, "RPM", 1, 0, 0, 9000, 0 - primeInjFalloffTemperature = scalar, S16, 1486, "*C", 1, 0, 0, 1000.0, 0 - ignMathCalculateAtIndex = scalar, S32, 1488, "index", 1, 0, 0, 7000, 0 - acCutoffLowRpm = scalar, S16, 1492, "RPM", 1, 0, 1, 15000, 0 - acCutoffHighRpm = scalar, S16, 1494, "RPM", 1, 0, 1, 15000, 0 - acIdleRpmBump = scalar, S16, 1496, "RPM", 1, 0, 1, 15000, 0 - warningPeriod = scalar, S16, 1498, "seconds", 1, 0, 0, 60, 0 - knockDetectionWindowStart = scalar, F32, 1500, "angle", 1, 0, -1000, 1000, 2 - knockDetectionWindowEnd = scalar, F32, 1504, "angle", 1, 0, -1000, 1000, 2 - idleStepperReactionTime = scalar, F32, 1508, "ms", 1, 0, 1, 300, 0 - knockVThreshold = scalar, F32, 1512, "V", 1, 0, 1, 5, 2 - fsioInputModes1 = scalar, U08, 1516, "todo", 1, 0, 0, 20, 1 - fsioInputModes2 = scalar, U08, 1517, "todo", 1, 0, 0, 20, 1 - fsioInputModes3 = scalar, U08, 1518, "todo", 1, 0, 0, 20, 1 - fsioInputModes4 = scalar, U08, 1519, "todo", 1, 0, 0, 20, 1 - fsioInputModes5 = scalar, U08, 1520, "todo", 1, 0, 0, 20, 1 - fsioInputModes6 = scalar, U08, 1521, "todo", 1, 0, 0, 20, 1 - fsioInputModes7 = scalar, U08, 1522, "todo", 1, 0, 0, 20, 1 - fsioInputModes8 = scalar, U08, 1523, "todo", 1, 0, 0, 20, 1 - fsioInputModes9 = scalar, U08, 1524, "todo", 1, 0, 0, 20, 1 - fsioInputModes10 = scalar, U08, 1525, "todo", 1, 0, 0, 20, 1 - fsioInputModes11 = scalar, U08, 1526, "todo", 1, 0, 0, 20, 1 - fsioInputModes12 = scalar, U08, 1527, "todo", 1, 0, 0, 20, 1 - fsioInputModes13 = scalar, U08, 1528, "todo", 1, 0, 0, 20, 1 - fsioInputModes14 = scalar, U08, 1529, "todo", 1, 0, 0, 20, 1 - fsioInputModes15 = scalar, U08, 1530, "todo", 1, 0, 0, 20, 1 - fsioInputModes16 = scalar, U08, 1531, "todo", 1, 0, 0, 20, 1 - idleStepperTotalSteps = scalar, S32, 1532, "count", 1, 0, 5, 3000, 0 - noAccelAfterHardLimitPeriodSecs = scalar, F32, 1536, "sec", 1, 0, 0, 60, 0 - mapAveragingSchedulingAtIndex = scalar, S32, 1540, "index", 1, 0, 0, 7000, 0 - baroCorrPressureBins = array, F32, 1544, [4], "kPa", 1, 0, 0.0, 200, 2 - baroCorrRpmBins = array, F32, 1560, [4], "RPM", 1, 0, 0.0, 18000, 2 - baroCorrTable = array, F32, 1576, [4x4],"ratio", 1, 0, 0, 2.0, 2 - crankingTpsCoef = array, F32, 1640, [8], "Ratio", 1, 0, 0.0, 700.0, 2 - crankingTpsBins = array, F32, 1672, [8], "%", 1, 0, 0.0, 100.0, 2 - tachPulseDuractionMs = scalar, F32, 1704, "ms", 1, 0, 0.0, 100.0, 2 - tachPulseTriggerIndex = scalar, S32, 1708, "index", 1, 0, 0.0, 360.0, 0 - wwaeTau = scalar, F32, 1712, "Seconds", 1, 0, 0.0, 3.0, 2 - alternatorControl_pFactor = scalar, F32, 1716, "", 1, 0, -10000, 10000, 4 - alternatorControl_iFactor = scalar, F32, 1720, "", 1, 0, -10000, 10000, 4 - alternatorControl_dFactor = scalar, F32, 1724, "", 1, 0, -10000, 10000, 4 - alternatorControl_offset = scalar, S16, 1728, "", 1, 0, -1000, 1000, 0 - alternatorControl_periodMs = scalar, S16, 1730, "ms", 1, 0, 0, 3000, 0 - alternatorControl_minValue = scalar, S16, 1732, "", 1, 0, -30000, 30000.0, 0 - alternatorControl_maxValue = scalar, S16, 1734, "", 1, 0, -30000, 30000.0, 0 - etb_pFactor = scalar, F32, 1736, "", 1, 0, -10000, 10000, 4 - etb_iFactor = scalar, F32, 1740, "", 1, 0, -10000, 10000, 4 - etb_dFactor = scalar, F32, 1744, "", 1, 0, -10000, 10000, 4 - etb_offset = scalar, S16, 1748, "", 1, 0, -1000, 1000, 0 - etb_periodMs = scalar, S16, 1750, "ms", 1, 0, 0, 3000, 0 - etb_minValue = scalar, S16, 1752, "", 1, 0, -30000, 30000.0, 0 - etb_maxValue = scalar, S16, 1754, "", 1, 0, -30000, 30000.0, 0 - fuelRailPressure = scalar, F32, 1756, "kPa", 1, 0.0, 0, 1000.0, 2 - alternator_derivativeFilterLoss = scalar, F32, 1760, "x", 1, 0.0, -1000000, 1000000, 4 - alternator_antiwindupFreq = scalar, F32, 1764, "x", 1, 0.0, -1000000, 1000000, 4 - tps2Min = scalar, S16, 1768, "ADC", 1, 0, 0, 1023, 0 - tps2Max = scalar, S16, 1770, "ADC", 1, 0, 0, 1023, 0 - starterControlPin = bits, U08, 1772, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - startStopButtonMode = scalar, U08, 1773, "todo", 1, 0, 0, 20, 1 - mc33816_flag0 = bits, U08, 1774, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tachPulsePerRev = scalar, U08, 1775, "Pulse", 1, 0, 1.0, 255.0, 0 - mapErrorDetectionTooLow = scalar, F32, 1776, "kPa", 1, 0, -100.0, 100.0, 2 - mapErrorDetectionTooHigh = scalar, F32, 1780, "kPa", 1, 0, -100.0, 800.0, 2 - multisparkSparkDuration = scalar, U16, 1784, "ms", 0.001, 0, 0, 3, 2 - multisparkDwell = scalar, U16, 1786, "ms", 0.001, 0, 0, 3, 2 - idleRpmPid_pFactor = scalar, F32, 1788, "", 1, 0, -10000, 10000, 4 - idleRpmPid_iFactor = scalar, F32, 1792, "", 1, 0, -10000, 10000, 4 - idleRpmPid_dFactor = scalar, F32, 1796, "", 1, 0, -10000, 10000, 4 - idleRpmPid_offset = scalar, S16, 1800, "", 1, 0, -1000, 1000, 0 - idleRpmPid_periodMs = scalar, S16, 1802, "ms", 1, 0, 0, 3000, 0 - idleRpmPid_minValue = scalar, S16, 1804, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid_maxValue = scalar, S16, 1806, "", 1, 0, -30000, 30000.0, 0 - wwaeBeta = scalar, F32, 1808, "Fraction", 1, 0, 0.0, 1.0, 2 - communicationLedPin = bits, U08, 1812, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - runningLedPin = bits, U08, 1813, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialTxPin = bits, U08, 1814, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - binarySerialRxPin = bits, U08, 1815, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves1 = bits, U08, 1816, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxValves2 = bits, U08, 1817, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuUpshiftButtonPin = bits, U08, 1818, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tcuDownshiftButtonPin = bits, U08, 1819, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - knockNoise = array, F32, 1820, [8], "v", 1, 0, 0.0, 10, 2 - knockNoiseRpmBins = array, F32, 1852, [8], "RPM", 1, 0, 0.0, 18000, 2 - throttlePedalUpVoltage = scalar, F32, 1884, "voltage", 1, 0, -6, 6, 2 - throttlePedalWOTVoltage = scalar, F32, 1888, "voltage", 1, 0, -6, 6, 2 - startUpFuelPumpDuration = scalar, S16, 1892, "seconds", 1, 0, 0, 6000, 0 - idlePidRpmDeadZone = scalar, S16, 1894, "RPM", 1, 0, 0, 1000, 0 - cltIdleRpmBins = array, F32, 1896, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleRpm = array, F32, 1960, [16], "", 1, 0, 0.0, 8000.0, 0 - targetVBatt = scalar, F32, 2024, "Volts", 1, 0, 0,30, 1 - alternatorOffAboveTps = scalar, F32, 2028, "%", 1, 0, 0, 200, 2 - startOfCrankingPrimingPulse = scalar, F32, 2032, "ms", 1, 0, 0, 200, 1 - afterCrankingIACtaperDuration = scalar, S16, 2036, "cycles", 1, 0, 0, 5000, 0 - iacByTpsTaper = scalar, S16, 2038, "percent", 1, 0, 0, 500, 0 - auxSerialTxPin = bits, U08, 2040, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - warningLedPin = bits, U08, 2041, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialRxPin = bits, U08, 2042, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - LIS302DLCsPin = bits, U08, 2043, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tpsAccelLength = scalar, S32, 2044, "cycles", 1, 0, 1, 200, 0 - tpsAccelEnrichmentThreshold = scalar, F32, 2048, "roc", 1, 0, 0, 200, 3 - vvtOffset = scalar, F32, 2052, "value", 1, 0, -720, 1000, 1 - engineLoadAccelLength = scalar, S32, 2056, "cycles", 1, 0, 1, 200, 0 - engineLoadDecelEnleanmentThreshold = scalar, F32, 2060, "roc", 1, 0, 0, 200, 3 - engineLoadDecelEnleanmentMultiplier = scalar, F32, 2064, "coeff", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentThreshold = scalar, F32, 2068, "roc", 1, 0, 0, 200, 3 - engineLoadAccelEnrichmentMultiplier = scalar, F32, 2072, "coeff", 1, 0, 0, 200, 3 - uartConsoleSerialSpeed = scalar, U32, 2076, "BPs", 1, 0, 0,1000000, 0 - tpsDecelEnleanmentThreshold = scalar, F32, 2080, "roc", 1, 0, 0, 200, 3 - tpsDecelEnleanmentMultiplier = scalar, F32, 2084, "coeff", 1, 0, 0, 200, 3 - slowAdcAlpha = scalar, F32, 2088, "coeff", 1, 0, 0, 200, 3 - debugMode = bits, U32, 2092, [0:5], "Alternator PID", "TPS acceleration enrichment", "INVALID", "Idle Control", "Engine Load accl enrich", "Trigger Counters", "FSIO_ADC", "AUX_PID_1", "VVT input", "Cranking", "Timing", "Closed-loop fuel corr PID", "VSS", "SD card", "sr5", "Knock", "mode16", "Electronic Throttle", "Executor", "Bench Test / TS commands", "Aux Valves", "Analog inputs #1", "INSTANT_RPM", "FSIO_EXPRESSION_1_7", "Status", "CJ125", "CAN", "MAP", "Metrics", "ETB#2", "Ion Sense", "TLE8888", "Analog inputs #2", "Dwell Metric", "INVALID", "ETB Logic", "Boost Control", "Start/Stop", "Launch", "ETB Autotune", "FSIO_COMPOSITE_LOG", "FSIO_EXPRESSION_8_14", "FSIO_SPECIAL", "Mode43", "Mode44", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxSerialSpeed = scalar, U32, 2096, "BPs", 1, 0, 0,1000000, 0 - throttlePedalSecondaryUpVoltage = scalar, F32, 2100, "voltage", 1, 0, -6, 6, 2 - throttlePedalSecondaryWOTVoltage = scalar, F32, 2104, "voltage", 1, 0, -6, 6, 2 - canBaudRate = bits, U08, 2108, [0:1], "100kbps", "250kbps" , "500kbps", "1Mbps" - alignmentFill_at_2109 = array, U08, 2109, [3], "units", 1, 0, -20, 100, 0 - unused_former_warmup_target_afr = array, U32, 2112, [5], "units", 1, 0, -20, 100, 0 - boostCutPressure = scalar, F32, 2132, "kPa", 1, 0, 0, 500, 0 - mapAccelTaperBins = array, F32, 2136, [8], "counter", 1, 0, 0.0, 300, 0 - mapAccelTaperMult = array, F32, 2168, [8], "mult", 1, 0, 0.0, 300, 2 - fsioAdc1 = bits, U08, 2200, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc2 = bits, U08, 2201, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc3 = bits, U08, 2202, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fsioAdc4 = bits, U08, 2203, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - fixedTiming = scalar, F32, 2204, "deg", 1, 0, -720, 720, 2 - mapLowValueVoltage = scalar, F32, 2208, "v", 1, 0, 0.0, 10, 2 - mapHighValueVoltage = scalar, F32, 2212, "v", 1, 0, 0.0, 10, 2 - egoValueShift = scalar, F32, 2216, "value", 1, 0, -10.0, 10, 2 - auxPidPins1 = bits, U08, 2220, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins2 = bits, U08, 2221, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins3 = bits, U08, 2222, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxPidPins4 = bits, U08, 2223, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125SpiDevice = bits,U32, 2224, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - cj125CsPinMode = bits, U08, 2225, [0:1], "default", "default inverted", "open collector", "open collector inverted" - dizzySparkOutputPin = bits, U08, 2226, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - dizzySparkOutputPinMode = bits, U08, 2227, [0:1], "default", "default inverted", "open collector", "open collector inverted" - crankingIACposition = scalar, S32, 2228, "percent", 1, 0, -100.0, 100, - tChargeMinRpmMinTps = scalar, F32, 2232, "mult", 1, 0, 0, 3, 4 - tChargeMinRpmMaxTps = scalar, F32, 2236, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMinTps = scalar, F32, 2240, "mult", 1, 0, 0, 3, 4 - tChargeMaxRpmMaxTps = scalar, F32, 2244, "mult", 1, 0, 0, 3, 4 - auxPidFrequency1 = scalar, U16, 2248, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency2 = scalar, U16, 2250, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency3 = scalar, U16, 2252, "Hz", 1, 0, 0, 3000, 0 - auxPidFrequency4 = scalar, U16, 2254, "Hz", 1, 0, 0, 3000, 0 - alternatorPwmFrequency = scalar, S32, 2256, "Hz", 1, 0, 0, 3000.0, 0 - storageMode = bits, U32, 2260, [0:1], "Auto", "Always", "Never", "INVALID" - narrowToWideOxygenBins = array, F32, 2264, [8], "V", 1, 0, -10.0, 10.0, 3 - narrowToWideOxygen = array, F32, 2296, [8], "ratio", 1, 0, -40.0, 40.0, 2 - vvtMode = bits, U32, 2328, [0:2], "Inactive", "Second half", "2GZ", "Miata NB2", "First half", "mode5", "mode6", "mode7" - unusedOldBiquad = array, U08, 2332, [20], "units", 1, 0, -20, 100, 0 - cltTimingBins = array, F32, 2352, [8], "C", 1, 0, -100.0, 250.0, 1 - cltTimingExtra = array, F32, 2384, [8], "degree", 1, 0, -400.0, 400.0, 0 - tle8888mode = bits, U08, 2416, [0:1], "Auto", "SemiAuto", "Manual", "Hall" - unusedSomethingWasHere = array, U08, 2417, [3], "units", 1, 0, -20, 100, 0 - unused244_1 = scalar, F32, 2420, "units", 1, 0, -20, 100, 0 - unused244_2 = scalar, F32, 2424, "units", 1, 0, -20, 100, 0 - unused244_3 = scalar, F32, 2428, "units", 1, 0, -20, 100, 0 - unused2432 = scalar, F32, 2432, "units", 1, 0, -20, 100, 0 - postCrankingFactor = scalar, F32, 2436, "mult", 1, 0, 0, 100, 4 - postCrankingDurationSec = scalar, F32, 2440, "seconds", 1, 0, 0, 100, 2 - auxTempSensor1_tempC_1 = scalar, F32, 2444, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_2 = scalar, F32, 2448, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_tempC_3 = scalar, F32, 2452, "*C", 1, 0, -40, 200, 1 - auxTempSensor1_resistance_1 = scalar, F32, 2456, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_2 = scalar, F32, 2460, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_resistance_3 = scalar, F32, 2464, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_bias_resistor = scalar, F32, 2468, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor1_adcChannel = bits, U08, 2472, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor1_alignmentFill_at_29 = array, U08, 2473, [3], "units", 1, 0, -20, 100, 0 - auxTempSensor2_tempC_1 = scalar, F32, 2476, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_2 = scalar, F32, 2480, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_tempC_3 = scalar, F32, 2484, "*C", 1, 0, -40, 200, 1 - auxTempSensor2_resistance_1 = scalar, F32, 2488, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_2 = scalar, F32, 2492, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_resistance_3 = scalar, F32, 2496, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_bias_resistor = scalar, F32, 2500, "Ohm", 1, 0, 0, 200000, 1 - auxTempSensor2_adcChannel = bits, U08, 2504, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - auxTempSensor2_alignmentFill_at_29 = array, U08, 2505, [3], "units", 1, 0, -20, 100, 0 - unused2508 = array, U08, 2508, [6], "units", 1, 0, -20, 100, 0 - etbFreq = scalar, S16, 2514, "Hz", 1, 0, 0, 30000, 0 - unused2516 = array, U08, 2516, [24], "units", 1, 0, -20, 100, 0 - timing_offset_cylinder1 = scalar, F32, 2540, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder2 = scalar, F32, 2544, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder3 = scalar, F32, 2548, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder4 = scalar, F32, 2552, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder5 = scalar, F32, 2556, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder6 = scalar, F32, 2560, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder7 = scalar, F32, 2564, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder8 = scalar, F32, 2568, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder9 = scalar, F32, 2572, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder10 = scalar, F32, 2576, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder11 = scalar, F32, 2580, "Val", 1, 0, -20000000, 20000000, 1 - timing_offset_cylinder12 = scalar, F32, 2584, "Val", 1, 0, -20000000, 20000000, 1 - idlePidActivationTime = scalar, F32, 2588, "seconds", 1, 0, 0, 60, 1 - sdCardSpiDevice = bits,U32, 2592, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding4 = array, U08, 2593, [3], "units", 1, 0, -20, 100, 0 - spi1SckMode = bits, U08, 2596, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MosiMode = bits, U08, 2597, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi1MisoMode = bits, U08, 2598, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2SckMode = bits, U08, 2599, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MosiMode = bits, U08, 2600, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi2MisoMode = bits, U08, 2601, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3SckMode = bits, U08, 2602, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MosiMode = bits, U08, 2603, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - spi3MisoMode = bits, U08, 2604, [0:6], "default", "INVALID", "INVALID", "INVALID", "opendrain", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLUP", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "PULLDOWN", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePinMode = bits, U08, 2605, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_rstb = bits, U08, 2606, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - mc33816_driven = bits, U08, 2607, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPin = bits, U08, 2608, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Digital 2","Digital 3","Digital 4","Digital 5","Digital 6","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ua = bits, U08, 2609, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - cj125ur = bits, U08, 2610, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - brakePedalPinMode = scalar, U08, 2611, "todo", 1, 0, 0, 20, 1 - auxPid1_pFactor = scalar, F32, 2612, "", 1, 0, -10000, 10000, 4 - auxPid1_iFactor = scalar, F32, 2616, "", 1, 0, -10000, 10000, 4 - auxPid1_dFactor = scalar, F32, 2620, "", 1, 0, -10000, 10000, 4 - auxPid1_offset = scalar, S16, 2624, "", 1, 0, -1000, 1000, 0 - auxPid1_periodMs = scalar, S16, 2626, "ms", 1, 0, 0, 3000, 0 - auxPid1_minValue = scalar, S16, 2628, "", 1, 0, -30000, 30000.0, 0 - auxPid1_maxValue = scalar, S16, 2630, "", 1, 0, -30000, 30000.0, 0 - auxPid2_pFactor = scalar, F32, 2632, "", 1, 0, -10000, 10000, 4 - auxPid2_iFactor = scalar, F32, 2636, "", 1, 0, -10000, 10000, 4 - auxPid2_dFactor = scalar, F32, 2640, "", 1, 0, -10000, 10000, 4 - auxPid2_offset = scalar, S16, 2644, "", 1, 0, -1000, 1000, 0 - auxPid2_periodMs = scalar, S16, 2646, "ms", 1, 0, 0, 3000, 0 - auxPid2_minValue = scalar, S16, 2648, "", 1, 0, -30000, 30000.0, 0 - auxPid2_maxValue = scalar, S16, 2650, "", 1, 0, -30000, 30000.0, 0 - auxPid3_pFactor = scalar, F32, 2652, "", 1, 0, -10000, 10000, 4 - auxPid3_iFactor = scalar, F32, 2656, "", 1, 0, -10000, 10000, 4 - auxPid3_dFactor = scalar, F32, 2660, "", 1, 0, -10000, 10000, 4 - auxPid3_offset = scalar, S16, 2664, "", 1, 0, -1000, 1000, 0 - auxPid3_periodMs = scalar, S16, 2666, "ms", 1, 0, 0, 3000, 0 - auxPid3_minValue = scalar, S16, 2668, "", 1, 0, -30000, 30000.0, 0 - auxPid3_maxValue = scalar, S16, 2670, "", 1, 0, -30000, 30000.0, 0 - auxPid4_pFactor = scalar, F32, 2672, "", 1, 0, -10000, 10000, 4 - auxPid4_iFactor = scalar, F32, 2676, "", 1, 0, -10000, 10000, 4 - auxPid4_dFactor = scalar, F32, 2680, "", 1, 0, -10000, 10000, 4 - auxPid4_offset = scalar, S16, 2684, "", 1, 0, -1000, 1000, 0 - auxPid4_periodMs = scalar, S16, 2686, "ms", 1, 0, 0, 3000, 0 - auxPid4_minValue = scalar, S16, 2688, "", 1, 0, -30000, 30000.0, 0 - auxPid4_maxValue = scalar, S16, 2690, "", 1, 0, -30000, 30000.0, 0 - oilPressure_hwChannel = bits, U08, 2692, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - oilPressure_alignmentFill = array, U08, 2693, [3], "unit", 1, 0, 0, 100, 0 - oilPressure_v1 = scalar, F32, 2696, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value1 = scalar, F32, 2700, "kPa", 1, 0.0, 0, 1000.0, 2 - oilPressure_v2 = scalar, F32, 2704, "volts", 1, 0.0, 0, 10.0, 2 - oilPressure_value2 = scalar, F32, 2708, "kPa", 1, 0.0, 0, 1000.0, 2 - accelerometerSpiDevice = bits,U32, 2712, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedAuxVoltage1_TODO_332 = scalar, U08, 2713, "units", 1, 0, -20, 100, 0 - unusedAuxVoltage2_TODO_332 = scalar, U08, 2714, "units", 1, 0, -20, 100, 0 - unusedSpiPadding5 = scalar, U08, 2715, "units", 1, 0, -20, 100, 0 - fsioCurve1Bins = array, F32, 2716, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve1 = array, F32, 2780, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve2Bins = array, F32, 2844, [16], "x", 1, 0, -999, 1000.0, 3 - fsioCurve2 = array, F32, 2908, [16], "y", 1, 0, -999, 1000.0, 3 - fsioCurve3Bins = array, F32, 2972, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve3 = array, F32, 3004, [8], "y", 1, 0, -999, 1000.0, 3 - fsioCurve4Bins = array, F32, 3036, [8], "x", 1, 0, -999, 1000.0, 3 - fsioCurve4 = array, F32, 3068, [8], "y", 1, 0, -999, 1000.0, 3 - unusedFlexFuelSensor = scalar, U08, 3100, "units", 1, 0, -20, 100, 0 - test557pin = bits, U08, 3101, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperDirectionPinMode = bits, U08, 3102, [0:1], "default", "default inverted", "open collector", "open collector inverted" - externalKnockSenseAdc = bits, U08, 3103, [0:4] "Analog Volt 5","Analog Volt 6","Analog Volt 7","Analog Volt 8","Analog Volt 9","Analog Volt 10","Analog Volt 11","Battery Sense","Analog Temp 3","Analog Temp 4","Analog Volt 1","Analog Volt 2","Analog Volt 3","Analog Volt 4","Analog Temp 1","Analog Temp 2","NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - stepperEnablePin = bits, U08, 3104, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_cs = bits, U08, 3105, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - tle8888_csPinMode = bits, U08, 3106, [0:1], "default", "default inverted", "open collector", "open collector inverted" - mc33816_cs = bits, U08, 3107, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - crankingAdvanceBins = array, F32, 3108, [4], "RPM", 1, 0, 0.0, 18000, 2 - crankingAdvance = array, F32, 3124, [4], "deg", 1, 0, -20, 90, 2 - servoOutputPins1 = bits, U08, 3140, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins2 = bits, U08, 3141, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins3 = bits, U08, 3142, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins4 = bits, U08, 3143, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins5 = bits, U08, 3144, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins6 = bits, U08, 3145, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins7 = bits, U08, 3146, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - servoOutputPins8 = bits, U08, 3147, [0:7], "NONE", "INVALID", "PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7", "PA8", "PA9", "PA10", "PA11", "PA12", "PA13", "PA14", "PA15", "PB0", "PB1", "PB2", "PB3", "PB4", "PB5", "PB6", "PB7", "PB8", "PB9", "PB10", "PB11", "PB12", "PB13", "PB14", "PB15", "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7", "PC8", "PC9", "PC10", "PC11", "PC12", "PC13", "PC14", "PC15", "PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7", "PD8", "PD9", "PD10", "PD11", "PD12", "PD13", "PD14", "PD15", "PE0", "PE1", "PE2", "PE3", "PE4", "PE5", "PE6","PE7","PE8","PE9","PE10","PE11","PE12","PE13","PE14","PE15", "PF0","PF1","PF2","PF3","PF4","PF5","PF6","PF7","PF8","PF9","PF10","PF11","PF12","PF13","PF14","PF15", "PG0","PG1","PG2","PG3","PG4","PG5","PG6","PG7","PG8","PG9","PG10","PG11","PG12","PG13","PG14","PG15", "PH0","PH1","PH2","PH3","PH4","PH5","PH6","PH7","PH8","PH9","PH10","PH11","PH12","PH13","PH14","PH15","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - coastingFuelCutRpmHigh = scalar, S16, 3148, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutRpmLow = scalar, S16, 3150, "rpm", 1, 0, 0, 5000, 0 - coastingFuelCutTps = scalar, S16, 3152, "%", 1, 0, 0, 100, 1 - coastingFuelCutClt = scalar, S16, 3154, "C", 1, 0, -100, 100, 0 - pidExtraForLowRpm = scalar, S16, 3156, "%", 1, 0, 0, 100, 0 - coastingFuelCutMap = scalar, S16, 3158, "kPa", 1, 0, 0, 250, 0 - iacCoastingBins = array, F32, 3160, [16], "C", 1, 0, -100.0, 250.0, 2 - iacCoasting = array, F32, 3224, [16], "%", 1, 0, 0.0, 100.0, 2 - ignitionTpsTable = array, S16, 3288, [16x16],"deg", 0.01, 0, -20, 90, 2 - ignitionTpsBins = array, F32, 3800, [16], "TPS", 1, 0.0, 0, 100.0, 2 - tChargeAirCoefMin = scalar, F32, 3864, "Min tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirCoefMax = scalar, F32, 3868, "Max tCharge Coeff.", 1, 0, 0.0, 1.0, 4 - tChargeAirFlowMax = scalar, F32, 3872, "Max Air Flow, kg/h", 1, 0, 0.0, 1000.0, 1 - tChargeAirIncrLimit = scalar, F32, 3876, "tChange Increment Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeAirDecrLimit = scalar, F32, 3880, "tChange Decrement Limit, deg/sec", 1, 0, 0.0, 100.0, 1 - tChargeMode = bits, U32, 3884, [0:0], "RPM+TPS (Default)", "Air Mass Interpolation" - etbBiasBins = array, F32, 3888, [8], "target TPS position", 1, 0.0, 0, 100.0, 0 - etbBiasValues = array, F32, 3920, [8], "ETB duty cycle bias", 1, 0.0, -100, 100.0, 2 - hip9011Gain = scalar, F32, 3952, "", 1, 0, 0, 100.0, 2 - etb_iTermMin = scalar, S16, 3956, "", 1, 0, -30000, 30000.0, 0 - etb_iTermMax = scalar, S16, 3958, "", 1, 0, -30000, 30000.0, 0 - etbDeadband = scalar, F32, 3960, "", 1, 0, 0, 100.0, 2 - unused1059 = array, U08, 3964, [4], "units", 1, 0, -20, 100, 0 - idleTimingPid_pFactor = scalar, F32, 3968, "", 1, 0, -10000, 10000, 4 - idleTimingPid_iFactor = scalar, F32, 3972, "", 1, 0, -10000, 10000, 4 - idleTimingPid_dFactor = scalar, F32, 3976, "", 1, 0, -10000, 10000, 4 - idleTimingPid_offset = scalar, S16, 3980, "", 1, 0, -1000, 1000, 0 - idleTimingPid_periodMs = scalar, S16, 3982, "ms", 1, 0, 0, 3000, 0 - idleTimingPid_minValue = scalar, S16, 3984, "", 1, 0, -30000, 30000.0, 0 - idleTimingPid_maxValue = scalar, S16, 3986, "", 1, 0, -30000, 30000.0, 0 - idleTimingPidWorkZone = scalar, S16, 3988, "RPM", 1, 0, 0, 1000, 0 - idleTimingPidDeadZone = scalar, S16, 3990, "RPM", 1, 0, 0, 1000, 0 - idlePidFalloffDeltaRpm = scalar, S16, 3992, "RPM", 1, 0, 0, 1000, 0 - tpsAccelFractionPeriod = scalar, S16, 3994, "cycles", 1, 0, 0, 500, 0 - tpsAccelFractionDivisor = scalar, F32, 3996, "coef", 1, 0, 0, 100, 2 - tle8888spiDevice = bits,U32, 4000, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - mc33816spiDevice = bits,U32, 4001, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - idlerpmpid_iTermMin = scalar, S16, 4002, "", 1, 0, -30000, 30000.0, 0 - tle6240spiDevice = bits,U32, 4004, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding7 = scalar, U08, 4005, "units", 1, 0, -20, 100, 0 - idlerpmpid_iTermMax = scalar, S16, 4006, "", 1, 0, -30000, 30000.0, 0 - mc33972spiDevice = bits,U32, 4008, [0:2], "Off", "SPI1", "SPI2", "SPI3", "SPI4", "INVALID", "INVALID", "INVALID" - unusedSpiPadding8 = array, U08, 4009, [3], "units", 1, 0, -20, 100, 0 - etbIdleThrottleRange = scalar, F32, 4012, "%", 1, 0, 0, 15, 0 - unusedvref = array, U08, 4016, [4], "units", 1, 0, -20, 100, 0 - unusedsw = array, U08, 4020, [4], "units", 1, 0, -20, 100, 0 - unused_alFIn = array, S32, 4024, [3], "units", 1, 0, -20, 100, 0 - triggerCompCenterVolt = scalar, U08, 4036, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMin = scalar, U08, 4037, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompHystMax = scalar, U08, 4038, "V", 0.02, 0, 0.0, 5.1, 2 - triggerCompSensorSatRpm = scalar, U08, 4039, "RPM", 50, 0, 0.0, 12000.0, 0 - idleRpmPid2_pFactor = scalar, F32, 4040, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_iFactor = scalar, F32, 4044, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_dFactor = scalar, F32, 4048, "", 1, 0, -10000, 10000, 4 - idleRpmPid2_offset = scalar, S16, 4052, "", 1, 0, -1000, 1000, 0 - idleRpmPid2_periodMs = scalar, S16, 4054, "ms", 1, 0, 0, 3000, 0 - idleRpmPid2_minValue = scalar, S16, 4056, "", 1, 0, -30000, 30000.0, 0 - idleRpmPid2_maxValue = scalar, S16, 4058, "", 1, 0, -30000, 30000.0, 0 - iacPidMultTable = array, U08, 4060, [8x8],"%", 1, 0, 0, 999, 2 - iacPidMultLoadBins = array, U08, 4124, [8], "Load", 1, 0.0, 0, 500.0, 2 - iacPidMultRpmBins = array, U08, 4132, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - canVssNbcType = bits, U32, 4140, [0:0], "BMW_e46", "W202" - gppwm1_pin = bits, U08, 4144, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm1_dutyIfError = scalar, U08, 4145, "%", 1, 0, 0, 100, 0 - gppwm1_pwmFrequency = scalar, U16, 4146, "hz", 1, 0, 0, 500, 0 - gppwm1_onAboveDuty = scalar, U08, 4148, "%", 1, 0, 0, 100, 0 - gppwm1_offBelowDuty = scalar, U08, 4149, "%", 1, 0, 0, 100, 0 - gppwm1_loadAxis = bits, U08, 4150, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm1_alignmentFill_map = scalar, U08, 4151, "unit", 1, 0, 0, 100, 0 - gppwm1_loadBins = array, U08, 4152, [8], "load", 1, 0, 0.0, 250, 0 - gppwm1_rpmBins = array, U08, 4160, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm1_table = array, U08, 4168, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm2_pin = bits, U08, 4232, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm2_dutyIfError = scalar, U08, 4233, "%", 1, 0, 0, 100, 0 - gppwm2_pwmFrequency = scalar, U16, 4234, "hz", 1, 0, 0, 500, 0 - gppwm2_onAboveDuty = scalar, U08, 4236, "%", 1, 0, 0, 100, 0 - gppwm2_offBelowDuty = scalar, U08, 4237, "%", 1, 0, 0, 100, 0 - gppwm2_loadAxis = bits, U08, 4238, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm2_alignmentFill_map = scalar, U08, 4239, "unit", 1, 0, 0, 100, 0 - gppwm2_loadBins = array, U08, 4240, [8], "load", 1, 0, 0.0, 250, 0 - gppwm2_rpmBins = array, U08, 4248, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm2_table = array, U08, 4256, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm3_pin = bits, U08, 4320, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm3_dutyIfError = scalar, U08, 4321, "%", 1, 0, 0, 100, 0 - gppwm3_pwmFrequency = scalar, U16, 4322, "hz", 1, 0, 0, 500, 0 - gppwm3_onAboveDuty = scalar, U08, 4324, "%", 1, 0, 0, 100, 0 - gppwm3_offBelowDuty = scalar, U08, 4325, "%", 1, 0, 0, 100, 0 - gppwm3_loadAxis = bits, U08, 4326, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm3_alignmentFill_map = scalar, U08, 4327, "unit", 1, 0, 0, 100, 0 - gppwm3_loadBins = array, U08, 4328, [8], "load", 1, 0, 0.0, 250, 0 - gppwm3_rpmBins = array, U08, 4336, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm3_table = array, U08, 4344, [8x8], "duty", 1, 0, 0, 100, 0 - gppwm4_pin = bits, U08, 4408, [0:7], "NONE","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 2","Highside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Lowside 8","Lowside 9","Lowside 10","Lowside 11","Lowside 12","Lowside 13","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 5","Ign 4","Ign 3","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 2","Ign 1","INVALID","INVALID","Lowside 1","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Highside 4","Highside 3","Lowside 14","Lowside 15","Lowside 16","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","Ign 12","Ign 11","Ign 10","Ign 9","Ign 8","Ign 7","Ign 6","Lowside 2","Lowside 3","Lowside 4","Lowside 5","Lowside 6","Lowside 7","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID","INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" - gppwm4_dutyIfError = scalar, U08, 4409, "%", 1, 0, 0, 100, 0 - gppwm4_pwmFrequency = scalar, U16, 4410, "hz", 1, 0, 0, 500, 0 - gppwm4_onAboveDuty = scalar, U08, 4412, "%", 1, 0, 0, 100, 0 - gppwm4_offBelowDuty = scalar, U08, 4413, "%", 1, 0, 0, 100, 0 - gppwm4_loadAxis = bits, U08, 4414, [0:1], "TPS", "MAP", "CLT", "IAT" - gppwm4_alignmentFill_map = scalar, U08, 4415, "unit", 1, 0, 0, 100, 0 - gppwm4_loadBins = array, U08, 4416, [8], "load", 1, 0, 0.0, 250, 0 - gppwm4_rpmBins = array, U08, 4424, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - gppwm4_table = array, U08, 4432, [8x8], "duty", 1, 0, 0, 100, 0 - mc33_i_boost = scalar, U16, 4496, "X", 1, 0.0, 0, 64000, 0 - mc33_i_peak = scalar, U16, 4498, "X", 1, 0.0, 0, 64000, 0 - mc33_i_hold = scalar, U16, 4500, "X", 1, 0.0, 0, 64000, 0 - mc33_t_max_boost = scalar, U16, 4502, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_off = scalar, U16, 4504, "X", 1, 0.0, 0, 64000, 0 - mc33_t_peak_tot = scalar, U16, 4506, "X", 1, 0.0, 0, 64000, 0 - mc33_t_bypass = scalar, U16, 4508, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_off = scalar, U16, 4510, "X", 1, 0.0, 0, 64000, 0 - mc33_t_hold_tot = scalar, U16, 4512, "X", 1, 0.0, 0, 64000, 0 - alignmentFill_at_4514 = array, U08, 4514, [2], "units", 1, 0, -20, 100, 0 - mainUnusedEnd = array, S32, 4516, [371], "units", 1, 0, -20, 100, 0 - warning_message = string, ASCII, 6000, 120 - afterstartCoolantBins = array, F32, 6120, [8], "C", 1, 0, -100.0, 250.0, 0 - afterstartHoldTime = array, F32, 6152, [8], "Seconds", 1, 0, 0, 100, 1 - afterstartEnrich = array, F32, 6184, [8], "%", 1, 0, 0, 600, 1 - afterstartDecayTime = array, F32, 6216, [8], "Seconds", 1, 0, 0, 100, 1 - boostTableOpenLoop = array, U08, 6248, [8x8],"", 2, 0 , 0, 3000, 0 - unused6312 = array, U08, 6312, [8], "units", 1, 0, -20, 100, 0 - boostRpmBins = array, U08, 6320, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - boostTableClosedLoop = array, U08, 6328, [8x8],"", 2, 0 , 0, 3000, 0 - boostTpsBins = array, U08, 6392, [8], "%", 2, 0.0, 0, 100.0, 2 - pedalToTpsTable = array, U08, 6400, [8x8],"%", 1, 0, 0, 100, 0 - pedalToTpsPedalBins = array, U08, 6464, [8], "%", 1, 0, 0.0, 120.0, 0 - pedalToTpsRpmBins = array, U08, 6472, [8], "RPM", 50, 0, 0.0, 12000.0, 0 - cltCrankingCorrBins = array, F32, 6480, [8], "C", 1, 0, -100.0, 250.0, 2 - cltCrankingCorr = array, F32, 6512, [8], "%", 1, 0, 0.0, 500.0, 2 - idleAdvanceBins = array, F32, 6544, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleAdvance = array, F32, 6576, [8], "deg", 1, 0, -20, 90, 2 - idleVeBins = array, F32, 6608, [8], "RPM", 1, 0, 0.0, 18000, 2 - idleVe = array, F32, 6640, [8], ,"%", 1, 0, 0, 999.0, 2 - fsioFormulas1 = string, ASCII, 6672, 200 - fsioFormulas2 = string, ASCII, 6872, 200 - fsioFormulas3 = string, ASCII, 7072, 200 - fsioFormulas4 = string, ASCII, 7272, 200 - fsioFormulas5 = string, ASCII, 7472, 200 - fsioFormulas6 = string, ASCII, 7672, 200 - fsioFormulas7 = string, ASCII, 7872, 200 - fsioFormulas8 = string, ASCII, 8072, 200 - fsioFormulas9 = string, ASCII, 8272, 200 - fsioFormulas10 = string, ASCII, 8472, 200 - fsioFormulas11 = string, ASCII, 8672, 200 - fsioFormulas12 = string, ASCII, 8872, 200 - fsioFormulas13 = string, ASCII, 9072, 200 - fsioFormulas14 = string, ASCII, 9272, 200 - fsioFormulas15 = string, ASCII, 9472, 200 - fsioFormulas16 = string, ASCII, 9672, 200 - timingMultiplier = string, ASCII, 9872, 200 - timingAdditive = string, ASCII, 10072, 200 - cltFuelCorrBins = array, F32, 10272, [16], "C", 1, 0, -100.0, 250.0, 2 - cltFuelCorr = array, F32, 10336, [16], "ratio", 1, 0, 0.0, 5.0, 2 - iatFuelCorrBins = array, F32, 10400, [16], "C", 1, 0, -100.0, 250.0, 2 - iatFuelCorr = array, F32, 10464, [16], "ratio", 1, 0, 0.0, 5.0, 2 - crankingFuelCoef = array, F32, 10528, [8], "ratio", 1, 0, 0.1, 50.0, 2 - crankingFuelBins = array, F32, 10560, [8], "C", 1, 0, -80.0, 170.0, 2 - crankingCycleCoef = array, F32, 10592, [8], "ratio", 1, 0, 0.0, 5.0, 2 - crankingCycleBins = array, F32, 10624, [8], "counter", 1, 0, -80.0, 170.0, 0 - cltIdleCorrBins = array, F32, 10656, [16], "C", 1, 0, -100.0, 250.0, 2 - cltIdleCorr = array, F32, 10720, [16], "ratio", 1, 0, 0.0, 10.0, 2 - mafDecoding = array, F32, 10784, [256], "kg/hour", 1, 0, -500.0, 4000.0, 2 - mafDecodingBins = array, F32, 11808, [256], "V", 1, 0, -5.0, 150.0, 2 - ignitionIatCorrTable = array, F32, 12832, [16x16],"deg", 1, 0, -720, 720, 2 - ignitionIatCorrLoadBins = array, F32, 13856, [16], "Temperature", 1, 0.0, 0, 500.0, 2 - ignitionIatCorrRpmBins = array, F32, 13920, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - injectionPhase = array, F32, 13984, [16x16],"deg", 1, 0, -720, 720, 2 - injPhaseLoadBins = array, F32, 15008, [16], "Load", 1, 0.0, 0, 500.0, 2 - injPhaseRpmBins = array, F32, 15072, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - fuelTable = array, F32, 15136, [16x16],"ms", 1, 0, 0.0, 500.0, 2 - fuelLoadBins = array, F32, 16160, [16], "V", 1, 0, 0.0, 500.0, 2 - fuelRpmBins = array, F32, 16224, [16], "RPM", 1, 0, 0.0, 25500.0, 2 - ignitionTable = array, F32, 16288, [16x16],"deg", 1, 0, -20, 90, 2 - ignitionLoadBins = array, F32, 17312, [16], "Load", 1, 0.0, 0, 500.0, 2 - ignitionRpmBins = array, F32, 17376, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - veTable = array, F32, 17440, [16x16],"%", 1, 0, 0, 999.0, 2 - veLoadBins = array, F32, 18464, [16], "kPa", 1, 0.0, 0, 400.0, 2 - veRpmBins = array, F32, 18528, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - afrTable = array, U08, 18592, [16x16],"deg", 0.1, 0, 0, 25.0, 1 - afrLoadBins = array, F32, 18848, [16], "", 1, 0.0, 0, 500.0, 2 - afrRpmBins = array, F32, 18912, [16], "RPM", 1, 0.0, 0, 18000.0, 2 - tpsTpsAccelTable = array, F32, 18976, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelFromRpmBins = array, F32, 19232, [8], "from", 1, 0, 0.0, 30000.0, 2 - tpsTpsAccelToRpmBins = array, F32, 19264, [8], "to", 1, 0, 0.0, 25500.0, 2 - fsioTable1 = array, F32, 19296, [8x8],"value", 1, 0, 0.0, 30000.0, 2 - fsioTable1LoadBins = array, F32, 19552, [8], "L", 1, 0, 0.0, 30000.0, 2 - fsioTable1RpmBins = array, F32, 19584, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable2 = array, U08, 19616, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable2LoadBins = array, F32, 19680, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable2RpmBins = array, F32, 19712, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable3 = array, U08, 19744, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable3LoadBins = array, F32, 19808, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable3RpmBins = array, F32, 19840, [8], "RPM", 1, 0, 0.0, 25500.0, 2 - fsioTable4 = array, U08, 19872, [8x8],"value", 1, 0, 0.0, 255.0, 0 - fsioTable4LoadBins = array, F32, 19936, [8], "L", 1, 0, 0.0, 255, 0 - fsioTable4RpmBins = array, F32, 19968, [8], "RPM", 1, 0, 0.0, 25500.0, 2 -; total TS size = 20000 -[SettingContextHelp] - injector_flow = "This is your injector flow at the fuel pressure used in the vehicle. cc/min, cubic centimetre per minute\nBy the way, g/s = 0.125997881 * (lb/hr)\ng/s = 0.125997881 * (cc/min)/10.5\ng/s = 0.0119997981 * cc/min" - cj125isUaDivided = "Is your UA CJ125 output wired to MCU via resistor divider? Ua can go over 3.3v but only at lambda >3, i.e very lean AFR above 44.1\nWhen exposed to free air and 17x gain, Ua will be 4.17 volt" - etb_use_two_wires = "TLE7209 uses two-wire mode. TLE9201 and VNH2SP30 do NOT use two wire mode." - isDoubleSolenoidIdle = "Subaru style where default valve position is somewhere in the middle. First solenoid opens it more while second can close it more than default position." - cj125isUrDivided = "Is your UR CJ125 output wired to MCU via resistor divider?\nLooks like 3v range should be enough, divider generally not needed." - absoluteFuelPressure = "If your fuel regulator does not have vacuum line" - tpsErrorDetectionTooLow = "TPS error detection: what throttle % is unrealistically low?\nAlso used for accelerator pedal error detection if so equiped." - tpsErrorDetectionTooHigh = "TPS error detection: what throttle % is unrealistically high?\nAlso used for accelerator pedal error detection if so equiped." - cranking_baseFuel = "Base duration of the fuel injection during cranking, this is modified by the multipliers for CLT, IAT, TPS ect, to give the final cranking pulse width." - cranking_rpm = "This sets the RPM limit below which the ECU will use cranking fuel and ignition logic, typically this is around 350-450rpm. \nset cranking_rpm X" - crankingChargeAngle = "While cranking (which causes battery voltage to drop) we can calculate dwell time in shaft\ndegrees, not in absolute time as in running mode.\nset cranking_charge_angle X" - clt_bias_resistor = "Pull-up resistor value on your board" - iat_bias_resistor = "Pull-up resistor value on your board" - hip9011PrescalerAndSDO = "value '6' for 8MHz hw osc\nread hip9011 datasheet for details\ntodo split into two bit fields" - knockBandCustom = "We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override" - cylinderBore = "Cylinder diameter, in mm." - sensorSnifferRpmThreshold = "Disable sensor sniffer above this rpm" - fuelAlgorithm = "This setting controls which fuel quantity control algorithm is used.\nSee also useTPSAdvanceTable\nset algorithm X" - crankingInjectionMode = "This is the injection strategy during engine start. See Fuel/Injection settings for more detail. It is suggested to use "Simultaneous"." - injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" - extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" - crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" - ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" - timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." - fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." - globalTriggerAngleOffset = "Angle between Top Dead Center (TDC) and the first trigger event.\nKnowing this angle allows us to control timing and other angles in reference to TDC.\nset global_trigger_offset_angle X" - analogInputDividerCoefficient = "Ratio/coefficient of input voltage dividers on your PCB. For example, use '2' if your board divides 5v into 2.5v. Use '1.66' if your board divides 5v into 3v." - vbattDividerCoeff = "This is the ratio of the resistors for the battery voltage, measure the voltage at the battery and then adjust this number until the gauge matches the reading." - fanOnTemperature = "Cooling fan turn-on temperature threshold, in Celsius" - fanOffTemperature = "Cooling fan turn-off temperature threshold, in Celsius" - vehicleSpeedCoef = "This coefficient translates vehicle speed input frequency (in Hz) into vehicle speed, km/h" - ambiguousOperationMode = "'Some triggers could be mounted differently. Most well-known triggers imply specific sensor setup. 4 stroke with symmetrical crank' is a pretty special case for example on Miata NB2\nSee engineCycle\nset operation_mode X" - vbattAdcChannel = "This is the processor input pin that the battery voltage circuit is connected to, if you are unsure of what pin to use, check the schematic that corresponds to your PCB." - fuelLevelSensor = "This is the processor pin that your fuel level sensor in connected to. This is a non standard input so will need to be user defined." - trigger_useOnlyFirstChannel = "This option could be used if your second trigger channel is broken" - camInputs1 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs2 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs3 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - camInputs4 = "Camshaft input could be used either just for engine phase detection if your trigger shape does not include cam sensor as 'primary' channel, or it could be used for Variable Valve timing on one of the camshafts.\nTODO #660" - throttlePedalUpPin = "Throttle Pedal not pressed switch - used on some older vehicles like early Mazda Miata" - triggerSimulatorFrequency = "Same RPM is used for two ways of producing simulated RPM. See also triggerSimulatorPins (with wires)\nSee also directSelfStimulation (no wires, bypassing input hardware)\nrpm X" - malfunctionIndicatorPin = "Check engine light, also malfunction indicator light. Always blinks once on boot." - tachOutputPin = "This implementation produces one pulse per engine cycle. See also dizzySparkOutputPin." - compressionRatio = "Just for reference really, not taken into account by any logic at this point" - useStepperIdle = "This setting should only be used if you have a stepper motor idle valve and a stepper motor driver installed." - enableVerboseCanTx = "CAN broadcast using custom rusEFI protocol\nenable can_broadcast/disable can_broadcast" - onOffAlternatorLogic = "This will cause the alternator to be operated in a basic on or off mode, this is the simplest alternator control." - vvtCamSensorUseRise = "Use rise or fall signal front" - measureMapOnlyInOneCylinder = "Useful for individual intakes" - isFasterEngineSpinUpEnabled = "Smarter cranking logic.\nSee also startOfCrankingPrimingPulse" - coastingFuelCutEnabled = "This setting disables fuel injection while the engine is in overrun, this is useful as a fuel saving measure and to prevent back firing." - useIacTableForCoasting = "This setting allows the ECU to open the IAC during overrun conditions to help reduce engine breaking, this can be helpful for large engines in light weight cars. Used in Auto-PID Idle mode." - pauseEtbControl = "Disable the electronic throttle motor for testing.\nThis mode is for testing ETB position sensors, etc without actually driving the throttle." - useETBforIdleControl = "This setting allows the ETB to act as the idle air control valve and move to regulate the airflow at idle." - sdCardPeriodMs = "SD card logging period, in milliseconds" - triggerErrorPin = "This pin is used for debugging - snap a logic analyzer on it and see if it's ever high" - cdmInputPin = "Saab Combustion Detection Module knock signal input pin\nalso known as Saab Ion Sensing Module" - sensorChartMode = "rusEfi console Sensor Sniffer mode" - useHbridges = "If enabled we use two H-bridges to drive stepper idle air valve" - stftIgnoreErrorMagnitude = "If enabled, adjust at a constant rate instead of a rate proportional to the current lambda error. This mode may be easier to tune, and more tolerant of sensor noise. Use of this mode is required if you have a narrowband O2 sensor.;" - launchSpeedTreshold = "Disabled above this speed" - launchRpmTreshold = "Disabled below this rpm" - launchTimingRpmRange = "Range from Launch Rpm for Timing Retard to activate" - launchFuelAdded = "Extra Fuel Added" - launchBoostDuty = "Duty Cycle for the Boost Solenoid" - hardCutRpmRange = "RPM Range for Hard Cut" - stft_maxIdleRegionRpm = "Below this RPM, the idle region is active" - stft_maxOverrunLoad = "Below this engine load, the overrun region is active" - stft_minPowerLoad = "Above this engine load, the power region is active" - stft_deadband = "When close to correct AFR, pause correction. This can improve stability by not changing the adjustment if the error is extremely small, but is not required." - stft_minClt = "Below this temperature, correction is disabled." - stft_minAfr = "Below this AFR, correction is paused" - stft_maxAfr = "Above this AFR, correction is paused" - stft_startupDelay = "Delay after starting the engine before beginning closed loop correction." - engineMake = "For example, BMW, GM or Chevrolet\nREQUIRED for rusEFI Online" - engineCode = "For example, LS1 or NB2\nREQUIRED for rusEFI Online" - vehicleName = "For example, Hunchback or Orange Miata\nVehicle name has to be unique between your vehicles.\nREQUIRED for rusEFI Online" - fuelClosedLoopCorrectionEnabled = "Enables lambda sensor closed loop feedback for fuelling." - isVerboseIAC = "Print details into rusEfi console" - isVerboseETB = "Prints ETB details to rusEFI console" - useConstantDwellDuringCranking = "If set to true, will use the specified duration for cranking dwell. If set to false, will use the specified dwell angle. Unless you have a really good reason to, leave this set to true to use duration mode." - isEngineChartEnabled = "This options enables data for 'engine sniffer' tab in console, which comes at some CPU price" - silentTriggerError = "Sometimes we have a performance issue while printing error" - useFSIO16ForTimingAdjustment = "See fsioTimingAdjustment" - isAlternatorControlEnabled = "This enables smart alternator control and activates the extra alternator settings." - invertPrimaryTriggerSignal = "This setting flips the signal from the primary engine speed sensor." - invertSecondaryTriggerSignal = "This setting flips the signal from the secondary engine speed sensor." - launchSparkCutEnable = "This is the Cut Mode normally used" - etbNeutralPosition = "Expected neutral position" - isInjectionEnabled = "Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings." - isIgnitionEnabled = "Enable ignition - This is default off for new projects as a safety feature, set to "true" to enable ignition and further ignition settings." - isCylinderCleanupEnabled = "When enabled if TPS is held above 95% no fuel is injected while cranking to clear excess fuel from the cylinders." - overrideCrankingIacSetting = "This setting overrides the normal multiplication values that have been set for the idle air control valve during cranking. If this setting is enabled the "IAC multiplier" table in the Cranking settings tab needs to be adjusted appropriately or potentially no IAC opening will occur." - useSeparateAdvanceForIdle = "This activates a separate ignition timing table for idle conditions, this can help idle stability by using ignition retard and advance either side of the desired idle speed. Extra retard at low idle speeds will prevent stalling and extra advance at high idle speeds can help reduce engine power and slow the idle speed." - useSeparateVeForIdle = "This activates a separate fuel table for Idle, this allows fine tuning of the idle fuelling." - verboseTriggerSynchDetails = "enable trigger_details" - twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" - useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." - useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." - useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." - useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" - useIacPidMultTable = "This flag allows to use a special 'PID Multiplier' table (0.0-1.0) to compensate for nonlinear nature of IAC-RPM controller" - launchSmoothRetard = "Interpolates the Ignition Retard from 0 to 100% within the RPM Range" - idlePidRpmUpperLimit = "Relative to the target idle RPM - this limit is coupled with useIacTableForCoasting and iacCoasting parameters" - primeInjFalloffTemperature = "This sets the temperature above which no priming pulse is used, The value at -40 is reduced until there is no more priming injection at this temperature." - ignMathCalculateAtIndex = "At what trigger index should some ignition-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - mapAveragingSchedulingAtIndex = "At what trigger index should some MAP-related math be executed? This is a performance trick to reduce load on synchronization trigger callback." - tachPulseTriggerIndex = "Trigger cycle index at which we start tach pulse (performance consideration)" - wwaeTau = "Length of time the deposited wall fuel takes to dissipate after the start of acceleration. " - wwaeBeta = "0 = No fuel settling on port walls 1 = All the fuel settling on port walls setting this to 0 disables the wall wetting enrichment. " - communicationLedPin = "blue LED on many rusEFI boards.\nBlue Communication LED which is expected to blink at 50% duty cycle during normal board operation.\nIf USB communication cable is connected Blue LED starts to blink faster." - runningLedPin = "Green LED on many rusEFI boards.\nOff if engine is stopped, blinks if engine is cranking, solid if engine is running." - throttlePedalWOTVoltage = "Pedal in the floor" - startUpFuelPumpDuration = "on ECU start turn fuel pump on to build fuel pressure" - targetVBatt = "This is the target battery voltage the alternator PID control will attempt to maintain" - alternatorOffAboveTps = "Turns off alternator output above specified TPS, enabling this reduced parasitic drag on the engine at full load." - startOfCrankingPrimingPulse = "Prime pulse for cold engine, duration in ms\nLinear interpolation between -40F/-40C and fallout temperature\n\nSee also isFasterEngineSpinUpEnabled\nset cranking_priming_pulse X" - afterCrankingIACtaperDuration = "This is the duration in cycles that the IAC will take to reach its normal idle position, it can be used to hold the idle higher for a few seconds after cranking to improve startup." - iacByTpsTaper = "Extra IAC, in percent between 0 and 100, tapered between zero and idle deactivation TPS value" - tpsAccelLength = "This is the number of engine cycles that the TPS position change can occur over, a longer duration will make the enrichment more active but too long may affect steady state driving, a good default is 30-60 cycles. " - tpsAccelEnrichmentThreshold = "Maximum change delta of TPS percentage over the 'length'. Actual TPS change has to be above this value in order for TPS/TPS acceleration to kick in." - vvtOffset = "Angle between cam sensor and VVT zero position\nset vvt_offset X" - slowAdcAlpha = "ExpAverage alpha coefficient" - debugMode = "See http://rusefi.com/s/debugmode\n\nset debug_mode X" - throttlePedalSecondaryWOTVoltage = "Pedal in the floor" - dizzySparkOutputPin = "This implementation makes a pulse every time one of the coils is charged, using coil dwell for pulse width. See also tachOutputPin" - crankingIACposition = "This is the IAC position during cranking, some engines start better if given more air during cranking to improve cylinder filling." - postCrankingFactor = "Fuel multiplier (enrichment) immediately after engine start" - postCrankingDurationSec = "Time over which to taper out after start enrichment" - auxTempSensor1_bias_resistor = "Pull-up resistor value on your board" - auxTempSensor2_bias_resistor = "Pull-up resistor value on your board" - spi1MosiMode = "Modes count be used for 3v<>5v integration using pull-ups/pull-downs etc." - crankingAdvanceBins = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - crankingAdvance = "Optional timing advance table for Cranking (see useSeparateAdvanceForCranking)" - coastingFuelCutRpmHigh = "This sets the RPM limit above which the fuel cut is deactivated, activating this maintains fuel flow at high RPM to help cool pistons" - coastingFuelCutRpmLow = "This sets the RPM limit below which the fuel cut is deactivated, this prevents jerking or issues transitioning to idle" - coastingFuelCutTps = "percent between 0 and 100 below which the fuel cut is deactivated, this helps low speed drivability." - coastingFuelCutClt = "Fuel cutoff is deactivated below this coolant threshold." - pidExtraForLowRpm = "Increases PID reaction for RPM , 50, , true - - filter = VBatt, "VBatt", VBatt < , 12, , true - - filter = minTps, "Minimum TPS", TPSValue, < , 1, , true - - -;[VeAnalyze] -; fuelAnalyzeMap = fuelTableTbl, afrTableTbl, AFRValue, egoCorrection , { 1 } -; filter = minRPMFilter, "Minimum RPM", RPMValue, < , 500, , true - - - -[OutputChannels] - - ochGetCommand = "O%2o%2c" - -; see TS_OUTPUT_SIZE in console source code - ochBlockSize = 248 - -; -; see TunerStudioOutputChannels struct -; - -; Bit flags - hasSdCard = bits, U32, 0, [0:0], "true", "false"; - isIgnitionEnabledIndicator=bits,U32, 0, [1:1], "true", "false"; - ind_injection_enabled=bits,U32, 0, [2:2], "true", "false"; - isCylinderCleanupEnabled=bits,U32, 0, [3:3], "true", "false"; - isCylinderCleanupActivated=bits,U32, 0, [4:4], "true", "false"; - ind_fuel_pump = bits, U32, 0, [5:5], "true", "false"; - ind_fan = bits, U32, 0, [6:6], "true", "false"; - ind_o2_heater = bits, U32, 0, [7:7], "true", "false"; - ind_check_engine= bits, U32, 0, [8:8], "true", "false"; - needBurn = bits, U32, 0, [9:9], "true", "false"; - ind_2nd_trigger_en=bits, U32, 0, [10:10], "true", "false"; - clutchUpState =bits, U32, 0, [11:11], "true", "false"; - clutchDownState =bits, U32, 0, [12:12], "true", "false"; - knockEverIndicator=bits, U32, 0, [13:13], "true", "false"; - knockNowIndicator=bits, U32, 0, [14:14], "true", "false"; - brakePedalIndicator=bits, U32, 0, [15:15], "true", "false"; - toothLogReady =bits, U32, 0, [16:16], "true", "false"; - acSwitchIndicator =bits, U32, 0, [17:17], "true", "false"; - ind_tps_error = bits, U32, 0, [18:18], "true", "false"; - ind_clt_error = bits, U32, 0, [19:19], "true", "false"; -; not implemented -; ind_map_error = bits, U32, 0, [20:20], "true", "false"; - - ind_iat_error = bits, U32, 0, [21:21], "true", "false"; - ind_isTriggerError = bits, U32, 0, [23:23], "true", "false"; - ind_hasFatalError=bits, U32, 0, [24:24], "true", "false"; - ind_isWarnNow =bits, U32, 0, [25:25], "true", "false"; - ind_pedal_error =bits, U32, 0, [26:26], "true", "false"; - -; RPM, vss - RPMValue = scalar, U16, 4, "RPM", 1, 0.00000 - rpmAcceleration = scalar, S16, 6, "dRpm",{1/100}, 0 - speedToRpmRatio = scalar, S16, 8, "value",{1/100}, 0 - vehicleSpeedKph = scalar, U08, 10, "kph", 1, 0.0 - -; temperatures - internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 - coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 - intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 - - -; throttle, pedal - TPSValue = scalar, S16, 20, "%",{1/100}, 0 - throttlePedalPosition = scalar,S16, 22, "%",{1/100}, 0 - tpsADC = scalar, U16, 24, "ADC", 1, 0.0; - -; air flow/mass measurments - MAFValue = scalar, U16, 26, "V",,{1/1000},, 0 - massAirFlowValue= scalar, U16, 28, "Kg/h", {1/10}, 0 - MAPValue = scalar, U16, 30, "kPa",{1/30}, 0.0 - baroPressure = scalar, U16, 32, "kPa",{1/30}, 0.0 - AFRValue = scalar, U16, 34, "AFR",,{1/1000},, 0.0 - engineLoad = scalar, U16, 36, "%",{1/100}, 0.0 ; Blend of MAP and TPS, depends on algorithm - -; misc sensors - VBatt = scalar, U16, 38, "V",,{1/1000},, 0.0 - oilPressure = scalar, U16, 40, "kPa",{1/30}, 0.0 - vvtPosition = scalar, U16, 42, "deg",{1/50}, 0 - - ; 10 bit TPS ADC value (from 0 to 1023 in 5v scale) - ;tpsADC2 = scalar, U16, 44, "ADC", 1, 0.0; - -; fuel math - chargeAirMass = scalar, U16, 44, "g",0.001, 0 - crankingFuelMs = scalar, U16, 46, "ms",{1/300}, 0.0 - currentTargetAfr= scalar, U16, 48, "ratio",,{1/1000},, 0 - baseFuel = scalar, U16, 50, "ms",{1/300}, 0 - fuelRunning = scalar, U16, 52, "ms",{1/300}, 0 - actualLastInjection=scalar,U16, 54, "ms",{1/300}, 0.0 - injectorDutyCycle=scalar, U08, 56, "%", 0.5, 0 - veValue = scalar, U08, 57, "ratio", 0.5, 0 - injectionOffset = scalar, S16, 58, "deg",{1/50}, 0 - tCharge = scalar, U16, 60, "deg C",{1/100}, 0.0 - -; Corrections - injectorLagMs = scalar, U16, 62, "ms",{1/300}, 0.0 - iatCorrection = scalar, S16, 64, "%",{1/100}, 0 - cltCorrection = scalar, S16, 66, "%",{1/100}, 0 - baroCorrection = scalar, S16, 68, "%",{1/100}, 0 - fuelPidCorrection=scalar, S16, 70, "%",{1/100}, 0 - -; Wall model AE - wallFuelAmount = scalar, U16, 72, "ms",{1/300}, 0 - wallFuelCorrection=scalar, S16, 74, "ms",0.001, 0 - -; TPS/load AE - engineLoadDelta = scalar, S16, 76, "value",{1/100}, 0 - deltaTps = scalar, S16, 78, "ratio",{1/100}, 0 - engineLoadAccelExtra=scalar,S16, 80, "value",{1/100}, 0 - tpsAccelFuel = scalar, U16, 82, "ms",{1/300}, 0 - -; Ignition - ignitionAdvance = scalar, S16, 84, "deg",{1/50}, 0.0 - sparkDwellValue = scalar, U16, 86, "ms",{1/300}, 0.0 - coilDutyCycle = scalar, S16, 88, "%",{1/100}, 0 - -; Idle & ETB - idleAirValvePosition=scalar,S16, 90, "%",{1/100}, 0 - etbTarget = scalar, S16, 92, "%",{1/100}, 0 - etb1DutyCycle = scalar, S16, 94, "%",{1/100}, 0 - etb1Error = scalar, S16, 96, "%",{1/100}, 0 - -; Fuel system - fuelTankLevel = scalar, S16, 98, "amount",{1/100}, 0 - fuelConsumptionPerHour=scalar,F32, 100, "kPa", 1, 0.0 - -; Knock - knockCount = scalar, U32, 104,"counter", 1, 0 - knockLevel = scalar, F32, 108, "Volts", 1, 0 - -; Mode, firmware, protocol, run time -; TS requires 'seconds' name since it has special internal meaning - seconds = scalar, U32, 112, "sec", 1, 0.0 - engineMode = scalar, U32, 116, "em", 1, 0.0; - firmwareVersion = scalar, U32, 120,"version_f", 1, 0 - - -; calibation helpers - calibrationValue = scalar, F32, 128, "", 1, 0 - calibrationMode = scalar, U08, 132, "", 1, 0 - ; 1 bytes padding1 - - fuelingLoad = scalar, U16, 134, "%", 0.01, 0 - ignitionLoad = scalar, U16, 136, "%", 0.01, 0 - - engineMakeCodeNameCrc16= scalar, U16, 138, "crc16", 1, 0 - -; Errors - totalTriggerErrorCounter=scalar,U32, 140,"counter", 1, 0 - ; orderingErrorCounter 144 - warningCounter = scalar, U16, 148, "count", 1, 0 - lastErrorCode = scalar, U16, 150, "error", 1, 0 - recentErrorCode0= scalar, U16, 152, "error", 1, 0 - recentErrorCode1= scalar, U16, 154, "error", 1, 0 - recentErrorCode2= scalar, U16, 156, "error", 1, 0 - recentErrorCode3= scalar, U16, 158, "error", 1, 0 - recentErrorCode4= scalar, U16, 160, "error", 1, 0 - recentErrorCode5= scalar, U16, 162, "error", 1, 0 - recentErrorCode6= scalar, U16, 164, "error", 1, 0 - recentErrorCode7= scalar, U16, 166, "error", 1, 0 - -; Debug - debugFloatField1= scalar, F32, 168, "val", 1, 0.0 - debugFloatField2= scalar, F32, 172, "val", 1, 0.0 - debugFloatField3= scalar, F32, 176, "val", 1, 0.0 - debugFloatField4= scalar, F32, 180, "val", 1, 0.0 - debugFloatField5= scalar, F32, 184, "val", 1, 0.0 - debugFloatField6= scalar, F32, 188, "val", 1, 0.0 - debugFloatField7= scalar, F32, 192, "val", 1, 0.0 - debugIntField1 = scalar, S32, 196, "val", 1, 0.0 - debugIntField2 = scalar, S32, 200, "val", 1, 0.0 - debugIntField3 = scalar, S32, 204, "val", 1, 0.0 - debugIntField4 = scalar, S16, 208, "val", 1, 0.0 - debugIntField5 = scalar, S16, 210, "val", 1, 0.0 - -; Accel - accelerationX = scalar, S16, 212, "G", 0.01, 0 - accelerationY = scalar, S16, 214, "G", 0.01, 0 - -; egt - egt1 = scalar, S16, 216, "deg C", 1, 0 - egt2 = scalar, S16, 218, "deg C", 1, 0 - egt3 = scalar, S16, 220, "deg C", 1, 0 - egt4 = scalar, S16, 222, "deg C", 1, 0 - egt5 = scalar, S16, 224, "deg C", 1, 0 - egt6 = scalar, S16, 226, "deg C", 1, 0 - egt7 = scalar, S16, 228, "deg C", 1, 0 - egt8 = scalar, S16, 230, "deg C", 1, 0 - - TPS2Value = scalar, S16, 232, "%",{1/100}, 0 - - rawTps1Primary = scalar, U16, 234, "V",{1/1000}, 0.0 - rawPpsPrimary = scalar, U16, 236, "V",{1/1000}, 0.0 - rawClt = scalar, U16, 238, "V",{1/1000}, 0.0 - rawIat = scalar, U16, 240, "V",{1/1000}, 0.0 - rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 - - ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 - -; -; see TunerStudioOutputChannels struct -; - -; todo: generate this section programatically - LM_PLAIN_MAF = {0}, - LM_ALPHA_N = {1}, - LM_SPEED_DENSITY = {3}, - LM_REAL_MAF = {4} - - egoCorrection = { 100 } - time = { timeNow } - - ; These "synthetic" channels provide the Y-axis (load) value for gen purp PWM table's Y axes - gppwm1_load = {(gppwm1_loadAxis == 0) ? TPSValue : ((gppwm1_loadAxis == 1) ? MAPValue : ((gppwm1_loadAxis == 2) ? coolant : intake))} - gppwm2_load = {(gppwm2_loadAxis == 0) ? TPSValue : ((gppwm2_loadAxis == 1) ? MAPValue : ((gppwm2_loadAxis == 2) ? coolant : intake))} - gppwm3_load = {(gppwm3_loadAxis == 0) ? TPSValue : ((gppwm3_loadAxis == 1) ? MAPValue : ((gppwm3_loadAxis == 2) ? coolant : intake))} - gppwm4_load = {(gppwm4_loadAxis == 0) ? TPSValue : ((gppwm4_loadAxis == 1) ? MAPValue : ((gppwm4_loadAxis == 2) ? coolant : intake))} - -[PcVariables] - tuneCrcPcVariable = continuousChannelValue, tuneCrc16 - - wueAfrTargetOffset = array, S16, [ 16], ":1", 0.1, 0.0, -3.0, 3.0, 1; - wueAnalRecommend = array, U08, [ 16], "%", 1.00, 0.0, 100, 255.00, 0 - -; These are inverted (false = "Yes") so that they default to enabled - enableLogDebugChannels = bits, U08, [0:0], "Yes", "No" - enableLogErrorList = bits, U08, [0:0], "Yes", "No" - -; wall of debug mode :) -; https://rusefi.com/wiki/index.php?title=Manual:Debug_fields -; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 -; Alternator TPS Acceleration Warmup-Pid Idle Engine Load Acc Trigger Counters VVT Cranking Ignition Timing ETB PID FSIO_1_7 CJ125 CAN TLE8888 Analog inputs 2 Boost Start Launcher ETB Autotune FSIO_8_14 FSIO_SPECIAL - debugFieldF1List = bits, U08, [0:7], "Controller Output", "From TPS", "", "Controller Output", "Idle output", "Channel 1 Rise Counter", "", "", "VVT Event Position","", "Ign IAT Corr", "", "", "", "", "", "", "ETB Controller Output", "", "", "df1", "df1", "22df1", "fsio 1", "24:df1", "CJ125: output", "", "", "", "", "", "", "TPS1 Pri/Sec Diff", "", "", "", "Boost Open Loop Duty", "S unused" "", "Osc Amplitude", "", "fsio 8", "idle offset","" - debugFieldF2List = bits, U08, [0:7], "I-Term", "To TPS", "", "I-Term", "Idle df2", "Channel 2 Rise Counter", "", "", "VVT Ratio", "", "Ign CLT Corr", "", "", "", "", "", "", "ETB I-Term", "", "", "df2", "df2", "22df2", "fsio 2", "24:df2", "CJ125: i-term", "", "", "", "", "", "", "TPS2 Pri/Sec Diff", "", "", "", "Boost Closed Loop Duty","S unused" "", "Duty Amplitude", "", "fsio 9", "idle min", "" - debugFieldF3List = bits, U08, [0:7], "Previous Error", "Current TPS<>TPS", "", "", "Idle df3", "ICU sum", "", "", "", "", "Ign FSIO Adj", "", "", "", "", "", "", "ETB err", "", "", "df3", "df3", "22df3", "fsio 3", "24:df3", "CJ125: err", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Tu", "", "fsio 10", "", "" - debugFieldF4List = bits, U08, [0:7], "I Gain", "Extra Fuel", "", "", "Idle df4", "VVT rise", "", "", "", "", "Ign PID Adj", "", "", "", "", "", "", "ETB I setting", "", "", "df4", "df4", "22df4", "fsio 4", "24:df4", "CJ125: UA", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ku", "", "fsio 11", "", "" - debugFieldF5List = bits, U08, [0:7], "D Gain", "df5", "df5", "df5", "Idle df5", "VVT fall", "df5", "", "", "", "", "", "", "", "", "", "", "ETB D setting", "df5", "df5", "df5", "df5", "22df5", "fsio 5", "24:df5", "CJ125: UR", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kp", "", "fsio 12", "", "" - debugFieldF6List = bits, U08, [0:7], "D Term", "", "", "", "Idle df6", "Current Gap", "", "", "", "", "", "", "", "", "", "", "", "ETB df6", "", "", "df6", "df6", "22df6", "fsio 6", "24:df6", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Ki", "", "fsio 13", "", "" - debugFieldF7List = bits, U08, [0:7], "Max-Value", "", "", "", "Idle df7", "", "", "", "", "", "", "", "", "", "", "", "", "ETB df7", "", "", "df7", "df7", "22df7", "fsio 7", "24:df7", "cj: f7", "", "", "", "", "", "", "", "", "", "", "", "S unused" "", "Kd", "", "fsio 14", "", "" - - debugFieldI1List = bits, U08, [0:7], "P-Gain", "", "", "", "Idle di1", "Channel 1 Fall Counter", "", "", "VVT Sync Counter", "", "Multispark Count", "", "", "", "", "", "", "ETB P-Gain", "", "", "di1", "di1", "22di1", "", "24:di1", "CJ125: state", "read count","", "", "", "", "SPI Counter", "", "", "", "", "", "Start Count" "", "", "", "", "", "" - debugFieldI2List = bits, U08, [0:7], "Offset", "", "", "", "Idle di2", "Channel 2 Fall Counter", "", "", "", "", "", "", "", "", "", "", "", "ETB di2", "", "", "di2", "di2", "22di2", "", "24:di2", "", "write count","", "", "", "", "Latest Transmit","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI3List = bits, U08, [0:7], "", "", "", "", "Idle di3", "Cycle Index", "", "", "", "", "", "", "", "", "", "", "", "ETB di3", "", "", "di3", "di3", "22di3", "", "24:di3", "", "write err", "", "", "", "", "Latest Received","", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI4List = bits, U08, [0:7], "", "", "", "", "Idle di4", "Cycle Cnt 1", "", "", "", "", "", "", "", "", "", "", "", "ETB di4", "", "", "di4", "di4", "22di4", "", "24:di4", "", "", "", "", "", "", "Init Count", "", "", "", "", "", "S unused" "", "", "", "", "", "" - debugFieldI5List = bits, U08, [0:7], "", "", "", "", "Idle di5", "Cycle Cnt 2", "", "", "", "", "", "", "", "", "", "di5", "di5", "ETB di5", "di5", "di5", "di5", "di5", "22di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "di5", "", "di5", "di5", "di5", "di5", "S di5" "", "", "", "", "", "" - -[ConstantsExtensions] - ; defaultValue is used to provide TunerStudio with a value to use in the case of - ; the constant not yet being initialized. This is primarily important if the - ; constant is used as a variable in the ini. - ; defaultValue = constantName, value; - defaultValue = wueAfrTargetOffset, -1.5 -1.4 -1.15 -0.95 -0.775 -0.65 -0.5625 -0.5 -0.4375 -0.375 -0.3125 -0.25 -0.1875 -0.125 -0.0625 0 - - ; TPS 1 Primary - maintainConstantValue = tpsMax, { (calibrationMode == 1 ) ? calibrationValue : tpsMax } - maintainConstantValue = tpsMin, { (calibrationMode == 2 ) ? calibrationValue : tpsMin } - - ; TPS 1 Secondary - maintainConstantValue = tps1SecondaryMax, { (calibrationMode == 6 ) ? calibrationValue : tps1SecondaryMax } - maintainConstantValue = tps1SecondaryMin, { (calibrationMode == 7 ) ? calibrationValue : tps1SecondaryMin } - - ; ETB Auto Gain Calibration - maintainConstantValue = etb_pFactor, { (calibrationMode == 3 ) ? calibrationValue : etb_pFactor } - maintainConstantValue = etb_iFactor, { (calibrationMode == 4 ) ? calibrationValue : etb_iFactor } - maintainConstantValue = etb_dFactor, { (calibrationMode == 5 ) ? calibrationValue : etb_dFactor } - - requiresPowerCycle = warningLedPin - requiresPowerCycle = runningLedPin - requiresPowerCycle = binarySerialTxPin - requiresPowerCycle = binarySerialRxPin - - requiresPowerCycle = etb_use_two_wires - requiresPowerCycle = etbFreq - - requiresPowerCycle = idle_solenoidFrequency - requiresPowerCycle = boostPwmFrequency - requiresPowerCycle = alternatorPwmFrequency - requiresPowerCycle = auxPidFrequency1 - requiresPowerCycle = auxPidFrequency2 - requiresPowerCycle = auxPidFrequency3 - requiresPowerCycle = auxPidFrequency4 - - requiresPowerCycle = fsioOutputPins1 - requiresPowerCycle = fsioOutputPins2 - requiresPowerCycle = fsioOutputPins3 - requiresPowerCycle = fsioOutputPins4 - requiresPowerCycle = fsioOutputPins5 - requiresPowerCycle = fsioOutputPins6 - requiresPowerCycle = fsioOutputPins7 - requiresPowerCycle = fsioOutputPins8 - requiresPowerCycle = fsioOutputPins9 - requiresPowerCycle = fsioOutputPins10 - requiresPowerCycle = fsioOutputPins11 - requiresPowerCycle = fsioOutputPins12 - requiresPowerCycle = fsioOutputPins13 - requiresPowerCycle = fsioOutputPins14 - requiresPowerCycle = fsioOutputPins15 - requiresPowerCycle = fsioOutputPins16 - - requiresPowerCycle = fsioFrequency1 - requiresPowerCycle = fsioFrequency2 - requiresPowerCycle = fsioFrequency3 - requiresPowerCycle = fsioFrequency4 - requiresPowerCycle = fsioFrequency5 - requiresPowerCycle = fsioFrequency6 - requiresPowerCycle = fsioFrequency7 - requiresPowerCycle = fsioFrequency8 - requiresPowerCycle = fsioFrequency9 - requiresPowerCycle = fsioFrequency10 - requiresPowerCycle = fsioFrequency11 - requiresPowerCycle = fsioFrequency12 - requiresPowerCycle = fsioFrequency13 - requiresPowerCycle = fsioFrequency14 - requiresPowerCycle = fsioFrequency15 - requiresPowerCycle = fsioFrequency16 - - requiresPowerCycle = fsioAdc1 - requiresPowerCycle = fsioAdc2 - requiresPowerCycle = fsioAdc3 - requiresPowerCycle = fsioAdc4 - - readOnly = warning_message - - -[CurveEditor] -; xAxis = leftValue, rightValue, step -; yAxis = bottomValue, topValue, step - - - curve = knockThresholdCurve, "Engine knock threshold RPM based" - columnLabel = "RPM", "Threshold" - xAxis = 0, 8000, 10 - yAxis = 0, 8, 10 - xBins = knockNoiseRpmBins, RPMValue - yBins = knockNoise - gauge = RPMGauge - - curve = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - columnLabel = "Voltage", "AFR" - xAxis = 0, 6, 10 - yAxis = 0, 28, 10 - xBins = narrowToWideOxygenBins - yBins = narrowToWideOxygen - gauge = afr1Gauge - - curve = fsioCurve1, "FSIO Curve #1" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -155, 150, 10 - xBins = fsioCurve1Bins - yBins = fsioCurve1 - - curve = fsioCurve2, "FSIO Curve #2" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -150, 150, 10 - xBins = fsioCurve2Bins - yBins = fsioCurve2 - - curve = fsioCurve3, "FSIO Curve #3" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve3Bins - yBins = fsioCurve3 - - curve = fsioCurve4, "FSIO Curve #4" - columnLabel = "X", "Y" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = fsioCurve4Bins - yBins = fsioCurve4 - - curve = mapAccelTaper, "Engine Load Acceleration Enrichment Taper" - columnLabel = "Distance", "Multiplier" - xAxis = 0, 128, 10 - yAxis = -5, 5, 10 - xBins = mapAccelTaperBins - yBins = mapAccelTaperMult - - curve = dwellCorrection, "Dwell time RPM based" - columnLabel = "RPM", "Dwell" - xAxis = 0, 8000, 10 - yAxis = 0, 30, 10 - xBins = sparkDwellRpmBins, RPMValue - yBins = sparkDwellValues - gauge = RPMGauge - - curve = map_samplingAngleCurve, "MAP Sampling Start Angle" - columnLabel = "RPM", "Angle" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingAngleBins, RPMValue - yBins = map_samplingAngle - gauge = MAPGauge - - curve = map_samplingWindowCurve, "MAP Sampling Duration" - columnLabel = "RPM", "Window" - xAxis = 0, 8000, 10 - yAxis = 0, 180, 10 - xBins = map_samplingWindowBins, RPMValue - yBins = map_samplingWindow - gauge = MAPGauge - - curve = injectorsDeadTime, "Injector Dead Time by VBatt" - columnLabel = "Voltage", "Dead Time" - xAxis = 8, 21, 10 - yAxis = -3, 3, 10 - xBins = injector_battLagCorrBins, VBatt - yBins = injector_battLagCorr - gauge = VBattGauge - - curve = mafDecodingCurve, "MAF sensor" - columnLabel = "Voltage", "kg/hour" - xAxis = -1, 6, 10 - yAxis = -30, 1300, 10 - xBins = mafDecodingBins, MAFValue - yBins = mafDecoding - gauge = MAFGauge - - curve = iatFuelCorrCurve, "Intake air temperature fuel Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 2, 11 - xBins = iatFuelCorrBins, intake - yBins = iatFuelCorr - gauge = IATGauge - - curve = cltTimingCorrCurve, "Warmup timing correction" - columnLabel = "Coolant", "Extra" - xAxis = -40, 120, 10 - yAxis = 0, 50, 10 - xBins = cltTimingBins, coolant - yBins = cltTimingExtra - gauge = CLTGauge - - curve = cltFuelCorrCurve, "Warmup fuel manual Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - gauge = CLTGauge - - curve = crankingCltCurve, "Cranking Coolant Temperature Multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingFuelBins, coolant - yBins = crankingFuelCoef - gauge = CLTGauge - - curve = etbTpsBiasCurve, "Electronic TB Bias Curve" - columnLabel = "TPS", "duty bias" - xAxis = 0, 50, 11 - yAxis = -40, 40, 9 - xBins = etbBiasBins, TPSValue - yBins = etbBiasValues - gauge = TPSGauge - - curve = crankingTpsCurve, "Cranking TPS Multiplier" - columnLabel = "TPS", "Multiplier" - xAxis = 0, 100, 10 - yAxis = 0, 3, 10 - xBins = crankingTpsBins, TPSValue - yBins = crankingTpsCoef - gauge = TPSGauge - - curve = crankingDurationCurve, "Cranking Duration Multiplier" - columnLabel = "Engine Cycle", "Multiplier" - xAxis = 0, 1000, 10 - yAxis = 0, 3, 10 - xBins = crankingCycleBins - yBins = crankingCycleCoef - - - curve = cltIdleCurve, "Warmup Idle multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltIdleCorrBins, coolant - yBins = cltIdleCorr - gauge = CLTGauge - - curve = iacCoastingCurve, "Coasting IAC Position for Auto-Idle" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 100, 10 - xBins = iacCoastingBins, coolant - yBins = iacCoasting - gauge = idleAirValvePositionGauge - - curve = cltCrankingCurve, "Cranking Idle Air multiplier" - columnLabel = "Coolant", "Multiplier" - xAxis = -40, 120, 10 - yAxis = 0, 3, 10 - xBins = cltCrankingCorrBins, coolant - yBins = cltCrankingCorr - gauge = CLTGauge - - curve = cltIdleRPMCurve, "Idle Target RPM" - columnLabel = "Coolant", "RPM" - xAxis = -40, 120, 10 - yAxis = 0, 8000, 10 - xBins = cltIdleRpmBins, coolant - yBins = cltIdleRpm, RPMValue - gauge = CLTGauge - - curve = idleAdvanceCurve, "Idle Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = idleAdvanceBins, RPMValue - yBins = idleAdvance - gauge = RPMGauge - - curve = idleVeCurve, "Idle VE" - columnLabel = "RPM", "%" - xAxis = 0, 8000, 10 - yAxis = 0, 250, 10 - xBins = idleVeBins, RPMValue - yBins = idleVe - gauge = afr1Gauge - - curve = crankingAdvanceCurve, "Cranking Advance Angle" - columnLabel = "RPM", "degrees" - xAxis = 0, 8000, 10 - yAxis = -100, 100, 10 - xBins = crankingAdvanceBins, RPMValue - yBins = crankingAdvance - gauge = RPMGauge - - curve = wueAfrTargetOffsetCurve, "AFR Target Temperature Adjustment" - columnLabel = "Coolant", "AFR Offset" - xAxis = -40, 200, 9 - yAxis = -3, 1, 5 - xBins = cltFuelCorrBins, coolant - yBins = wueAfrTargetOffset - gauge = cltGauge - - curve = wueAnalyzer_warmup_curve, "Warmup Enrichment" - columnLabel = "Coolant", "Current WUE", "Coolant", "Corrected" - xAxis = -40, 200, 9 - yAxis = 90, 500, 6 - xBins = cltFuelCorrBins, coolant - yBins = cltFuelCorr - yBins = wueAnalRecommend - ;gauge = cltGauge - - lineLabel = "Warmup Correction" - lineLabel = "Recommended WUE" - -[TableEditor] - ; table_id, map3d_id, "title", page - - table = fuelTableMAFTbl, fuelTableMAFMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, MAFValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableTPSTbl, fuelTableTPSMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, TPSValue - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = fuelTableELTbl, fuelTableELMap, "Fuel Table", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = fuelRpmBins, RPMValue - yBins = fuelLoadBins, engineLoad - zBins = fuelTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - -; move table into a panel? or find a way to add a link to https://rusefi.com//wiki/index.php?title=Manual:Software:TPSTPS - table = tpsTpsAccelTbl, tpsTpsAccelMap, "TPS/TPS Acceleration Extra Fuel(ms)", 1 - topicHelp = "tpstpsHelp" - xBins = tpsTpsAccelFromRpmBins, TPSValue - yBins = tpsTpsAccelToRpmBins, TPSValue - zBins = tpsTpsAccelTable - - table = boostTableTbl, boostMapOpen, "Boost Open", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableOpenLoop - - table = boostTable2Tbl, boostMapClosed, "Boost Closed", 1 - xBins = boostRpmBins, RPMValue - yBins = boostTpsBins, TPSValue - zBins = boostTableClosedLoop - - - - table = fsioTable1Tbl, fsioTable1Map, "FSIO Table #1", 1 - xBins = fsioTable1RpmBins, RPMValue - yBins = fsioTable1LoadBins, fuelingLoad - zBins = fsioTable1 - - table = fsioTable2Tbl, fsioTable2Map, "FSIO Table #2", 1 - xBins = fsioTable2RpmBins, RPMValue - yBins = fsioTable2LoadBins, fuelingLoad - zBins = fsioTable2 - - table = fsioTable3Tbl, fsioTable3Map, "FSIO Table #3", 1 - xBins = fsioTable3RpmBins, RPMValue - yBins = fsioTable3LoadBins, fuelingLoad - zBins = fsioTable3 - - table = fsioTable4Tbl, fsioTable4Map, "FSIO Table #4", 1 - xBins = fsioTable4RpmBins, RPMValue - yBins = fsioTable4LoadBins, fuelingLoad - zBins = fsioTable4 - - table = baroCorrTbl, baroCorrMap, "Baro Correction", 1 - ; constant, variable - xBins = baroCorrRpmBins, RPMValue - yBins = baroCorrPressureBins, baroPressure - zBins = baroCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTableTbl, ignitionTableMap, "Ignition Table", 1 - ; constant, variable - xBins = ignitionRpmBins, RPMValue -#if FA_PLAIN_MAF - yBins = ignitionLoadBins, MAFValue -#elif FA_TPS - yBins = ignitionLoadBins, TPSValue -#else - yBins = ignitionLoadBins, engineLoad -#endif - - zBins = ignitionTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionTpsTableTbl, ignitionTableMap, "Ignition TPS Table", 1 - ; constant, variable - ; Currently we share ignitionRpmBins between two advance tables... Is it ok? - xBins = ignitionRpmBins, RPMValue - yBins = ignitionTpsBins, TPSValue - - zBins = ignitionTpsTable - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = ignitionIatCorrTableTbl, ignitionIatCorrTableMap, "Ignition Intake Air Temp correction", 1 - ; constant, variable - xBins = ignitionIatCorrRpmBins, RPMValue - yBins = ignitionIatCorrLoadBins, intake - zBins = ignitionIatCorrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = veTableTbl, veTableMap, "VE Table", 1 - ; constant, variable - xBins = veRpmBins, RPMValue -#if tuneByTPS - yBins = ignitionTpsBins, TPSValue -#else - yBins = veLoadBins, fuelingLoad -#endif - zBins = veTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - - table = injPhaseTableTbl, injPhaseTableMap, "Injection Phase", 1 - topicHelp = "fuelHelp" - ; constant, variable - xBins = injPhaseRpmBins, RPMValue - yBins = injPhaseLoadBins, fuelingLoad - zBins = injectionPhase -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = pedalToTpsTbl, pedalToTpsMap, "ETB Pedal to TPS", 1 - ; constant, variable - xBins = pedalToTpsRpmBins, RPMValue - yBins = pedalToTpsPedalBins, throttlePedalPosition - zBins = pedalToTpsTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - - table = afrTableTbl, afrTableMap, "Target AFR Table", 1 - ; constant, variable - xBins = afrRpmBins, RPMValue - yBins = afrLoadBins, fuelingLoad - zBins = afrTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(RICHER)", "(LEANER)" - - table = iacPidMultTbl, iacPidMultMap, "IAC PID Multiplier Table", 1 - ; constant, variable - xBins = iacPidMultRpmBins, RPMValue - yBins = iacPidMultLoadBins, fuelingLoad - zBins = iacPidMultTable -; gridHeight = 2.0 - gridOrient = 250, 0, 340 ; Space 123 rotation of grid in degrees. - upDownLabel = "(Later)", "(Sooner)" - - table = gppwm1Tbl, gppwm1Map, "GP#1", 1 - xyLabels = "RPM", "" - xBins = gppwm1_rpmBins, RPMValue - yBins = gppwm1_loadBins, gppwm1_load - zBins = gppwm1_table - - table = gppwm2Tbl, gppwm2Map, "GP#2", 1 - xyLabels = "RPM", "" - xBins = gppwm2_rpmBins, RPMValue - yBins = gppwm2_loadBins, gppwm2_load - zBins = gppwm2_table - - table = gppwm3Tbl, gppwm3Map, "GP#3", 1 - xyLabels = "RPM", "" - xBins = gppwm3_rpmBins, RPMValue - yBins = gppwm3_loadBins, gppwm3_load - zBins = gppwm3_table - - table = gppwm4Tbl, gppwm4Map, "GP#4", 1 - xyLabels = "RPM", "" - xBins = gppwm4_rpmBins, RPMValue - yBins = gppwm4_loadBins, gppwm4_load - zBins = gppwm4_table - -[GaugeConfigurations] - -gaugeCategory = Sensors - Extra 2 - egt1Gauge = egt1, "EGT#1", "C", 0, 2000 - egt2Gauge = egt2, "EGT#2", "C", 0, 2000 - egt3Gauge = egt3, "EGT#3", "C", 0, 2000 - egt4Gauge = egt4, "EGT#4", "C", 0, 2000 - egt5Gauge = egt5, "EGT#5", "C", 0, 2000 - egt6Gauge = egt6, "EGT#6", "C", 0, 2000 - egt7Gauge = egt7, "EGT#7", "C", 0, 2000 - egt8Gauge = egt8, "EGT#8", "C", 0, 2000 - rpmAccelerationGa = rpmAcceleration, "rpm delta", "dRpm", 0, 3, 0, 1, 3, 4, 1, 1 - knockCountGauge = knockCount,"Knock count", "count", 0, 120, 10, 10, 100, 100, 1, 1 - knockLevelGauge = knockLevel,"Knock level", "volts", 0, 7, 10, 10, 100, 100, 1, 2 - fuelTankLevelGauge = fuelTankLevel,"Fuel level", "x", 0, 7, 10, 10, 100, 100, 1, 2 - speedToRpmRatioGauge = speedToRpmRatio, "speed2rpm", "", 0, 100, 0, 0, 100, 100, 4, 4 - -gaugeCategory = ECU Status - warningCounterGauge = warningCounter, "Warning count", "", 0, 100, 0, 0, 100, 100, 0, 0 - lastErrorCodeGauge = lastErrorCode, "Last error", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - triggerErrorsCounterGauge = totalTriggerErrorCounter, "Trigger error count", "count", 0, 15000, 0, 0, 6000, 6000, 0, 0 - recentErrorCode0Gauge = recentErrorCode0, "Error#1", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode1Gauge = recentErrorCode1, "Error#2", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode2Gauge = recentErrorCode2, "Error#3", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode3Gauge = recentErrorCode3, "Error#4", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode4Gauge = recentErrorCode4, "Error#5", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode5Gauge = recentErrorCode5, "Error#6", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode6Gauge = recentErrorCode6, "Error#7", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - recentErrorCode7Gauge = recentErrorCode7, "Error#8", "", 0, 18000, 0, 0, 18000, 18000, 0, 0 - firmwareVersionGauge = firmwareVersion , "ECU Software Version", "%", 0, 100, 0, 0, 100, 100, 0, 0 - timeSecondsGauge = seconds, "Uptime", "sec", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Debug - debugF1Gauge = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF2Gauge = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF3Gauge = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF4Gauge = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF5Gauge = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugF6Gauge = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )}, "", -100, 100, 0, 0, 100, 100, 4, 4 - debugF7Gauge = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 4, 4 - debugI1Gauge = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI2Gauge = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI3Gauge = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI4Gauge = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - debugI5Gauge = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )}, "", 0, 100, 0, 0, 100, 100, 0, 0 - - -gaugeCategory = Sensors - Basic - RPMGauge = RPMValue, "RPM - engine speed", "RPM", 0, 15000, 200, 500, 6000, 6000, 0, 0 - CLTGauge = coolant, "Coolant temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - IATGauge = intake, "Intake air temp", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - afr1Gauge = AFRValue, "Air fuel ratio", "", 10, 19.4, 12, 13, 15, 16, 2, 2 - MAFGauge = MAFValue, "Mass air flow", "v", 0, 5, 0, 1, 3, 4, 1, 1 - VBattGauge = VBatt, "Battery voltage", "V", 8, 21, 9, 10, 17, 19, 1, 1 - MAPGauge = MAPValue, "MAP", "kPa", 0, 300, 10, 10, 200, 200, 0, 0 - massAirFlowValueGa = massAirFlowValue,"Mass air flow", "kg/hr", 0, 50, -999, -999, 999, 999, 1, 1 - - -gaugeCategory = Sensors - Extra 1 - VSSGauge = vehicleSpeedKph, "Vehicle speed", "kmh", 0, 200, 0, 1, 3, 4, 1, 1 - accelerationXGauge = accelerationX, "Acceleration: X", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - accelerationYGauge = accelerationY, "Acceleration: Y", "acc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - atmPresCGauge = baroPressure, "Barometric pressure", "kPa", 0, 1024, 0, 0, 0, 0, 0, 0 - vvtPositionGauge = vvtPosition, "VVT position", "deg", 0, 100, 0, 0, 720, 720, 0, 0 - internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 - OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 - idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - -gaugeCategory = Ignition - ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 - dwellGauge = sparkDwellValue, "Dwell", "mSec", 0, 10, 0.5, 1.0, 6.0, 8.0, 1, 1 - coilDutyCycleGauge = coilDutyCycle, "dwell: coil duty cycle", "perc", -11, 11, 1.0, 1.2, 100, 100, 3, 1 - ignitionLoadGauge = ignitionLoad, "ign: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Acceleration Enrichment - engineLoadDeltaGauge = engineLoadDelta,"AE: load change","value", 0, 120, 10, 10, 100, 100, 1, 1 - engineLoadAccelExtraGauge = engineLoadAccelExtra,"AE: load extra","value", 0, 120, 10, 10, 100, 100, 1, 1 - deltaTpsGauge = deltaTps, "AE: TPS change", "", 0, 120, 10, 10, 100, 100, 1, 1 - tpsAccelFuelGauge = tpsAccelFuel,"AE: TPS enrich", "ms", 0, 120, 10, 10, 100, 100, 1, 1 - wallFuelAmountGauge = wallFuelAmount, "AE: wall amount", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - wallFuelCorrectionGauge = wallFuelCorrection, "AE: wall correction extra", "ms", 0, 100, 0, 0, 100, 100, 0, 0 - -gaugeCategory = Fueling - ;Name Var Title Units Lo Hi LoD LoW HiW HiD vd ld - tChargeGauge = tCharge, "fuel: Estimated charge temperature", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 - baroCorrectionGauge = baroCorrection,"fuel: Barometric pressure correction", "ratio", 0.5, 1.5, 0.6, 0.7, 1.3, 1.4, 1, 1 - crankingFuelGauge = crankingFuelMs, "fuel: cranking", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - iatCorrectionGauge = iatCorrection, "fuel: IAT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - cltCorrectionGauge = cltCorrection, "fuel: CLT correction", "mult", 0, 3, 0, 0, 3, 3, 2, 2 - injectorDutyCycleGauge=injectorDutyCycle, "fuel: injector duty cycle","%", 0, 120, 10, 10, 100, 100, 1, 1 - actualLastInjectionGauge = actualLastInjection, "fuel: Last injection", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - veValueGauge = veValue, "fuel: VE", "", 0, 120, 10, 10, 100, 100, 1, 1 - - injectorLagMsGauge = injectorLagMs, "fuel: injector lag", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelRunningGauge = fuelRunning, "fuel: running", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - baseFuelGauge = baseFuel, "fuel: base", "mSec", 0, 25.5, 1.0, 1.2, 20, 25, 3, 1 - fuelPidCorrectionGauge = fuelPidCorrection, "fuel: Short-term fuel trim", "%", -10, 10, -8, -5, 5, 8, 3, 1 - fuelingLoadGauge = fuelingLoad, "fuel: load", "%", 0, 300, 0, 0, 300, 300, 1, 1 - -gaugeCategory = Throttle Body (incl. ETB) - pedalPositionGauge = throttlePedalPosition, "Throttle pedal position", "%", 0, 120, 0, 0, 100, 100, 1, 1 - tpsADCGauge = tpsADC, "tps1 ADC", "ADC", 0, 1024, 0, 0, 0, 0, 0, 0 - TPSGauge = TPSValue, "Throttle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 - TPS2Gauge = TPS2Value, "Throttle position #2", "%", 0, 100, 0, 0, 100, 100, 1, 1 - - etbTargetGauge = etbTarget, "ETB position target", "%", 0, 100, 0, 0, 100, 100, 1, 1 - etbErrorGauge = etb1Error, "ETB position error", "%", -20, 20, -10, -5, 5, 10, 2, 0 - etbDutyCycleGauge = etb1DutyCycle, "ETB Duty", "%", -100, 100, -75, -50, 50, 75, 0, 0 - -gaugeCategory = Sensors - Raw - rawTps1PrimaryGauge = rawTps1Primary, "Raw TPS 1 Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawPpsPrimaryGauge = rawPpsPrimary , "Raw Pedal Primary", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawCltGauge = rawClt , "Raw CLT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawIatGauge = rawIat , "Raw IAT", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - rawOilPressureGauge = rawOilPressure, "Raw Oil Pressure", "volts", 0, 5, 0, 0, 5, 5, 3, 0 - -[WueAnalyze] - -; wueCurveName, afrTempCompensationCurve, lambdaTargetTableName, lambdaChannel, coolantTempChannel, egoCorrectionChannel, wueChannel, activeCondition - wueAnalyzeMap = wueAnalyzer_warmup_curve, wueAfrTargetOffsetCurve, afrTableTbl, AFRValue, coolant, cltCorrection, egoCorrection - - lambdaTargetTables = afrTableTbl, afrTSCustom - - wuePercentOffset = 0 ; for working with 0 based enrichment set to 100 - option = disableLiveUpdates - option = burnOnSend - -; filter = std_DeadLambda ; Auto build - - filter = decelFilterMap,"After Start Enrich", engine, & , 4 , , false - filter = accelFilterTp, "TP Accel Enrich" , engine, & , 16, , false - filter = decelFilterTp, "TP Decel Enrich" , engine, & , 32, , false - filter = accelFilterMap,"MAP Accel Enrich" , engine, & , 64, , false - filter = decelFilterMap,"MAP Decel Enrich" , engine, & , 128, , false - ; this works, just another way to skin a cat - ;filter = decelFilter, "Decel Flag" , tpsaccden, > , 0, , false - filter = overrunFilter, "Overrun" , pulseWidth1, = , 0, , false - filter = highThrottle, "High Throttle" , throttle, > , 15, , true - filter = lowRpm, "Low RPM" , rpm, < , 300, , false - filter = std_Custom ; Standard Custom Expression Filter. - - -[FrontPage] - ; Gauges are numbered left to right, top to bottom. - ; - ; 1 2 3 4 - ; 5 6 7 8 - - gauge1 = RPMGauge - gauge2 = CLTGauge - gauge3 = TPSGauge - gauge4 = MAPGauge - gauge5 = afr1Gauge - gauge6 = VBattGauge - gauge7 = dwellGauge - gauge8 = ignadvGauge - - - -; = expression, off-label, on-label, off-bg, off-fg, on-bg, on-fg - ; important status - indicator = { ind_hasFatalError }, "", "CRITICAL ERROR", white, black, red, black - indicator = { ind_isWarnNow }, "", "WARNING", white, black, yellow, black - indicator = { ind_check_engine }, "", "Check Engine", white, black, red, black - indicator = { isIgnitionEnabledIndicator}, "no ignition", "ignition", yellow, black, white, black - indicator = { ind_injection_enabled}, "no injection", "injection", yellow, black, white, black - indicator = { ind_isTriggerError}, "trigger ok", "trigger err", white, black, red, black - - ; this is required so that the "config error" feature works in TS - ; don't change this line - TS is looking for an indicator with particular text/styling - ; you don't even have to show it by default - indicator = { ind_hasFatalError }, "Config Error", "Config Error", white, black, red, black - - ; minor info - indicator = { ind_fan}, "fan off", "fan on", white, black, green, black - indicator = { isCylinderCleanupActivated}, "no cyl cleanup", "cyl cleanup", white, black, yellow, black - indicator = { needBurn }, "config ok", "unsaved changes", white, black, yellow, black - indicator = { hasSdCard}, "no SD", "with SD", white, black, green, black - indicator = { ind_fuel_pump}, "pump off", "pump on", white, black, green, black - indicator = { clutchUpState }, "clutch", "cltch Up", white, black, red, black - indicator = { clutchDownState }, "clutch", "cltch Down", white, black, yellow, black - indicator = { brakePedalIndicator }, "brake", "brake down", white, black, red, black - indicator = { acSwitchIndicator }, "AC off", "AC on", white, black, blue, white - - ; error codes - indicator = { ind_tps_error}, "tps", "tps error", white, black, red, black - indicator = { ind_clt_error}, "clt", "clt error", white, black, red, black - indicator = { ind_iat_error}, "iat", "iat error", white, black, red, black - -; not implemented -; indicator = { ind_map_error}, "map", "map error", white, black, red, black - - indicator = { ind_pedal_error}, "pedal", "pedal error", white, black, red, black - - indicator = { knockEverIndicator }, "", "Knock recently", white, black, red, black - indicator = { knockNowIndicator }, "no knock", "Knock NOW", white, black, red, black - - -[KeyActions] - showPanel = spi, spiFunction - showPanel = con, connection - -[Datalog] - ; Channel Label Type Format - entry = time, "Time", float, "%.3f" - entry = RPMValue, "RPM", int, "%d" - entry = firmwareVersion, "firmware", int, "%d" - entry = coolant, "CLT", float, "%.2f" - entry = intake, "IAT", float, "%.2f" - entry = oilPressure, "Oil Press", float, "%.1f" - entry = TPSValue, "TPS", float, "%.2f" - entry = MAFValue, "MAF", float, "%.2f" - entry = MAPValue, "MAP", float, "%.1f" - entry = AFRValue, "Air/Fuel Ratio", float, "%.2f" - entry = VBatt, "VBatt", float, "%.2f" - entry = engineLoad, "Engine Load", float, "%.1f" - entry = ignitionAdvance, "timing", float, "%.2f" - entry = knockLevel, "knock: current level", float, "%.2f" - entry = knockCount, "knock: counter", int, "%d" - entry = vehicleSpeedKph, "Vehicle Speed", float, "%.2f" - entry = speedToRpmRatio, "s2rpm", float, "%.3f" - entry = rpmAcceleration, "dRPM", float, "%.3f" - entry = massAirFlowValue,"MAF air flow", float, "%.3f" - entry = chargeAirMass, "air mass", float, "%.3f" - entry = throttlePedalPosition, "Throttle pedal position", float, "%.3f" - entry = totalTriggerErrorCounter, "trg err",int, "%d" - entry = idleAirValvePosition, "Idle Air Valve", float, "%.3f" - - - entry = injectorLagMs, "fuel: injector lag", float, "%.3f" - entry = fuelRunning, "fuel: running", float, "%.3f" - entry = actualLastInjection, "fuel: Last injection", float, "%.3f" - entry = baseFuel, "fuel: base", float, "%.2f" - entry = fuelPidCorrection,"fuel: Short-term fuel trim", float, "%.2f" - entry = veValue, "fuel: VE", float, "%.3f" - entry = injectorDutyCycle,"fuel: injector duty cycle",float,"%.3f" - entry = coilDutyCycle, "dwell: coil duty cycle", float,"%.3f" - entry = currentTargetAfr,"fuel: target AFR", float,"%.3f" - - entry = accelerationX, "Acceleration: X", float,"%.2f", { LIS302DLCsPin != 0 } - entry = accelerationY, "Acceleration: Y", float,"%.2f", { LIS302DLCsPin != 0 } - entry = egt1, "EGT1", float,"%.1f", { max31855_cs1 != 0} - entry = egt2, "EGT2", float,"%.1f", { max31855_cs2 != 0} - entry = egt3, "EGT3", float,"%.1f", { max31855_cs3 != 0} - entry = egt4, "EGT4", float,"%.1f", { max31855_cs4 != 0} - entry = egt5, "EGT5", float,"%.1f", { max31855_cs5 != 0} - entry = egt6, "EGT6", float,"%.1f", { max31855_cs6 != 0} - entry = egt7, "EGT7", float,"%.1f", { max31855_cs7 != 0} - entry = egt8, "EGT8", float,"%.1f", { max31855_cs8 != 0} - - entry = engineLoadAccelExtra, "fuel: engine load acceleration extra fuel",float, "%.3f" - entry = engineLoadDelta, "fuel: load change",float, "%.3f" - - entry = deltaTps, "fuel: TPS change",float, "%.3f" - entry = tpsAccelFuel, "fuel: TPS acceleration extra fuel ms", float, "%.3f" - - entry = wallFuelCorrection,"fuel: wall corr ms", float, "%.3f" - entry = wallFuelAmount, "fuel: wall amount", float, "%.3f" - - entry = baroCorrection, "fuel: Barometric pressure correction",float,"%.3f" - entry = iatCorrection, "fuel: IAT correction", float, "%.3f" - entry = cltCorrection, "fuel: CLT correction", float,"%.3f" - - entry = sparkDwellValue, "dwell: coil charge time", float,"%.3f" - entry = vvtPosition, "VVT position", float,"%.2f" - entry = injectionOffset, "injOffset" , float, "%.2F" - -; is there a way to log parameter? entry = debugMode, "debugMode",int,"%d" - entry = debugFloatField1, {bitStringValue( debugFieldF1List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField2, {bitStringValue( debugFieldF2List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField3, {bitStringValue( debugFieldF3List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField4, {bitStringValue( debugFieldF4List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField5, {bitStringValue( debugFieldF5List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField6, {bitStringValue( debugFieldF6List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugFloatField7, {bitStringValue( debugFieldF7List, debugMode )},float,"%.4f", { !enableLogDebugChannels } - entry = debugIntField1, {bitStringValue( debugFieldI1List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField2, {bitStringValue( debugFieldI2List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField3, {bitStringValue( debugFieldI3List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField4, {bitStringValue( debugFieldI4List, debugMode )},int,"%d", { !enableLogDebugChannels } - entry = debugIntField5, {bitStringValue( debugFieldI5List, debugMode )},int,"%d", { !enableLogDebugChannels } - - - entry = engineMakeCodeNameCrc16, "Engine CRC16",int,"%d" - entry = tuneCrc16, "Tune CRC16",int,"%d" - - entry = engineMode, "Engine Mode",int,"%d" - entry = warningCounter, "warning: counter",int,"%d" - entry = lastErrorCode, "warning: last",int,"%d" - entry = recentErrorCode0, "error 0",int,"%d", { !enableLogErrorList } - entry = recentErrorCode1, "error 1",int,"%d", { !enableLogErrorList } - entry = recentErrorCode2, "error 2",int,"%d", { !enableLogErrorList } - entry = recentErrorCode3, "error 3",int,"%d", { !enableLogErrorList } - entry = recentErrorCode4, "error 4",int,"%d", { !enableLogErrorList } - entry = recentErrorCode5, "error 5",int,"%d", { !enableLogErrorList } - entry = recentErrorCode6, "error 6",int,"%d", { !enableLogErrorList } - entry = recentErrorCode7, "error 7",int,"%d", { !enableLogErrorList } - entry = internalMcuTemperature, "CPU Temperature",float,"%.2f" - - entry = tCharge, "tCharge",float,"%.3f" - - entry = clutchUpState, "clutch: up",int,"%d" - entry = clutchDownState, "clutch: down",int,"%d" - entry = brakePedalIndicator, "brake: down",int,"%d" - entry = acSwitchIndicator, "AC switch",int,"%d" - entry = ind_fan, "radiator fan",int,"%d" - -; Electronic throttle body - entry = etb1Error, "ETB Error", float, "%.3f" - entry = etb1DutyCycle, "ETB Duty", float, "%.3f" - entry = etbTarget, "ETB Target", float, "%.3f" - - -; tpsADC = U16, "ADC", -; alignmet = U16, "al", -; atmPres = F32, "pres", -; crankingFuel = F32, "ms", -; tCharge = F32, "T", -; sparkDwell = F32, "MAP", -; warmUpEnrich = F32, "%", - -[Menu] - -menuDialog = main - menu = "&Base &Engine" - subMenu = engineChars, "Base engine" - subMenu = triggerConfiguration, "Trigger" - subMenu = triggerConfiguration_IO, "Advanced Trigger" - subMenu = std_separator - subMenu = energySystems, "Battery and alternator" - subMenu = std_separator - - # Digital outputs - subMenu = mainRelayDialog, "Main relay" - subMenu = starterRelay, "Starter Disable relay" - subMenu = fuelPump, "Fuel pump & rail" - subMenu = fanSetting, "Fan" - subMenu = tachSettings, "Tachometer" - subMenu = malfunction, "Check engine light" - subMenu = statusLeds, "Status LEDs" - - menu = "Fuel" - # basic - subMenu = injectionSettings, "Injection settings" - subMenu = injectionDeadTime, "Injector dead time", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Targets & closed loop - subMenu = afrTableTbl, "Target AFR", 0, {isInjectionEnabled == 1} - subMenu = fuelClosedLoopDialog, "Closed loop fuel correction", 0, {isInjectionEnabled == 1} - subMenu = coastingFuelCutControl, "Deceleration fuel cutoff (DFCO)", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Fuel table/VE - subMenu = fuelTableDialog, "Fuel table", 0, {isInjectionEnabled == 1 && fuelAlgorithm != LM_SPEED_DENSITY && fuelAlgorithm != LM_REAL_MAF} - subMenu = veTableDialog, "VE", 0, {isInjectionEnabled == 1} - subMenu = injPhaseTableTbl, "Injection phase", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Corrections - subMenu = cltFuelCorrCurve, "CLT multiplier", 0, {isInjectionEnabled == 1} - subMenu = iatFuelCorrCurve, "IAT multiplier", 0, {isInjectionEnabled == 1} - subMenu = baroCorrTbl, "Baro multiplier", 0, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - subMenu = tChargeSettings, "tCharge settings", 0, {isInjectionEnabled == 1} - subMenu = std_separator - - # Accel enrichment - subMenu = AccelEnrich, "Accel/decel enrichment/enleanment", 0, {isInjectionEnabled == 1} - subMenu = tpsTpsAccelTbl, "TPS/TPS acceleration extra fuel", 0, {isInjectionEnabled == 1} - subMenu = mapAccelTaper, "Engine load AE taper", 0, {isInjectionEnabled == 1} - - - menu = "Ignition" - subMenu = ignitionSettings, "Ignition settings" - subMenu = std_separator - - subMenu = dwellSettings, "Dwell", 0, {isIgnitionEnabled == 1} - subMenu = ignitionCylExtra, "Ignition cylinder trim", 0, {isIgnitionEnabled == 1} - ; todo: once proven, uncomment and remove from the "broken" menu - ; subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = std_separator - - subMenu = ignitionTableTbl, "Ignition advance", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 0} - subMenu = ignitionTpsTableTbl, "Ignition advance (TPS)", 0, {isIgnitionEnabled == 1 && useTPSAdvanceTable == 1} - subMenu = std_separator - - # corrections - subMenu = cltTimingCorrCurve, "CLT correction", 0, {isIgnitionEnabled == 1} - subMenu = ignitionIatCorrTableTbl, "IAT correction", 0, {isIgnitionEnabled == 1} - - menu = "&Cranking" - subMenu = crankingDialog, "Cranking settings" - subMenu = std_separator - - subMenu = crankingCltCurve, "Fuel CLT multiplier" - subMenu = crankingDurationCurve, "Fuel duration multiplier" - subMenu = crankingTpsCurve, "Fuel TPS multiplier" - subMenu = std_separator - - subMenu = crankingAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForCranking == 1} - subMenu = std_separator - - subMenu = cltCrankingCurve, "IAC multiplier", 0, {overrideCrankingIacSetting == 1} - - menu = "&Idle" - subMenu = idleSettings, "Idle settings" - subMenu = idlehw, "Idle hardware" - subMenu = std_separator - subMenu = cltIdleRPMCurve, "Target RPM", 0, {idleMode == 0} - subMenu = iacPidMultTbl, "IAC PID Multiplier", 0, {idleMode == 0 && useIacPidMultTable == 1} - subMenu = std_separator - subMenu = idleVeCurve, "VE", 0, {useSeparateVeForIdle == 1} - subMenu = idleAdvanceCurve, "Ignition advance", 0, {useSeparateAdvanceForIdle == 1} - subMenu = std_separator - subMenu = idleTimingPidCorrDialog, "Closed-loop idle timing" - subMenu = cltIdleCurve, "CLT multiplier" - subMenu = iacCoastingCurve, "Coasting IAC Position for Auto-Idle", 0, {useIacTableForCoasting == 1} - - menu = "&Advanced" - subMenu = boostDialog, "Boost Control" - subMenu = boostPidDialog, "Closed Loop Boost", { boostType == 1 } - - subMenu = std_separator - subMenu = gppwm1, "General Purpose PWM 1" - subMenu = gppwm2, "General Purpose PWM 2" - subMenu = gppwm3, "General Purpose PWM 3" - subMenu = gppwm4, "General Purpose PWM 4" - - subMenu = std_separator - subMenu = fsioInputsDialog, "FSIO inputs" - subMenu = auxPidDialog, "Aux PID" - subMenu = fsioOutputsDialog, "FSIO outputs" - subMenu = fsioTable1Tbl, "FSIO Table #1" - subMenu = fsioTable2Tbl, "FSIO Table #2" - subMenu = fsioTable3Tbl, "FSIO Table #3" - subMenu = fsioTable4Tbl, "FSIO Table #4" - subMenu = fsioFormulas, "FSIO Formulas" - subMenu = fsioCurve1, "FSIO Curve #1" - subMenu = fsioCurve2, "FSIO Curve #2" - subMenu = fsioCurve3, "FSIO Curve #3" - subMenu = fsioCurve4, "FSIO Curve #4" - - menu = "&Sensors" - # Base analog input settings - subMenu = otherSensorInputs, "Misc sensors" - subMenu = analogInputSettings, "Analog input settings" - subMenu = std_separator - - # Thermistors - subMenu = cltSensor, "CLT sensor" - subMenu = iatSensor, "IAT sensor" - subMenu = auxTempSensor1Sensor, "AuxTemp1 sensor" - subMenu = auxTempSensor2Sensor, "AuxTemp2 sensor" - subMenu = std_separator - - # TPS/pedal - subMenu = tpsSensor, "TPS" - subMenu = pedalSensor, "Accelerator pedal" - subMenu = std_separator - - # MAP/Baro - subMenu = mapSettings, "MAP sensor" - subMenu = mapCurves, "MAP sampling" - subMenu = baroSettings, "Baro sensor" - subMenu = std_separator - - # MAF - subMenu = mafSettings, "MAF sensor" - subMenu = mafDecodingCurve, "MAF transfer function", 0, {mafAdcChannel != 16 } - subMenu = std_separator - - # O2 sensor(s) - subMenu = egoSettings, "EGO sensor" - subMenu = narrowToWideOxygenCurve, "Narrow to Wideband approximation" - subMenu = std_separator - - # Misc sensors - subMenu = speedSensor, "Vehicle speed sensor" - subMenu = oilPressureSensor, "Oil pressure" - - menu = "&Controller" - subMenu = ecuStimulator, "ECU stimulator" - subMenu = datalogSettings, "Datalogging" - subMenu = ioTest, "Bench test" - subMenu = engineTypeDialog, "Popular vehicles" - subMenu = std_separator - - subMenu = monitoringSettings, "rusEfi console" - subMenu = std_separator - - subMenu = connection, "Connection" - subMenu = tle8888, "TLE8888" - - subMenu = std_separator - - - # EXPERIMENTAL FEATURES - subMenu = parkingLot, "Experimental/Broken" - subMenu = multisparkSettings, "Multispark", 0, {isIgnitionEnabled == 1} - subMenu = mc33Dialog, "GDI Dreams" - subMenu = std_separator - - subMenu = std_separator - - subMenu = etbDialog, "Electronic throttle body (beta version)" - subMenu = etbTpsBiasCurve, "Electronic throttle body bias curve" - subMenu = pedalToTpsTbl, "Electronic Pedal Map" - subMenu = std_separator -# subMenu = smLaunchControl, "Launch Control" -# subMenu = std_separator -# subMenu = smRollingLaunch, "Rolling Launch" -# subMenu = std_separator -# subMenu = antiLag, "Antilag Setup" -# subMenu = std_separator - - - menu = "Help" - subMenu = helpGeneral, "rusEfi Info" - - -[ControllerCommands] -; commandName = command1, command2, commandn... -; command in standard ini format, a command name can be assigned to 1 to n commands that will be executed in order. -; This does not include any resultant protocol envelope data, only the response data itself. - -; WARNING!! These commands bypass TunerStudio's normal memory synchronization. If these commands -; alter mapped settings (Constant) memory in the controller, TunerStudio will have an out of sync condition -; and may create error messages. -; It is expected that these commands would not typically alter any ram mapped to a Constant. - -; -; see TS_IO_TEST_COMMAND in firmware code -; - -cmd_test_spk1 = "w\x00\x12\x00\x01" -cmd_test_spk2 = "w\x00\x12\x00\x02" -cmd_test_spk3 = "w\x00\x12\x00\x03" -cmd_test_spk4 = "w\x00\x12\x00\x04" -cmd_test_spk5 = "w\x00\x12\x00\x05" -cmd_test_spk6 = "w\x00\x12\x00\x06" -cmd_test_spk7 = "w\x00\x12\x00\x07" -cmd_test_spk8 = "w\x00\x12\x00\x08" -cmd_test_spk9 = "w\x00\x12\x00\x09" -cmd_test_spk10 = "w\x00\x12\x00\x0a" -cmd_test_spk11 = "w\x00\x12\x00\x0b" -cmd_test_spk12 = "w\x00\x12\x00\x0c" -cmd_test_spk13 = "w\x00\x12\x00\x0d" -cmd_test_spk14 = "w\x00\x12\x00\x0e" -cmd_test_spk15 = "w\x00\x12\x00\x0f" -cmd_test_spk16 = "w\x00\x12\x00\x10" - - -cmd_test_inj1 = "w\x00\x13\x00\x01" -cmd_test_inj2 = "w\x00\x13\x00\x02" -cmd_test_inj3 = "w\x00\x13\x00\x03" -cmd_test_inj4 = "w\x00\x13\x00\x04" -cmd_test_inj5 = "w\x00\x13\x00\x05" -cmd_test_inj6 = "w\x00\x13\x00\x06" -cmd_test_inj7 = "w\x00\x13\x00\x07" -cmd_test_inj8 = "w\x00\x13\x00\x08" -cmd_test_inj9 = "w\x00\x13\x00\x09" -cmd_test_inj10 = "w\x00\x13\x00\x0a" -cmd_test_inj11 = "w\x00\x13\x00\x0b" -cmd_test_inj12 = "w\x00\x13\x00\x0c" -cmd_test_inj13 = "w\x00\x13\x00\x0d" -cmd_test_inj14 = "w\x00\x13\x00\x0e" -cmd_test_inj15 = "w\x00\x13\x00\x0f" -cmd_test_inj16 = "w\x00\x13\x00\x10" - -cmd_test_fuel_pump = "w\x00\x14\x00\x01" -cmd_calibrate_tps_1_closed = "w\x00\x14\x00\x02" -cmd_calibrate_tps_1_wot = "w\x00\x14\x00\x03" -cmd_calibrate_tps_2_closed = "w\x00\x14\x00\x04" -cmd_calibrate_tps_2_wot = "w\x00\x14\x00\x05" -cmd_calibrate_pedal_up = "w\x00\x14\x00\x06" -cmd_calibrate_pedal_down = "w\x00\x14\x00\x07" -cmd_tle8888_init = "w\x00\x14\x00\x08" -cmd_test_ac_relay = "w\x00\x14\x00\x09" -cmd_write_config = "w\x00\x14\x00\x0A" -cmd_test_starter_relay = "w\x00\x14\x00\x0B" -cmd_etb_autotune = "w\x00\x14\x00\x0C" -cmd_enable_self_stim = "w\x00\x14\x00\x0D" -cmb_etb_auto_calibrate = "w\x00\x14\x00\x0E" -cmd_disable_self_stim = "w\x00\x14\x00\x0F" -cmd_etb_autotune_stop = "w\x00\x14\x00\x10" - -cmd_test_radiator_fan = "w\x00\x15\x00\x01" -cmd_test_check_engine_light = "w\x00\x16\x00\x01" -cmd_test_idle_valve = "w\x00\x17\x00\x01" -cmd_cj125_calibrate = "w\x00\x18\x00\x00" -cmd_call_from_pit = "w\x00\x20\x34\x56" -cmd_stop_engine = "w\x00\x79\x00\x00" - -; reboot ECU -cmd_reset_controller = "w\x00\xbb\x00\x00" -; jump to DFU mode -cmd_dfu = "w\x00\xba\x00\x00" - -; See 'executeTSCommand' in firmware source code - - -; MRE_MIATA_NB2_MAP = 11 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAP = "w\x00\x30\x00\x0b" - -; MRE_MIATA_NA6 12 -cmd_set_engine_type_microRusEFI_Miata_NA6 = "w\x00\x30\x00\x0c" - -; MRE_MIATA_NB2_MAF = 15 -cmd_set_engine_type_microRusEFI_Miata_NB2_MAF = "w\x00\x30\x00\x0f" - -cmd_set_engine_type_microRusEFI_Defaults = "w\x00\x30\x00\x3c" - -; MIATA_NA6_MAP = 41 -cmd_set_engine_type_Frankenso_Miata_NA6_MAP = "w\x00\x30\x00\x29" -; MIATA_NA6_VAF = 57 -cmd_set_engine_type_Frankenso_Miata_NA6_VAF = "w\x00\x30\x00\x39" -; MAZDA_MIATA_2003 = 47 -cmd_set_engine_type_Frankenso_Miata_NB2 = "w\x00\x30\x00\x2f" - -cmd_set_engine_type_Proteus_M73 = "w\x00\x30\x00\x3f" - - -; ETB_BENCH_ENGINE = 58 -cmd_set_engine_type_etb_test = "w\x00\x30\x00\x3A" -; ETB_BENCH_ENGINE = 59 -cmd_set_engine_type_8888_test = "w\x00\x30\x00\x3B" -cmd_set_engine_type_default = "w\x00\x31\x00\x00" - -[UserDefined] - dialog = fuelTableBottomDialog, "", card - panel = fuelTableMAFTbl, Center, {fuelAlgorithm==LM_PLAIN_MAF} - panel = fuelTableTPSTbl, Center, {fuelAlgorithm==LM_ALPHA_N} - panel = fuelTableELTbl, Center - - dialog = fuelTableRight, "", yAxis - topicHelp = "https://rusefi.com/s/fuel" - displayOnlyField = "Fuel Algorithm", fuelAlgorithm - panel = fuelTableBottomDialog, Center - liveGraph = fuelLive, "Fuel", South - graphLine = AFRValue - graphLine = RPMValue - - dialog = fuelTableGaugesPanel, yAxis - gauge = TPSGauge - gauge = MAFGauge - gauge = MAPGauge - - dialog = fuelTableDialog, "Fuel Table", xAxis - topicHelp = "fuelHelp" - panel = fuelTableGaugesPanel - panel = fuelTableRight - - dialog = tChargeRpmTpsSettings, "RPM+TPS Mode Settings" - field = "We use these coefficients to approximate air/fuel charge temperate" - field = "based on CLT and IAT, depending on RPM and TPM" - field = "minRPM minTPS", tChargeMinRpmMinTps - field = "minRPM maxTPS", tChargeMinRpmMaxTps - field = "maxRPM minTPS", tChargeMaxRpmMinTps - field = "maxRPM maxTPS", tChargeMaxRpmMaxTps - - dialog = tChargeGeneralSettings, "" - field = "tCharge Mode", tChargeMode - field = "tChange Increment Limit, deg/sec", tChargeAirIncrLimit - field = "tChange Decrement Limit, deg/sec", tChargeAirDecrLimit - field = "" - - dialog = tChargeAirInterpSettings, "Air Interpolation Mode Settings" - field = "Min tCharge Coeff.", tChargeAirCoefMin - field = "Max tCharge Coeff.", tChargeAirCoefMax - field = "Max Air Flow, kg/h", tChargeAirFlowMax - - dialog = tChargeSettings, "tCharge Settings" - panel = tChargeGeneralSettings - panel = tChargeRpmTpsSettings, { tChargeMode == 0} - panel = tChargeAirInterpSettings, { tChargeMode == 1} - - dialog = baseInjection, "General" - field = "Enabled", isInjectionEnabled - field = "Mode", injectionMode, {isInjectionEnabled == 1} - field = "#Batch injection with individual wiring" - field = "Two wire batch emulation", twoWireBatchInjection, {isInjectionEnabled == 1 && injectionMode == 2} -#if tuneByTPS - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {isInjectionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} -#else - field = "#Enabled for TPS-Based 'VE Autotune Mode' in Project Settings" - field = "Use TPS instead of Load for VE table", useTPSBasedVeTable, {0} -#endif - - dialog = ignitionOutputs, "Ignition Outputs" - field = "Ignition Pin Mode", ignitionPinMode, {isIgnitionEnabled == 1} - field = "Ignition Pin 1", ignitionPins1, {isIgnitionEnabled == 1} - ; see rusefi_config.txt comment next to 'ignitionPin2logic' which says - ; this section is auto-generated by FiringOrderTSLogic.java - field = "Ignition Pin 2", ignitionPins2, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 2) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 2) || (firingOrder == 7) || (firingOrder == 9) || (firingOrder == 11) || (firingOrder == 12) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 3", ignitionPins3, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 3) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 1) || (firingOrder == 3) || (firingOrder == 4) || (firingOrder == 5) || (firingOrder == 9) || (firingOrder == 13) || (firingOrder == 14) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 20) || (firingOrder == 23)))} - field = "Ignition Pin 4", ignitionPins4, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 4) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 7) || (firingOrder == 12) || (firingOrder == 14) || (firingOrder == 16) || (firingOrder == 17) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 5", ignitionPins5, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 5) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 4) || (firingOrder == 12) || (firingOrder == 15) || (firingOrder == 18) || (firingOrder == 23)))} - field = "Ignition Pin 6", ignitionPins6, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 6) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 13) || (firingOrder == 22) || (firingOrder == 23)))} - field = "Ignition Pin 7", ignitionPins7, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 7) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 11) || (firingOrder == 15) || (firingOrder == 16) || (firingOrder == 19) || (firingOrder == 20) || (firingOrder == 22)))} - field = "Ignition Pin 8", ignitionPins8, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 8) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 5) || (firingOrder == 11) || (firingOrder == 16) || (firingOrder == 18) || (firingOrder == 19)))} - field = "Ignition Pin 9", ignitionPins9, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 9) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 15) || (firingOrder == 22)))} - field = "Ignition Pin 10", ignitionPins10, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 10) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 14) || (firingOrder == 16) || (firingOrder == 18)))} - field = "Ignition Pin 11", ignitionPins11, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 11) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 15)))} - field = "Ignition Pin 12", ignitionPins12, {isIgnitionEnabled == 1 && (ignitionMode != 0 && cylindersCount >= 12) && (ignitionMode !=2 || twoWireBatchIgnition == 1 || ((firingOrder == 18) || (firingOrder == 22)))} - - field = "This is useful to have tachometer working" - field = " while converting from distributor" - field = "Dizzy out Pin", dizzySparkOutputPin, {isIgnitionEnabled == 1} - field = "Dizzy out Pin Mode", dizzySparkOutputPinMode, {isIgnitionEnabled == 1} - - dialog = ignitionBasic, "" - field = "Enabled", isIgnitionEnabled - field = "Mode", ignitionMode, {isIgnitionEnabled == 1} - field = "#Wasted spark with individual coils" - field = "Two wire wasted", twoWireBatchIgnition, {isIgnitionEnabled == 1 && ignitionMode == 2} - field = "Timing Mode", timingMode, {isIgnitionEnabled == 1} - field = "Use TPS-based Advance Table", useTPSAdvanceTable, {isIgnitionEnabled == 1 && fuelAlgorithm == LM_SPEED_DENSITY} - field = "#Use fixed timing while validating with a timing gun" - field = "Fixed Timinig", fixedTiming, {isIgnitionEnabled == 1 && timingMode == 1} - - dialog = ignitionSettings, "", xAxis - panel = ignitionBasic - panel = ignitionOutputs - - dialog = baseEngineConfig, "Engine Configuration" -; field = "Engine Preset", engineType -; this field is useful for rusEFI online catalog - field = "Engine Make", engineMake -; this field is useful for rusEFI online catalog - field = "Manufacturer Engine Code", engineCode -; this field is useful for rusEFI online catalog - field = "Vehicle Name", vehicleName - field = "Number of Cylinders", cylindersCount - field = "Engine Displacement", displacement - field = "Firing Order", firingOrder -; this field is useful for rusEFI online catalog - field = "Compression Ratio", compressionRatio -; this field is useful for rusEFI online catalog - field = "Forced Induction?", isForcedInduction - -; Engine->Trigger configuration - dialog = triggerConfiguration_settings, "Trigger Pattern" - field = "!https://rusefi.com/s/trigger" - field = "Trigger type", trigger_type - field = "Total tooth count", trigger_customTotalToothCount, {trigger_type == 0}, {trigger_type == 0} - field = "Missing/skipped tooth count", trigger_customSkippedToothCount, {trigger_type == 0}, {trigger_type == 0} - - ; see also in firmware '[doesTriggerImplyOperationMode]' tag - field = "Operation mode / speed", ambiguousOperationMode - field = "With VR sensors only rising edge has reliable position" - field = "use only rising edge", useOnlyRisingEdgeForTrigger - field = "!Reminder that 4-stroke cycle is 720 degrees" - field = "!For well-known trigger types use '0' trigger angle offset" - field = "Trigger Angle Offset", globalTriggerAngleOffset - field = "Display only interesting", displayLogicLevelsInEngineSniffer - - dialog = triggerConfiguration_IO, "Advanced Trigger" - field = "!https://rusefi.com/s/vvt" - field = "VVT mode", vvtMode, {trigger_type != 80} - field = "VVT use rise front", vvtCamSensorUseRise, {trigger_type != 80} - field = "VVT position display offset", vvtOffset - field = "print verbose sync details to console",verboseTriggerSynchDetails - field = "Do not print messages in case of sync error", silentTriggerError - field = "Enable noise filtering", useNoiselessTriggerDecoder, {trigger_type == 8 || trigger_type == 9} - - dialog = triggerInputs, "Trigger Inputs" - field = "!ECU reboot needed to apply these settings" - field = "#Cam is primary if you have cam sensor" - field = "Primary channel", triggerInputPins1 - field = "Invert Primary", invertPrimaryTriggerSignal - field = "Secondary channel", triggerInputPins2, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Invert Secondary", invertSecondaryTriggerSignal, { trigger_type != 0 && trigger_type != 8 && trigger_type != 9 && trigger_type != 18 && trigger_type != 20} - field = "Cam Sync/VVT input", camInputs1 - - - dialog = triggerConfiguration - panel = triggerConfiguration_settings, North - panel = triggerInputs, South - -; Engine->Injection Settings - dialog = injChars, "Injector Settings", yAxis - field = "Injector Flow", injector_flow, {isInjectionEnabled == 1} - - dialog = injectorOutputSettings, "Injector Outputs", yAxis - field = "!ECU reboot needed to apply these settings" - field = "injection Pin Mode", injectionPinMode, {isInjectionEnabled == 1} - field = "With batched injection without 'Two wire batch emulation'" - field = " fill only first count / 2 values" - field = "Injection Pin 1", injectionPins1, {isInjectionEnabled == 1} - field = "Injection Pin 2", injectionPins2, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 1} - field = "Injection Pin 3", injectionPins3, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 2} - field = "Injection Pin 4", injectionPins4, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 3} - field = "Injection Pin 5 ", injectionPins5, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 4} - field = "Injection Pin 6 ", injectionPins6, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 5} - field = "Injection Pin 7 ", injectionPins7, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 6} - field = "Injection Pin 8 ", injectionPins8, {isInjectionEnabled == 1 && injectionMode != 3 && cylindersCount > 7} - field = "Injection Pin 9 ", injectionPins9, {isInjectionEnabled == 1 && cylindersCount > 8} - field = "Injection Pin 10 ", injectionPins10, {isInjectionEnabled == 1 && cylindersCount > 9} - field = "Injection Pin 11 ", injectionPins11, {isInjectionEnabled == 1 && cylindersCount > 10} - field = "Injection Pin 12 ", injectionPins12, {isInjectionEnabled == 1 && cylindersCount > 11} - - dialog = injectionBasic, "" - topicHelp = "fuelHelp" - panel = baseInjection - panel = injChars - - dialog = injectionSettings, "", xAxis - panel = injectionBasic - panel = injectorOutputSettings - - dialog = injectionDeadTime, "", yAxis - panel = injectorsDeadTime, East - - dialog = ignitionCylExtra, "Ignition Cylinder Extra Timing" - field = "Extra cyl #1", timing_offset_cylinder1 - field = "Extra cyl #2", timing_offset_cylinder2, {cylindersCount > 1} - field = "Extra cyl #3", timing_offset_cylinder3, {cylindersCount > 2} - field = "Extra cyl #4", timing_offset_cylinder4, {cylindersCount > 3} - field = "Extra cyl #5", timing_offset_cylinder5, {cylindersCount > 4} - field = "Extra cyl #6", timing_offset_cylinder6, {cylindersCount > 5} - field = "Extra cyl #7", timing_offset_cylinder7, {cylindersCount > 6} - field = "Extra cyl #8", timing_offset_cylinder8, {cylindersCount > 7} - field = "Extra cyl #9", timing_offset_cylinder9, {cylindersCount > 8} - field = "Extra cyl #10", timing_offset_cylinder10, {cylindersCount > 9} - field = "Extra cyl #11", timing_offset_cylinder11, {cylindersCount > 10} - field = "Extra cyl #12", timing_offset_cylinder12, {cylindersCount > 11} - - dialog = multisparkDwellParams, "Delay & Dwell" - field = "Spark Duration", multisparkSparkDuration, {multisparkEnable} - field = "Dwell", multisparkDwell, {multisparkEnable} - - dialog = multisparkMain, "Configuration" - field = "Maximum engine speed", multisparkMaxRpm, {multisparkEnable} - field = "Fire sparks for this angle duration" multisparkMaxSparkingAngle, {multisparkEnable} - field = "Maximum extra spark count" multisparkMaxExtraSparkCount, {multisparkEnable} - - dialog = multisparkSettings, "Multispark" - field = "#WARNING! These settings have the potential to overheat ignition components" - field = "#and cause other nasty misbehavior. Use with care, at your own risk!" - field = "Enable Multiple Sparks", multisparkEnable - panel = multisparkMain - panel = multisparkDwellParams - - dialog = dwellSettings, "", yAxis - panel = dwellCorrection, Center - -; Sensors->AUX1 Thermistor Sensor Setting - dialog = auxTempSensor1Sensor, "aux1 Thermistor Settings" - field = "Input channel", auxTempSensor1_adcChannel - field = "Bias resistor", auxTempSensor1_bias_resistor, {auxTempSensor1_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor1_tempC_1, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor1_resistance_1, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor1_tempC_2, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor1_resistance_2, {auxTempSensor1_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor1_tempC_3, {auxTempSensor1_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor1_resistance_3, {auxTempSensor1_adcChannel != 16} - -; Sensors->AUX2 Thermistor Sensor Setting - dialog = auxTempSensor2Sensor, "aux2 Thermistor Settings" - field = "Input channel", auxTempSensor2_adcChannel - field = "Bias resistor", auxTempSensor2_bias_resistor, {auxTempSensor2_adcChannel != 16} - - field = "#Here is three pairs of thermistor temperature and resistance." - field = "#Typical temperatures is -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", auxTempSensor2_tempC_1, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ LT", auxTempSensor2_resistance_1, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Middle temperature", auxTempSensor2_tempC_2, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ MT", auxTempSensor2_resistance_2, {auxTempSensor2_adcChannel != 16} - field = "" - field = "Highest temperature", auxTempSensor2_tempC_3, {auxTempSensor2_adcChannel != 16} - field = "Resistance @ HT", auxTempSensor2_resistance_3, {auxTempSensor2_adcChannel != 16} - - dialog = tpsNum1, "Throttle #1" - field = "!See Tools>Calibrate TPS" - field = "Primary sensor", tps1_1AdcChannel - field = "Primary min", tpsMin, {tps1_1AdcChannel != 16} - field = "Primary max", tpsMax, {tps1_1AdcChannel != 16} - field = "Secondary sensor", tps1_2AdcChannel - field = "Secondary min", tps1SecondaryMin, {tps1_2AdcChannel != 16} - field = "Secondary max", tps1SecondaryMax, {tps1_2AdcChannel != 16} - - dialog = tpsNum2, "Throttle #2" - field = "Primary sensor", tps2_1AdcChannel - field = "Primary min", tps2Min, {tps2_1AdcChannel != 16} - field = "Primary max", tps2Max, {tps2_1AdcChannel != 16} - field = "Secondary sensor", tps2_2AdcChannel - field = "Secondary min", tps2SecondaryMin, {tps2_2AdcChannel != 16} - field = "Secondary max", tps2SecondaryMax, {tps2_2AdcChannel != 16} - - dialog = tpsLimits, "TPS Limits" - field = "TPS minimum valid value", tpsErrorDetectionTooLow, {tps1_1AdcChannel != 16} - field = "TPS maximum valid value", tpsErrorDetectionTooHigh, {tps1_1AdcChannel != 16} - - dialog = tpsSensor, "TPS" - panel = tpsLimits - panel = tpsNum1 - panel = tpsNum2 - - dialog = pedalSensorLeft, "Accelerator pedal" - field = "Accelerator position sensor", throttlePedalPositionAdcChannel - field = "Up voltage", throttlePedalUpVoltage - field = "Down (WOT) voltage", throttlePedalWOTVoltage - field = "Accelerator position 2nd sensor", throttlePedalPositionSecondAdcChannel - field = "Up voltage" throttlePedalSecondaryUpVoltage - field = "Down (WOT) voltage", throttlePedalSecondaryWOTVoltage - - dialog = pedalGauges - gauge = pedalPositionGauge - gauge = rawPpsPrimaryGauge - - dialog = pedalSensor, "Accelerator pedal", border - panel = pedalSensorLeft, West - panel = pedalGauges, East - - dialog = mc33Dialog, "GDI Dreams" - field = mc33816_cs, mc33816_cs - field = mc33816_rstb, mc33816_rstb - field = mc33816_flag0, mc33816_flag0 - field = "mc33972 SPI", mc33972spiDevice - field = mc33_hvolt, mc33_hvolt - field = mc33_i_boost, mc33_i_boost - field = mc33_i_peak, mc33_i_peak - field = mc33_i_hold, mc33_i_hold - field = mc33_t_max_boost, mc33_t_max_boost - field = mc33_t_peak_off, mc33_t_peak_off - field = mc33_t_peak_tot, mc33_t_peak_tot - field = mc33_t_bypass, mc33_t_bypass - field = mc33_t_hold_off, mc33_t_hold_off - field = mc33_t_hold_tot, mc33_t_hold_tot - - -; Sensor Inputs - dialog = otherSensorInputs, "Other Sensor Inputs" - field = "Fuel level", fuelLevelSensor - field = "Clutch down switch", clutchDownPin - field = "Clutch down inverted", clutchDownPinMode - field = "Clutch up switch", clutchUpPin - field = "Clutch up inverted", clutchUpPinMode - field = "Throttle Up switch", throttlePedalUpPin - field = "Brake pedal switch", brakePedalPin - field = "A/C switch", acSwitchAdc - - dialog = triggerInputComparator, "Built-in Comparator Settings (Kinetis-only)" - field = "Comparator Center Point Voltage", triggerCompCenterVolt - field = "Comparator hysteresis voltage (Min)", triggerCompHystMin - field = "Comparator hysteresis voltage (Max)", triggerCompHystMax - field = "VR-sensor saturation RPM", triggerCompSensorSatRpm - - dialog = joystickPanel, "Joystick" - field = "joustick center button", joystickCenterPin - field = "joustick button A", joystickAPin - field = "joustick button B", joystickBPin - field = "joustick button C", joystickCPin - field = "joustick button D", joystickDPin - -; -; allXXX sections allows a quick overview of used I/O in order to address conflicts mostly, not really to -; configure the features. -; - dialog = allPinsSensors, "Sensors" - field = "Throttle pedal Position Channel", throttlePedalPositionAdcChannel - field = "Primary input channel", triggerInputPins1 - field = "Secondary channel", triggerInputPins2 - field = "Cam Sync/VVT input", camInputs1 - field = "CLT ADC input", clt_adcChannel - field = "IAT ADC input", iat_adcChannel - field = "vBatt ADC input", vbattAdcChannel - field = "TPS1 ADC input", tps1_1AdcChannel - field = "TPS2 ADC input", tps2_1AdcChannel - field = "MAF ADC input", mafAdcChannel - field = "AFR ADC input", afr_hwChannel - field = "Baro ADC input", baroSensor_hwChannel - field = "MAP ADC input", map_sensor_hwChannel - field = "FrequencyReportingMapInputPin", frequencyReportingMapInputPin - field = "FuelLevelSensor", fuelLevelSensor - field = "Vehicle Speed Input pin", vehicleSpeedSensorInputPin - field = "clutchDownPin", clutchDownPin - field = "clutchUpPin", clutchUpPin - field = "brakePedalPin", brakePedalPin - field = "A/C Switch", acSwitchAdc - field = "Aux Temperature #1", auxTempSensor1_adcChannel - field = "Aux Temperature #2", auxTempSensor2_adcChannel - field = "Aux Fast Analog", auxFastSensor1_adcChannel - - dialog = allPinsMC33, "MC33816" - field = "Chip Select", mc33816_cs - field = rstb, mc33816_rstb - field = flag0, mc33816_flag0 - field = mc33816_driven, mc33816_driven - field = mc33816spiDevice, mc33816spiDevice - - dialog = allPins1_1 - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin #2", triggerSimulatorPins3 - field = high_fuel_pressure_sensor_1, high_fuel_pressure_sensor_1 - field = high_fuel_pressure_sensor_2, high_fuel_pressure_sensor_2 - field = "Warning Led", warningLedPin - field = "tle6240_cs", tle6240_cs - field = "tle6240 SPI", tle6240spiDevice - panel = joystickPanel - - dialog = allPins1_2 - field = "Tachometer output Pin", tachOutputPin - field = "Dizzy out Pin", dizzySparkOutputPin - field = "O2 heater pin", o2heaterPin - field = "Idle Solenoid Pin", idle_solenoidPin - field = "Second Idle Solenoid Pin", secondSolenoidPin - field = "Idle Stepper Dir", idle_stepperDirectionPin - field = "Idle Stepper Step", idle_stepperStepPin - field = "Idle Stepper Enable", stepperEnablePin - field = "Fuel Pump Pin", fuelPumpPin - field = "ETB#1 Dir #1", etbIo1_directionPin1 - field = "ETB#1 Dir #2", etbIo1_directionPin2 - field = "ETB#1 Control #1", etbIo1_controlPin1 - field = "ETB#1 Disable", etbIo1_disablePin - field = "ETB#2 Dir #1", etbIo2_directionPin1 - field = "ETB#2 Dir #2", etbIo2_directionPin2 - field = "ETB#2 Control #1", etbIo2_controlPin1 - field = "ETB#2 Disable", etbIo2_disablePin - field = "MIL / Check Engine Pin", malfunctionIndicatorPin - field = "test557pin", test557pin - field = "Fan Pin", fanPin - field = "A/C Relay", acRelayPin - field = "Main Relay Pin", mainRelayPin - field = "Starter Relay Pin", starterRelayDisablePin - - dialog = allPins2_1 - field = "Injection Pin 1", injectionPins1 - field = "Injection Pin 2", injectionPins2 - field = "Injection Pin 3", injectionPins3 - field = "Injection Pin 4", injectionPins4 - field = "Injection Pin 5 ", injectionPins5 - field = "Injection Pin 6 ", injectionPins6 - field = "Injection Pin 7 ", injectionPins7 - field = "Injection Pin 8 ", injectionPins8 - field = "Injection Pin 9 ", injectionPins9 - field = "Injection Pin 10 ", injectionPins10 - field = "Injection Pin 11 ", injectionPins11 - field = "Injection Pin 12 ", injectionPins12 - field = "FSIO dig inp #1", fsioDigitalInputs1 - field = "FSIO dig inp #2", fsioDigitalInputs2 - field = "FSIO dig inp #3", fsioDigitalInputs3 - field = "FSIO dig inp #4", fsioDigitalInputs4 - field = "FSIO dig inp #5", fsioDigitalInputs5 - field = "FSIO dig inp #6", fsioDigitalInputs6 - field = "FSIO dig inp #7", fsioDigitalInputs7 - field = "FSIO dig inp #8", fsioDigitalInputs8 - field = "FSIO dig inp #9", fsioDigitalInputs9 - field = "FSIO dig inp #10", fsioDigitalInputs10 - field = "FSIO dig inp #11", fsioDigitalInputs11 - field = "FSIO dig inp #12", fsioDigitalInputs12 - field = "FSIO dig inp #13", fsioDigitalInputs13 - field = "FSIO dig inp #14", fsioDigitalInputs14 - field = "FSIO dig inp #15", fsioDigitalInputs15 - field = "FSIO dig inp #16", fsioDigitalInputs16 - - - dialog = allPins2_2 - field = "Ignition Pin 1", ignitionPins1 - field = "Ignition Pin 2", ignitionPins2 - field = "Ignition Pin 3", ignitionPins3 - field = "Ignition Pin 4", ignitionPins4 - field = "Ignition Pin 5", ignitionPins5 - field = "Ignition Pin 6", ignitionPins6 - field = "Ignition Pin 7", ignitionPins7 - field = "Ignition Pin 8", ignitionPins8 - field = "Ignition Pin 9", ignitionPins9 - field = "Ignition Pin 10", ignitionPins10 - field = "Ignition Pin 11", ignitionPins11 - field = "Ignition Pin 12", ignitionPins12 - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - - dialog = allPins2_3 - field = "LCD E pin", HD44780_e - field = "LCD D4 pin", HD44780_db4 - field = "LCD D5 pin", HD44780_db5 - field = "LCD D6 pin", HD44780_db6 - field = "LCD D7 pin", HD44780_db7 - field = "Debug Trigger Sync", debugTriggerSync - panel = allPinsMC33 - - dialog = allPins1_3 - field = "FSIO ADC #1", fsioAdc1 - field = "FSIO ADC #2", fsioAdc2 - field = "FSIO ADC #3", fsioAdc3 - field = "FSIO ADC #4", fsioAdc4 - field = "hip9011CsPin", hip9011CsPin - field = "LIS302DLCsPin", LIS302DLCsPin - field = "MIL / Check Engine", malfunctionIndicatorPin - field = "Saab CDM knock", cdmInputPin - field = "comm status light", communicationLedPin - field = "running status light", runningLedPin - - - dialog = allPins3_1 - panel = allPinsSensors - - dialog = allPins3_2 - field = "servo#1", servoOutputPins1 - field = "servo#2", servoOutputPins2 - field = "servo#3", servoOutputPins3 - field = "servo#4", servoOutputPins4 - field = "servo#5", servoOutputPins5 - field = "Aux Pin #1", auxPidPins1 - field = "Aux Pin #2", auxPidPins2 - field = "Aux Pin #3", auxPidPins3 - field = "Aux Pin #4", auxPidPins4 - field = "Aux Valve #1", auxValves1 - field = "Aux Valve #2", auxValves2 - field = "AUX Serial TX", auxSerialTxPin - field = "AUX Serial RX", auxSerialRxPin - - dialog = allPins3_1_and_2, "All Pins 3/3", xAxis - panel = allPins3_1 - panel = allPins3_2 - - dialog = allPins1_1_and_2, "", xAxis - panel = allPins1_1 - panel = allPins1_2 - - dialog = allPins1, "All Pins 1/3", xAxis - panel = allPins1_1_and_2 - panel = allPins1_3 - - dialog = allPins2_1_and_2, "", xAxis - panel = allPins2_1 - panel = allPins2_2 - - dialog = allPins2, "All Pins 2/3", xAxis - panel = allPins2_1_and_2 - panel = allPins2_3 - - -; Sensors->CLT sensor - dialog = clt_thermistor, "CLT sensor" - field = "Input channel", clt_adcChannel - field = "Bias resistor", clt_bias_resistor, {clt_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", clt_tempC_1, {clt_adcChannel != 16} - field = "Resistance @ LT", clt_resistance_1, {clt_adcChannel != 16} - field = "" - field = "Middle temperature", clt_tempC_2, {clt_adcChannel != 16} - field = "Resistance @ MT", clt_resistance_2, {clt_adcChannel != 16} - field = "" - field = "Highest temperature", clt_tempC_3, {clt_adcChannel != 16} - field = "Resistance @ HT", clt_resistance_3, {clt_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearCltSensor, {clt_adcChannel != 16} - - dialog = cltGauges - gauge = CLTGauge - gauge = rawCltGauge - - dialog = cltSensor, "CLT Sensor", border - panel = clt_thermistor, West - panel = cltGauges, East - -; Sensors->IAT sensor - dialog = iat_thermistor, "IAT sensor" - field = "Input channel", iat_adcChannel - field = "Bias resistor", iat_bias_resistor, {iat_adcChannel != 16} - - field = "#Input three pairs of thermistor temperature and resistance." - field = "#Typical temperatures are -40 deg C, 0 deg C and 100 deg C" - field = "" - field = "Lowest temperature", iat_tempC_1, {iat_adcChannel != 16} - field = "Resistance @ LT", iat_resistance_1, {iat_adcChannel != 16} - field = "" - field = "Middle temperature", iat_tempC_2, {iat_adcChannel != 16} - field = "Resistance @ MT", iat_resistance_2, {iat_adcChannel != 16} - field = "" - field = "Highest temperature", iat_tempC_3, {iat_adcChannel != 16} - field = "Resistance @ HT", iat_resistance_3, {iat_adcChannel != 16} - field = "" - field = "Linear characteristic", useLinearIatSensor, {iat_adcChannel != 16} - - dialog = iatGauges - gauge = IATGauge - gauge = rawIatGauge - - dialog = iatSensor, "IAT Sensor", border - panel = iat_thermistor, West - panel = iatGauges, East - -; Sensors->Oil pressure sensor - dialog = oilp_settings, "Oil Pressure Sensor" - field = "Oil Pressure ADC input", oilPressure_hwChannel - field = "low voltage", oilPressure_v1, {oilPressure_hwChannel != 16} - field = "low pressure", oilPressure_value1, {oilPressure_hwChannel != 16} - field = "high voltage", oilPressure_v2, {oilPressure_hwChannel != 16} - field = "high pressure", oilPressure_value2, {oilPressure_hwChannel != 16} - - dialog = oilPressureGauges - gauge = OilPressGauge - gauge = rawOilPressureGauge - - dialog = oilPressureSensor, "", border - panel = oilp_settings, West - panel = oilPressureGauges, East - -; Sensors->MAP sensor - dialog = mapSensorAnalog, "MAP sensor", yAxis - field = "MAP ADC input", map_sensor_hwChannel - field = "MAP type", map_sensor_type, { map_sensor_hwChannel != 16 } - field = "MAP value low point", map_sensor_lowValue, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage low point", mapLowValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP value high point", map_sensor_highValue,{ map_sensor_hwChannel != 16 && map_sensor_type == 0 } - field = "MAP voltage high value", mapHighValueVoltage, { map_sensor_hwChannel != 16 && map_sensor_type == 0 } - - dialog = mapSensorFreq, "MAP frequency sensor", yAxis - field = "MAP Freq", frequencyReportingMapInputPin - field = "0 kPa freq", mapFrequency0Kpa - field = "100 kpa freq", mapFrequency100Kpa - - dialog = mapCommon, "MAP common settings" - field = "frequency-based MAP", hasFrequencyReportingMapSensor - field = "Low value threshold", mapErrorDetectionTooLow - field = "High value threshold", mapErrorDetectionTooHigh - field = "" - field = "Measure Map Only In One Cylinder", measureMapOnlyInOneCylinder - field = "Minimum MAP samples", mapMinBufferLength - - dialog = mapSettings, "", yAxis - panel = mapCommon - panel = mapSensorAnalog, {hasFrequencyReportingMapSensor == 0} - panel = mapSensorFreq, {hasFrequencyReportingMapSensor == 1} - - dialog = baroSettings, "Baro sensor" - field = "Baro ADC input", baroSensor_hwChannel - field = baroSensor_lowValue, baroSensor_lowValue, {baroSensor_hwChannel != 16} - field = baroSensor_highValue, baroSensor_highValue, {baroSensor_hwChannel != 16} - field = baroSensor_type, baroSensor_type, {baroSensor_hwChannel != 16} - - dialog = mapCurves, "MAP sampling", yAxis - field = "isMapAveragingEnabled", isMapAveragingEnabled - panel = map_samplingAngleCurve - panel = map_samplingWindowCurve - - dialog = mafSettings, "MAF sensor", yAxis - field = "MAF ADC input", mafAdcChannel - -; Sensors->EGO sensor - dialog = egoSettings_sensor, "EGO sensor" - field = "Type", afr_type -; todo: only use these values for custom! - field = "low voltage", afr_v1 - field = "low value", afr_value1 - field = "high voltage", afr_v2 - field = "high value", afr_value2 - field = "Correction", egoValueShift - - dialog = egoSettings_IO, "EGO Sensor I/O" - field = "Input channel", afr_hwChannel - field = "Heater pin", o2heaterPin - - dialog = egoSettings, "", yAxis - panel = egoSettings_IO - panel = egoSettings_sensor, {afr_hwChannel != 16 && enableAemXSeries == 0 && !auxSerialRxPin && !auxSerialTxPin} - field = "Enable AEM X-Series CANbus", enableAemXSeries, { canReadEnabled } - field = "Enable Innovate LC-2 Serial", enableInnovateLC2, { auxSerialRxPin && auxSerialTxPin } - -; Engine->EGT inputs - dialog = egtInputs, "EGT inputs" - field = "SPI", max31855spiDevice - field = "CS #1", max31855_cs1 - field = "CS #2", max31855_cs2 - field = "CS #3", max31855_cs3 - field = "CS #4", max31855_cs4 - field = "CS #5", max31855_cs5 - field = "CS #6", max31855_cs6 - field = "CS #7", max31855_cs7 - field = "CS #8", max31855_cs8 - -; Engine->idle Settings - dialog = idleSolenoid, "Solenoid" - field = "Idle Solenoid Pin Mode", idle_solenoidPinMode, !useStepperIdle - field = "Idle Solenoid Pin", idle_solenoidPin, !useStepperIdle - field = "Second Idle Solenoid Pin", secondSolenoidPin, { !useStepperIdle && isDoubleSolenoidIdle } - field = "Idle Solenoid Frequency", idle_solenoidFrequency, !useStepperIdle - - dialog = hbridgeHardware, "H-Bridge Hardware" - field = "PWM Frequency", etbFreq - field = "Two-wire mode", etb_use_two_wires - field = "No1 Direction #1", etbIo1_directionPin1 - field = "No1 Direction #2", etbIo1_directionPin2 - field = "No1 Control #1", etbIo1_controlPin1, { etb_use_two_wires == 0 } - field = "No1 Disable", etbIo1_disablePin - field = "No2 Direction #1", etbIo2_directionPin1 - field = "No2 Direction #2", etbIo2_directionPin2 - field = "No2 Control #1", etbIo2_controlPin1, { etb_use_two_wires == 0} - field = "No2 Disable", etbIo2_disablePin - - dialog = idleStepperHw, "Stepper Hardware" - field = "Idle Stepper Step Pin", idle_stepperStepPin - field = "Idle Stepper Dir Pin", idle_stepperDirectionPin - field = "Idle Stepper Enable Pin", stepperEnablePin - field = "Idle Stepper Enable Pin Mode", stepperEnablePinMode - - dialog = idleStepper, "Stepper" - field = "Drive stepper with dual H bridges", useHbridges, useStepperIdle - field = "Stepper reaction time", idleStepperReactionTime, useStepperIdle - field = "Stepper total steps", idleStepperTotalSteps, useStepperIdle - field = "Stepper parking extra steps, %", stepperParkingExtraSteps, useStepperIdle - field = "Force parking every restart", stepperForceParkingEveryRestart, useStepperIdle - panel = idleStepperHw, { useStepperIdle && !useHbridges } - panel = hbridgeHardware, { useStepperIdle && useHbridges } - - dialog = idleHwType, "Idle Valve Hardware", border - panel = idleSolenoid, West - panel = idleStepper, East - - dialog = idlehw, "", yAxis - field = "!ECU reboot needed to apply these settings" - field = "Use Stepper", useStepperIdle - field = "Double Solenoid Mode", isDoubleSolenoidIdle - panel = idleHwType - - dialog = idlePidSettings, "PID IAC Control" - field = "#See Idle Target RPM Curve" - field = "P-factor", idleRpmPid_pFactor - field = "I-factor", idleRpmPid_iFactor - field = "D-factor", idleRpmPid_dFactor - field = "Offset", idleRpmPid_offset - field = "Min", idleRpmPid_minValue - field = "Max", idleRpmPid_maxValue - field = "iTerm Min", idlerpmpid_iTermMin - field = "iTerm Max", idlerpmpid_iTermMax - field = "Offset#2", idleRpmPid2_offset - field = "Min#2", idleRpmPid2_minValue - field = "period", idleRpmPid_periodMs - field = "RPM dead zone to deactivate IAC pid", idlePidRpmDeadZone - field = "RPM upper limit to deactivate IAC pid",idlePidRpmUpperLimit - field = "PID Extra for low RPM", pidExtraForLowRpm - field = "Use IAC PID Multiplier Table", useIacPidMultTable - - - dialog = idleSettings, "", yAxis - field = "Idle IAC control mode", idleMode - field = useInstantRpmForIdle, useInstantRpmForIdle - field = "use ETB for idle", useETBforIdleControl - field = "ETB Idle range", etbIdleThrottleRange, {useETBforIdleControl == 1} - field = "Use separate Ignition Table for idle", useSeparateAdvanceForIdle - field = "Use separate VE Table for idle", useSeparateVeForIdle - field = "Use separate IAC Table For Coasting", useIacTableForCoasting, {idleMode == 0} - field = idleIncrementalPidCic, idleIncrementalPidCic - field = "TPS deactivation threshold", idlePidDeactivationTpsThreshold - panel = idlePidSettings, { idleMode == 0} - field = "Extra IAC if Throttle Pressed", iacByTpsTaper; - field = "Detailed status in console", isVerboseIAC - field = "#See Warmup idle multiplier" - slider = "Manual IAC Position", manIdlePosition, horizontal - - dialog = idleTimingPidCorrDialog, "", yAxis - field = "!This timing correction mode is Alpha Version" - field = "Use Auto-PID ignition advance control", useIdleTimingPidControl - field = "#See Idle Target RPM Curve" - field = "P-factor", idleTimingPid_pFactor, {useIdleTimingPidControl == 1} - field = "I-factor", idleTimingPid_iFactor, {useIdleTimingPidControl == 1} - field = "D-factor", idleTimingPid_dFactor, {useIdleTimingPidControl == 1} - field = "Offset", idleTimingPid_offset, {useIdleTimingPidControl == 1} - field = "Min Delta", idleTimingPid_minValue, {useIdleTimingPidControl == 1} - field = "Max Delta", idleTimingPid_maxValue, {useIdleTimingPidControl == 1} - field = "period", idleTimingPid_periodMs, {useIdleTimingPidControl == 1} - field = "#See RPM dead zone to deactivate IAC pid" - field = "RPM working zone for timing pid", idleTimingPidWorkZone, {useIdleTimingPidControl == 1} - field = "RPM working zone falloff", idlePidFalloffDeltaRpm, {useIdleTimingPidControl == 1} - field = "RPM dead zone to deactivate timing pid", idleTimingPidDeadZone, {useIdleTimingPidControl == 1} - -; Engine->Fan Settings - dialog = fanSetting, "Fan Settings" - field = "Pin", fanPin - field = "Pin mode", fanPinMode - field = "On temperature", fanOnTemperature - field = "Off temperature", fanOffTemperature -; this one has build-in FSIO logic - field = "A/C Relay", acRelayPin - field = "A/C Relay Mode", acRelayPinMode - - dialog = fuelPumpConfig, "Fuel Pump" - field = "Pin", fuelPumpPin - field = "Pin mode", fuelPumpPinMode - field = "Prime duration", startUpFuelPumpDuration - - dialog = fuelRailConfig, "Fuel Rail" - field = "Absolute Fuel Pressure", absoluteFuelPressure - field = "Fuel Rail pressure", fuelRailPressure, {absoluteFuelPressure == 1} - - dialog = fuelPump, "" - panel = fuelPumpConfig - panel = fuelRailConfig - - -; Controller->Actuator Outputs - dialog = mainRelayDialog, "Main relay output" - field = "Pin", mainRelayPin - field = "Pin mode", mainRelayPinMode - - dialog = starterRelay, "Starter relay output" - field = "Pin", starterRelayDisablePin - field = "Pin mode", starterRelayDisableMode - - dialog = statusLeds, "Status LEDs" - field = "Running status LED", runningLedPin - field = "TS communication status LED", communicationLedPin - field = "Warning LED", warningLedPin - field = "Trigger error LED", triggerErrorPin - field = "Debug Trigger Sync", debugTriggerSync - -; Engine->MIL Settings - dialog = malfunction, "Check Engine Settings" - field = "Pin", malfunctionIndicatorPin - field = "Pin mode", malfunctionIndicatorPinMode - field = "Warning Period", warningPeriod - -; Engine->hip9011 Settings - dialog = hipFunction, "HIP9011 Settings (knock decoder)" - field = "Enabled", isHip9011Enabled - field = "Threshold", knockVThreshold, {isHip9011Enabled == 1} - field = "!ECU reboot needed to apply these settings" - field = "IntHold pin (hip9011 input)", hip9011IntHoldPin, {isHip9011Enabled == 1} - field = "IntHold pin (hip9011 input) mode", hip9011IntHoldPinMode, {isHip9011Enabled == 1} - field = "ChipSelect pin", hip9011CsPin, {isHip9011Enabled == 1} - field = "ChipSelect mode", hip9011CsPinMode, {isHip9011Enabled == 1} - field = "hip Output/stm input", hipOutputChannel, {isHip9011Enabled == 1} - field = "prescaler & SDO", hip9011PrescalerAndSDO, {isHip9011Enabled == 1} - field = "knockDetectionWindowStart", knockDetectionWindowStart, {isHip9011Enabled == 1} - field = "knockDetectionWindowEnd", knockDetectionWindowEnd, {isHip9011Enabled == 1} - field = "cylinder bore (mm)", cylinderBore, {isHip9011Enabled == 1} - field = "Band Freq override", knockBandCustom, {isHip9011Enabled == 1} - field = "SPI device", hip9011SpiDevice, {isHip9011Enabled == 1} - panel = knockThresholdCurve - -; Engine->cj125 Settings - dialog = cj125Function, "CJ125 Settings (wbo decoder)" - field = "Enabled", isCJ125Enabled - commandButton = "Calibrate", cmd_cj125_calibrate - field = "Using 4.9 sensor?", cj125isLsu49 - field = "!ECU reboot needed to apply these settings" - field = "ChipSelect pin", cj125CsPin, {isCJ125Enabled == 1} - field = "ChipSelect mode", cj125CsPinMode, {isCJ125Enabled == 1} - field = "!See also 'Controller-SPI setting'" - field = "SPI device", cj125SpiDevice - field = "Heater pin", wboHeaterPin, {isCJ125Enabled == 1} - field = "UA input", cj125ua, {isCJ125Enabled == 1} - field = "UR input", cj125ur, {isCJ125Enabled == 1} - field = "Is UA input divided?" cj125isUaDivided, {isCJ125Enabled == 1} - field = "Is UR input divided?" cj125isUrDivided, {isCJ125Enabled == 1} - - dialog = spiFunction, "SPI settings" - field = "!ECU reboot needed to apply these settings" - field = "SPI1 enable", is_enabled_spi_1 - field = "SPI1 MOSI", spi1mosiPin, {is_enabled_spi_1 == 1} - field = "SPI1mosi mode", spi1MosiMode, {is_enabled_spi_1 == 1} - field = "SPI1 MISO", spi1misoPin, {is_enabled_spi_1 == 1} - field = "SPI1miso mode", spi1MisoMode, {is_enabled_spi_1 == 1} - field = "SPI1 SCK", spi1sckPin, {is_enabled_spi_1 == 1} - field = "SPI1sck mode", spi1SckMode, {is_enabled_spi_1 == 1} - - field = "SPI2 enable", is_enabled_spi_2 - field = "SPI2 MOSI", spi2mosiPin, {is_enabled_spi_2 == 1} - field = "SPI2mosi mode", spi2MosiMode, {is_enabled_spi_2 == 1} - field = "SPI2 MISO", spi2misoPin, {is_enabled_spi_2 == 1} - field = "SPI2miso mode", spi2MisoMode, {is_enabled_spi_2 == 1} - field = "SPI2 SCK", spi2sckPin, {is_enabled_spi_2 == 1} - field = "SPI2sck mode", spi2SckMode, {is_enabled_spi_2 == 1} - - field = "SPI3 enable", is_enabled_spi_3 - field = "SPI3 MOSI", spi3mosiPin, {is_enabled_spi_3 == 1} - field = "SPI3mosi mode", spi3MosiMode, {is_enabled_spi_3 == 1} - field = "SPI3 MISO", spi3misoPin, {is_enabled_spi_3 == 1} - field = "SPI3miso mode", spi3MisoMode, {is_enabled_spi_3 == 1} - field = "SPI3 SCK", spi3sckPin, {is_enabled_spi_3 == 1} - field = "SPI3sck mode", spi3SckMode, {is_enabled_spi_3 == 1} - field = "LIS302DLCsPin", LIS302DLCsPin - - dialog = stftPartitioning, "Region Configuration" - field = "Idle region RPM", stft_maxIdleRegionRpm - field = "Overrun region load", stft_maxOverrunLoad - field = "Power region load", stft_minPowerLoad - - dialog = stftPartitionSettingsMain, "Main Region", xAxis - field = "Time Const", stft_cellCfgs4_timeConstant - field = "Max add", stft_cellCfgs4_maxAdd - field = "Max remove", stft_cellCfgs4_maxRemove - - dialog = stftPartitionSettingsIdle, "Idle Region", xAxis - field = "Time Const", stft_cellCfgs1_timeConstant - field = "Max add", stft_cellCfgs1_maxAdd - field = "Max remove", stft_cellCfgs1_maxRemove - - dialog = stftPartitionSettingsPower, "Power Region", xAxis - field = "Time Const", stft_cellCfgs3_timeConstant - field = "Max add", stft_cellCfgs3_maxAdd - field = "Max remove", stft_cellCfgs3_maxRemove - - dialog = stftPartitionSettingsOverrun, "Overrun Region", xAxis - field = "Time Const", stft_cellCfgs2_timeConstant - field = "Max add", stft_cellCfgs2_maxAdd - field = "Max remove", stft_cellCfgs2_maxRemove - - dialog = fuelClosedLoopDialog, "Short-term fuel trim" - field = "Enabled", fuelClosedLoopCorrectionEnabled - - field = "Startup delay" stft_startupDelay, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum CLT for correction", stft_minClt, {fuelClosedLoopCorrectionEnabled == 1} - field = "Minimum AFR for correction", stft_minAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Maximum AFR for correction", stft_maxAfr, {fuelClosedLoopCorrectionEnabled == 1} - field = "Adjustment deadband", stft_deadband, {fuelClosedLoopCorrectionEnabled == 1} - field = "Ignore error magnitude", stftIgnoreErrorMagnitude, {fuelClosedLoopCorrectionEnabled == 1} - - panel = stftPartitioning, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsMain, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsIdle, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsPower, {fuelClosedLoopCorrectionEnabled == 1} - panel = stftPartitionSettingsOverrun, {fuelClosedLoopCorrectionEnabled == 1} - - dialog = auxPidDialog, "Aux PID" - field = "Enabled", activateAuxPid1 - field = "FSIO pin #1", auxPidPins1 - field = "PWM Frequency", auxPidFrequency1 - field = "Detailed status in console", isVerboseAuxPid1 - field = "#target based on FSIO map#1" - field = "control period", auxPid1_periodMs, {activateAuxPid1 == 1} - field = "#PID control" - field = "offset", auxPid1_offset, {activateAuxPid1 == 1} - field = "P factor", auxPid1_pFactor, {activateAuxPid1 == 1} - field = "I factor", auxPid1_iFactor, {activateAuxPid1 == 1} - field = "D factor", auxPid1_dFactor, {activateAuxPid1 == 1} - field = "Min", auxPid1_minValue, {activateAuxPid1 == 1} - field = "Max", auxPid1_maxValue, {activateAuxPid1 == 1} - field = "FSIO pin #2", auxPidPins2 - field = "FSIO pin #3", auxPidPins3 - field = "FSIO pin #4", auxPidPins4 - -; Engine->Battery & Alternator - dialog = batteryDialog, "Battery Settings", yAxis - field = "vBatt ADC input", vbattAdcChannel - field = "Battery Input Divider Coefficient", vbattDividerCoeff - dialog = alternator, "Alternator Settings", yAxis - field = "Enabled", isAlternatorControlEnabled - field = "simple on/off mode", onOffAlternatorLogic, {isAlternatorControlEnabled == 1} - field = "Target", targetVBatt, {isAlternatorControlEnabled == 1} - field = "Pin", alternatorControlPin, {isAlternatorControlEnabled == 1} - field = "Pin Mode", alternatorControlPinMode, {isAlternatorControlEnabled == 1} - field = "PWM frequency", alternatorPwmFrequency, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Off Above TPS", alternatorOffAboveTps, {isAlternatorControlEnabled == 1} - field = "Detailed status in console", isVerboseAlternator, {isAlternatorControlEnabled == 1} - field = "control period", alternatorControl_periodMs, {isAlternatorControlEnabled == 1} - field = "#PID control" - field = "offset", alternatorControl_offset, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "P factor", alternatorControl_pFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "I factor", alternatorControl_iFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "D factor", alternatorControl_dFactor, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Min", alternatorControl_minValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "Max", alternatorControl_maxValue, {isAlternatorControlEnabled == 1 && onOffAlternatorLogic == 0} - field = "#% duty = Pterm + Iterm + Dterm + offset%" - - dialog = startStopDialog, "Start/Stop Button" - field = "Start/Stop Button Pin", startStopButtonPin - field = "Start/Stop Button Mode", startStopButtonMode - field = "Starter Control", starterControlPin, {startStopButtonPin != 0} - field = "Start cranking maximum time", startCrankingDuration, {startStopButtonPin != 0} - - dialog = energySystems, "Battery and Alternator Settings", yAxis - panel = batteryDialog - panel = alternator - panel = startStopDialog - - dialog = speedSensorAnalog - field = "Input pin", vehicleSpeedSensorInputPin - field = "revolution to speed mult", vehicleSpeedCoef - - dialog = speedSensorCan - field = "Vss Car Type", canVssNbcType, { enableCanVss } - - dialog = speedSensorLeft, "Speed sensor config", yAxis - panel = speedSensorCan, { enableCanVss } - panel = speedSensorAnalog, { enableCanVss == 0 } - field = "Enable CANbus VSS values", enableCanVss, { canReadEnabled } - - dialog = speedSensor, "Speed sensor", xAxis - panel = speedSensorLeft - gauge = VSSGauge - -; Engine->Other inputs - dialog = analogInputSettings, "Analog Input Settings" - field = "!ECU reboot needed to apply these settings" - field = "Use fixed baro corr from MAP", useFixedBaroCorrFromMap - field = "Smoothing factor", slowAdcAlpha - - dialog = tachSettings, "Tachometer output" - field = "!See also dizzySparkOutputPin" - field = "Pin", tachOutputPin - field = "Pin mode", tachOutputPinMode - field = "Rise at trigger index", tachPulseTriggerIndex - field = "Pulse duration is duty cycle", tachPulseDurationAsDutyCycle - field = "Pulse duration", tachPulseDuractionMs -; todo: finish implementation under #907 - field = "Pulse per Rev", tachPulsePerRev - - -; Board->Connection - dialog = tsPort, "TunerStudio Port" - field = "tunerStudioSerialSpeed", tunerStudioSerialSpeed - field = "Use UART/TTL serial?", useSerialPort - field = "TX pin", binarySerialTxPin, {useSerialPort == 1} - field = "RX pin", binarySerialRxPin, {useSerialPort == 1} - field = "uartConsoleSerialSpeed", uartConsoleSerialSpeed - - dialog = canBus, "CAN Bus" - field = "Can Read Enabled", canReadEnabled - field = "Can Write Enabled", canWriteEnabled - field = "Can Nbc Type", canNbcType - field = "Can Baud Rate", canBaudRate - field = "Enable rusEFI CAN broadcast", enableVerboseCanTx - field = "rusEfi CAN data base address", verboseCanBaseAddress - field = "Can Sleep Period", canSleepPeriodMs - - dialog = auxSerial, "AUX Serial" - field = "RX pin", auxSerialRxPin - field = "TX pin", auxSerialTxPin - field = "Serial Baud Rate", auxSerialSpeed - - dialog = sdCard, "SD Card Logger" - field = "SdCard", isSdCardEnabled - field = "showSdCardWarning", showSdCardWarning - field = "CS Pin", sdCardCsPin - field = "SPI", sdCardSpiDevice - field = "log format", logFormat - field = "Mass Storage", storageMode - field = "Write Period", sdCardPeriodMs - - dialog = gpsReceiver, "GPS Receiver" - field = "gps RX", gps_rx_pin - field = "gps TX", gps_tx_pin - - dialog = lcdScreen, "LCD screen" - field = "display Mode", displayMode - field = "height", HD44780height - field = "width", HD44780width - field = "RS pin", HD44780_rs - field = "E pin", HD44780_e - field = "D4 pin", HD44780_db4 - field = "D5 pin", HD44780_db5 - field = "D6 pin", HD44780_db6 - field = "D7 pin", HD44780_db7 - - dialog = tle8888, "TLE8888", yAxis - field = "Mode", tle8888mode - field = "useTLE8888 cranking reset hack", useTLE8888_cranking_hack - commandButton = "Reinit", cmd_tle8888_init - - dialog = connection, "", yAxis - field = "ADC vRef voltage", adcVcc - panel = canBus - panel = auxSerial - - - dialog = monitoringSettings, "rusEfi Console Settings" - field = "Sensor Sniffer", sensorChartMode - field = " Threshold", sensorSnifferRpmThreshold - field = " Each X cycle", sensorChartFrequency - field = "Engine Sniffer", isEngineChartEnabled - field = " Threshold", engineSnifferRpmThreshold - - dialog = generalSettings, "General" - field = "!https://rusefi.com/s/fuel" - field = "Fuel strategy", fuelAlgorithm - - dialog = debugging, "Debug" - field = "!https://rusefi.com/s/debugmode" - field = "Debug mode", debugMode - field = "Warning Text", warning_message - field = "showHumanReadableWarning (affects Burn)", showHumanReadableWarning - - - dialog = limits, "Limits" - field = "RPM hard limit", rpmHardLimit - field = "Boost cut pressure", boostCutPressure - -; Engine->Base Engine Settings - dialog = engineChars, "Base Engine Settings" - topicHelp = "baseHelp" - panel = baseEngineConfig - panel = generalSettings - panel = limits - panel = debugging - - dialog = crankingFuel, "Fuel" - field = "Injection mode", crankingInjectionMode - field = "Fuel Source For Cranking", useRunningMathForCranking - field = "Base fuel pulse width", cranking_baseFuel, {useRunningMathForCranking == 0} - - dialog = crankingIAC, "IAC" - field = "Cranking IAC position", crankingIACposition - field = "After cranking IAC taper duration", afterCrankingIACtaperDuration - field = "Override IAC multiplier for cranking", overrideCrankingIacSetting - - dialog = crankingIgnition, "Ignition" - field = "Advance", crankingTimingAngle, {useSeparateAdvanceForCranking == 0} - field = "Use separate Advance Table for cranking", useSeparateAdvanceForCranking - field = "Use Advance Corrections for cranking", useAdvanceCorrectionsForCranking - field = "Use fixed cranking dwell", useConstantDwellDuringCranking - field = "Fixed Cranking Dwell", ignitionDwellForCrankingMs, {useConstantDwellDuringCranking == 1} - field = "Cranking Dwell Angle", crankingChargeAngle, {useConstantDwellDuringCranking == 0} - - dialog = postCrankingEnrichment, "After start enrichment" - field = "Post-Cranking factor", postCrankingFactor - field = "Duration", postCrankingDurationSec - - dialog = primingFuelPulsePanel, "Priming fuel pulse" - field = "Duration at -40C degrees", startOfCrankingPrimingPulse - field = "Falloff temperature", primeInjFalloffTemperature - - -; Cranking->Cranking Settings - dialog = crankingDialog, "Cranking Settings" - field = "Cranking RPM limit", cranking_rpm - field = "Enable cylinder cleanup", isCylinderCleanupEnabled - field = "" - field = "Enable faster engine spin-up", isFasterEngineSpinUpEnabled - panel = primingFuelPulsePanel - panel = crankingFuel - panel = crankingIgnition - panel = crankingIAC - panel = postCrankingEnrichment - - dialog = EngineLoadAccelPanel, "Engine Load (alpha version)" - field = "Length", engineLoadAccelLength - field = "Accel threshold", engineLoadAccelEnrichmentThreshold - field = "Accel multiplier", engineLoadAccelEnrichmentMultiplier - field = "Decel threshold", engineLoadDecelEnleanmentThreshold - field = "Decel multiplier", engineLoadDecelEnleanmentMultiplier - - dialog = TpsAccelPanel, "TPS" - field = "Set 'Debug Mode' to see detailed 'TPS acceleration enrichment' diagnostics" - field = "Length", tpsAccelLength - field = "Accel Threshold", tpsAccelEnrichmentThreshold - field = "Decel Threshold", tpsDecelEnleanmentThreshold -; field = "Decel Multiplier", tpsDecelEnleanmentMultiplier - field = "#Accelerator Pump model:" - field = "Fraction Period", tpsAccelFractionPeriod - field = "Fraction Divisor", tpsAccelFractionDivisor - - dialog = WallWettingAccelPanel, "Wall Wetting (alpha version)" - field = "evaporation time constant / tau", wwaeTau - field = "added to wall coef / beta", wwaeBeta - - -; Tuning->AccelEnrichment - dialog = AccelEnrich, "Accel/Decel Enrichment" - panel = TpsAccelPanel - panel = WallWettingAccelPanel - panel = EngineLoadAccelPanel - field = "No accel after RPM hard limit", noAccelAfterHardLimitPeriodSecs - - -; Flex Logic - dialog = fsioIO, "Outputs" - field = "output #1", fsioOutputPins1 - field = "output #2", fsioOutputPins2 - field = "output #3", fsioOutputPins3 - field = "output #4", fsioOutputPins4 - field = "output #5", fsioOutputPins5 - field = "output #6", fsioOutputPins6 - field = "output #7", fsioOutputPins7 - field = "output #8", fsioOutputPins8 - field = "output #9", fsioOutputPins9 - field = "output #10", fsioOutputPins10 - field = "output #11", fsioOutputPins11 - field = "output #12", fsioOutputPins12 - field = "output #13", fsioOutputPins13 - field = "output #14", fsioOutputPins14 - field = "output #15", fsioOutputPins15 - field = "output #16", fsioOutputPins16 - field = "aux valve #1", auxValves1 - field = "aux valve #2", auxValves2 - field = "Start/Stop Button", startStopButtonPin - field = "External Knock", externalKnockSenseAdc - - dialog = fsioFrequency, "Frequency" - field = "freq #1", fsioFrequency1 - field = "freq #2", fsioFrequency2 - field = "freq #3", fsioFrequency3 - field = "freq #4", fsioFrequency4 - field = "freq #5", fsioFrequency5 - field = "freq #6", fsioFrequency6 - field = "freq #7", fsioFrequency7 - field = "freq #8", fsioFrequency8 - field = "freq #9", fsioFrequency9 - field = "freq #10", fsioFrequency10 - field = "freq #11", fsioFrequency11 - field = "freq #12", fsioFrequency12 - field = "freq #13", fsioFrequency13 - field = "freq #14", fsioFrequency14 - field = "freq #15", fsioFrequency15 - field = "freq #16", fsioFrequency16 - field = "" - field = "" - - dialog = fsioSetting, "Setting" - field = "Set number is not associated with the output number." - field = "Set number, only the cell number with some numbers." - field = "set #1", fsio_setting1 - field = "set #2", fsio_setting2 - field = "set #3", fsio_setting3 - field = "set #4", fsio_setting4 - field = "set #5", fsio_setting5 - field = "set #6", fsio_setting6 - field = "set #7", fsio_setting7 - field = "set #8", fsio_setting8 - field = "set #9", fsio_setting9 - field = "set #10", fsio_setting10 - field = "set #11", fsio_setting11 - field = "set #12", fsio_setting12 - field = "set #13", fsio_setting13 - field = "set #14", fsio_setting14 - field = "set #15", fsio_setting15 - field = "set #16", fsio_setting16 - - dialog = fsioOutputsDialog, "FSIO outputs", border - panel = fsioIO, West - panel = fsioFrequency, Center - panel = fsioSetting, East - - dialog = fsioFormulas, "FSIO Formulas" - field = "!FSIO uses Reverse Polish Notation. Please read http://rusefi.com/s/fsio" - field = "#fsioinfo command in rusEfi console could be useful while troubleshooting those" - field = "#1", fsioFormulas1 - field = "#2", fsioFormulas2 - field = "#3", fsioFormulas3 - - field = "use FSIO #4 for serious engine warning",useFSIO4ForSeriousEngineWarning - field = "#4", fsioFormulas4 - - field = "use FSIO #5 for critical engine stop", useFSIO5ForCriticalIssueEngineStop - field = "#5", fsioFormulas5 - - field = "use FSIO #6 for rev limiter", useFSIO6ForRevLimiter - field = "#6", fsioFormulas6 - - field = "#7", fsioFormulas7 - - field = "use FSIO #8 for servo #1", useFSIO8ForServo1 - field = "#8", fsioFormulas8 - field = "use FSIO #9 for servo #2", useFSIO9ForServo2 - field = "#9", fsioFormulas9 - field = "use FSIO #10 for servo #3", useFSIO10ForServo3 - field = "#10", fsioFormulas10 - field = "use FSIO #11 for servo #4", useFSIO11ForServo4 - field = "#11", fsioFormulas11 - field = "use FSIO #12 for servo #5", useFSIO12ForServo5 - field = "use FSIO #12 idle offset", useFSIO12ForIdleOffset - field = "#12", fsioFormulas12 - field = "use FSIO #13 idle min value", useFSIO13ForIdleMinValue - field = "#13", fsioFormulas13 - field = "#14", fsioFormulas14 - field = "use FSIO #15 for target idle RPM adjustment", useFSIO15ForIdleRpmAdjustment - field = "#15", fsioFormulas15 - field = "use FSIO #16 for timing adjustment", useFSIO16ForTimingAdjustment - field = "#16", fsioFormulas16 - - dialog = fsioInputsDialog, "FSIO inputs" - field = "ADC #1", fsioAdc1 - field = "ADC #2", fsioAdc2 - field = "ADC #3", fsioAdc3 - field = "ADC #4", fsioAdc4 - -;Boost Open Loop - - dialog = boost_left, "" - field = "Enable", isBoostControlEnabled - field = "Control Mode", boostType, { isBoostControlEnabled } - field = "Output", boostControlPin, { isBoostControlEnabled } - field = "Output Mode", boostControlPinMode, { isBoostControlEnabled } - field = "Frequency", boostPwmFrequency, { isBoostControlEnabled } - - dialog = boostDialog, "", border - panel = boost_left, West - panel = boostTableTbl, Center - -;Boost Closed Loop - - dialog = boostPidleft, "" - field = "P Gain", boostPid_pFactor, { isBoostControlEnabled && boostType == 1 } - field = "I Gain", boostPid_iFactor, { isBoostControlEnabled && boostType == 1 } - field = "D Gain", boostPid_dFactor, { isBoostControlEnabled && boostType == 1 } - field = "Control Period", boostPid_periodMs, { isBoostControlEnabled && boostType == 1 } - field = "Min Duty", boostPid_minValue, { isBoostControlEnabled && boostType == 1 } - field = "Max Duty", boostPid_maxValue, { isBoostControlEnabled && boostType == 1 } - - dialog = boostTableDialog, "", card - panel = boostTable2Tbl - - dialog = boostPidDialog, "", border - panel = boostPidleft, West - panel = boostTableDialog, Center - - help = veTableDialogHelp, "Volumetric Efficiency" - text = "Volumetric Efficiency is used to calculate fuel in Speed Density mode" - webHelp = "https://rusefi.com/s/fuel" - - help = fuelHelp, "Fuel Control" - text = "More about fuel control on the web" - webHelp = "https://rusefi.com/s/fuel" - - help = etbHelp, "ETB Control" - text = "More about electronic throttle body on the web" - webHelp = "https://rusefi.com/s/etb" - - help = tpsTpsHelp, "Acceleration Enrichment" - text = "More about Tps To Tps acceleration on the web" - webHelp = "https://rusefi.com/s/tpstps" - - help = baseHelp, "Base Settings Control" - text = "More about rusefi on the web" - webHelp = "https://rusefi.com/" - - dialog = veTableDialog - topicHelp = "veTableDialogHelp" - panel = veTableTbl, South - - dialog = veTableDialog3D, "VE Table" - topicHelp = "veTableDialogHelp" - panel = veTableMap, South - - dialog = etbPidDialog, "PID settings" - field = "pFactor", etb_pFactor, {throttlePedalPositionAdcChannel != 16} - field = "iFactor", etb_iFactor, {throttlePedalPositionAdcChannel != 16} - field = "dFactor", etb_dFactor, {throttlePedalPositionAdcChannel != 16} - field = "pid min", etb_minValue, {throttlePedalPositionAdcChannel != 16} - field = "pid max", etb_maxValue, {throttlePedalPositionAdcChannel != 16} - field = "iTermMin", etb_iTermMin, {throttlePedalPositionAdcChannel != 16} - field = "iTermMax", etb_iTermMax, {throttlePedalPositionAdcChannel != 16} - - dialog = etbIdleDialog, "ETB Idle" - field = "use ETB for idle", useETBforIdleControl - field = "ETB idle maximum angle", etbIdleThrottleRange - - dialog = etbDialogLeft - field = "https://rusefi.com/s/etb" - field = "Detailed status in console", isVerboseETB - field = "Disable ETB Motor", pauseEtbControl - ; we need the term about stepper idle in here, because there's a bug in TS that you can't have different visibility - ; criteria for the same panel when used in multiple places - panel = hbridgeHardware, { throttlePedalPositionAdcChannel != 16 || useStepperIdle && useHbridges } - - dialog = etbAutotune, "PID Autotune" - commandButton = "Start ETB PID Autotune", cmd_etb_autotune - commandButton = "Stop ETB PID Autotune", cmd_etb_autotune_stop - - commandButton = "Auto Calibrate TPS", cmb_etb_auto_calibrate - - field = "!Set debug mode below to 'ETB Autotune' to show more detail" - field = "Debug mode", debugMode - - dialog = etbDialogRight - panel = etbIdleDialog - panel = etbPidDialog - panel = etbAutotune - - ; Neutral position handling not yet implemented! - ;field = "Neutral Position", etbNeutralPosition - - dialog = etbDialog, "Electronic Throttle Body (beta)", border - topicHelp = "etbHelp" - panel = etbDialogLeft, West - panel = etbDialogRight, East - - - dialog = testSpark, "Spark" - commandButton = "Spark #1", cmd_test_spk1 - commandButton = "Spark #2", cmd_test_spk2 - commandButton = "Spark #3", cmd_test_spk3 - commandButton = "Spark #4", cmd_test_spk4 - commandButton = "Spark #5", cmd_test_spk5 - commandButton = "Spark #6", cmd_test_spk6 - commandButton = "Spark #7", cmd_test_spk7 - commandButton = "Spark #8", cmd_test_spk8 - - dialog = testInjectors, "Fuel" - commandButton = "Injector #1", cmd_test_inj1 - commandButton = "Injector #2", cmd_test_inj2 - commandButton = "Injector #3", cmd_test_inj3 - commandButton = "Injector #4", cmd_test_inj4 - commandButton = "Injector #5", cmd_test_inj5 - commandButton = "Injector #6", cmd_test_inj6 - commandButton = "Injector #7", cmd_test_inj7 - commandButton = "Injector #8", cmd_test_inj8 - - dialog = testMisc, "Misc" -; commandButton = "Come To Pit", cmd_call_from_pit - commandButton = "Fuel Pump", cmd_test_fuel_pump - commandButton = "Radiator Fan", cmd_test_radiator_fan - commandButton = "Check Engine", cmd_test_check_engine_light - commandButton = "Idle Air Valve", cmd_test_idle_valve - commandButton = "A/C Relay", cmd_test_ac_relay - commandButton = "Starter Relay", cmd_test_starter_relay - commandButton = "Stop Engine", cmd_stop_engine - commandButton = "Write Config", cmd_write_config - commandButton = "Reset ECU", cmd_reset_controller - commandButton = "Reset to DFU", cmd_dfu - - ; bench test - dialog = ioTest, "Bench Test & Commands", border - panel = testSpark, West - panel = testInjectors, Center - panel = testMisc, East - - dialog = engineTypeDialog, "Popular vehicles" - field = "!These buttons send a command to rusEfi controller to apply preset values" - field = "!Once you send the command, please reconnect to rusEfi controller in order to read fresh values" - commandButton = "Frankenso Miata NA6 Stage 0", cmd_set_engine_type_Frankenso_Miata_NA6_VAF - commandButton = "Frankenso Miata NA6 Stage 1", cmd_set_engine_type_Frankenso_Miata_NA6_MAP - commandButton = "Frankenso Miata NB2 MAP", cmd_set_engine_type_Frankenso_Miata_NB2 - - commandButton = "microRusEfi Miata NB2 MAP", cmd_set_engine_type_microRusEFI_Miata_NB2_MAP - commandButton = "microRusEFI Miata NB2 MAF", cmd_set_engine_type_microRusEFI_Miata_NB2_MAF - commandButton = "microRusEFI Defaults", cmd_set_engine_type_microRusEFI_Defaults - - commandButton = "Proteus M73 v12", cmd_set_engine_type_Proteus_M73 - - - commandButton = "ETB test bench", cmd_set_engine_type_etb_test - commandButton = "TLE8888 test bench", cmd_set_engine_type_8888_test - commandButton = "Reset firmware settings", cmd_set_engine_type_default - field = "#Please DO NOT hit 'Burn' - just press a command button above and disconnect TunerStudio!" - - -; Board->ECU stimulator - dialog = ecuStimulator, "ECU stimulator" - field = "Trigger Simulator", triggerSimulatorFrequency - commandButton = "Enable Internal Trigger Simulation", cmd_enable_self_stim - commandButton = "Disable Internal Trigger Simulation", cmd_disable_self_stim - field = "" - field = "digipot spi", digitalPotentiometerSpiDevice - field = "digipot CS #0", digitalPotentiometerChipSelect1 - field = "digipot CS #1", digitalPotentiometerChipSelect2 - field = "digipot CS #2", digitalPotentiometerChipSelect3 - field = "digipot CS #3", digitalPotentiometerChipSelect4 - field = "" - field = "trigger stimulator pin #1", triggerSimulatorPins1 - field = "trigger stimulator pin mode #1", triggerSimulatorPinModes1 - field = "trigger stimulator pin #2", triggerSimulatorPins2 - field = "trigger stimulator pin mode #2", triggerSimulatorPinModes2 - field = "trigger stimulator pin #3", triggerSimulatorPins3 - field = "trigger stimulator pin mode #3", triggerSimulatorPinModes3 - field = "" - field = "Logic input channel 1", logicAnalyzerPins1 - field = "Logic input channel 2", logicAnalyzerPins2 - field = "Logic input channel 3", logicAnalyzerPins3 - field = "Logic input channel 4", logicAnalyzerPins4 - field = "" - field = "Engine chart size", engineChartSize - - dialog = datalogSettings, "Datalogging Settings" - field = "#Disabling optional logging may increase update rate!" - field = "Log debug channels", enableLogDebugChannels - field = "Log recent errors list", enableLogErrorList - - ; Racing Features->Launch Control - dialog = smLaunchControl, "Launch Control Settings NOT WORKING" - field = "Enable Launch Control", launchControlEnabled - field = "Activation Mode", launchActivationMode - field = "Switch Input", launchActivatePin, {launchActivationMode == 0 && launchControlEnabled == 1} - field = "Clutch Input", clutchDownPin, {launchActivationMode == 1 && launchControlEnabled == 1} - field = "" - field = "Rpm Treshold", launchRpmTreshold, {launchControlEnabled == 1} - field = "Speed Treshold", launchSpeedTreshold, {launchControlEnabled == 1} - field = "" - field = "Launch RPM", launchRpm, {launchControlEnabled == 1} - field = "Extra Fuel", launchFuelAdded, {launchControlEnabled == 1} - field = "Boost Solenoid Duty", launchBoostDuty, {launchControlEnabled == 1} - field = "Ignition Retard", launchTimingRetard, {launchControlEnabled == 1} - field = "Ignition Retard RPM Range", launchTimingRpmRange, {launchControlEnabled == 1} - field = "Smooth Retard Mode", launchSmoothRetard, {launchControlEnabled == 1} - field = "Hard Cut Mode" - field = "Ignition Cut", launchSparkCutEnable, {launchControlEnabled == 1} - field = "Fuel Cut", launchFuelCutEnable, {launchControlEnabled == 1} - field = "Hard Cut RPM Range", hardCutRpmRange, {launchControlEnabled == 1} - - - - - ; Racing Features->Rolling Launch - dialog = smRollingLaunch, "Rolling Launch Settings NOT WORKING" - field = "Enable Rolling Launch", rollingLaunchEnabled - - ; Racing Features->Rolling Launch - dialog = antiLag, "AntiLag Settings NOT WORKING" - field = "Enable AntiLag", antiLagEnabled - field = "Activation Mode", antiLagActivationMode, {antiLagEnabled == 1} - field = "Switch Input", antiLagActivatePin, {antiLagActivationMode == 1 && antiLagEnabled == 1} - - - - dialog = coastingFuelCutControl, "Coasting Fuel Cutoff Settings" - field = "Enable Coasting Fuel Cutoff", coastingFuelCutEnabled - field = "Cutoff Activation RPM High Limit", coastingFuelCutRpmHigh, {coastingFuelCutEnabled == 1} - field = "Cutoff Deactivation RPM Low Limit", coastingFuelCutRpmLow, {coastingFuelCutEnabled == 1} - field = "TPS Deactivation Threshold", coastingFuelCutTps, {coastingFuelCutEnabled == 1} - field = "CLT Activation Threshold", coastingFuelCutClt, {coastingFuelCutEnabled == 1} - field = "MAP Deactivation Threshold", coastingFuelCutMap, {coastingFuelCutEnabled == 1} - - dialog = parkingLot, "Experimental/Broken" - field = "#System hacks" - field = "Global fuel correction", globalFuelCorrection - field = "Ignition Math Logic @", ignMathCalculateAtIndex - field = "MAP Averaging Logic @", mapAveragingSchedulingAtIndex - - - help = helpGeneral, "rusEfi General Help" - webHelp = "http://www.rusefi.com/" - text = "" - - dialog = gppwm1left, "" - field = "Pin", gppwm1_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm1_pwmFrequency, {gppwm1_pin != 0} - field = "" - field = "On above duty", gppwm1_onAboveDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Off below duty", gppwm1_offBelowDuty, {gppwm1_pin != 0 && gppwm1_pwmFrequency == 0} - field = "Duty if error", gppwm1_dutyIfError, {gppwm1_pin != 0} - field = "" - field = "Load Axis", gppwm1_loadAxis, {gppwm1_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm1, "General Purpose PWM 1", xAxis - panel = gppwm1left - panel = gppwm1Tbl, {gppwm1_pin != 0} - - dialog = gppwm2left, "" - field = "Pin", gppwm2_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm2_pwmFrequency, {gppwm2_pin != 0} - field = "" - field = "On above duty", gppwm2_onAboveDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Off below duty", gppwm2_offBelowDuty, {gppwm2_pin != 0 && gppwm2_pwmFrequency == 0} - field = "Duty if error", gppwm2_dutyIfError, {gppwm2_pin != 0} - field = "" - field = "Load Axis", gppwm2_loadAxis, {gppwm2_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm2, "General Purpose PWM 2", xAxis - panel = gppwm2left - panel = gppwm2Tbl, {gppwm2_pin != 0} - - dialog = gppwm3left, "" - field = "Pin", gppwm3_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm3_pwmFrequency, {gppwm3_pin != 0} - field = "" - field = "On above duty", gppwm3_onAboveDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Off below duty", gppwm3_offBelowDuty, {gppwm3_pin != 0 && gppwm3_pwmFrequency == 0} - field = "Duty if error", gppwm3_dutyIfError, {gppwm3_pin != 0} - field = "" - field = "Load Axis", gppwm3_loadAxis, {gppwm3_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm3, "General Purpose PWM 3", xAxis - panel = gppwm3left - panel = gppwm3Tbl, {gppwm3_pin != 0} - - dialog = gppwm4left, "" - field = "Pin", gppwm4_pin - field = "" - field = "Set frequency to 0hz for on-off mode" - field = "Frequency", gppwm4_pwmFrequency, {gppwm4_pin != 0} - field = "" - field = "On above duty", gppwm4_onAboveDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Off below duty", gppwm4_offBelowDuty, {gppwm4_pin != 0 && gppwm4_pwmFrequency == 0} - field = "Duty if error", gppwm4_dutyIfError, {gppwm4_pin != 0} - field = "" - field = "Load Axis", gppwm4_loadAxis, {gppwm4_pin != 0} - field = "" - field = "" - field = "" - field = "" - field = "" - - dialog = gppwm4, "General Purpose PWM 4", xAxis - panel = gppwm4left - panel = gppwm4Tbl, {gppwm4_pin != 0} - -[Tools] - ;addTool = toolName, PanelName - addTool = veTableGenerator, "VE Table Generator", veTableTbl - addTool = afrTableGenerator, "AFR Table Generator", afrTableTbl - From e09b9eee3a4109740bd7f73ca87b26da50e4d978 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 20:23:57 -0400 Subject: [PATCH 159/182] auxTempSensor text output --- firmware/config/boards/microrusefi/board_configuration.cpp | 6 ++++++ firmware/controllers/engine_controller.cpp | 2 ++ 2 files changed, 8 insertions(+) diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 8468c44de3..7dc37bf3d3 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -166,6 +166,12 @@ static void setupDefaultSensorInputs() { // iat = "23 - AN temp 2" engineConfiguration->iat.adcChannel = EFI_ADC_1; engineConfiguration->iat.config.bias_resistor = 2700; + + +#if HW_CHECK_MODE + engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_2; + engineConfiguration->auxTempSensor2.adcChannel = EFI_ADC_3; +#endif // HW_CHECK_MODE } void setPinConfigurationOverrides(void) { diff --git a/firmware/controllers/engine_controller.cpp b/firmware/controllers/engine_controller.cpp index 3d60580522..4a6416dcf2 100644 --- a/firmware/controllers/engine_controller.cpp +++ b/firmware/controllers/engine_controller.cpp @@ -324,6 +324,8 @@ static void printAnalogInfo(void) { printAnalogChannelInfo("pPS", engineConfiguration->throttlePedalPositionAdcChannel); printAnalogChannelInfo("CLT", engineConfiguration->clt.adcChannel); printAnalogChannelInfo("IAT", engineConfiguration->iat.adcChannel); + printAnalogChannelInfo("AuxT1", engineConfiguration->auxTempSensor1.adcChannel); + printAnalogChannelInfo("AuxT2", engineConfiguration->auxTempSensor2.adcChannel); printAnalogChannelInfo("MAF", engineConfiguration->mafAdcChannel); for (int i = 0; i < FSIO_ANALOG_INPUT_COUNT ; i++) { adc_channel_e ch = engineConfiguration->fsioAdc[i]; From fef0d4d7688ffde4b78a11f69c29eec85761ce90 Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Tue, 28 Jul 2020 00:32:43 +0000 Subject: [PATCH 160/182] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 9444b9690d..8ce8f733fa 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200727 +#define VCS_DATE 20200728 From ecf930214e789a58d06bb920b4c55b2170ad4268 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 21:23:03 -0400 Subject: [PATCH 161/182] bugfix: unhandled exception if trying to run two instances of console --- .../rusefi/io/ConnectionFailedListener.java | 5 ++++ .../rusefi/io/ConnectionStateListener.java | 4 +--- .../main/java/com/rusefi/io/LinkManager.java | 2 +- .../rusefi/io/tcp/BinaryProtocolProxy.java | 2 +- .../rusefi/io/tcp/BinaryProtocolServer.java | 24 +++++++++---------- .../rusefi/io/tcp/ServerSocketFunction.java | 8 +++++++ .../src/test/java/com/rusefi/TestHelper.java | 12 ++++++---- .../java/com/rusefi/ui/console/MainFrame.java | 18 ++++---------- .../java/com/rusefi/BackendTestHelper.java | 13 ++++++++-- .../io/TcpCommunicationIntegrationTest.java | 3 ++- .../main/java/com/rusefi/server/Backend.java | 4 ++-- .../com/rusefi/server/BackendLauncher.java | 4 +++- 12 files changed, 58 insertions(+), 41 deletions(-) create mode 100644 java_console/io/src/main/java/com/rusefi/io/ConnectionFailedListener.java create mode 100644 java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketFunction.java diff --git a/java_console/io/src/main/java/com/rusefi/io/ConnectionFailedListener.java b/java_console/io/src/main/java/com/rusefi/io/ConnectionFailedListener.java new file mode 100644 index 0000000000..e3c512b5f4 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/ConnectionFailedListener.java @@ -0,0 +1,5 @@ +package com.rusefi.io; + +public interface ConnectionFailedListener { + void onConnectionFailed(); +} diff --git a/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java b/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java index 50f1adb174..ab3010882c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java +++ b/java_console/io/src/main/java/com/rusefi/io/ConnectionStateListener.java @@ -4,13 +4,11 @@ package com.rusefi.io; * @author Andrey Belomutskiy * 3/1/2017 */ -public interface ConnectionStateListener { +public interface ConnectionStateListener extends ConnectionFailedListener { ConnectionStateListener VOID = new AbstractConnectionStateListener(); /** * This method is invoked once we have connection & configuration from controller */ void onConnectionEstablished(); - - void onConnectionFailed(); } diff --git a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java index 379a214ee6..afba623d37 100644 --- a/java_console/io/src/main/java/com/rusefi/io/LinkManager.java +++ b/java_console/io/src/main/java/com/rusefi/io/LinkManager.java @@ -196,7 +196,7 @@ public class LinkManager implements Closeable { return connector; } - public void start(String port, ConnectionStateListener stateListener) { + public void start(String port, ConnectionFailedListener stateListener) { Objects.requireNonNull(port, "port"); log.info("LinkManager: Starting " + port); if (isLogViewerMode(port)) { diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index 695599e487..cdcaae1d0f 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -29,7 +29,7 @@ public class BinaryProtocolProxy { */ public static final int USER_IO_TIMEOUT = 10 * Timeouts.MINUTE; - public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort, AtomicInteger relayCommandCounter) { + public static ServerSocketReference createProxy(IoStream targetEcuSocket, int serverProxyPort, AtomicInteger relayCommandCounter) throws IOException { Function clientSocketRunnableFactory = clientSocket -> () -> { TcpIoStream clientStream = null; try { diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 327c519eab..4e211c9317 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -43,25 +43,25 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { public AtomicInteger unknownCommands = new AtomicInteger(); - public static final Function SECURE_SOCKET_FACTORY = rusEFISSLContext::getSSLServerSocket; + public static final ServerSocketFunction SECURE_SOCKET_FACTORY = rusEFISSLContext::getSSLServerSocket; - public static final Function PLAIN_SOCKET_FACTORY = port -> { - try { - ServerSocket serverSocket = new ServerSocket(port); - log.info("ServerSocket " + port + " created"); - return serverSocket; - } catch (IOException e) { - throw new IllegalStateException("Error binding server socket " + port, e); - } + public static final ServerSocketFunction PLAIN_SOCKET_FACTORY = port -> { + ServerSocket serverSocket = new ServerSocket(port); + log.info("ServerSocket " + port + " created"); + return serverSocket; }; private static ConcurrentHashMap THREAD_FACTORIES_BY_NAME = new ConcurrentHashMap<>(); public void start(LinkManager linkManager) { + try { start(linkManager, DEFAULT_PROXY_PORT, Listener.empty(), new Context()); + } catch (IOException e) { + log.error("Error starting local proxy", e); + } } - public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback, Context context) { + public void start(LinkManager linkManager, int port, Listener serverSocketCreationCallback, Context context) throws IOException { log.info("BinaryProtocolServer on " + port); Function clientSocketRunnableFactory = clientSocket -> () -> { @@ -84,11 +84,11 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { * @param serverSocketCreationCallback this callback is invoked once we open the server socket * @return */ - public static ServerSocketReference tcpServerSocket(int port, String threadName, Function socketRunnableFactory, Listener serverSocketCreationCallback) { + public static ServerSocketReference tcpServerSocket(int port, String threadName, Function socketRunnableFactory, Listener serverSocketCreationCallback) throws IOException { return tcpServerSocket(socketRunnableFactory, port, threadName, serverSocketCreationCallback, PLAIN_SOCKET_FACTORY); } - public static ServerSocketReference tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, Function nonSecureSocketFunction) { + public static ServerSocketReference tcpServerSocket(Function clientSocketRunnableFactory, int port, String threadName, Listener serverSocketCreationCallback, ServerSocketFunction nonSecureSocketFunction) throws IOException { ThreadFactory threadFactory = getThreadFactory(threadName); Objects.requireNonNull(serverSocketCreationCallback, "serverSocketCreationCallback"); diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketFunction.java b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketFunction.java new file mode 100644 index 0000000000..9297af2e75 --- /dev/null +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/ServerSocketFunction.java @@ -0,0 +1,8 @@ +package com.rusefi.io.tcp; + +import java.io.IOException; +import java.net.ServerSocket; + +public interface ServerSocketFunction { + ServerSocket apply(int port) throws IOException; +} diff --git a/java_console/io/src/test/java/com/rusefi/TestHelper.java b/java_console/io/src/test/java/com/rusefi/TestHelper.java index d7e2ec0ec8..c6c1d26a43 100644 --- a/java_console/io/src/test/java/com/rusefi/TestHelper.java +++ b/java_console/io/src/test/java/com/rusefi/TestHelper.java @@ -47,7 +47,7 @@ public class TestHelper { } @NotNull - public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, BinaryProtocolServer.Context context) { + public static BinaryProtocolServer createVirtualController(ConfigurationImage ci, int port, Listener serverSocketCreationCallback, BinaryProtocolServer.Context context) throws IOException { BinaryProtocolState state = new BinaryProtocolState(); state.setController(ci); state.setCurrentOutputs(new byte[1 + Fields.TS_OUTPUT_SIZE]); @@ -83,9 +83,13 @@ public class TestHelper { public static BinaryProtocolServer createVirtualController(int controllerPort, ConfigurationImage controllerImage, BinaryProtocolServer.Context context) throws InterruptedException { CountDownLatch controllerCreated = new CountDownLatch(1); - BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), context); - assertLatch(controllerCreated); - return server; + try { + BinaryProtocolServer server = createVirtualController(controllerImage, controllerPort, parameter -> controllerCreated.countDown(), context); + assertLatch(controllerCreated); + return server; + } catch (IOException e) { + throw new IllegalStateException(e); + } } public static SessionDetails createTestSession(String authToken, String signature) { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java index f4e2462e8e..519fe9476f 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/console/MainFrame.java @@ -13,6 +13,7 @@ import com.rusefi.ui.util.UiUtils; import java.util.TimeZone; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; public class MainFrame { @@ -21,7 +22,7 @@ public class MainFrame { /** * @see StartupFrame */ - private FrameHelper frame = new FrameHelper() { + private final FrameHelper frame = new FrameHelper() { @Override protected void onWindowOpened() { FileLog.MAIN.logLine("onWindowOpened"); @@ -42,22 +43,13 @@ public class MainFrame { } }; - public ConnectionStateListener listener; + public ConnectionFailedListener listener; public MainFrame(ConsoleUI consoleUI, TabbedPanel tabbedPane) { this.consoleUI = consoleUI; this.tabbedPane = tabbedPane; - listener = new AbstractConnectionStateListener() { - @Override - public void onConnectionEstablished() { - FileLog.MAIN.logLine("onConnectionEstablished"); - // tabbedPane.romEditorPane.showContent(); - tabbedPane.settingsTab.showContent(); - tabbedPane.logsManager.showContent(); - tabbedPane.fuelTunePane.showContent(); - new BinaryProtocolServer().start(consoleUI.uiContext.getLinkManager()); - } + listener = () -> { }; } @@ -87,8 +79,6 @@ public class MainFrame { @Override public void onConnectionEstablished() { - FileLog.MAIN.logLine("onConnectionEstablished"); -// tabbedPane.romEditorPane.showContent(); tabbedPane.settingsTab.showContent(); tabbedPane.logsManager.showContent(); tabbedPane.fuelTunePane.showContent(); diff --git a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java index 8ca507dc0a..5cbe9a430f 100644 --- a/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java +++ b/java_console/ui/src/test/java/com/rusefi/BackendTestHelper.java @@ -8,6 +8,7 @@ import com.rusefi.server.rusEFISSLContext; import com.rusefi.tools.online.HttpUtil; import org.jetbrains.annotations.NotNull; +import java.io.IOException; import java.net.MalformedURLException; import java.util.concurrent.CountDownLatch; @@ -16,13 +17,21 @@ import static com.rusefi.TestHelper.assertLatch; public class BackendTestHelper { public static void runApplicationConnectorBlocking(Backend backend, int serverPortForRemoteUsers) throws InterruptedException { CountDownLatch applicationServerCreated = new CountDownLatch(1); - backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown()); + try { + backend.runApplicationConnector(serverPortForRemoteUsers, parameter -> applicationServerCreated.countDown()); + } catch (IOException e) { + throw new IllegalStateException(e); + } assertLatch(applicationServerCreated); } public static void runControllerConnectorBlocking(Backend backend, int serverPortForControllers) throws InterruptedException { CountDownLatch controllerServerCreated = new CountDownLatch(1); - backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); + try { + backend.runControllerConnector(serverPortForControllers, parameter -> controllerServerCreated.countDown()); + } catch (IOException e) { + throw new IllegalStateException(e); + } assertLatch(controllerServerCreated); } diff --git a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java index 1c34f7e38d..cb1c3a4a19 100644 --- a/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java +++ b/java_console/ui/src/test/java/com/rusefi/io/TcpCommunicationIntegrationTest.java @@ -10,6 +10,7 @@ import com.rusefi.io.tcp.BinaryProtocolProxy; import com.rusefi.io.tcp.BinaryProtocolServer; import org.junit.Test; +import java.io.IOException; import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; @@ -83,7 +84,7 @@ public class TcpCommunicationIntegrationTest { } @Test - public void testProxy() throws InterruptedException { + public void testProxy() throws InterruptedException, IOException { ConfigurationImage serverImage = TestHelper.prepareImage(239, TestHelper.createIniField(Fields.CYLINDERSCOUNT)); int controllerPort = 6102; diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index baaba549eb..cd83b16067 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -161,7 +161,7 @@ public class Backend implements Closeable { } } - public void runApplicationConnector(int serverPortForApplications, Listener serverSocketCreationCallback) { + public void runApplicationConnector(int serverPortForApplications, Listener serverSocketCreationCallback) throws IOException { this.serverPortForApplications = serverPortForApplications; // connection from authenticator app which proxies for Tuner Studio // authenticator pushed hello packet on connect @@ -246,7 +246,7 @@ public class Backend implements Closeable { log.info("Disconnecting application " + applicationConnectionState); } - public void runControllerConnector(int serverPortForControllers, Listener serverSocketCreationCallback) { + public void runControllerConnector(int serverPortForControllers, Listener serverSocketCreationCallback) throws IOException { this.serverPortForControllers = serverPortForControllers; log.info("Starting controller connector at " + serverPortForControllers); controllerConnector = BinaryProtocolServer.tcpServerSocket(controllerSocket -> () -> { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java index 36e9958111..7b8f914824 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/BackendLauncher.java @@ -4,8 +4,10 @@ import com.rusefi.proxy.client.LocalApplicationProxy; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; +import java.io.IOException; + public class BackendLauncher { - public static void main(String[] args) { + public static void main(String[] args) throws IOException { /* todo rusEFISSLContext.setupCertificates(new File("keystore.jks"), System.getProperty("RUSEFI_KEYSTORE_PASSWORD")); */ From c98d177111aac99fe72f22e6e155cfa609958556 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 22:05:40 -0400 Subject: [PATCH 162/182] QC config --- firmware/config/boards/microrusefi/board_configuration.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/config/boards/microrusefi/board_configuration.cpp b/firmware/config/boards/microrusefi/board_configuration.cpp index 7dc37bf3d3..123df8b9ef 100644 --- a/firmware/config/boards/microrusefi/board_configuration.cpp +++ b/firmware/config/boards/microrusefi/board_configuration.cpp @@ -167,6 +167,8 @@ static void setupDefaultSensorInputs() { engineConfiguration->iat.adcChannel = EFI_ADC_1; engineConfiguration->iat.config.bias_resistor = 2700; + setCommonNTCSensor(&engineConfiguration->auxTempSensor1, 2700); + setCommonNTCSensor(&engineConfiguration->auxTempSensor2, 2700); #if HW_CHECK_MODE engineConfiguration->auxTempSensor1.adcChannel = EFI_ADC_2; From 6bbb1bc610e1d8f1393ab5b9b091bb6f5ab69bfe Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 22:38:35 -0400 Subject: [PATCH 163/182] aux temp info console --- java_console/models/src/main/java/com/rusefi/core/Sensor.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/java_console/models/src/main/java/com/rusefi/core/Sensor.java b/java_console/models/src/main/java/com/rusefi/core/Sensor.java index 4e48e84366..f0e21d5e76 100644 --- a/java_console/models/src/main/java/com/rusefi/core/Sensor.java +++ b/java_console/models/src/main/java/com/rusefi/core/Sensor.java @@ -32,6 +32,8 @@ public enum Sensor { INT_TEMP(GAUGE_NAME_CPU_TEMP, SensorCategory.OPERATIONS, FieldType.INT8, 10, 1, 0, 5, "C"), CLT(GAUGE_NAME_CLT, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 12, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), IAT(GAUGE_NAME_IAT, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 14, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), + AuxT1("AuxT1", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 16, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), + AuxT2("AuxT2", SensorCategory.SENSOR_INPUTS, FieldType.INT16, 18, 1.0 / PACK_MULT_TEMPERATURE, -40, 150, "deg C"), // throttle, pedal TPS(GAUGE_NAME_TPS, SensorCategory.SENSOR_INPUTS, FieldType.INT16, 20, 1.0 / PACK_MULT_PERCENT, 0, 100, "%"), // throttle position sensor From a4155bc554e755672c4e8c3a34a2f43fd9954612 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 22:49:59 -0400 Subject: [PATCH 164/182] analog temperature inputs validation for quality control --- firmware/console/binary/tunerstudio.cpp | 8 +++++--- firmware/controllers/algo/engine.cpp | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index b05a22c134..3cb3af385f 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -898,10 +898,12 @@ int tunerStudioHandleCrcCommand(ts_channel_s *tsChannel, char *data, int incomin break; #endif /* ENABLE_PERF_TRACE */ case TS_GET_CONFIG_ERROR: { -#if HW_CHECK_MODE - #define configError "FACTORY_MODE_PLEASE_CONTACT_SUPPORT" -#else char * configError = getFirmwareError(); +#if HW_CHECK_MODE + // analog input errors are returned as firmware error in QC mode + if (!hasFirmwareError()) { + strcpy(configError, "FACTORY_MODE_PLEASE_CONTACT_SUPPORT"); + } #endif // HW_CHECK_MODE sr5SendResponse(tsChannel, TS_CRC, reinterpret_cast(configError), strlen(configError)); break; diff --git a/firmware/controllers/algo/engine.cpp b/firmware/controllers/algo/engine.cpp index ffdea7208c..7f20c1656f 100644 --- a/firmware/controllers/algo/engine.cpp +++ b/firmware/controllers/algo/engine.cpp @@ -130,6 +130,14 @@ static void cylinderCleanupControl(DECLARE_ENGINE_PARAMETER_SIGNATURE) { #endif } +#if HW_CHECK_MODE +static void assertCloseTo(const char * msg, float actual, float expected) { + if (actual < 0.9 * expected || actual > 1.1 * expected) { + firmwareError(OBD_PCM_Processor_Fault, "%s analog input validation failed %f vs %f", msg, actual, expected); + } +} +#endif // HW_CHECK_MODE + void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { ScopePerf perf(PE::EnginePeriodicSlowCallback); @@ -163,7 +171,14 @@ void Engine::periodicSlowCallback(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } #endif - slowCallBackWasInvoked = TRUE; + slowCallBackWasInvoked = true; + +#if HW_CHECK_MODE + assertCloseTo("clt", Sensor::get(SensorType::Clt).Value, 49.3); + assertCloseTo("iat", Sensor::get(SensorType::Iat).Value, 73.2); + assertCloseTo("aut1", Sensor::get(SensorType::AuxTemp1).Value, 13.8); + assertCloseTo("aut2", Sensor::get(SensorType::AuxTemp2).Value, 6.2); +#endif // HW_CHECK_MODE } From d9abd6349f3a62be293fddbd582013b9d93b0db8 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 22:50:48 -0400 Subject: [PATCH 165/182] aux temperature gauges for TS --- firmware/tunerstudio/rusefi.input | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index 6152e24619..0f6f6f1f55 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -206,8 +206,8 @@ enable2ndByteCanID = false internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 intake = scalar, S16, 14, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/@@PACK_MULT_TEMPERATURE@@}, 0.0 ; throttle, pedal @@ -942,6 +942,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, @@GAUGE_NAME_ECU_TEMPERATURE@@, "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 From 96a6529e62e866fc07e0be88d8ba7f4d1353f48c Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Tue, 28 Jul 2020 02:58:52 +0000 Subject: [PATCH 166/182] Auto-generated configs and docs --- .../controllers/generated/signature_all.h | 6 +++--- .../generated/signature_frankenso_na6.h | 6 +++--- .../controllers/generated/signature_kin.h | 6 +++--- .../controllers/generated/signature_mre_f4.h | 6 +++--- .../controllers/generated/signature_mre_f7.h | 6 +++--- .../generated/signature_prometheus_405.h | 6 +++--- .../generated/signature_prometheus_469.h | 6 +++--- .../generated/signature_proteus_f4.h | 6 +++--- .../generated/signature_proteus_f7.h | 6 +++--- firmware/tunerstudio/generated/cache.zip | Bin 844595 -> 845045 bytes firmware/tunerstudio/generated/rusefi.ini | 12 +++++++----- .../generated/rusefi_frankenso_na6.ini | 12 +++++++----- .../tunerstudio/generated/rusefi_kinetis.ini | 12 +++++++----- .../tunerstudio/generated/rusefi_mre_f4.ini | 12 +++++++----- .../tunerstudio/generated/rusefi_mre_f7.ini | 12 +++++++----- .../generated/rusefi_prometheus_405.ini | 12 +++++++----- .../generated/rusefi_prometheus_469.ini | 12 +++++++----- .../generated/rusefi_proteus_f4.ini | 12 +++++++----- .../generated/rusefi_proteus_f7.ini | 12 +++++++----- 19 files changed, 90 insertions(+), 72 deletions(-) diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 8698c1d093..4626fe65f0 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 173557045 -#define TS_SIGNATURE "rusEFI 2020.07.27.all.173557045" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 2435517493 +#define TS_SIGNATURE "rusEFI 2020.07.28.all.2435517493" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 1dc8d1fa55..0df096261d 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 3571395030 -#define TS_SIGNATURE "rusEFI 2020.07.27.frankenso_na6.3571395030" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 1336697046 +#define TS_SIGNATURE "rusEFI 2020.07.28.frankenso_na6.1336697046" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index fda207018a..80d41de074 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 3345389999 -#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3345389999" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 1544933551 +#define TS_SIGNATURE "rusEFI 2020.07.28.kin.1544933551" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 6d3337c833..7640791cef 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 1134990267 -#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f4.1134990267" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 3637893819 +#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f4.3637893819" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 7cede4e937..63777ac932 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 1134990267 -#define TS_SIGNATURE "rusEFI 2020.07.27.mre_f7.1134990267" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 3637893819 +#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f7.3637893819" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 783e7cfd67..787785aa9b 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 4282686897 -#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_405.4282686897" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 1681380529 +#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_405.1681380529" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index 16f1fe23e3..ee31f56abc 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 4282686897 -#define TS_SIGNATURE "rusEFI 2020.07.27.prometheus_469.4282686897" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 1681380529 +#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_469.1681380529" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 444cc7ebef..0b09bfdb0d 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 2278110458 -#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f4.2278110458" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 481983994 +#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f4.481983994" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 0f2f6705da..64dbc5bac6 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 2278110458 -#define TS_SIGNATURE "rusEFI 2020.07.27.proteus_f7.2278110458" +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 481983994 +#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f7.481983994" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index aee5e28c82b025ed453284cf9a09b0e6a572b44b..07ea1c4f890a0ca6a6e07f64204e511f22059e9e 100644 GIT binary patch delta 294694 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

    e+Eau%2rqC+e9~vU0%-qb-*?dYrTeR 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 (#TI6Y_uD5?i^*;(AwIzI?< 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 RoGu2CdIlub$EX}?8udiSE+Jt_P7)S z2Vx509ZBfBI;`HZDqjCtB*_dbC6u4*k9H2O&vnFEZwQk6I0|jNh{EIWFJGih%DvVn zOCV~jP?4hZnS#%X!DseYszHYJ*gM%%h%rv)!OKe0^4nWzyW5QZJVv}iC< znnaR{vlr!7fe>o(W5+tIfZcguYIE?rfL3L$`MkK%o&HHrdp2bI=!fQ|=Nz{Y6+f(+ z;G6_*bRObYw(yZTlC&VAt;9%r=Sx>(_8q2ovsY1n!MxH-|KP3wZ;Z+uGO3L zbT2p;7nfU7>>je%AAWvJUHub|RN1wRVDKSN$1 z3s4~MP}uy+*;f+R0QxtC{cQ(vY@$E7&oG^bgmMR^G!-0#I1z{Xa7=p$GCDJ+sM|P$ znS#;!pwZvx#RpRbXC63wz8gqx9n(vq0RpRHn`qk=596Fo!ai>iU8jQ-9rpg;U9XvR zWc`nL3qYPSMP})lq6}`J&3(1r@nqASHG!Z+8jTz5jl%K z0Zir}*@p6kaWOGaStcQ9jZ;(c``@61m5A?hRS=jPWd6Q*-^6S=OCV%C+VBK_B@ zBE&$aAPr@%?YqJ=)q!EE2gOqbMsOq)td=7}a5Mz#Sn#dA0jzz&H-jJV|BKX{$jh|Z zPZ7TXs*5E_Vx=HM^;H# zn$oMf1tm#dwb0RzHCjovfIg#NuK!4wWa9oQjcFt?#w;aXT}kW49~n7Ij4k2t%Uuvt zlxM%wYn2Ts?G+5cp@$~zivf4vNp(D@cNdk6Hw}H~pS*wD-_3^MFGW0{FE#f* zfvV9E;S!)cX2aghgyV;jdZgY=3?AWtT5KjTYolO&Sop#}1a{;n{7LAEI}r5DTm)k+ zTi}JXRy%Gb+xCz0%uk++5Kk8yBr5pxGz`F2vs^28 zc!6yZL@n!s7AKpa!8N-!=iT-J;&#w~G+gnrc0tSa)!@$HE!SlOcqi{c&3%h1bIR2b zhci_p{cujBSkl$5p4Qj)m4ml5W=8ojyEivH4mZ{VJZC&Hn=&S(eK?ddCuV)7zMeyc zeWQ=|Wv*K73%3(=qan>VikUJRTCO_1rL*X?_?~*Xk(m_{!7-jExXh~i8!)j+>Ykd>l+z*Cy zA^h@%IBbZ8o$Q?u>Dzr~5ukz7!LQrof16Uz*fhXtq^=KCh2@z-<1&fGiANd?xE?I@ zg@}EBSPcIS6f8k*xlr0h-qbz}oz7^LO`}ala}LrD6^7PPY1D~Cm*MG!(~yF>G_ZoX z?56i+%T%z`^nB6==zNFUL}U2_=`@Q*g3cly2EK!(c-^?v_p<^b`7vUBf%bc8Nhr}e zaxmurb$VSfo!O`*NDK}r6uERe?vHP~ z&_~79vgCWL{R|p@XHUF8woK#0iV3?DcmYcdP~WaU@eU9Nxc;`_MlvA~o2(PdD7E2X zjAI9VBcippU8-=I2#Gc}0Xi8p7a>lOH8YnKUST z$hyaOeqeKo^WN$qvetGpekOJCAEljOVJ=H%vRvko_m1TPrBu(4i&x||-ru*_&EJyC zV0S^fg7=XJoce-BtzTkT+@6W=h>mnZF3}UdLsO)92HQFRphLT4CJ{x)5kOf%(6f^_ zJPhI?B-H&SSc9f?4adiViy)6Od{McP*?9l){`0d2__*G=!S2PLTCm-K5e4@kw_}&k za?N=f+Sm)HBm5X<;<&vrcS5~&-R-S`HM7tH!tf4Z^)z4Tn6j_?-Ok5P z|Kkpl(Qf;d@7Bkf>Q7};3AL?A4?QI~q-GP2(@z|JNvQjT@yRO$Vk^+s@xo4IPUY$3 zg7$CmxnKWOgG4m>>FiCd_hQ(cy#_|c+Q?nW5&;66&$v6!`X$sj_Y4o~8!nmvEqw#% z@4j!0xGCgb1b!&pII6AotkD&AaJJp4bKx@Tp%hcE5r)~HG?fdVp9A~UtY&~ode$gD&QKy;|e|c z)DnJ^Y}xR8mFo=vL(diHIh)=9iW3S<;i494?uoc8p`rM1I-0E_fQ5`Kbd)0fAZ24039BXhvli zMt znkdgH7Xf;JsWq!r8S#oKN-=}5nOI_HGaaWGlPdX$@nG=7f%z9>M`)WwJC3Vk6?(_Z zijiiWfLXVe^t6(6r11mL@oGYiFlIabTDNd(S3gO$s?V#F+k3oa8_V~~hO})l9Ofd~ z#a6g7cP7eO!fiOvO`daREM$zU!)j6|+|Xx#1Vxgbk-p`Kq-*apE8V>JdrqT%jF8D! z^L5EL(ABNS6yZs&!V<5&kt+^MKJMb2$Eo#|O_>+6cvk1rr?3Eb_P~&E4_d2RN1(=6 zXQ@ZZ`g8yK)p)j_xmMygr>dMZcDp;RHRVH>V>-z=?j18e@VDjU`|-RfU*YgFo#z4Z z)Pb=0$I1+-W}rUl8$q%~|Gsq%Kde_-VDZaM$a{XxMpFI8LipUN+T3cx!m4+yyEexC z1*=8>E2ENKYaX!k&7&WRQR&)StUvf63`wtG$3HAA`V51pU9vwI1EaG+{jH^CM;Jo_ zLzT-TLh$)_T2-GW+D);-_-Tnb{&1MCL||mKHi$!3j_S?|o#t=PutbHYm>&J#mNymr zVvA8db6z~m`k2ABapi*CSjx!MdkKHiMe^$#_;|8+5~l$s6bdQi&aC8u28L03{CIm6 z(#BTo{i}1O_bMNgt=AHOPEdK9_wVlxVcgLLd#S4?yqzEW8mv>)OWJsbHp^A5MoX(- zgVn0Wk*Z6Z5U84K4~AX4 z!#WI>%#2~;U-o;d-xpC?aM+UHvktFN#01^<49@q0;(tWe*Co2bYp3%UXA;aF5mI&= z*2ggGCnC%Qg+cHKE=+s+jlz$}n3iTeTs=GIMF7GJbFqm1Iz}rrzk&tw6VkG>m2U`+ zz^V%f0)ANwETSi~c+x&*-#aMT#Vh{$Ggg6n(|fMH1}*o_gkWlsWsp&=y(wMmi->fT ztQg{L#-n>jn(kU>5OJ-o0Zq0~rVTz^kMz%}d0QuP5(6mO*w-Rx0g2D%(1={`l6Yo3t&@j_qxj2vNIhZSDMro(2dq z9`y2CX2x+i)g-hSma5(T_?-D4abJ|h#lgmFUAVm5G(z=d-H)B|MQ@_k?y99_9$stD z{%?~*H~8eQPiD^M%9Qw{G${}1U@f@g?DSo^dfwVVD^a5IOtaqd({-xQQ4V0K{C28h zUUwPLOwJt321I)p!J5@Tk5~cwNVf2KRGpwn4}~i?B>DbiA}&lW`*Zw#3YIKnK54ZS zhin;{fvhN=!&=M};oDZN+g2y7h4p_%>k%H0MrjM3!ANH}j|(KFR>kmZuVs7uJXB z?j>gG##!?7kS84lhAxo+Q`+~)%=8nMrXoxkCfn^~@(MSH-P?GeJc%yT2;C^2q>)-C z3BJTqy?s*J8EahmQv7;ISsKvQy|%Ra{9+?EfoAM?ee{Je;f}(xL}$(n+B@yxL)_LR z7(ArZ8bSY5_~4$zWx(%EcuUP2!LFD^e?u{%{k59~WueGcTQTyVxpJ_Tv+R!w^nO~? zX{;2Tl;?~AtAS`*TdQmv^!@Gg6x_9_!RZO`Abp96Zr8XyJXg&)QjJt>s^j|x&=51s zspYlSWmW?kMXN9D%j<{*{^B2)h*k}J)O)M`4&KmU<5C@NJHR&_05^c%p)E!?8_XEapnsEkmYDiRl|# zOv=ns58fdZAwyBGyjaykBYRBIpg)BWF(;KCp+)l^2BsU6ng3{Xpe>%9#vGVDlaX>H zD<-~eg6ck@0PrvyMKd7YwZ@pkTqGr)^I90m6#Y`PuAe(K8*(8zp9g8GNA=?@9Xc?` zj+BD0wNbeT)eG386lF{j#4t-ZYCFOG#kOY=qyJU6itNzH$Rtdp*3GvLBm9@kAEEZh zMG!JK8*&)2<^C;)y%KDqQGc0OSa5>QY}0|0NkbE*4@k6zS3z%lA|)yh+XLzD2*z1P z;z^SSFid~ zMO~gK$97GNZecOsPAqg&Oa$fx>e7^cp1B+$>7QUIgv z>e~X%y>WK*fG}#Lmn!1i{lLP5E_Oa6IhIfL)C5T%WgFg=2`UV{N<1 zc&c!FFh_v=Av5Qeqm|0+`v5B6Y;RnT8Od5s+z%KEo%K&AOF+h^wQ$l-;g@eMZ6KWPiac@Wq4od;h^UyX%j{&+oDK zZJ*-5VMw($%owFVYP^6ap+^XoybVp^LFX5YS6O$ANmyWudF2-B zur>~6snyRJ9ckU)UpGmzq1m_bPuEV~>VZIq>kk)!ZO_zWv01xKR`i5phfJUbrS*eL zz8(kHgD3hpAm(h2wPt&}Ye|kRgJQuZk8M_qZI(w()uv>5{7LFiPU^skxqOw9{KE?l z8`LOSu^CbZESfbryBSjD8vzt&vc3bnDJWX9UJGPDv)Ng_*JeCj>lCCsK~f})A#qn}!&-K)(Lz{b_^uXqos(X9(^PSM>?|J$Wpu&V+CT)k zXl;G>cVvjEz^F0uwbUe8#T;sYaT8VA* z|5REQ0mUP8jL~h$7^yNkG)v^-%?7}F4BO(%;77X<bT$wuaYrf@U?HhS#e)LuKfX3JSH@C6=H8S3Zib4xe<1ZsSI2ZhXTPMeH~c8m z4#W0(Fsh^pQ$~+-a^|i6eh7Qflh`*Vyw%b6ue&MsDZqR|SEK+JZ-<`$aKsC=VnU`u z!?%=5P5H8hL|Lo&9_-CiYjP5;bh;kVSYKBr8s7~K{%@EZW=6j1&g~j-!I#KM&2i*h zQb@ga1oGRUd2kvdM*R5f1u`vV%%$AcrngRVpguAJ-px#;*6!$8qss2+>ECh_zIl5j z-D6ta3Kux1RYug#XFkXGU4cehr{{_q+h!Gn)(7yt`wI0#z9z=5UQHY%c~RZl5yuJ9 zQ;3u&m4QCASR2ch7u_!f_T-Ur9t2$mYY8O$_{2kO7Gp0lexI6C=Wi~vjJkLbla4WQ zM!5b&0hHc!m{_-GYVd)PYyhF;k->DD*>hMY3oNGXFnw#|4POi6uK*RebpxzA!{S1a z5M6uo!RSTRY;`DiF}2$*0iw=fQQu&yx!lHPdQF8bxLA|v9k_fz17<{~)T+huUwZBc zL{C{hv-=3vo$EHtq1gpq`#8bLzLPqkm=y5q#0>FKL&`%-guxfbQ}=OOZ!~4N&Ugqo@tOPx>lfMW(I8t(pyX{wDz*Hk#heM z5F_dO8N)IyptTBsVq=YEGhkUGKk>Wz6ARt_oQWMiggCA)7Sx4C8Oi>#G+KOzVK5c( zzn$u0FaOqqB29haKCtZQEwY>KHfYjPr2seb}{Y)LiSI zRSz|4)tamRFG}0KbHH1+$TRy8BaC{EErW#GQ-W(9&|d?iO|36N1Z2oPpBd&JEqx*B zaJ#PiUP#~m)jKwYd-NKCK#;zW9*o=iiH(7a$8p|cjkjhWsEQtiVG4ygpN4VcIBzSK zl=1j#?Vnh+p?-8~KZQsMBXU+LZTP;TGi#Zd&Z{wuCrotY4JJ8FA~I6)*SDGT4ic=_ zET(~$9I}zC=P-|Z0r8QR8+0%~f0^U&akpL3b={%!;^e=~`Y=fFV^GYLW%6saxp7RtzibcsMmT=E7>p323nukx01q@6h+pQ0yk4M*(-4|b1osA)c4 zNV115R2N#KBei*_Mm}EUS>1#^NWunKB9quUYC7G1N*+V>QE<+DMIcRbaZTez=Q zQaPvYQ`H*2Km|*A?{@?~wWlpr$-3s;voIsqFsGp(?fg|d2+G%^=krWe=9=-wnT8Kx zA7pY@`7QeymWc6@D3~G=P&vbzL-=NC8nE~4VaYBH-Pzl8zw4WI@x%U@=&PFwd?(;< zunBX&m|^619Y@-15^uhkd38VWv1Kh!Z67$TIDzk*!{v6S+f!;|m_g6G)Yx z=^`Y4Nb%OLPDIG|DscT{hHiow{jq|1nqN&E~c|mt4C+>wZ zixAmjFORi@E!wRg9Iy9K&3c0(DUSz{>E!?=SE0Szn^^+Ei)_XQtL|a-x?kEVV$Po#qPPV9R z8&s;kk8#D1j+JfH@*SWD)RW-TP4lnbHUTvQ7tzfL{1tVXowy+yE0~@$4*aRDhd!`; zx~(-^1>`rts%Z2>?%U8;VsqUe&cBCaIqAN(uq!WRH{lQFL%AgmKCn*XVGs_S_vr}4 z0Y25!KiNrzZzlPDYelTv1-faiB!z^I$aBthn&RhoB4uT^Rr~KnS=5Rif<9Q!Jlej# zq-!)=+-4bKg7rQa zpXN`~dm)J72u&`m&yqyIfWnL|Yb!j#Q4<9wLl^?)-NJstE6UM$hHjQ=g&1uu5YkBW z$_VFoUZ=wL+R)HHRYM_xl?i#hqoel;nL`zeiF?Tl<-pjVK>i%vgK?sE20!!p)GpZ4 z`V$`mqYyDI;5HFl@Pwmn7(lTLMeLQS>F}JS0MV9QJ%`{k-0nvTZzaFU`aX-dqVfEK z^Xp&u-vqw)!9B@TkqV9hc86#hYVVJx2Ivri`OtewVrjT=%_hnM@!M!@6v;^a!pc}J z^($RCdI}^H<_;z5i&Pr&Vm)IbRjd4hC&yz8wik?UWC&`9+4wiLEnsF3p5}(4S%M0$ zs$3s6D)Pvh5z1CF7HnJSN;1n=KcgJ(Ygx~P2sYSkUq~y9`F;QQbLKae!4(x1mWNh# zjJk%9Im6UPj6dO4VeonV1oSBRW^4&8LnOtB=H2zmfrIOsG=YXgbvd4{TE`FM(jVh@1g+CG3QV;lS=8`O?cMkG@NNYN5L>w(cmhE+myKG1FI{Xqnlfy@Xa`~fV-34qQ+RYbLTL2RDo=laD5Rb63V8FHr%WFLQ zQ=D|m8@62^@{V?hwy3Uqj)*3=a0>}8h2EK7 zWKq_rxNETy-%9w)M88JIR44)ufnpjCne$#+{T^&abzn?*w{P30vQ@$Ka%Sk72G4hdjp|$z9=2>BxAy z?5!V5Yj#rMVljR9Az=nQ>5Z;Gt$mh?xDqIY`>Rg|YlqOopzlHYCoaz6jDEF3>ioo+ zmeAEjiCGBDieG?pgFnyg{Pa&s`#0v@pj{W1iX#qasGF;sE%6iAmT05;&a&F*Na8Z& z7_-W$Q?K^6BFSM?TT&w~K|g2@Tjcy9K+a&UE$kQ@qI80M9WQUj_BC(cjs24+a8hJ- zRUZcH^5I%ub%U^|#KK9*3`gaIszM6NRs&yWJ=&9P$#f96LXr%kL)KHuRr5`gsS%pr zhv5sd;akgsw>a{(R*fVcj$|)W(Ew>fFXCMBWeT76{g*f*ro@%1`0vig6mY224l%%} zR`M4Fu`JPE)@ts~QI4-da5QctYN^S;#`>UC;lEcW_LFC?>0yk_-gPY-!Wf7%zwJRw5J4QyUb7pSdmt8tbjq-Y$L`8*(+S6?#( ze48LJ{2CV{7&@NZ82o}pr!1PUlYXcKHYqG44t%#8shk&~zaxS3CV)Md@{2WHB}r(3 zU;6)b`mOfeE{Utu2feD@R`Ib;4&$%s7d3;F`{OmM61KYl`@WU5E?wJnym90lahI$a z>K7$#m5ELn)zJ9p`Srrr#8?~wvj0Af2oqF*g*Sq9)u2@6pnQ!j5#PwZc+aaZ5dJIu z3sc`giv1Jhm>V^~gy*F*3m#h5CkAJo=xsEn!$nB>JKS$Hdnb zPiRyE1T7sC0B@ z2@be49z=*S^v8Ejlywc?_Z)m+GW{I1o^7;2!Ik?+aDWL`rW>Wda{%J*O_X)laVtW& zFVvY+L#_WjgRy6-{kbA!Mvlk1jz{UPJ&OdZQI~nTQJ1?g5W~H)r!rU0BC(Nfj-5}{% zTiQi$PMm(Iw6R-lTf+MKo8e2m{W%wUvA(=o=a7dpSAqfq5d8A6I`;N5P2l`k-y6@#sp-H-3UEuCvg>-=&?MN8=B|` z(L6cd**VT0eAqdTmfo+E%-^Z+`*Y8J&8_8R;j<|297?>q<^cLWKAOwO{q2?*$1Eo@ zqBTPn-r(in@FP11^G zGYQnRdMZEN47t({@&$rQFjV!hj9}r1N<4=hqrcp0xWJb?ii$c45IUrics*aEdVOg^ zWBm;2duI9!Tfk)D1eynHUS32bO+(552nmT^*@j#7Gy?0D#Z!g&qz&@?WYYh%+`tEn zg|a;FYO91iv$UAp&RBwuC8d$NXsI;E?`KkP+*$5N!Qf~*A)!-Z*5*B1YgFCI!Quz| zDjk^d({miU0zEPQY2Qv3U}(C$xu5cWrpF^zC=;!|t^Y=>upwH#X{Pqk6V_O<*=x=p zUH*|>qyBYi32Pl+?|B*3bp zY!Y$4m4=K?`R&Zn zHqcffaZej+HRBg;>YFPV{to+qfJ7CM^$|1P4?vu-Pfhb5bM&VhFUV#>=hqyi$&8vN zzLYu$eG2PnzuLFBtgLElYzHBg!n9l%i#@jn zc}L?hwljNY^lzNh&laGF@j=&AQs?QBxFH8JGl<88iQ*VkJU_e9Lze#r>aC!-n6!2e z<(AvJ$=jR@a$R(#>5+?WeW$QJN{!$W>;npVmusE11)}_fy-imFgED5+m%aYxdo^3Z z2Z{)tw7k0s+%#B(O^R-6Jy2nTNtb^s#DU(&YYi3c?6uZ5pVPcXi^QR&SvVRpT#baE zJsFq2gyV$b%zhYy2c3lu;2|62EsuF*S}sH~<`_NpdQRObh3w3Y3&C7N=;Yz|-v6F& zutWK(A~5)~h#RDQj@pXSSHEEV<}7=_o4t6P_{)_m2Sm2CbA6GZ54vK=E53)Cs$~pA zIT(*%yzWBOrIkD7a^1x{pl{mZ_d5<8JnD^dLHGDU)qsPMKjcnQPn?Nl6$uE{;h`Zqy&3@}eO z$j|S|3_9;!@limZ6_rPn)Y5@ej0-VoD8=5(t1JP+Ngj1(*Fa$p`TCPw{D+xEd8bUvI|G1Tdr8KpP`dKl3; zoJHNVu%kdB_mxES7hK`bMsF~uZh&2Fw{-Gi<0w`upfLeeaRvhE4;O86{X)j{V6n$j z2yy#>x}0rzihJr|!iPJy0Nz4uBhQT?$Li@yn1t8wn7TLEZEIH1%r_V2+8ekQ%~L*X zhJ@1CX^Z(;PabV^+>UH9q+Ya7!&`#m!@e8&wbgjyO><%MM1Pt2Bwm=m?EvC)#;y2LjNmMSP>!4#lCuggXdL8`<2&P00B7u(wJy$(lLBK}z7;;s z61Q}B!K0DJ{vemJnWTO%q@P~z9L%nU=faVQiTvag5m!NCJ80{Z#(;SkR1IAhCja3< zcV)~6QhtF$(=%6SM+ir;DkF0#2>qDbh!wesYD@%zO$cwJg+t39RGZSjE7^bHg@Xmv z7xUhBuNCjTxkkIO;rum;`p%fa#hHid!0I2N{fdzlJO2j78T{kfADEp#{TV$oLtGB3 zR1tK{?f;6jrF*U!765GRQDx@Z*H3%%$OxCjU6GU=ye>v__0Ie&`zTj+Ju9Ibl=S9> zUXH>!VA7#y)rNOv3pIAiIR7eVK81^P6)|D6hjSi6I`J|`*2zdZ+6~?jY>0~*5Lh>M zm)?QFC@Hi=;kDPPXiH(c3$ZvFU`F}g3#Bs!ps(=tUo{QW`U1b<&R;V4$}Ex;xwVKJ z@@h(zr`mGd=BSsQ_Fg6<5p$^xv}9A-=mKQ~7}Qbv5KNLr;HJ`koD{f5b^Iuog3%+} zefp|?Y=QJa64hQ*2I+I;M3o={-{Qw~E=10lef;FS`q)ALdgEXRNF1)zT9=_Ub;<2e znVXWAkWfVUy#sMza@#wiAQ!xL!p+}P$iA5b{)$sdxLhGT^eRv)A}__7!c|WiKOuys z(h_(aD9RyP>XKM2paH>I(I#x&l;-)7&98yTmlsoE2su=Xry8{)QObh*n#LBOAf_e4 zB~zIE(?^_f?8b#F)45tDJdw%{iaAGhL{Vg@c27Q^2n`qw35ws#lZi0Q9n6pPR1#;| z2_KNAq~T#yUt~)yBw~{-v5^i?WvtZh5ulCQo=SN>L1mgiT2Sm+hF~Qw1M~k&bK14k zviMGYYmxs?yhiV2_5idz&xmX9v|BUpLAeC1B}{hK2CW~D#7l7gJVd&e^XTkSiI^=c zq8?4x!4Oy%`hj5<0TW-(8{g-_0}J&tQ*I)^E^)Y6arrOYzq4#t=8%jB)%it}bZCOC zEyG#YW!b_A??650a#t^d0zsNVBF4;WEDrvoLYdc@;_09HK##7xbQgqPt{Qqq$x$`s zSch+zSp!_8$=e$?e5v+sU|!?n;gT`-Q-yi2A}SCXJm(tNX3xwpK#jBfC`sNMv%uQ= z)bCOI+Djs3lvGn~VAN=_J+6SW^}~(GSKY z84QS&i}hvqxu6c5>hB1Eus2rRO(aCsr+g0oJ}Kx%^TfHA_XAEf_Tl=M{)J6*)cdIs zZTCs3Jt{myuvqWp?me`BZ2UCsIhI`G56rO^*j(%D1obixmgX#m1NPTyW4QMub3Q8X zr>v2{HKP>4!aa)Y)15v`UkF)4XPPDldLO{s*Z)WTx~tjpkKtS1TilbFNL#Y9O$!t( zdPhTOh~qp*4Tan0FE+tV>{BI_HYGHFfp8ebShKB>+8qWy_|l`Hl-6PH>bU*ius|ru zK%JEVLD!4(3HXX|*=`|+_=-VqU2XdHcB=>8*1VqYL$G4uN4MlHu8J81_A(*cnlAu& zz^{W$jhPD^SAK}i2vHBQnN1v5ZU{euAR#2t?13Bwu^9*B83(bMV%C#+lzT0N7Y3Tl z{1VUDz-uQbsKeDrxCYEbOM1FFb;Y8}5=9-+(xyCPJIKSeNVuj!iu5X>Agf^&bNY^_ zaHsm#GMyYd;>30|A9c;Ke+5$$rx$<)2l^kX&)^X>Zx6EWJ*gI2j4%d^aYV!h1f|Dl z_@6OE2wGn1=<3yn{Y@q{cEnBSK^IRon>e=1VS=%}M6Wf}tSjim5Ap~PF~~l6L4yB` zrj2VXK(%;+R>q>RLF@+uz!O};szH&$rwH4jcu4p?cJOurt~Zoy0>I~7!YbrI&G%e> zf9K!t84yYA_G+JdwsuG6Vl!i7E~8)^H%=^8<0?9bT{NL$^rhH&M1_D(420k5Jyy(> zpfDrl;=a#4__ymcbPL`WT6R#9@(T)#80ZUd5a^j_*(rtg#DWsI+m{lul;i1g z)keK(@O^F|1G9ccvzGX_aBH>@2~&C~TZ)N_9?NI}Gpd){btICVDQ1re4(osD?mR3@ z*t=Yq*|j3%gSqIrsT5I>X;!Hj`P*8Xj%#824HYU%-Ap~uE)~Z`i;bqpQ0pO=1W2#D z`u&r~ISGY?gpm5$e7_SN)>vRu(0BCsH(5M$;SM7y@qNL3@RJ8+z!iIrpqBja<6#1} zUS`(2U>+wGJ2gia!+zXpeo(qPMflMBCUeinl{maxz#9aQ$DIWfGZb;m%%&i+soIYB#-iBZ%Pky67Y7_MQ zgCQT0+;GreZ{S6!smHI%ojHLy=$^ey6_!u?Wm4LmuA&WbMvC;5lSGWM z>h6S_v*agqnu-v)=>3L7kUMP~^(CVxo0@%WL2TuKC_|@oI?1EJGk}`3&w(cnVIEN= z+zNBCf$q$G~piPFtDx1RJZ*tBYtTrdg~Vba0$#`>(Gv z(^5D2%Cz8@eiw&~_@(Es*OL#rZ0aRXdQNX9HGPN28kKx*221opA^2u zMztO5QMaa=!RcDXUqHJn-9R2&*_5Nm=8c;>2Y=Crfa4+V+rC&zoAA_{aZc^GhlFl< zsb(S%#Np;X1#tqd+L^*%ro{gewO9nmiun^E~+;x(=5t?VdNLn`)}>%7u53`W3Y^8KbRlP1+;jDYOGAp=wVoNslp?#g42 zs{O0F2I4f?_xc155%h<>u~uLBUt^Wz8evBFx>J2;@YMzkcDLx9$(y>=s4P{jj^MW; zgC=8{xb5}EXH=HvDCN3^dSb&1jVinc``(w%9$@A5f@>o}VNZA}hiz7c%8!r1Sw$2r zgz?E}YSEVF9N;q#-r}j<@lvU(H&=j7^9TPG$S(XfNT6t38Qq=@P+194ALP4 zop@TUM}R|Ir`9M}yf&Z{o&W3!=fQIg@(5X#kO=O{^#QNSn#@v1H@zDEJD)+BvUe)v z8CW|nbX6XAS&{7oo6o&Ee?(}y9MfATa!5^cI&|k(j6@TZrcr3R@TJ;eWdnf%hHJFH~SO-SjwHsG?z zx$2Q0PW?!~OU{wY%ny=xarTs^Wi1UNyhw&GZ^HfviKOj^2@7Iz8^UD4-Gl^|ReNC# z-Z)n%U0l7pfyCWUyy@$|v0!ftcV0ms6%Mc6BY#e|y}9SSwD;Twl>KggsNpN98#8?< zRh-?;lAq#_-|1~cGCOV!7(bDF(E>b@9lhKR>}fvLTfSL02Az#{S0mgG)47OMnG>y* zniWNV+2T?EWTaf_AdI>El4mBZo6)p2TnuVF0lhP1d>tRS(~2vvL9iXD@rO_#UU?)F z<8UHPgf^b0+ny~%cT5dmIW+!dL@Us$&?Bck+t=@C*bq1>%#%a4%=@kNX$Ii`9=ao# zK|m{ko|j@$ist89Y_nk$!>_b|sd7cgca~RN1)8&zoIY!3C-T_F{iNM?Y=_GN>yI}p z=&(GCfVvn#6Vl^bN1Eq;DkGoFy$n@qRg@jb#3e7qg$IWn=>{LzdNrmVkaxN5{9vnXCA6`FTtxoWBblFnSr@p?H z^&eW&l~yU3Kt(1VGKNc5NyU8n%j_dyj4>ciUrvw}?sdIu+kkg^wcJI^Urb78IZ(&p8;~^Y-?s@+5q)PN`t320=toC>@(21QRyZBz|O zhN=|JE=p)KRnb-rd4R2NFj) zG`#Fx?Ixa`lKKaceZ$-is0cxUE4F)HCWBAcq^h0h+^cf=>uOxgQ8bvIUXe+DoC?ow z|BmP5!?5f}!1vLkRqlFhtN&?gfeOo!oMqm zViA@*Iuk(sOdgyb*x2Qp7W{gguWGYg&cDFV%glX^(Jkipzoe(^HD zmbee0*1>hma&Vl_`QE!L8H!YVCzL}V$vG=lv6f{R!23=5;UL9b;w8T2UzKbX_~`T_ z6)FNT(%WPLsSS7Ew3CCOXtiTxc<$Q(yC7LK3_Qvtt_IP?sJyz8qEMJqokYQ0^g4+}{Z87kqPvJZ;qyn7G7`kcmtTQAnbVxkDS%3tfYH@!rZy`%e) zHSn0P0$rkF1El0;U^vVHvga{e$&lE}W+5b5hu8*&itd4BPA#SwmJ+O~glWz{`rvkv z>o))PWG+Vf%GDv;V&i3>Bx5?t7rXu>xusj4M9+U~gQrUj2K;qo*=M4b1SYo1TJ>2@ z=hlqya|>s(ao0?o5s+K5<1$byC@<#jaDG~GKnW?xPsPA=8q8GzMNn>bqzJ`e-9CFa z7KGTx=YA9CLV^WC24h2!XVF_J96!TNDl%-Xu~A*j=|7PQ-xBRbz`+z*zyuPrff^adY^{yVvN5;VRHF*4}!ds?41B#6vyEe<;# z2lhOuJ^#YXqy*ehwPw8wFkTLR=&miKP5ATB3mcL;=S2mMgMY)xzlIzYHa$-dwN!UGM#jiFTQ|4)iDCYPU1eg|xqE9IKOP{!DB6<&3 zorm@JA0HoIrCFtcsX^I%rcDziIP<=&1O6k%#V>4=NFm=M+m~i%ACaF;KdH?#A8IrO zrnT30)~tn~u96PzceJNd)GW9I(_iw3f!rGzR-p1us`lR^PJ_+c#-B~ae=Z&@s>F+G z8>toUW`oADX)%`AN5(-BY$9A=^*jU~g7e>_yuKeY_lkm})UHSzD?gVGA$|p<1NRV6 z^np*MQ0Nrsq0H$yR&Qa&;#3*tY?_SNke&)3-Z9)b_JMHuu3J(Z?)R&1rHx-O`qwWQ zy}P2x`WKA;i+OKnP`LI5qv!u0jQ;D$e_`}Z|AWzAgby`+!RV2!Y}e;j+`nk{OP03B zUjjcAP59TXQyehBkbxXzYg_97^^5&qzsxU)y)oW8td;HX+{%xyeqV_nzxvrLnzVl< z{$k$i85FjCCFcHL;;$qBO6@FMt&EXY&)w~#zy5k6bVuPO zJspelp+h?%gmXZ3Us4rmzVM-_+#i)?P@%mmIa*{epRfHj{i_x>uuboJ2@V{U4O*#Ci1^9nLo#+UH|4*n^8_E>?zad*}1l9j1 zG>(lB4ffxVHXecr{r@Fs01op1WK{HxIrYH~1pygw00SWbK~3qdLcsie`3Lp?)=Q~2 zg2Lh7%Cc)@@UYpBiY;`fPPd3fVpQUqM=PbIHAtZTd@rQ~p#TZQFyrT6eO#1VLsO(t z#e@sd$-PdFu@6dd^nk$q{%`e=?r-M32lZ^=^R7I~i|ua6R!sMGeY*KJ$Vz@)2441Z+4k_8J0%*a28*%Gjt)6FJb&{zU51_ zsq%rw2Zyrz(;1Zg5w&EFBGP1L;(7lvnb>>Th1k&-1VfJ*qT_01BAxo<3+^B;ET6mg z%L!=Eruy6n90Fu%OaLf(oF8v4wt26HLKd@`#8(5o7>iro@Of%=h~ATdxO5{hw+t*vlW;MzYYXaaX)nh(0N^FSv^Mp4KdAeSHkzCL|qQ6-^=3ux$f~pFvuIjzf`byVBnV?i&Y7`W(mM+ zYs}YR4pz2+Y=J7Z)M1^V8|dlui%JH>F%w}%ThE7;wJSEV84dzw2>`hZf51&dhwvN$ z*(DS6YyD@8>}f`yM0 zf;M=_8x@W+g*hfvA5LUdHjY?Og$eNsapKzcI(YI_4m5NGvLpz?VPf6WNx&p2?uME8 z_VkMdnE3ht^kVyshq$m`BY+|JpoW)YPgRYCY+%><&%?nT_XoqJQp2)gVK`_iN)c>DmFT;-ydaWd zn4kYwOAHE*3Ww$K`snv!20hGl2%4`am|ku?t(N59+HMFRCZH14go$I0$QQgEEnpN1 zG0NBy6guGpUNbG|N6YnlarUR|XtAhOU8K=R-2U&CP>x}_60Q@-xK7zf@BPXi63M$o zvTt>SAe|s@*N}o>7_X$xK_ihdN(vb> z^o?UXN(d&2dShsP24F3w_y}AaC+@!B^;M*dwBi0GrinApsU=6M#Z{D zmiW_iB>)YWGhn>sDZt-P_+h>OO1W``Mc4Ba4c=^2@#MY7-0 zOU9cKdr-_viKdF)Cq%|%E=@Zvwi0$7B|N2;HI1>3h54vcQsVTX6``o_(dA}wQ)&Ys z$U$9GW+@Qpz{-(RKz~B;5~*g&c^=15H50$9uHpogPKIo7p`1m|I{MytaXbm6xYs+sm{bV_)^UtVC}l=$(6z=^v`Nr^&DN`sapuC@@B1Pph6Ay*NH(!F+YQlA(DS1m$cxt&Ke4 zX+wrAbN+Vu#it)5fHJ54UERqq%;lX3sdVQ^BP!U=1-`B+a)2}Fm*Gd%q->2!_%TuE0?|B$4TpW_R%|V$6%jP0!~g%|gUJ z_6Rzi=s42bMg%H@PX2whUUksI>4n3XzQ2B3n8wl#_t|B%*>Qi|YEd`SC_(7pQ*E2V zZx&mJRU*T}aZX9uXG3k=YQdC=3^)A7_mlEA<2sS96j=A)SJ&DkdEOf&J@GMPc7NP% zQB(Jbux2_`i9Otju~Ad7WJ^`Et#AKkuQBo+3O(ERF2Qezlg)2!&*8U%T&ku>FBr5i zm`aDPD-}9$dH350bDpK2;)AO=Wn9AL)#G^a^|9p}QMR8DVGMNVxIOYC&4(hE5|~dN z#JWIa4zNO**KBeOUrV(uvjOp%3E;~eeW1`kJ9(9VH&S4@BH-P&_Sf5@Q#RB^Yv?^? zw#2N7^dmL!;_&0rin*O2_(ZAYH%{aE=b*XVlQB158^KVK7W>4S( zImw+WV(@p`Dc;(2X|Il80g{eNf3J&;cfwmFv)FBn!Be{p)y4YvFg?Ie7wMAqj8L}9^Bp>8l+(be5AuuG&+muu^LN1p(f;t zvK%K2-pXN$kJ{!U#wX6jX>o&VwWW=R&`n5rALF^lnqSlxj6zXR{Vh+58|d%~5nSy7 zfF)d{|N0461oE9BEV0d?#caIsT}M_ruHqw&C!VcE<%4SeqTq*aHuT7j)MHYlx0=R( zKB%Mdl~#q!-ak^gnjcA5-w|4o69nZCI@~2tfX>H_%;IXz&E9qIpBw)D{az<+`{=}Z-FOpZA`I4db2{Zx0#8)IUTtG;f_zfNXjvrx-{d64N{$nA$;-uGnIg2+otvvs=M3ha@Gu{I{V7JKeH$ATk}oM@PE zhrU72IoZd8ZnVYoTa6&dZQmz4Q_EI@E)@R{cIAZS18y2k-)*k; z`HCzz_hz7kQyI3%mi=rpvtexEzMlr4HDU1@A3?gK za&=TuVMDl}9@4Sdp}P9oFdc}rrrmDGqVQAV-1{6KiQPISYB5HK{~^EFc({ujrpOEO zDslz6{@KXxV5Y@jM%WrvzE{)LJFm${TKsNS>l?i;*UF#A8vDB=Iq3!fi^-X)?uc># zGAJ5pC}{Vq=#0hYeFrxX){hIHoapspPb2<&{p>fBW~el|9{x z+Jt7{u(AlHpXzExF8&?xAu>z$460hl2J3Rra<~_bghDg?0A1LAb|y1#x;X2Uw?Xs% zt$$Z49-`jmo*lieMV-5RQM`W{A>XFlhMYy>r|jg!9z=b2*K|$aN|vYwiMV+`GG%8Q zHw$mqsA*h|^!B9E5NWobwIeo;I&AB^H5K(;he~pZ*ojLE0_Im;(_e5zI;h+eB3E%um8^>WKyg{SD3MKU4}1_cIO)$`O*rLe)v>S+SoQ&zFn zZVS||yLkO~>M5T=wgFT9V5$P7WcJ7&nV2dY3fqWg_da~7ODR|((G*fnod9~8dcW%A zwavnuM7{$Wl6Xxgg2dgK^{LlWkDr{b$tOeT$34c6gxanEH+5+@tHq)3STuvoVIC_^Hj49HDo)lEB#yOb2?a3q#v?CJN>A3fT%i^0 zBmL;xsJTOcMsz}fR$8RWlT!}J`%#lmZ%V{ZjPC56ccEKp7h97>QGXtj;dC7UJkv&; zTAfKjWVtSn-;=Jb2{Dsxc^hT33sdj4^aQEmBx?gBjLWr}+cwglX5m}*gxLv~EnLJ@ zW1h?7e|DY;!f6<(#qSLjZ~yvU)^1Q5CZ18cXQ5c>mB3Bc7QRZXFcc0FoDC- z_86cw^R63Or3X$J_jkL%S=lK+6MwBX;ZPY#sgetYrPYR&aB*NkJ1iph_0-V1dhlRr zprIQ}rJbrMs4?|a=FO3@s0~e6JFK)(a_?EIviuTGM@ev(LoK#p>)kSq=XNRTVq|o1 z72wI@Od{r_?IcD)O8y=?9eZua9=zG=OlL0P*?`;E)eJ?N6=)ZDEheZ{Pv&Yvx?$Zh zSk7AhZG&H)T)^bd#$F})OH!4X@T&C=v3BK(Dnm5}zWqg+89BD5KdbuI;Jm|WZ^Ap( zLtVO;PRxA$%}&F-Fmblqk8A7ME#mdW6@Zt}_cVH%brkh`zi73GfY4DNxT9a_~SUNJaUmh|EzO)LnFcdSuiaRD+g~ByetPRjW4>;_>6Ct z^bYR(fs)Y*WnoV^wZWIs%E{xh>~bWORG-|dRgPp)$(PY+?YN{pt#wwK(TF&;=Eh^Q zyj!6cRR7>TwU+ME^l#kI`EU?)6G(lwFvqz2)|N}l%n0W~Wlv`cm8g^WnzY@EkJd7n zNthO?v%)d)(bqzJfgdLKcdJSq$|wDz;o9J3*eiV(uJgI@*W-Yn)26{ro*sKd)I(v0 zUd9tT-CCd9j)hY$1$gB{L&G`2 z8kYBVXGn54piD)3ADPQwM8Ly^qkUvZ$rlnZ_A3NY=;=Vw45@It{>+sC$-J-S7Pi$A z_uqgv2-5IW+WDF1rx+LGVWHo0d*l$l#EOiYXdqR3w_0Dsx1?(4zgZV}t+1Ze;h=Ct zY^OYi^lyUP{JBFN;Ng-az!(k7Pq?Hh;O8rimCVbZA0P-S6Zmad%K^9feUGYT zXL3)u1o%QfjL*vug@OF}EmYq`3*W;_Qc^&8WNC!$DfaTHj`5sW5aY{4_QxTAa+2HW}=pPk`r-__C3&T9AqT9YiP8 z^Ov#6yehB?A1QEZ7atEN@w5ULG-(DR?y4a;ZXd?c%I$U%k!vyJ z)Ms+QJ9^{#FUIqw8GCt*|Iy){=$9|mmpF9WUBvVy+be+><-$!$$fecG*|ITnWw0-U zh)6z**~tu3_tuZDO%7IUoQwL3 z2e21hj&XqdbjS0Cx^%U(%SBbNC+}AqD-R`YC~hc`To9{fBr*ApY@6nZ$%fZkpwyk& z#=2QYwjFuNs@ZO<)Bo0xndUawofv0~{Ft9u@b}>H`sF9-1rv)|b-Q7Eqw@bQ`9`#A zldYNe`5$6BVKP!F;B|pyZS7H>>`tt113acZ*0>BZ0~Pyf*!lm(!ux3!3aE{Ij;;A= zO0mPORVJ|kE*DFpB@xIj7s;)kXN^AED(&m;7hDVN-R826H74nQ78D(9MB|4S`5h51 zMw=lNt_^Mb<YMZqaPMNa|3RGmQB zp`bmyfNDXO-Cli_&afc=q$hY++k&lz*D3s5n#g~I<$bo8(H_8L@=nN#Y(>?qa^-)| zRIiJ&rPTe?ExLI$vGX#}9bYF<)Jb**gtd`>9gRVKdj9}>v0bcPA=f5AJ(@-6m5jwZ zBqTnCeT%u`KLmPaKi5g%7WxRpyW3E3BSHncV?WBs_xwwp04vxu zBUx;T#`q`oq4%HLReG!;UECZp(g2P!l%fD_VtUE`P`+wQ{4~t-?2jye`m-YUceu!Ua8a2^I zL{4=troKh}SI@F?83(dDm|M8Toh;^t~O}y6JvWY#*rKBMv>h2C~U>=+GX4 z8j@~ye?h0cE&oM@COmlL_sBq{raTHZeJb+}@Iju>E{8@!!(P%$)7zXkeC4Qj~qzxN!MC1elbD^CSOK?VeFlRH|ow0+D-?3tw5FQ}dxWym|+Ongr z)%{rDeruWRhb9iuMNAW#IdrFlL;e8@W0qZv7&Z_FsomSkpC&Hl!EuH^TJM{#g*7jq z4hai2mj={Zxm#M3H@~P1u&Y8OZ^B~BhB&U%f?_xX=T6uK2nP&W8yEPZO^I9DdE`?8 zM}c5ARyXd+0r$^0SjFdrl^~*W{`;zTp0DLa{m8`Sg*CgXZ61$#csO#(1_9g|K#aIQ z7+$wUQ4W@O&SOb>O9WY|fpe(>dVlQYyCTyR#?2wMATZTp?lxj^L!)W;>nr!&P!*QL zq`*`0vG(7KE~zyg-Y{6~)C{Ny654@O65B>bXDYP>YNP#(*k1zsSku2k7^`I24^A30 z+37rmM3$@TFD1Iz@XTHT7C03mofS&0KeLcKmb>JB#gRl#4k3?2i`PKp@ zbdmda(m>yL?f$LhA;l6mtKkDdp+^5<(Ro^DQhanme08hfoq4aIGbgfXaG>w2^`eTnSvey6yI&l^9d4k*qHgO2FN`v~R@bG{U53*(Rk7eI2GSUBlfrwn2^56|3)>C1lC^_5ZwqJzv)%vik zis=F+@K+dE8}Bn!k`v^Y-{{5rDB0Ul8ym*>wsEAvmawF-J=mbw1p+ zq%%9~aHxyb8MNGc=F+1q)Pn2i2H~_eou{0FaWo`Q4W{2IT@bk?bNErFIexR5JIF9_ zU4C#^#+0b(_Ho1L{H9O98QnA?*K1hPi6~x&c28P_>o=OIoE7V5% zN1Kew8iT$)AxdzIfT|q@P1mb+d-PU25z?4kZZ|KjlMV)YK1009(Ks=1yL&A#&OM0k z1C{_>l2&6!cC@_hJIDIc@pv4{4GySQ2>lSyO!|X2sS46Lf6tUiGb*@q zN?@o*{!EgU^s~8!*r>2sat1{6+>3IdrsA?ujxLa(`^&Hx!^zMDh4P>=i2;H&< z6s9vCE_}D#jZN4B544g!R``B-?oFgd(LPn1a5Z8rQR=_Yp=T8ZbIgA zJ>Ld00Tmd3+nTQRH@9cN1CLu6u_S2?oy5M;1zyzm$-q5oH|Y>bK6(I8A9b7WbM3$z z=={g)tid5c_v$Lhg0KX>u#7rB`v;!95yQs^7uWa8ISc;{OL6cwj{aPsKWw2#Z{(9idp>*~`R< zQznlbCb2UwvvDUAVBzTv+JF+k5ev-Ty^}qEKTgU}0bzUUF2nLHr%yJP`lkm<$EBv0 zQ8>faot#2y8@HQ;0nysyRQ`3V+av*v@(WWL-X%R4!+OdW;h0a;r1=$BRyr9j3dUkU zD0do})Xsa%-=VL-|M|{LnVZ;y+rtl9gz`xpF*!KBBB%@`P&5*(>P$fT3$H0=q8&B%vs z8yMLX9O*{LwDR?pFC4aQH2m{ked$cn_9^n9Ws7QKbo^XA4$*tEpq_^)hI=~ zeB9X^<&c^9#mzdTsm)Y^7y!RV+I=rQbAU)vyJ!P)uMY!SO{E=N&3e`S{mJJ;qq7)s zj-Z~l|C!(JZD%9I6Y3r8oZM=oCS8oSv2m{6-HWeO?jt$#bV5@{>J25@Y2M3svgOtq z?sa0bX9JG+)5&T6<@?j=)`G0swUxBW?Z`YdeMyCobtOZ2Rrw2;HxS4POF^!7Ww^wS z<4JzN_${gcrP~^@{;q_mLd1w{OqcSLF(XJs%9xC4?PtpY^$8Hu@q6zUOe}yVVIzRV z$V1BVhI@Pk0q)o54wH#3bR%g;Ixp|Ap%d&VSIe`($lK1p;35!CDnqKlKYc`HGL@=X3(*hxP97v?)yRdT@nPyt30&qvu}h#ex~Y?8Acnv z(ot2(6bG$KB}SVYoGwprWmMk+6h_m6>Jl5RjW(^#GOf)a2GH~kZWUi?$w1L~wW!9n zxQ3DTEf~q8O_>|sF6dMFX0noz7ycw*XG4s2qZvOz*P+j?UxIY~;%~FR5M8Lmk~0gU z&$?iY6p;CZ#US*)f-bHni>it7C1dEMkTEJ3nKI8bVOU0z*?PtM$j199|J*d#>rvSg z#^9;J=4rs-0Wido&c$OG#AC$b$z@TM&|K{w3!%lM*nRyLg4AjZZs$}B_x#i+fQxYZ zN?USLFBkQ_snM@7J`7U>-{HV0!-0|_TP~pJG#;H&Ch5t@(+|;d`_stBnOXWcIN6T<-qclRhcjeLcIHePvym>;%OA%ze2(E;HRJx|1nNcq z7HjYb(C1wQvbXkc@gyuL%Uu1{W8jt3X$e$OfF=(86+P|m&#VjSuTkLa#7}{`$L3e| zByKWvE_HD0sg+ZVrBmZ{Hk~%Xl?iaV+QH|kl{NY*#(d=tpQiL{%%u)OlB=@m=))loX;M1Z@$WP_$}mee7jfd_Ku5`tOKh(X;ZSLAHiNsTAm!SD}U zjq-U6bUg|!2d3p~(}uD3Z=jx6ZFspGWXyiQ#)(L$-4Zg!%TUo1XMyZCgg!=LFn1SC zT)KouCb5I3zz{wO70TgdlU7+nQ(3c8S#wfxyK`(7q^(3#(U~u5_<&GZp)6`Bm$n2x zVG$b)MgIA6(7pm-w9u4A1Zs&+SJdoN#;~-Z^F;(*9cnM0<`<#bnr7-ncZNmZ%u}Kl z&vm377voi?({tryMrCBI328C2pGS%sDvKHx<8R2amq|=FW&VBesu&b~ON~)@MjC`> zhNa?GkXf{%61=R_Pqs|~9Jrul9Ge05F5iC|<|ZW}v=|4suA1J<*nsTe*^Qg1!6D!A zR;D_Iz4}h)PuJRu&6=t=dEY^)z^6!7Rk0Mk%I@C~q0B_L^K~8I6)HWktR6hKW_P2i zajl>97%mD-;@0ff!>M+wgM;nmGHJU0H}`hB8pk)xF>4(t{oK$`p=_3=4AnsBZsh(Y z8?s(w%r|D~u;*p|Hcc!04NUBlgzYvy%4f#+EN2c9 zn~^G26i#IchL8xGd;sh_7{awv%AMsuwNE-D!5 zemXU@m#DCSz7J^*9Vc{P1gBUurVklss*CY$7`WeQrREj8VqcX49BZeS8OZuPTXf3Nfsu$y~e|Hx#GYDNWg^TdKMz5W>y01SPf#e>=HK+IS=1q^`5$+r}yV!^d=o(UU74 zUKfQs=Y1ie-x3*)W5voclTr;yRk2{D9zmI8B3!4}$GtQZrvc(Zdv9 zwlnq}KnU{Yk@fR7cqEGXj+t^(9yc?wTYjZeoVcQ|NUO;Cfqm5R2G`7IT`^l$ss~m= zaM82YSn(yVymDXzcVtz(%mQhtv!z4LLZmKgz|3xkQoySndgg^#rd<~Om-%8^OSy3n zTYYs=HlWj*oZCn4@_fFH5ggaW?y}Z$kT1nex!NHX|LKbX?7r=s`_8G!!e(R;E=mMe$uT`nA#o#G*a#u0_i z%z6sLzck@>cs?N_UjhIGY^OtYK40aV52~w?MnWZova`Ogpb&6v7u9Rz9N1SHZ@FLO zeT3k}%$)X}h4JA`M1n^>@T1l);I>Kv{liw=+AXGu7K8cibGS(KDX0u1j6!$OcaXu2 z0_dn(4z+k0?n3Sx@x~?weF3G_E~{EvE*d!~u~p)Daq(cq%YGOP+;BWpBP0*z9wRCq zr=UA@7}9rb@THz<07cH_G>J=N?w==C+<=Ooo_c~R@6e%JAUd^@1jf-Av54j@`1{glXjCUe-tX~wRR(9MnkkK)O6SAa-)LyL6G0J zyoC6?4<*k&jnE#}%LLYCFLU0$cX(;Z@a*_BMo9?Zf}46gzNp%8r>8Onc>VN$0QRt- z09hE2D}M!}_*#$B9EUMSBt`jp{b zreE0^^IYe55&H|ID$(xy(Nu;5WMD;!_v1A86*HD%fEcvD9Ph(qIT}k=34?=ocTHDM zQD8&ym9+l;4 z+m6#ZyGn-(CbP{AT0q$jqz>}o16sQ1W8OQHNtf|%)@IHX%+K5TNK}LvQ||v=^eg- zI^G{fUTLJAjKeR|3>&~40DvH>*of zzo}i5@}mpU&Tjt>5(NmzU9M2eQ>?cM-m&2e4(z8#zvgc%NsD@$1^A;cXe%f}4|BOE zKOYg)eZll3*xY37IIc9*Pqy(hRH;-vk!9KMm+D&^+)4}W-ks1Sjd`!^yiqBm2BU)V zyMMOm=)JP0p?hz^>ZTd|D$vZl!Ujgd?aVs&O}BS@k^r!l@U*g! zg_yF|n%ddK{Xl%4MDg8rE_r_KkUls@F2A*8=`Eq~58J$6d|HrI=$Ol#bxAb+;2*y* z1?Dc@6mZ8mXwN@5rM@dyA8zcOaz@h5AbzR`@JU@w^zc}i$2`g&qAf0C1;vsKANdka zj8qCe^I}a1M!cdbMe#(18UPc&`3vB*p-b8@0J6y@Pf{f7*{-p{h&~#=U)vQH-4yo) zWZL$P-g`u7SEBbLRzKVRNWMN7MWEd$fG?2QiPs!iQ+2a4qa;iz64Ah?i@#Fd?DcZ*x-FKv zV}4k4)dgt_vuKYCxcGQV8B!jT+xCKQ3|UY*y#DeXw(I2cMB;0OOh!=g{vp;u+d2Pd z_S+L9|3YH3O4KIiJ9xM@1nCxRpY|M$mPzDcfN+ z5RIvbI+OEP^I@6lgrh0>N3ZOddK&AeG~1T}SnZ9>P!Fg<76Z3VYbhVmni~C(iaFj{DINo;1>!_pv9&)|>6rvzTS{L9RIG7#A`H zfvZvHIH;Te4Bs%;p7L;vLtK{P!ENATcV|5Jrc|<)%Da!Y9M<y~8*VDv{$uPv+=L$ZE&6L&e$oHt;h1wOtwIV#kHnhsyTzT1- z{H*LkVqeA= z?0=PL_u*4U%6g%be&NZ*XjbYDH|Ybl}5kmW+-R*nk- zL)VG+rDptO6P2nh?18)8XYt3OYs<^BUskAzi0H^vQx;lNF3f_tv7V^`1$7&?FAk?^ zRaGI@Jau}14pWb#O+x(X`+ry{%(qiuQo>(cw*f1U%>OH33-U}VOpnV&A`v-!ITyJE zWjD{>c3{j%_$EKwmy~6tvBlWQTTR~e7FMF}S6dN$?%Ne|e@-VLj8Muf?OXLCaPY(0<{XcNN)Z%iQosD=pF4v`ZSKDC> zz`OYE^!$0yLG~)mK+k6ERta6UcExOOtk*zI@$MA9LFZ|HV*KXK@MwF>!E<)@LujSI z<5NQ>LO`5PpyW3oDgS*r;^D9)uh>EuaoHQEX3&yOiy+2yTc9DU@csRo!VxAs{O`PD z%RILpeN0MBp?Y+o>A>`YV?()PLnZeE;7ag1&;3xzjpRZAJuw3 zNX~P|Kp?#~NIRA_-8sK~Di)3^EPS^WSieI{{jkg^Y_Z%=zDW;lWX&gmGfLp^>NwIs z%kvOlMZ_wI&(buqJfl~olLODuGtC2SuX+$jb(rphj}art#I7!E^o8Qi0v32oRT_zRb%yd80_opM zOqOE)y{swO6-x_z5?Qk@@2dqyOdUfdYbhdMT4`}3p?igqyZskRf^^F`iA9=k^5NlQKN#-K z!qmS>jS3pYzuOyzHSi6Wyq&v3^TEnSDr(AylG`C&Hy{t^70KezoY!j{EghYmGk)XW zz#lhUxZcxmR^ZAWZk5jI|2*V|o(O+;z2a93g)94usGPiB!Zis4 zmAfCzxZ!<09D28de$4M*?mtw1oPD~@E7HXo>QLv7 zVeZOGHLA@z&|&pyIeS|w7g6JGZY(%<8T!lYlUE86dF8w`IO;X)r?9$JVl}Z*w?RO) zWw{UChq7r z--MH_0xBiQwe@qa`2{;jTU(%~EZAY^nuX!asTl1ziH5@oPw#tnKOj9Ruf8SI)~AS? zkMs`(6a1&EudXFwo@p3=rngxUo0lN`w*jfPPzgvCM(;fdn{qckZ7~Vb3W81}t2D zoeoDOPrvzx0I+wR)OxN~Oq7Cmi8!=rx)w_o&fIWtC#2!**Pzu+0(~j?wc_%V|ChZuB(17=rvT#E#)YTDtn2r}J8dI~z^4hphHOXi@QGje|2NjQJgOc644e|}>P z;MObd=TlH9sn=r+51?iNiaL5O3#O7g<>h;X+B^qW+Vv??cLNzCe=_(mk&A$#Ga&rt z(a1lR`cS88dzT3FJED)sRg>0*o8{KI!tbrsbQsp)FI}|Rw}BpT=^MA2-DPUg; z%?TzBRWGdoO=wkBiq9)!^5vL)0k@PrfZYOkdU6sWd3NqzJ6?J(5x?s}xh$V%?SywI zw7cU;lZISeEF7%g*u+24WOQICVhTtWJX7V^#V0jaKHFlSbd-=c4HMBUhY?Q(RBd|D z@!m@dvHJEa+v*Mc_SUqq?-XHeD3ef}AaV}8=}6ha7Q7kd#pB;>DB+)Aq3kFC+A(C( zHGRYEa_`1opytx-mlM`eV;9SyHTcJ%M(oh<;O%KQVuMTh!WAmak2~^a0|ndkHa{Zn zQ#aN_V6jVe$iF6MJJmCLsfb(eX}d5A|D_Sdgf(%Mbk01154$MjcAXy1fLS!iYG+t5 z@fn@5!0R+d9Wz~Gi@BJx#~joY^}G})=8-;|-5svy)^V6TKjnTo36&4&Bgc^WYZRIf zo6oD3V_J&upiSD>#}}6Y!Y}x(yaJBzjILL6e1Jbji036Hbu$|Z8_YgF71RV?4)klt zuqFbzTC8~*m((=%I)+H~PhNQK=0}qzMF$oQ`Dw{|kw1uu91QL}+@n0`iOLtk;+_a7 z4JA5fkuQnnDoii<=9~-#^^f=F0}GsyBk##d;Ji; zvr~H$ps|RQB@M0c6h4;9ma*RQIlYAtxWHIEd*}>A2yL$Rqf&bsAh6kD){z|#d*gHh zyLSkcats=qJ%@|OO0vtL&-%u}PT;%BjhkTdvG|AvM4qkh*}*I(XHx|ep-a)Rof^IA z@A5#$%M+i22|jUjmY{e0}9 z>35nJu-lQy&>?)GO#fU}q&6z!4GvosX5;)P6o!tS2#=fc-HTkB*ZOhb0uYf|cwTyZ zTttPk@oUw76GeYQG}~pz-IXt4#WYyujzFCU%|d|RG6yuTfB;m*geRy((RT#ADSv4HfA zCh}h$(QI3lX#6aZVuh0tF3b-^KZh{lKH_RL0m*+Hg)v)1<#qm3DB2<8S?`x47&BI^ zOxgWR$#2W(H>;O!oMkumPW}{ThMWCxr8z5hI(`^PBA0b0W{Lzv-~_QO8c&p`kf!7A z#duU9hFgE%v5P3;a2uT39AXmGsm`~WmoU9EI_c}oh3Xvr(7yDZ<1wWcfYT6~lf;WH zK>Df{KC(iV6+&{5{FmAN($k!KhvnPqQ!-FAuktc5v@6IL<6~bd9ovGK(iY)+f^2Zf z6Jr8>jFwa*BUA%ic0S)M1WrgU63YLDIjV74XM~8_{ykPRIx)8Vxag~+LruaOACoc? z+N0{GCBte6j#Fr)XE8RH&ZWbUw@CfD<~d6B){db0u0X}TdXt&y1OMyS zuUj&lKJxhQ0Rb#M10P_7BpnE3VioAjKNoArq!PY1zK^il{;OQ2080L!!#*Gj&>-*7 zI0CA&~{2TngGW2voU1}Stva8-O0eY@&moU28|?=7n5bcnLcDUiwinnhne@QAMn zO`R~c6AwyAm;dqxVt*7RiCXFQB3w{KF{m&2uF^ybL?vo%s;?R5K^&c*=$&dQ_ ziDy=TjhY!yU4rsk&tUldBWtjy=VSgmht0-kZfIxc=j~R@+a*zjk2=XB+}?>WBfXL= zw3V*^3hz`GriCFiZw(mXk#ML+o+#nbFq}&fcxMw>=YoHh0RI2$)tf8IbvR9tyaDQq zWhvt2Aj6Gdt-MO3aC0;MD;jxCNDcOoD~tX}6~fTGQ~8)jO3=J@V1&oQ)s@24t|a>9 z6#wr9=E?}@B5{i|>oyNA!rw zvdZlXCo9AzGGcesw6BL@b-aA=?l#{B%;N~M1|8g8wVzS15bEMFwZpC&vP_#dWC8|} zFv~g>gDQJP!|)j4Df{BU9TSf_EE2C* z{MuhCft~1$3$DO$tVcs%QB?BohVr22}Xpnul zWl$~|=+;gf>G~@m*qE`RexKc&8ySZm>jR#%o>(oIlQKS>%UP3iKGR>%p(DT69 zN@R{1@d4&k{ytW=>m?7Egi0vu9tRXTheIg&D_c0#O0H^yfpQ43I(YhX&5`nS2l>!z z4_Nf5NQVz8Y}9lIU31)U`L6TTsiUU&GI({RHH)!8zRw?LjP{TW684)|UDvBNIF&QH zepYKF!?Z|79yHaAzDQrNu#|&_@|Ez^8-y@iA-*Gdj_wE<+oAMLu{oo3kVVt>Bt}TP zKWy$fbmH_5IzYVf)t4MJRBG}qBM1MJ%SD2`y2#iUD_SITWZ`Y6uu!FGd}q?Em%?vQ z+5(!A&#iE=!_d*t{em?sLe{1$JRbTiR^+DZuK;n4#;VN;^E*l`Eh{v!^ibCH76N4) zralCzSuZg^>_$pf_V*hn&`&Uc)8Vog3aJ#T<d!hRodVw~PV}o(_H8ruf~Ge#Wi^K`V28pe~}w5}uGvB0=)6$(Z}W+DMqh|GV|b z?_i-al(q|%ZIn&j!|>^>cKHmtRCKox-Ea{YeYIx&Xbd^tzwlZzu$RWRu$R3I{_NRG zHrn1#x&XcZNQYRwKrp>_$-j`ZsE0u&ur!~WUyTFb0MWuY@%~_^y^IvpSbYW9bIQ&N z_TI={YRl?KrjrZ^X#spNHL#oVHT91h+<sTL8X#ky)OIX+rJoM66)Cs zz1E~dM&3D+?~iRV__5<6?gU@J(t|X&8&7d@x zz2!L_F0)$-t4HGOojVGv%ntPA*hvgAjUobkYN)SBFh|3fd&FmMG?R}c*y6-^F9c!`J% z^n~irRj%Rr+3*k*QAaMSH?o`WKi;K3>wu5zog19LI8zG_8?a&!UKEZTk~;2rPiJ-o z-o%pDU=qfDhb|({heLZkGR@RRV5x(>_khfk`%lQ2z)fGTqC&i_DI4Y&^9U4C{*eP) zB!_!Ec~RRF(U00K!$KS^#CJbz>T%X4i(?m;{SbwodCjSApKCN5Ti$EtCGIG&v?cj9 zf#iBEPURo_9B9cC1=_p5i*nmh?OKb6GFl0Qf{Ez9lTIS5GzKQ6wDe+p@I-H=SHLqC zo!8-bU}>tEqM!%cs~M(MA76f5zk$PFZE}~aZJF?WG@3<9*MBLBtNTk8mRXegI10GF2N$ZkeOC@oYYKVsv6hBVvB{`^gZON0F&%T2 z_ufJx@Dg)^U&i1yzeRn+3k?3(k_6zKKVu$f8lyW5XVZ=F~lMtEKpM7>wuDk ztVmH1)=`W zS@HuzJ6eCoKb;WE7!n+2%;^cx6;6MGBsqt-?7^YO8Jvfa8xQJ!t?E@g@}LdCBSneD z8~4?`zD{rFP&PajJ`Jkbc)^3o4LXqtCAg5DH%r8~&kdL$2Smgv1GQN~1`GrG zTI^w;Z%9aaRsEH?~}$SuMkOWL0`vg z5;4HD&D22RP7j!zC;$2dSyf#nQ6!`tY6B9N7HIMEI?m@7^!{53&lCYq_|dPP2wbXd zBj8oxZx9$pzF^Kk{SBX$?2JmyLkkWc7App~1SI)D-soCVFIpz(xZR)s~`;`u$9 zkLSOW_S&m!GyM8kIQlUZ+c|oDbokxgyN1hcv)lah@w1M@uM!BXz5RG6#yVHwUv!q; zM20^dvY*1%&*I*Rl<)JhZr!_Z4EGgc&s7W{G9osJz;+766{r;-Er$KMfAOe|`kZzV zWC&Q;eY33~S+PJZWfZX#PwsA|=Mra8r}$?!6#8&r^(ER7Ii%2yCJ%&<$s zYFJBoT1h$5`VQ#(w4g}5%;LEJSk*vK@D33@z?&6*&X!KW1SrxN+*A_CQu>p5Zz_3Ukdb>wgu-4a*sYj~D z^T5W{M0V+XTZx-fbuL=R-JSNj%Hhi~{Zw4ft{Fds+e(W4M834Iba;jS^PoifU_|0$ zbry6h(3k>Fm})(+Z&xP(=Ti|}`f?NYURbx0(zvk@Id`ftx7xI@>KpH=i+O+X&3fRK zS;euv0N4Td8h~b2x%L$w2z`h^HZ0l+jEIOm!zAvM8VJS2>~7M0YirvP!IZ>Q=k|&c zdj647)31$wQ>rw6T4qHs5@8@299^pm;+&JGzOzEF{lhyVS?MXR&*+EEO_hN7Vocwh z4=<|`R%m@fr4SFcDhkbB($7rM!p0_k-rSw!X@CWlQU;|vC$*@Fag>1|(MgT0xgBT! z>Rjc$#?O4~wG5yaQr+hJ{i90+Z*;*)=BfpM=lj0aw<($>U3?S!<(hWWrPZ%swWj%B z&82;q&t^!ce#pC#=ovKU*{kUiGFQK^#a~~gkar8wGfB>~uR>-+`>^*$#8+ipH*@=0 zAg12@?`Ipv=OE#1?Zcl=AuVmhOgHVJ4fA_Q5ntLAvN6OfZPbRcp}pT9jJuA94VY}% zStBHRPJ8N1i)d`P?5XcLhgYcLLY{lZ=X)WE-=iBFlHCz>GX+Ys31^RpsCrEr<5-Q7 z5obaoAO(UKro9735&p?pl;=ELJ-Zb|0U`@?@kj&urYp31p@M};89BMCH-txEwMB$M zdUk?~7^!UDbdS0B&MJ>ET3F{8XVvO%%GUcMAs?kGhxuCa z8r+d(x;Gd{UF&MWknfZ0LX0#b{|ThoFh!UoJpSppW8C8^{EAa)5|Y{G80Y;y2spVj z{PlW{+9QpLk#nReY^vg0Kq!{{V=@=`jcql_Pk1ghg6&dzg#~5W?#l{$eoHLuPcY^e zy@022T_NvfCtaqo*N&Y{5%02VmP^=+otHjo!!}C^TZcw%XguqMw3Q8$mp*&Kiyp z{9T*VpG4fV1g>TO7QAyuU%XSOqr%~vI7EZ2*WR)_(%kEtRn$J7xlkY$`?F*Bz^hq4 zeaO@9=nD9*r|v&iKy^=6tL#3iIykp~2X8h=*;eGh@ij??tlzb>bNk6a3xt>r`2;Mp z;yRyd6IqYQ)bD%kHISoj7_%kbDpa+ zwitSd`J#NE`Ci_}QRiR2BI9%H%`RsiI9y_8e{Jr~JeroDD!{wttpXH8^rLzDh+BAY zl}R7+W}?EovTo0?t0tN=xHnyK%g2X1!it}!Su@E8BRa}wm#+5~Pr#o_p*Pa54kDOj7 z6qt?>+Lycx1iXoCY4{>Kma-XbC`Wa^_OhWalsM=rNB^->4YhTX|6YYLKxZ+Hou;4m zoHb}W7)$41n`@7;zkQyDw-z%rJpmD7BstORp0J1SuAM-pm5xJweBT5bW{EYmyw<+_ z&6rl%_RIb9IbuV&_yZ=YQ-=`q-fpymKRndD)PUCs@Q(z+4`Oubiqp?VhzOi^j9pL14AwqcPHwVBR8PJ@{cbiV`XcE z=n{^Sqij@Ntm&hbKc;LlnnH}4lgW(Ip?!}4GlCDBVrH$GTB-y9 zj9B}_e#BgCBfnl^rVKepe~oJ!>deF3sQgMr4EM<-aILvSX!0Hj4)CWH!Rq?C<_Os( zexY5NIF~HZG)I&|nL8!a-*W8{&cQJM`Qjs&(Q}?OInLyW*D*inZa~+Uu(d_}J%PFv zY(0U!d*@{fNw#ac*EemfQW`~OhZZ6PSiK+BgxM@1XA?R_5sD3ikUQ9(_`J1eRdz1$ zX3oI^Tf2VHDmTJ{itBmB&&)H1Akd{u1@u~TKJ3kaU5xKspLg0uVv4R~Z+pmjtMPcT zMuGe!x8hNtlgaM?0IJ^{ZrqQV$=gmm4;YKxj7}%ZK*pwZa5GL3mT%xz;>bFHTlwQ+ zJ>AH1i@*E~9hDlkc?-}cqhZxiEz1s?Y*yCfzagp!BtrN9{()=tH2Rk~zsJ$PeM<0# zDbwCGW19J>^#YNC5hYZSZ^LL(R(w$K%y-&!m5lcWKI`kl-;J2Ua`ofQ+;-4V%lVIW z^vrxn(?1$R^Wi&7g0*mv2RL@cFXGXhKF$_V&@c@H7y31yjlP<0U-?tnxfNN<&McIz z-Y9SMU;F<4x_OE{?Y@0rrf%w1A0!6+K%^*KXSN}m{n~A+vNt>jR1ys+T>yOQ^*Dqf z0`bQI30G^p9sAo|TWWj-G#d^@e5*!$t0G#uE*0COG?{ZHnKKvG@>N>ucOQ5hP}5Z9 zRwy~J*l(%1tx#&UXa4(a=afmbZ;ramz|n>5(k=FGwkl+QvP-_v z$1fiFRUUQ8i!)&Tr=dI9SRI{1cloQ|d2Lq}QAf670})-^$|e|5;4;HCb`q!aEQ63z z0ej)ckVS3JBkQbs-w`djhZ2BvT#j-rDnGCr>5e(09a>y8jAqK<*3RJ;!D;YBqSeb$ zpY?RDUzGL)MVT~)%u}NaXVbez2Wf}tzgpaLPIl!>Tf_OWvwR?&)dTBb4;k`HXNxJ& zg)y!Qv(D7tMw@gMYq$y4L!4QMHqq6uxPdGmY>qMD1X|@y-s*RDFBX7}agxE@+YLas{7znoe_ z^|FpsRj2eG?9E$eauU6Kx)I6D$UrWZzylrOcZ32~R-yXN?HX{wpUg$WdE{1BOtW?b z^24}wXc{w4;`rlgNUS#jHfd!pCh{2;IJG<7}}d}_}iHEg4E#GjjAiMvO{{6ned@|#;3w3W8t4chw{kmjU!nERi0yWW01l8U1m+4IcRFN$IQ!A40Vu8`;Q% z2W8d0>zJv%;jH}fxCEQO;Llb2^zYoA*~a-|Yeg!SmM|tDe@jV(*IrgO((Ye^;-uU^ z_^AQT z@()93BJ~7A?5mXJ;G|CC)Eu}N^q%U`2rv*oahKm$oz9*EsIb{n$X-A1qHL~}uzMnP z>^l2BWq-Tp?qh^f&#+~YP`itBt^x)tV6ua^W~_D*Y+r_SW7#vTQ^B z=+t=%mJ~wds8U|@enn^2HvKuP&M=xV)=@B!>^P3dNXb{uv#;p4*F-Gja(y- zdDH`lkFZ#ygYl0w!{6a*yQJ&7Md!gOe3|xQ5a+|7m@3QW)3RIJ(v>(V3|?T+Hy=df z5C<)mkp<}zh7P~r36eOGi(XykDP>PTwMRZdPuUoX+zA@!9${D4dOVl-7CKj5Y=w^0 z=9w1pcv)b17t-At*R3~hsGA2;_QqIgf0qu#aw3|;&G40gP(g8GhEYxLJDcqL?q%yj z(0~79_;b9^>i`?tj!flg+m>av4=8sklFU>JVWa6Sk1VT9bLHX@Qr}ppoi*Z0;f<%n zRe|?igel9wy((Od>3)J$RL>jP42L%Fnnu>Squ?!{4rILLuFl@TeYKR#J8_$+*7OD{ zSju~)5qQ;~Hq<2Qn)6RXja@<=2Nl}+s<;tUu13ygnX1gR;!U!R9zs9JI=RiN9VS+-V>lX`~&Yu7JbDkuq0r@B3VWPaIBy-C$?WmJ2UzriPL4)H99L5t!mY?b&Bz;Ko)Gm*O z%l72)j54ZJg}p!UBK_w2pk~h5Q0+N7D9J`n>i?NRWN|T?u2WsJe$4UPl6(d5X%MxC zE3MwyzNaHG&DxOsF*X;nej9eN8IDgFtn0jT-VotrC(g6Tpm`WW#Hr!$Fq#oRo4?LY zzcDil-?ER;u8z?DzvE)NvF5}Tu{ayUTbbrr(-_f2WY>CIOmAwtx z4F&esJE&&;0pZlgy@m1jASHx z&hPu?T5GH%d+n_GEBwqjDp#mxf$7XPRY#xg1O1g)xx6)XCW-D|1AgNrj}oRGiqg$RWi2D(zucbu6-Ma%=DvYfb0)KntTz|MJ+b$S zdz2KPqUW&dwP-BF=j-SPUK)wB?;^gHk~Ynv?JU-E;^I4WS%1=U5x#$jTfhKppU-p z*G~s>v;@=DHJ^%UT@2~ZX(4GdK`}i_wGk)tCFPz5$*HIY-%_*e25H~m1JaA?b9Ejf zVL#Xk4Iqg4%(4&*;}k#U&Lc5=CsaBKW3D7}Hf&BJB|C|4d=-%hiWI>J-VMBaLQ;IS zKk&@ctudo)M1yN7@7V$G5396z?rUngM=I!L3Dc2J*IpYvA!jkh5Re=Tp*XU4$J5Q#m{JcbtpzoH#sYIt~pOUS08mDrbTvXyg6x>-_$9D1d9rdij7u#k1lH`!^ z+X})1Q_Cbd5v#hY*-X(DMEYTAI`??yU3AxkjW@a3+^oA~ErE;AYeh$zu`DZuMm8=x zJA{_W3x#^QxX!Kn7}1;qoDN5|)Tpdo6J0DSaWqffVrp{d&mk2F(QuI&DFgVWUIFwh zcR(Y!$8>FIxwMxkbj*!hzTPWLxRzG&KU|hJI`kAwWUaA zNqI?GU1nZ#AoLo}e3GGA@kVbpM!sO_V<{*p>?jmhC+s4c&m}Sk-S$NSY+&Di2FAb- zKfCQ2;0#jel>*|nyQY5CS!arJf&oNy1J50)B8(V0RV6spUb5U$=DoUN0Coz`C+A2w zJ7Joh1E%6#^S#r(Xd`WKNETwkUw#oO8H_N;@m=f-DDrgSG^fts|5QzA^e87clHHI< zD-2-sgPr6`$zzQu8Q@GSYNdljY9~c6;!i$jtX+f7zkvN(dPQzj9>4M`a|oayw2OAS z-RC*vMCS%Lcup(S=3sMORI!!}h#~OZL`LiJWPN-3WaBeaz#mU9(fxI=x3Ui}6!j9W z``ghW;O)moPMn$L(( zRemwV@g3*3eJw}AmIdZk)@7RSY{XK=|7yjAIfHs-*l(HjnfzHAXJvlNP#=Rc^8Ij0 zJ&~_P^LotZ9MQc3>yzqGbk|3>lJYa)v>Twc zxYx8DMf?>n^*L%$MSR#`ejC1(T%^+juxr(*;{enf>FOp}OGe>`>USe#EWbX=U=qll zXv-wDUPBR4l3S!9Z!6_KB2g((Ze+}7ukB>{ss%-nMBo&e{;aJIOqSR`*>m{*<32T% zo%0pv?zE2-LScqpG4JWmdl7~g+qvvgNl(|pAvRpL^WMq(2DR`WP7qH9h~DD2t}Dh> z{ODHG$}>I-^fyk{-v!x9NO*DZWVLBeR7lqYe>x{dykPN40dk59w_s{pJBkzLM|0&E zTboMrSd$*qM_BF8G^~!~tI7k&XmsbRIvGWkjK5o~4rZt$@Ag)u_>XjEqH!d02Y2wy zp37Zj)qK=di;l%ag+joGf$O1^b(%af6lP5*9~WY%t;HsikV#W>FKhFj=K=RR&q6w+i3#U9DwwnMQqu zg(wt{aAhVUU3ZcsYk+v{x9^;w^U6MnzsLu#yxC6ux=I;;-wbA;K_l>ZpHYV1o=0@q zNK=(+Xf|9saEQ51TaWUQfu-E^bunY#@ZjO;6zs%UEcr9PO=d|B6n{%^ph9`Cd|9tb zg&n2vz@|*cy)Pu}V=BzCzJ-S91Kh3vj=!nkU26sgs*+DM@gn6zpH%c4APsljCO8T- zFNz!AFE1H&)IexS(>IL?qp6{BeB?scb?aEY!Emlt|Eg|fvSdd0;-4Y&-4d9Ot`w-p);#rs`K@oiHUPC9j_ zKEzZ#`q%pjYeov$b=78BL99Qy(!Urgn0(yIK3w_GNr;f=>aZK@7xK;U6UwP~PIT+p zTv_Ee3oxXbBA4M{iMnH9W*x6SarCOp)_%Teh7k5NCY*TwVIt&cady7yeLDNX?0nXH z&D&?+B0BlrsyV`z$Ulbz&E0-BAl! zEGrzzC!?uR5usK1Y2c370~XKlyr?V}_slThaR0#-xGSfC)yBf8KYTfseCEM*IfwvY zZbe3gMlVcyHdbhR&>_V2c9l7DlBH%jwgq_N|1>=Ro`V zS!zo;e^$@rVZ72Co1X1ZLIf%S*_b(iKQsCHbCptILTx&n} zLJ{d65+CS-%G@N5VNgTnos^QOa^+rTqJD7mEB%~epZ>X=JGF{Nb4BY;7fYg=WOWzb z7vEEWrpc^EdDm)KC_!G~s3=VEu1eovaC*HC5&c{Bb~kh#S~X;mUz_eakcYMNh{0| zb$=96W8^INC|cvr>!nX4P59Ulx?4W-Avo4Kg=PmX4!MSK)eD5qhV;j|7uh#RsLzF| z7HJ?s)Nwpp!DSLG{P@!y=O#Hj!_jtQ8$VbdUNGHS!ehn-o-)cGrbdtiZz+yp?ouSm z;4=z-XvYhl-48ID!*(@oZ12l1v2$0kJrv_VYD+PqlUjL2Z?}^i&M(#l$?Kf0bTJf- zd@tc`HWv_>Hl{o4wV&%%Z;cTkDZbb6%U$%W#xnG~)Uv@9BN2i^$;*6V)J@XH5UJKq z8$*i;{ZrfsVixA9oj%Zf1jhK@u);Cm1&scYj$if!2+;VP{e!lRj$bz!@ZVh?}q{bxRMDbYX)EAyy3GSnLXaTg~L>^UAeO0 zl!{sxr^&leOZ&XyI+z$6hVV6mNXdt*J_ec}!`1izLUTUz$X)74bN75j?Et#$%>9^?hH5 zTZYn}=b-q-XyZf@y`F$G=CI<}^J*ex66k9HNUkr!wy$R(N@Ordl=*QCl@+GUKQ9ZK z!S{MNkU@A}=Mia>Kwc6JnS9(1KM+g7h6E&)do2M;Vmn z?`2qu8E>bS%~`XaW(=Z8=72H9YgK%fHp)`*NvqexIe1>hG=wR~J(CF0(Yg4Mcc47?t zYvXa$$B?i-^Rs-ao=O|-Eqr$qOx4_@t85nr^+?{1fAk;{C7p_?6+8p+%^%E#%6cV4 zS3RJw+HgyyKe%#Mo&g&44}^)>;)`NNEhoo41r04oS~8`vI&q&s=j6NFU1ur_^Kn$m z77`YTeu|SxLTLNV5X{@Ok0tU{*b>#9d|R(D-F3Se+CN4~o~e^Bqa`NfjH`?i50CEc zSVS>cy5aE(r;r@wXG~C0>>Vo6>@GWj8DB1mlHh?s&b$1Itv!ysI?E}!SYU45yvsO! z9`Aw=)O68rjbT$eO9Hd^;r8gqJL%)K5tx|vW7GN2Oz2n06DI@=g*-_8;zBgG(DovDFAvNjJSY6(i+iev*v>$0ccAOgSW>qa)(5X&e4K8eLx~8?L=igr z@RLC4HQdGTV2DL1O2zXw0+H>l_Oj?ltlT`ux?BE`mSDa@ZFbHgIMyNe0c$!_?dWiz zZLm70l4Q}s)4{=s%4fS*2P*AGra8P2{cgz9V5_l3{Y zTlWKFO@0b)_KZ&+e25wwqbh;dC=J{d@Vm!ad2^^A>JM4jU`)?;s2=qeRFwDwY?lzjN$o@nea$+mA2Ld*!@^P-i2Fw>Vz2avNf}@q~b#(+*+FnKxmQZ3P@eykRf4 zk)4G&BdQeToa}oq$d_cKOvr6&+lwv`&@|KM0l-L#>Rz5(WQ%HvJem>h`VDOLV+F1YnX>YzEYO%QEAk5_m$h@oIdZB zy}Eee_q~aU{AIW2Ds75!>)Mpp7%j}`zEIPLzyAe^MNnQ{lY%=EvX`iT1*Lsy8t^ez zBmQ`fV%sZEqkyi6aD+rRX?TwUmC-=-x~CwEa;8moI*%ESc+QZbaalo7HB&?nQ#dEO z6olMYNva(=CtJita-YKEuO@9E$*-9I>4T39`_P#yf4a+8t*}H!dlb$r?E!VkzRC@i zTuNNXU~pjEMvh`QD7!Z|!c#+rYb~rtfq_|&U3Z!%IiHe8>5Hv`zczcBVTUM7n#UNm3l`)l%297er%vZ% zx{{EJN#p|W?YrIv*9rSa2|Lp>no+Du&$tF`JMLx?XsDveV=`gkM&c)h=-Q-)&5fGUzF5lTN) zZ}(Q`0-p?V<{Bh#u$?_W?64mifFc+0dag&z?db3uMroK*ySQUqX|MMiL)OJ+>nowg zoQ_w0=+a?3=X4Ej>S^Q-iovV;cMwGXk6Y<_V@JepB1p^OQtzb4mWka2klvFAiepJ- z_GGC^k2!+J9Hqw!x%VcqFAacqY|QDoUp!+1PMw`mw&x=NH3W%Ptj{NO)eFkLsK1sf zs>=b}BX2K60P1?_Q_IBzt^2hsSX*wwoU0p)UuW4YN zR4k^G^1gzJdk&B4N(Fco{mh3nQ0(X1QE-JNyn$fg+)yMDoI|faV!UhUS9q+j5sGFM zL28kAYou%br%M{P{)iKCI{Q1unCl6=XS(;NJeEN(~%31+L4^m}?m%;JjfxJy@#u@5A z?-L~I_pbb|ajg!9nU?Hp!yOQFnxb!1vFV+^Md4S8x^fP>I^%%6nkvttG`8u(h4&{aCctIEW>=$KRdZd<#6`E6LdNQ2@E@^euXB^TsAQRI>;OiQ(n=b8E`V{G=?HbJMf@0c zfW7RxpdsGo6j>o%Go$Cr`y#nHaObV9{1-PfK40#m0pRBlb$Q$-Ec)kfBQcq_(HQvs zZZ%CSUn1%YW6`~H5{R?W^C`jm$Pg+Jnd02LyJafVK=9)lPejl&7V;cucI!<@LrON9 z9UObEc<#;>Ym6IZv?P`;m|H8FT!%V&1rnxI?hoAe=2{a}ay+CWniqwazlN>cS&&=6 zZ#XEH6Z$kCC#77xQMaW^gDQ+T%SMB>*T1>D$UUK^Xo=HFT`tK6dayJx9kYA#=s3jW z#gz3(v9&6sQeTVSLU58c`AB7uEW!&U8qtoH@LU9TT*_3)*y1*iO9`9CI<_p`w+vnR1*~fm1FrI&8U7R8gPM_7;bK~ zmG!Di4R><4$}XD%N@QiThs5=$1F4DMRF^7x*W-xX#p&CyTHDiW2bXSgR(Yl9nG7H( z=Dr^}PWrAJ{T7lL&}U*smi4kK#zS-HTDyDxjfo6%=A|*YV>s(}XN)z>2^g&PsX~I? zqw2ue1#!LxpVvJq>-$+%a%6_KK}*m>pGh59F?Mya_7;b$K2o!4s+tOPq*qRQ<JH;Vtg;m=AtEq8_a(5c4XR)`4A#(5ws#$xr%H~!;vS`IhIRq z`gSTEgV>bEE5-8bT+o<%lX{Td=D@*9h6=Tt^q7}cd9{TadWs+7E5-}#H_VM@XdJPt z&T${tox0bhQ;2ZJt_I~h^htYdiOl&R8?}*IOsZS0X#K>?(a-5JpsUr^4&qlEbO&QJ zYQj~8X2K9glJodOp(q@!2_1d9=urg1F#_doOL_D2YAcuLghy?2NP2|#uq~P~+13#C z5)uO-w(*)3)XodYqfbDw`R7^_-aH>OjV^*t6aFy^ExW`))Vkf@D%PE zxja4*(UboXL!0{(SJm^;`LKjsHcf`kk>Fd%!ePFf=CJFWQY*q__Q~Nju8FiA{G5FDwwbiUtu1Spd6WATJtU2sSKwo* z<9++U=e<>LfeA0e4fh_+_h+g)WNNx#jz^8s9~a|v2V}z+MoST#PAfg&8#*r*h@f0c zr+_1GiqF>--;6Vp*4nC*0RhL+Y|QfXZ;fU8r3L#uaX6pTpeL_^L#`iHIBBZJ^zA^? zfwg<^7a;cg;hqbF*pdpMT~CD{k{Z?AHLWzCGfg5Yc=Y+|cs`y}a@gE9_~Tm^(MGin zWyA5VZYNMpz@UU+7UQhY%f_2Ah{&suHL)~u7FoO;sA&=Id$&T{rMJ-{8k@&jCltaz zath1gvt~Y}j@#QyUN;Hc7&h(NlW?K?k&cTw&W;0dro)+oJAA8Xay$+cRXz#Kq7+$I zq-#$W{Bkf|IBAQxlI4HZO9GTBQ z$w(cPF8N}kz5QF={fk@NU*q39xvr=gGo79)`Ss1bQP9f!hVzW74-ELEl}vE6&*>uy z#_y3~Eg{bc^EzF(t06r&ae|D1{OyFNZ$;eqrD&@QhWw41dOVu0x0Q|GKwYgF57!tZ z#6+LdW$pD9VTZ1<1Su~UmiF^ADui&@MGK8kod*j}BtdXB$b}oo72u z9FkLqiY%RIaip|w4cWzb`F1Wk<@6+txN!9C-qiWHa}d&GL!(k}Y+Li)xe=;eRDk}62^TGp@2QAS1C_QA`+=Lz-e{gI!77m zn3S9E5&O)3g(uMpuu5(oM8yd2!@zuh_~b@x8=4RzmQq=1K<@LURU zm^`^9m9Ir*pOmPaekCCo#6|1ql>9D2T~^B|svm4^Ar&&^LA}^c9H-_A%(UXBnD3IOflEOBa+HP}}C45_I#dVMk4m z-~Mx~{LNX8X9gb4O*pRY3#LAqd^QWP%Jgw=B~=%&($Q_ms&`n}<ssgfxNX(NSLDi8NfNN*fWR!5s2yfGGSWP6GX03c|1@kQf{Sz;H zc*SU=&@iySlju<%4XWsBsEda>SIOp0l#S=aF|<9MVOi1>@&?UG`fyQ~)8bHUX!>A# zPI`2R=uYTexpxv?O(#myY3CVQrPx!B7vab&O2djMbJ%wl z9)R}-v5+q`a39nIQkeRt$y=#&dE)n= zWky;egQ3AU1f!oL)Lte!NFpMrb0LT(W(0;*mGSL79n2ilFezlR$}5k~;{SAa#5Pam z8|w_(k@~rJbRz~n4t{IW@&0CU6ht18-B=j9I}F))$K<(>p$PRqV{FX$CCYx>`}k&I zD&?D>Agct3#w8~*U>NZwaqcPdpoH0BYN(L!A?xcd<84{KP^<$n^I?27l+r6UqrLd` zJ#MnEpdn4cn(#utmw^zoJSn_y8h#3U?)sSC{pE+D-QBypyC*5uDF`|!wofUel<_V? zcZ(3e0dV0R&v&fgml4e~~>)RRMkyI7Hy!8_z2G+Sz|lYh4EmCuVFj~b<<{8Vu8F$Ba{3lSYm;HCx*TASK{)22Uvy$ zfF;JXwws;MPhDPqYGjYFzHM(F{J8H4Y>y;Oy4jTx#zS=mhB2YEA2Sx{-w9)DUG5a8 zG2;HxaI#F}JY3i}+t&&0+4Osl9FFGkLLkEZIONZp2qa4^XWMpcI~B zB9)1{5gdF%QJy{%3wAq6c+ztflcbOE|a%J9s$OzcmT#9!df^5!rwGPW2yJ zVQgsAEUY>ib<~7%BI^Ih{1cFJ4hFo@f?a5!g(~v9E&c?GhJg^cb)dy_Ktb+50REiiX&>|a9v$yND>P`1Bu;g(PnI?2fY68gJ^HUA;>H`~XibA^6IY?_G73E!D1{xdHB1pF-sQH&lV!I*^@nneQ-fJ(X{;{WcYKcW9pcgBE`5Xbs2b=-eI z{U7Rj8UK~&_hiKNPpZa01}DSc8iu0`DzOe^!!!JcS{MuJw+<5_NdSa?#{)k9UHhLv zOTR%U#K44gRz@iG25gG|6G~$PhFT^ALf4UzM4=@cKqBrx!2TwY`fqi>>%VBf= cZ;hn?;v&Q53^=%M*qu@u4z4o?2z&Ma0Df!rM*si- delta 294159 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 A?*IS* diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 6f48717c3f..f229b34c45 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.all.173557045" + signature = "rusEFI 2020.07.28.all.2435517493" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.all.173557045" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.all.2435517493" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:17 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 5740faff9d..17aa6be02a 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.frankenso_na6.3571395030" + signature = "rusEFI 2020.07.28.frankenso_na6.1336697046" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.frankenso_na6.3571395030" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.frankenso_na6.1336697046" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:14 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:22 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index a131510a1c..5dadacb8d5 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.kin.3345389999" + signature = "rusEFI 2020.07.28.kin.1544933551" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.kin.3345389999" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.kin.1544933551" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 13:47:20 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 02:58:34 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 7ca7ff28d8..6a50620d3b 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.mre_f4.1134990267" + signature = "rusEFI 2020.07.28.mre_f4.3637893819" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.mre_f4.1134990267" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.mre_f4.3637893819" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:12 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:20 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index f3ea9426f3..f298b4eb64 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.mre_f7.1134990267" + signature = "rusEFI 2020.07.28.mre_f7.3637893819" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.mre_f7.1134990267" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.mre_f7.3637893819" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:11 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:19 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index 422c26b807..ba5047d1c6 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.prometheus_405.4282686897" + signature = "rusEFI 2020.07.28.prometheus_405.1681380529" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.prometheus_405.4282686897" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.prometheus_405.1681380529" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:16 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:27 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 57dd3c6be6..6ccea3c58d 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.prometheus_469.4282686897" + signature = "rusEFI 2020.07.28.prometheus_469.1681380529" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.prometheus_469.4282686897" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.prometheus_469.1681380529" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:15 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:23 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 9b31cc11c2..34147643a0 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.proteus_f4.2278110458" + signature = "rusEFI 2020.07.28.proteus_f4.481983994" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.proteus_f4.2278110458" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.proteus_f4.481983994" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:18 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:32 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 997004ae13..cd6455ade0 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.27.proteus_f7.2278110458" + signature = "rusEFI 2020.07.28.proteus_f7.481983994" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.27.proteus_f7.2278110458" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.proteus_f7.481983994" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:17 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:31 UTC 2020 pageSize = 20000 page = 1 @@ -1491,8 +1491,8 @@ page = 1 internalMcuTemperature = scalar,S08, 11, "deg C", 1, 0 coolant = scalar, S16, 12, "deg C",{1/100}, 0.0 intake = scalar, S16, 14, "deg C",{1/100}, 0.0 -; todo: aux1 -; todo: aux2 + auxt1 = scalar, S16, 16, "deg C",{1/100}, 0.0 + auxt2 = scalar, S16, 18, "deg C",{1/100}, 0.0 ; throttle, pedal @@ -2227,6 +2227,8 @@ gaugeCategory = Sensors - Extra 1 internalMcuTemperatureGauge = internalMcuTemperature, "ECU temperature", "C", 0, 100, 0, 0, 75, 100, 0, 0 OilPressGauge = oilPressure, "Oil Pressure", "kPa", 0, 750, 35, 75, 550, 700, 0, 0 idleAirValvePositionGauge = idleAirValvePosition, "Idle position", "%", 0, 100, 0, 0, 100, 100, 1, 1 + AuxT1Gauge = auxt1, "Aux temp 1", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 + AuxT2Gauge = auxt2, "Aux temp 2", "deg C", -40, 140, -15, 1, 95, 110, 1, 1 gaugeCategory = Ignition ignadvGauge = ignitionAdvance, "Ignition timing", "degrees", -100, 100, -999, -999, 999, 999, 1, 1 From 912b794e84442e46e8a85bc29ddfc6fbc68abfe2 Mon Sep 17 00:00:00 2001 From: rusefi Date: Mon, 27 Jul 2020 23:30:14 -0400 Subject: [PATCH 167/182] two bytes of dead code --- .../models/src/main/java/com/rusefi/core/SensorCentral.java | 2 +- .../ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java b/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java index 32f15d4af9..c377e42cd2 100644 --- a/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java +++ b/java_console/models/src/main/java/com/rusefi/core/SensorCentral.java @@ -11,9 +11,9 @@ import java.util.concurrent.CopyOnWriteArrayList; *

    * Date: 1/6/13 * Andrey Belomutskiy, (c) 2013-2020 + * @see SensorLog */ public class SensorCentral implements ISensorCentral { - public static final String RPM_KEY = "rpm"; private static final SensorCentral INSTANCE = new SensorCentral(); private final SensorsHolder sensorsHolder = new SensorsHolder(); diff --git a/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java b/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java index b213a155fc..e5a4d5d6b1 100644 --- a/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java +++ b/java_console/ui/src/main/java/com/rusefi/sensor_logs/SensorLogger.java @@ -82,14 +82,12 @@ public class SensorLogger { Sensor.engineMakeCodeNameCrc16, Sensor.tuneCrc16, }; - private final UIContext uiContext; - private List sensorLogs; + private final List sensorLogs; private boolean isInitialized; public SensorLogger(UIContext uiContext) { - this.uiContext = uiContext; sensorLogs = Arrays.asList(new PlainTextSensorLog(uiContext), new BinarySensorLogRestarter()); } From 70e4f9e301962dff9993147a45be5b0d1f970b97 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 28 Jul 2020 00:24:52 -0400 Subject: [PATCH 168/182] a bit more control over output stream --- .../src/main/java/com/rusefi/io/tcp/TcpIoStream.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 862d1c93c1..b97f804815 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -7,10 +7,7 @@ import com.rusefi.io.serial.AbstractIoStream; import com.rusefi.shared.FileUtil; import org.jetbrains.annotations.NotNull; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.net.Socket; /** @@ -37,10 +34,7 @@ public class TcpIoStream extends AbstractIoStream { throw new NullPointerException("socket"); this.socket = socket; InputStream input = new BufferedInputStream(socket.getInputStream()); - OutputStream output = socket.getOutputStream(); - if (output == null) - throw new NullPointerException("output"); - this.output = output; + this.output = new BufferedOutputStream(socket.getOutputStream()); this.input = input; this.dataBuffer = IncomingDataBuffer.createDataBuffer(loggingPrefix, this); } From ca8cf2412ed1c329f1e2d702d188be04ffc93869 Mon Sep 17 00:00:00 2001 From: kon Date: Mon, 27 Jul 2020 21:40:50 -0700 Subject: [PATCH 169/182] getting config ready for PR --- firmware/integration/rusefi_config.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 9c440ffef3..fab4423a94 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -935,7 +935,7 @@ bit useFSIO6ForRevLimiter; adc_channel_e vRefAdcChannel; uint8_t etbNeutralPosition;+Expected neutral position;"%", 1, 0, 0, 100, 0 -custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Closed Loop", "Open Loop" +custom idle_mode_e 4 bits, U32, @OFFSET@, [0:0], "Automatic", "Manual" idle_mode_e idleMode;See also idleRpmPid; bit isInjectionEnabled;+Enable fuel injection - This is default off for new projects as a safety feature, set to "true" to enable fuel injection and further injector settings. From e7a0cd57fe2bf9d60e032cb4404dabf5c506e8e5 Mon Sep 17 00:00:00 2001 From: rusefi Date: Tue, 28 Jul 2020 00:58:03 -0400 Subject: [PATCH 170/182] more info --- .../main/java/com/rusefi/server/ControllerConnectionState.java | 1 + 1 file changed, 1 insertion(+) diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java index 153986e2b9..10628feca8 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/ControllerConnectionState.java @@ -79,6 +79,7 @@ public class ControllerConnectionState { public String toString() { return "ControllerConnectionState{" + "userDetails=" + userDetails + + ", controllerKey=" + controllerKey + ", isClosed=" + isClosed + ", twoKindSemaphore=" + twoKindSemaphore + '}'; From 1f816a1ede7bf9ab9cedaffb15f708ea7f2507bf Mon Sep 17 00:00:00 2001 From: kon Date: Mon, 27 Jul 2020 22:10:29 -0700 Subject: [PATCH 171/182] tiny typo --- firmware/integration/rusefi_config.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index fab4423a94..63ba0d0b9c 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -435,7 +435,7 @@ ThermistorConf iat; float knockBandCustom;+We calculate knock band based of cylinderBore\n Use this to override - kHz knock band override;"kHz", 1, 0.0, 0.0, 10.0, 2 -float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On Single-Coil or Wasted Spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2 +float[DWELL_CURVE_SIZE] sparkDwellRpmBins;On Single Coil or Wasted Spark setups you have to lower dwell at high RPM;"RPM", 1, 0.0, 0.0, 18000, 2 float[DWELL_CURVE_SIZE] sparkDwellValues;;"ms", 1, 0.0, 0.0, 30.0, 2 struct_no_prefix specs_s @@ -1676,4 +1676,4 @@ end_struct #define show_test_presets true #define show_Frankenso_presets true #define show_microRusEFI_presets true -#define show_Proteus_presets true \ No newline at end of file +#define show_Proteus_presets true From 2183730ce595ab61435c3708814683d78fb214f1 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Tue, 28 Jul 2020 13:12:43 +0000 Subject: [PATCH 172/182] Auto-generated configs and docs --- ...ngine_configuration_generated_structures.h | 10 +++++----- .../controllers/algo/rusefi_generated.h | 8 ++++---- ...ngine_configuration_generated_structures.h | 10 +++++----- .../generated/fsio_enums_generated.def | 2 +- .../controllers/generated/fsio_getters.def | 2 +- firmware/controllers/generated/fsio_names.def | 2 +- .../controllers/generated/fsio_strings.def | 2 +- .../controllers/generated/rusefi_generated.h | 8 ++++---- .../controllers/generated/signature_all.h | 4 ++-- .../generated/signature_frankenso_na6.h | 4 ++-- .../controllers/generated/signature_kin.h | 4 ++-- .../controllers/generated/signature_mre_f4.h | 4 ++-- .../controllers/generated/signature_mre_f7.h | 4 ++-- .../generated/signature_prometheus_405.h | 4 ++-- .../generated/signature_prometheus_469.h | 4 ++-- .../generated/signature_proteus_f4.h | 4 ++-- .../generated/signature_proteus_f7.h | 4 ++-- firmware/tunerstudio/generated/cache.zip | Bin 845045 -> 844946 bytes firmware/tunerstudio/generated/rusefi.ini | 14 +++++++------- .../generated/rusefi_frankenso_na6.ini | 14 +++++++------- .../tunerstudio/generated/rusefi_kinetis.ini | 14 +++++++------- .../tunerstudio/generated/rusefi_mre_f4.ini | 14 +++++++------- .../tunerstudio/generated/rusefi_mre_f7.ini | 14 +++++++------- .../generated/rusefi_prometheus_405.ini | 14 +++++++------- .../generated/rusefi_prometheus_469.ini | 14 +++++++------- .../generated/rusefi_proteus_f4.ini | 14 +++++++------- .../generated/rusefi_proteus_f7.ini | 14 +++++++------- .../com/rusefi/config/generated/Fields.java | 8 ++++---- java_console/rusefi.xml | 2 +- 29 files changed, 108 insertions(+), 108 deletions(-) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h index dd3fa64da6..8e9d809a92 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 13:47:20 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 13:12:25 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -2143,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Mon Jul 27 13:47:20 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 13:12:25 UTC 2020 diff --git a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h index a16044703c..adf82e7b03 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h +++ b/firmware/config/boards/kinetis/config/controllers/algo/rusefi_generated.h @@ -305,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 3345389999 +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 2529711359 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator true #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.27.kin.3345389999" +#define TS_SIGNATURE "rusEFI 2020.07.28.kin.2529711359" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/engine_configuration_generated_structures.h b/firmware/controllers/generated/engine_configuration_generated_structures.h index a08202790d..6f3d882cea 100644 --- a/firmware/controllers/generated/engine_configuration_generated_structures.h +++ b/firmware/controllers/generated/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.CHeaderConsumer // begin #pragma once @@ -832,7 +832,7 @@ struct engine_configuration_s { */ float knockBandCustom; /** - * On single-coil or wasted spark setups you have to lower dwell at high RPM + * On Single Coil or Wasted Spark setups you have to lower dwell at high RPM * offset 332 */ float sparkDwellRpmBins[DWELL_CURVE_SIZE]; @@ -892,7 +892,7 @@ struct engine_configuration_s { */ angle_t crankingTimingAngle; /** - * "One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle + * "Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle * set ignition_mode X * offset 440 */ @@ -2143,7 +2143,7 @@ struct engine_configuration_s { offset 1476 bit 14 */ bool useOnlyRisingEdgeForTrigger : 1; /** - * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark). + * This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark). offset 1476 bit 15 */ bool twoWireBatchIgnition : 1; /** @@ -3533,4 +3533,4 @@ struct persistent_config_s { typedef struct persistent_config_s persistent_config_s; // end -// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +// this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 diff --git a/firmware/controllers/generated/fsio_enums_generated.def b/firmware/controllers/generated/fsio_enums_generated.def index 6f4c6a76e7..454ba06590 100644 --- a/firmware/controllers/generated/fsio_enums_generated.def +++ b/firmware/controllers/generated/fsio_enums_generated.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer FSIO_SETTING_FANONTEMPERATURE = 1000, diff --git a/firmware/controllers/generated/fsio_getters.def b/firmware/controllers/generated/fsio_getters.def index 04caf03810..06a179ea14 100644 --- a/firmware/controllers/generated/fsio_getters.def +++ b/firmware/controllers/generated/fsio_getters.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/fsio_names.def b/firmware/controllers/generated/fsio_names.def index a6ab3fe490..bc2202ffd5 100644 --- a/firmware/controllers/generated/fsio_names.def +++ b/firmware/controllers/generated/fsio_names.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer static LENameOrdinalPair lefanOnTemperature(FSIO_SETTING_FANONTEMPERATURE, "cfg_fanOnTemperature"); diff --git a/firmware/controllers/generated/fsio_strings.def b/firmware/controllers/generated/fsio_strings.def index 9e6aed85d0..92a23ce5f5 100644 --- a/firmware/controllers/generated/fsio_strings.def +++ b/firmware/controllers/generated/fsio_strings.def @@ -1,4 +1,4 @@ -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileFsioSettingsConsumer case FSIO_SETTING_FANONTEMPERATURE: diff --git a/firmware/controllers/generated/rusefi_generated.h b/firmware/controllers/generated/rusefi_generated.h index 87cda6cf84..acd035bf2c 100644 --- a/firmware/controllers/generated/rusefi_generated.h +++ b/firmware/controllers/generated/rusefi_generated.h @@ -305,7 +305,7 @@ #define enableLaunchRetard_offset 976 #define enableVerboseCanTx_offset 744 #define engine_configuration_s_size 6000 -#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID" +#define engine_load_mode_e_enum "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID" #define ENGINE_MAKE_BMW "BMW" #define ENGINE_MAKE_GM "GM" #define ENGINE_MAKE_LADA "Lada" @@ -1075,8 +1075,8 @@ #define showHumanReadableWarning_offset 976 #define showSdCardWarning_offset 76 #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.27 -#define SIGNATURE_HASH 173557045 +#define SIGNATURE_DATE 2020.07.28 +#define SIGNATURE_HASH 1542883429 #define silentTriggerError_offset 1464 #define slowAdcAlpha_offset 2088 #define sparkDwellRpmBins_offset 332 @@ -1344,7 +1344,7 @@ #define ts_show_spi true #define ts_show_trigger_comparator false #define ts_show_tunerstudio_port true -#define TS_SIGNATURE "rusEFI 2020.07.27.all.173557045" +#define TS_SIGNATURE "rusEFI 2020.07.28.all.1542883429" #define TS_SINGLE_WRITE_COMMAND 'W' #define tunerStudioSerialSpeed_offset 728 #define twoWireBatchIgnition_offset 1476 diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index 4626fe65f0..78bbf70a7f 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD all #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 2435517493 -#define TS_SIGNATURE "rusEFI 2020.07.28.all.2435517493" +#define SIGNATURE_HASH 1542883429 +#define TS_SIGNATURE "rusEFI 2020.07.28.all.1542883429" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index 0df096261d..5b7f882663 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD frankenso_na6 #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 1336697046 -#define TS_SIGNATURE "rusEFI 2020.07.28.frankenso_na6.1336697046" +#define SIGNATURE_HASH 2238833798 +#define TS_SIGNATURE "rusEFI 2020.07.28.frankenso_na6.2238833798" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index 80d41de074..2d4d46d448 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD kin #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 1544933551 -#define TS_SIGNATURE "rusEFI 2020.07.28.kin.1544933551" +#define SIGNATURE_HASH 2529711359 +#define TS_SIGNATURE "rusEFI 2020.07.28.kin.2529711359" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 7640791cef..fee7bb8022 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f4 #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 3637893819 -#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f4.3637893819" +#define SIGNATURE_HASH 302538475 +#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f4.302538475" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index 63777ac932..a80875d065 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD mre_f7 #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 3637893819 -#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f7.3637893819" +#define SIGNATURE_HASH 302538475 +#define TS_SIGNATURE "rusEFI 2020.07.28.mre_f7.302538475" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index 787785aa9b..5b72e1f00e 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_405 #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 1681380529 -#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_405.1681380529" +#define SIGNATURE_HASH 2934591713 +#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_405.2934591713" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index ee31f56abc..90548ab2f3 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD prometheus_469 #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 1681380529 -#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_469.1681380529" +#define SIGNATURE_HASH 2934591713 +#define TS_SIGNATURE "rusEFI 2020.07.28.prometheus_469.2934591713" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index 0b09bfdb0d..cf3b47dae4 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f4 #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 481983994 -#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f4.481983994" +#define SIGNATURE_HASH 3597138346 +#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f4.3597138346" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index 64dbc5bac6..00e86821f0 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -4,5 +4,5 @@ #define SIGNATURE_BOARD proteus_f7 #define SIGNATURE_DATE 2020.07.28 -#define SIGNATURE_HASH 481983994 -#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f7.481983994" +#define SIGNATURE_HASH 3597138346 +#define TS_SIGNATURE "rusEFI 2020.07.28.proteus_f7.3597138346" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index 07ea1c4f890a0ca6a6e07f64204e511f22059e9e..05c73eb7837421dfc0a76ecb5fde4521eb6d1578 100644 GIT binary patch delta 170477 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 E3%3#`q5uE@ diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index f229b34c45..9dc2483b9f 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.all.2435517493" + signature = "rusEFI 2020.07.28.all.1542883429" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.all.2435517493" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.all.1542883429" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:17 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index 17aa6be02a..4e441db4c1 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.frankenso_na6.1336697046" + signature = "rusEFI 2020.07.28.frankenso_na6.2238833798" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.frankenso_na6.1336697046" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.frankenso_na6.2238833798" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:22 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:18 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index 5dadacb8d5..dadc85ae83 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.kin.1544933551" + signature = "rusEFI 2020.07.28.kin.2529711359" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.kin.1544933551" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.kin.2529711359" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 02:58:34 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Tue Jul 28 13:12:25 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index 6a50620d3b..e7613cd9f5 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.mre_f4.3637893819" + signature = "rusEFI 2020.07.28.mre_f4.302538475" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.mre_f4.3637893819" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.mre_f4.302538475" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:20 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:17 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index f298b4eb64..a08d7cc599 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.mre_f7.3637893819" + signature = "rusEFI 2020.07.28.mre_f7.302538475" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.mre_f7.3637893819" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.mre_f7.302538475" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:19 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:16 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index ba5047d1c6..0299d55e77 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.prometheus_405.1681380529" + signature = "rusEFI 2020.07.28.prometheus_405.2934591713" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.prometheus_405.1681380529" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.prometheus_405.2934591713" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:27 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:21 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 6ccea3c58d..45a479c303 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.prometheus_469.1681380529" + signature = "rusEFI 2020.07.28.prometheus_469.2934591713" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.prometheus_469.1681380529" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.prometheus_469.2934591713" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:23 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:20 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 34147643a0..c417aec74f 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.proteus_f4.481983994" + signature = "rusEFI 2020.07.28.proteus_f4.3597138346" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.proteus_f4.481983994" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.proteus_f4.3597138346" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:32 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:23 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index cd6455ade0..36bd07cb6a 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.28.proteus_f7.481983994" + signature = "rusEFI 2020.07.28.proteus_f7.3597138346" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.28.proteus_f7.481983994" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.28.proteus_f7.3597138346" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 02:58:31 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:22 UTC 2020 pageSize = 20000 page = 1 @@ -166,12 +166,12 @@ page = 1 cylinderBore = scalar, F32, 408, "mm", 1, 0, 0, 20000.0, 2 sensorSnifferRpmThreshold = scalar, S32, 412, "RPM", 1, 0, 0,30000, 0 rpmHardLimit = scalar, S32, 416, "rpm", 1, 0, 0, 20000.0, 2 - fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" + fuelAlgorithm = bits, U32, 420, [0:2], "MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID", "INVALID" crankingInjectionMode = bits, U32, 424, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" injectionMode = bits, U32, 428, [0:1], "Simultaneous", "Sequential", "Batch", "Single Point" extraInjectionOffset = scalar, F32, 432, "deg", 1, 0.0, -720, 720, 2 crankingTimingAngle = scalar, F32, 436, "deg", 1, 0.0, -360, 360, 2 - ignitionMode = bits, U32, 440, [0:1], "One coil", "Individual Coils", "Wasted", "Two distributors" + ignitionMode = bits, U32, 440, [0:1], "Single Coil", "Individual Coils", "Wasted Spark", "Two Distributors" ignitionOffset = scalar, F32, 444, "RPM", 1, 0, 0, 3000.0, 0 timingMode = bits, U32, 448 [0:0], "dynamic", "fixed" fixedModeTiming = scalar, F32, 452, "RPM", 1, 0, 0, 3000.0, 0 @@ -1203,7 +1203,7 @@ page = 1 injectionMode = "This is where the fuel injection type is defined: "Simultaneous" means all injectors will fire together at once. "Sequential" fires the injectors on a per cylinder basis, which requires individually wired injectors. "Batched" will fire the injectors in groups. If your injectors are individually wired you will also need to enable "Two wire batch emulation". \nset injection_mode X\nSee also twoWireBatchInjection" extraInjectionOffset = "this is about deciding when the injector starts it's squirt\nSee also injectionPhase map\ntodo: do we need even need this since we have the map anyway?" crankingTimingAngle = "Ignition advance angle used during engine cranking, 5-10 degrees will work as a base setting for most engines.\nset cranking_timing_angle X" - ignitionMode = ""One Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" + ignitionMode = ""Single Coil" is for use on distributed ignition system. "Individual Coils" is to be used when you have one coil per cylinder (COP or similar). "Wasted Spark" means one coil is driving two spark plugs in two cylinders, with one of the sparks not doing anything since it's happening on the exhaust cycle\nset ignition_mode X" ignitionOffset = "this value could be used to offset the whole ignition timing table by a constant" timingMode = "Dynamic uses the timing map to decide the ignition timing, Static timing fixes the timing to the value set below (only use for checking static timing)." fixedModeTiming = "This value is the ignition timing used when in 'fixed timing' mode, i.e. constant timing\nThis mode is useful when adjusting distributor location." @@ -1285,7 +1285,7 @@ page = 1 verboseTriggerSynchDetails = "enable trigger_details" twoWireBatchInjection = "This is needed if your coils are individually wired and you wish to use batch injection.\nenable two_wire_batch_injection" useOnlyRisingEdgeForTrigger = "VR sensors are only precise on rising front\nenable trigger_only_front" - twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (wasted spark)." + twoWireBatchIgnition = "This is needed if your coils are individually wired (COP) and you wish to use batch ignition (Wasted Spark)." useSeparateAdvanceForCranking = "This activates a separate advance table for cranking conditions, this allows cranking advance to be RPM dependant." useAdvanceCorrectionsForCranking = "This enables the various ignition corrections during cranking (IAT, CLT, FSIO and PID idle)." useTPSAdvanceTable = "This flag allows to use TPS for ignition lookup while in Speed Density Fuel Mode" diff --git a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java index e8a1e78445..5296ac51f7 100644 --- a/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java +++ b/java_console/models/src/main/java/com/rusefi/config/generated/Fields.java @@ -1,6 +1,6 @@ package com.rusefi.config.generated; -// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Mon Jul 27 13:47:09 UTC 2020 +// this file was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Tue Jul 28 13:12:08 UTC 2020 // by class com.rusefi.output.FileJavaFieldsConsumer import com.rusefi.config.*; @@ -1057,7 +1057,7 @@ public class Fields { public static final int servoOutputPins8_offset = 3147; public static final int showHumanReadableWarning_offset = 976; public static final int showSdCardWarning_offset = 76; - public static final int SIGNATURE_HASH = 173557045; + public static final int SIGNATURE_HASH = 1542883429; public static final int silentTriggerError_offset = 1464; public static final int slowAdcAlpha_offset = 2088; public static final int sparkDwellRpmBins_offset = 332; @@ -1304,7 +1304,7 @@ public class Fields { public static final int TS_RESPONSE_COMMAND_OK = 7; public static final int TS_RESPONSE_OK = 0; public static final char TS_SET_LOGGER_SWITCH = 'l'; - public static final String TS_SIGNATURE = "rusEFI 2020.07.27.all.173557045"; + public static final String TS_SIGNATURE = "rusEFI 2020.07.28.all.1542883429"; public static final char TS_SINGLE_WRITE_COMMAND = 'W'; public static final int tunerStudioSerialSpeed_offset = 728; public static final int twoWireBatchIgnition_offset = 1476; @@ -1506,7 +1506,7 @@ public class Fields { public static final Field CYLINDERBORE = Field.create("CYLINDERBORE", 408, FieldType.FLOAT); public static final Field SENSORSNIFFERRPMTHRESHOLD = Field.create("SENSORSNIFFERRPMTHRESHOLD", 412, FieldType.INT); public static final Field RPMHARDLIMIT = Field.create("RPMHARDLIMIT", 416, FieldType.INT); - public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "SPEED DENSITY", "MAF Air Charge", "Alpha-N", "INVALID"}; + public static final String[] engine_load_mode_e = {"MAF", "Alpha-N/TPS", "INVALID", "Speed Density", "MAF Air Charge", "Alpha-N", "INVALID"}; public static final Field FUELALGORITHM = Field.create("FUELALGORITHM", 420, FieldType.INT, engine_load_mode_e); public static final Field CRANKINGINJECTIONMODE = Field.create("CRANKINGINJECTIONMODE", 424, FieldType.INT); public static final Field INJECTIONMODE = Field.create("INJECTIONMODE", 428, FieldType.INT); diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml index 224a5aebc2..791997042b 100644 --- a/java_console/rusefi.xml +++ b/java_console/rusefi.xml @@ -1,6 +1,6 @@ - + From a2aac60a7623e938b85419089c0077b7c2577daf Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 11:43:54 -0700 Subject: [PATCH 173/182] fwd decl --- firmware/controllers/algo/engine.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/algo/engine.h b/firmware/controllers/algo/engine.h index 0f62747976..a98c07c254 100644 --- a/firmware/controllers/algo/engine.h +++ b/firmware/controllers/algo/engine.h @@ -16,7 +16,6 @@ #include "accel_enrichment.h" #include "trigger_central.h" #include "local_version_holder.h" -#include "airmass.h" #if EFI_SIGNAL_EXECUTOR_ONE_TIMER // PROD real firmware uses this implementation @@ -32,6 +31,7 @@ #define FAST_CALLBACK_PERIOD_MS 5 class RpmCalculator; +class AirmassModelBase; #define MAF_DECODING_CACHE_SIZE 256 From c2bd9087e277ee8d6ebdd9aa1dcfd2d56fbae286 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 11:44:09 -0700 Subject: [PATCH 174/182] fwd decl --- firmware/controllers/algo/airmass/airmass.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/controllers/algo/airmass/airmass.h b/firmware/controllers/algo/airmass/airmass.h index 338741da5f..b9c157a18a 100644 --- a/firmware/controllers/algo/airmass/airmass.h +++ b/firmware/controllers/algo/airmass/airmass.h @@ -2,6 +2,8 @@ #include "engine.h" +class ValueProvider3D; + struct AirmassResult { float CylinderAirmass = 0; float EngineLoadPercent = 100; From 2289c465b53f281c4767f0e8d746845c1f01ba63 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 11:56:39 -0700 Subject: [PATCH 175/182] fixes --- unit_tests/engine_test_helper.cpp | 2 +- unit_tests/engine_test_helper.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index ad223147b6..260496a530 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -85,7 +85,7 @@ EngineTestHelper::EngineTestHelper(engine_type_e engineType, configuration_callb engine->periodicSlowCallback(PASS_ENGINE_PARAMETER_SIGNATURE); // Setup running in mock airmass mode - engineConfiguration->injectionMode = LM_MOCK; + engineConfiguration->fuelAlgorithm = LM_MOCK; engine->mockAirmassModel = &mockAirmass; } diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index 799254b36f..a4ff83f055 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -13,6 +13,7 @@ #include "main_trigger_callback.h" #include "unit_test_framework.h" #include "sensor.h" +#include "mocks.h" extern EnginePins enginePins; From 53b864bdda3691c5d40912f915a583f10889051d Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 12:11:56 -0700 Subject: [PATCH 176/182] fixing --- firmware/controllers/algo/fuel_math.cpp | 3 ++- unit_tests/mocks.h | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/firmware/controllers/algo/fuel_math.cpp b/firmware/controllers/algo/fuel_math.cpp index 4711e33a39..7d60e77ea0 100644 --- a/firmware/controllers/algo/fuel_math.cpp +++ b/firmware/controllers/algo/fuel_math.cpp @@ -201,7 +201,8 @@ floatms_t getBaseFuel(int rpm DECLARE_ENGINE_PARAMETER_SUFFIX) { if ((CONFIG(fuelAlgorithm) == LM_SPEED_DENSITY) || (engineConfiguration->fuelAlgorithm == LM_REAL_MAF) || - (engineConfiguration->fuelAlgorithm == LM_ALPHA_N_2)) { + (engineConfiguration->fuelAlgorithm == LM_ALPHA_N_2) || + (engineConfiguration->fuelAlgorithm == LM_MOCK)) { // airmass modes - get airmass first, then convert to fuel auto model = getAirmassModel(PASS_ENGINE_PARAMETER_SIGNATURE); efiAssert(CUSTOM_ERR_ASSERT, model != nullptr, "Invalid airmass mode", 0.0f); diff --git a/unit_tests/mocks.h b/unit_tests/mocks.h index 71c0bc3530..fb60970c94 100644 --- a/unit_tests/mocks.h +++ b/unit_tests/mocks.h @@ -1,7 +1,10 @@ +#pragma once + #include "electronic_throttle.h" #include "dc_motor.h" #include "table_helper.h" #include "pwm_generator_logic.h" +#include "airmass.h" #include "gmock/gmock.h" @@ -55,5 +58,9 @@ public: class MockAirmass : public AirmassModelBase { public: + MockAirmass() : AirmassModelBase(veTable) {} + + MockVp3d veTable; + MOCK_METHOD(AirmassResult, getAirmass, (int rpm), (override)); }; From 5b99fdf3df5d42a4b141d4376cad7d0ea5602ab6 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 12:13:55 -0700 Subject: [PATCH 177/182] deprecate --- firmware/console/status_loop.cpp | 2 +- firmware/controllers/algo/accel_enrichment.cpp | 2 +- firmware/controllers/can/obd2.cpp | 2 +- firmware/controllers/engine_cycle/main_trigger_callback.cpp | 2 +- firmware/controllers/math/closed_loop_fuel.cpp | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/firmware/console/status_loop.cpp b/firmware/console/status_loop.cpp index e909f76461..a335f20fa0 100644 --- a/firmware/console/status_loop.cpp +++ b/firmware/console/status_loop.cpp @@ -323,7 +323,7 @@ static void showFuelInfo2(float rpm, float engineLoad) { #if EFI_ENGINE_CONTROL static void showFuelInfo(void) { - showFuelInfo2((float) GET_RPM(), getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE)); + showFuelInfo2((float) GET_RPM(), getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE)); } #endif diff --git a/firmware/controllers/algo/accel_enrichment.cpp b/firmware/controllers/algo/accel_enrichment.cpp index 1cac524bf7..9f57435073 100644 --- a/firmware/controllers/algo/accel_enrichment.cpp +++ b/firmware/controllers/algo/accel_enrichment.cpp @@ -315,7 +315,7 @@ void TpsAccelEnrichment::onEngineCycleTps(DECLARE_ENGINE_PARAMETER_SIGNATURE) { } void LoadAccelEnrichment::onEngineCycle(DECLARE_ENGINE_PARAMETER_SIGNATURE) { - onNewValue(getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX); + onNewValue(getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) PASS_ENGINE_PARAMETER_SUFFIX); } AccelEnrichment::AccelEnrichment() { diff --git a/firmware/controllers/can/obd2.cpp b/firmware/controllers/can/obd2.cpp index 252ac28284..ec623102ff 100644 --- a/firmware/controllers/can/obd2.cpp +++ b/firmware/controllers/can/obd2.cpp @@ -123,7 +123,7 @@ static void handleGetDataRequest(const CANRxFrame& rx) { obdSendValue(1, pid, 2, (2<<8)|(0)); // 2 = "Closed loop, using oxygen sensor feedback to determine fuel mix" break; case PID_ENGINE_LOAD: - obdSendValue(1, pid, 1, getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f); + obdSendValue(1, pid, 1, getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE) * 2.55f); break; case PID_COOLANT_TEMP: obdSendValue(1, pid, 1, Sensor::get(SensorType::Clt).value_or(0) + 40.0f); diff --git a/firmware/controllers/engine_cycle/main_trigger_callback.cpp b/firmware/controllers/engine_cycle/main_trigger_callback.cpp index 08f624300c..d288983017 100644 --- a/firmware/controllers/engine_cycle/main_trigger_callback.cpp +++ b/firmware/controllers/engine_cycle/main_trigger_callback.cpp @@ -528,7 +528,7 @@ void updatePrimeInjectionPulseState(DECLARE_ENGINE_PARAMETER_SIGNATURE) { static void showMainInfo(Engine *engine) { #if EFI_PROD_CODE int rpm = GET_RPM(); - float el = getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE); + float el = getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE); scheduleMsg(logger, "rpm %d engine_load %.2f", rpm, el); scheduleMsg(logger, "fuel %.2fms timing %.2f", getInjectionDuration(rpm PASS_ENGINE_PARAMETER_SUFFIX), engine->engineState.timingAdvance); #endif /* EFI_PROD_CODE */ diff --git a/firmware/controllers/math/closed_loop_fuel.cpp b/firmware/controllers/math/closed_loop_fuel.cpp index 6abfa49928..bdb552e09c 100644 --- a/firmware/controllers/math/closed_loop_fuel.cpp +++ b/firmware/controllers/math/closed_loop_fuel.cpp @@ -84,7 +84,7 @@ float fuelClosedLoopCorrection(DECLARE_ENGINE_PARAMETER_SIGNATURE) { return 1.0f; } - size_t binIdx = computeStftBin(GET_RPM(), getEngineLoadT(PASS_ENGINE_PARAMETER_SIGNATURE), CONFIG(stft)); + size_t binIdx = computeStftBin(GET_RPM(), getFuelingLoad(PASS_ENGINE_PARAMETER_SIGNATURE), CONFIG(stft)); #if EFI_TUNER_STUDIO if (engineConfiguration->debugMode == DBG_FUEL_PID_CORRECTION) { From d57465a6d3c7258360860568d0ab4ef0357745a0 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 14:18:50 -0700 Subject: [PATCH 178/182] eth adjustments --- unit_tests/engine_test_helper.cpp | 2 +- unit_tests/engine_test_helper.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index 260496a530..011eca0d30 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -319,7 +319,7 @@ void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e inject eth->clearQueue(); - ASSERT_EQ(LM_PLAIN_MAF, engineConfiguration->fuelAlgorithm); + ASSERT_EQ(LM_MOCK, engineConfiguration->fuelAlgorithm); engineConfiguration->isIgnitionEnabled = false; // let's focus on injection engineConfiguration->specs.cylindersCount = 4; // a bit of flexibility - the mode may be changed by some tests diff --git a/unit_tests/engine_test_helper.h b/unit_tests/engine_test_helper.h index a4ff83f055..8f92b36d4f 100644 --- a/unit_tests/engine_test_helper.h +++ b/unit_tests/engine_test_helper.h @@ -84,7 +84,7 @@ public: Engine engine; persistent_config_s persistentConfig; - MockAirmass mockAirmass; + ::testing::NiceMock mockAirmass; private: void writeEvents(const char *fileName); From 8b305acf689b5ab7d8a75757e39de8665c5f3e0d Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 14:27:34 -0700 Subject: [PATCH 179/182] fix tests --- unit_tests/engine_test_helper.cpp | 1 - .../tests/ignition_injection/test_fuelCut.cpp | 4 ++++ unit_tests/tests/test_fuel_map.cpp | 1 + unit_tests/tests/trigger/test_trigger_decoder.cpp | 14 ++++++++++++-- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/unit_tests/engine_test_helper.cpp b/unit_tests/engine_test_helper.cpp index 011eca0d30..e0ef38c70b 100644 --- a/unit_tests/engine_test_helper.cpp +++ b/unit_tests/engine_test_helper.cpp @@ -319,7 +319,6 @@ void setupSimpleTestEngineWithMaf(EngineTestHelper *eth, injection_mode_e inject eth->clearQueue(); - ASSERT_EQ(LM_MOCK, engineConfiguration->fuelAlgorithm); engineConfiguration->isIgnitionEnabled = false; // let's focus on injection engineConfiguration->specs.cylindersCount = 4; // a bit of flexibility - the mode may be changed by some tests diff --git a/unit_tests/tests/ignition_injection/test_fuelCut.cpp b/unit_tests/tests/ignition_injection/test_fuelCut.cpp index 21c7f6f540..47396bcdd7 100644 --- a/unit_tests/tests/ignition_injection/test_fuelCut.cpp +++ b/unit_tests/tests/ignition_injection/test_fuelCut.cpp @@ -11,8 +11,12 @@ #include "sensor.h" #include "fsio_impl.h" +using ::testing::_; + TEST(fuelCut, coasting) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); // configure coastingFuelCut engineConfiguration->coastingFuelCutEnabled = true; diff --git a/unit_tests/tests/test_fuel_map.cpp b/unit_tests/tests/test_fuel_map.cpp index 1736cc7c89..14dbbcb386 100644 --- a/unit_tests/tests/test_fuel_map.cpp +++ b/unit_tests/tests/test_fuel_map.cpp @@ -21,6 +21,7 @@ using ::testing::FloatNear; TEST(misc, testFuelMap) { printf("Setting up FORD_ASPIRE_1996\r\n"); WITH_ENGINE_TEST_HELPER(FORD_ASPIRE_1996); + engineConfiguration->fuelAlgorithm = LM_PLAIN_MAF; printf("Filling fuel map\r\n"); for (int k = 0; k < FUEL_LOAD_COUNT; k++) { diff --git a/unit_tests/tests/trigger/test_trigger_decoder.cpp b/unit_tests/tests/trigger/test_trigger_decoder.cpp index 58d33dcfe5..5aa73cccec 100644 --- a/unit_tests/tests/trigger/test_trigger_decoder.cpp +++ b/unit_tests/tests/trigger/test_trigger_decoder.cpp @@ -23,6 +23,8 @@ #include "trigger_universal.h" #include "sensor.h" +using ::testing::_; + extern WarningCodeState unitTestWarningCodeState; extern bool printTriggerDebug; extern float actualSynchGap; @@ -295,9 +297,10 @@ static void assertREqualsM(const char *msg, void *expected, void *actual) { extern bool_t debugSignalExecutor; TEST(misc, testRpmCalculator) { - printf("*************************************************** testRpmCalculator\r\n"); - WITH_ENGINE_TEST_HELPER(FORD_INLINE_6_1995); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); + IgnitionEventList *ilist = &engine->ignitionEvents; ASSERT_EQ( 0, ilist->isReady) << "size #1"; @@ -588,6 +591,8 @@ static void assertInjectionEventBatch(const char *msg, InjectionEvent *ev, int i } static void setTestBug299(EngineTestHelper *eth) { + // TODO: switch to mock airmass + eth->persistentConfig.engineConfiguration.fuelAlgorithm = LM_PLAIN_MAF; setupSimpleTestEngineWithMafAndTT_ONE_trigger(eth); Engine *engine = ð->engine; EXPAND_Engine @@ -977,6 +982,8 @@ TEST(big, testFuelSchedulerBug299smallAndMedium) { TEST(big, testTwoWireBatch) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); engineConfiguration->injectionMode = IM_BATCH; engineConfiguration->twoWireBatchInjection = true; @@ -1002,6 +1009,9 @@ TEST(big, testTwoWireBatch) { TEST(big, testSequential) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); + EXPECT_CALL(eth.mockAirmass, getAirmass(_)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); + setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð); engineConfiguration->injectionMode = IM_SEQUENTIAL; From 2253fe6eef71bae6d79eeb9204a2bdab2bbf65f2 Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 14:42:02 -0700 Subject: [PATCH 180/182] test cleanup --- .../tests/ignition_injection/injection_mode_transition.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp index e2ece5d105..6f4639963b 100644 --- a/unit_tests/tests/ignition_injection/injection_mode_transition.cpp +++ b/unit_tests/tests/ignition_injection/injection_mode_transition.cpp @@ -31,6 +31,9 @@ TEST(fuelControl, transitionIssue1592) { WITH_ENGINE_TEST_HELPER(TEST_ENGINE); setupSimpleTestEngineWithMafAndTT_ONE_trigger(ð, IM_SEQUENTIAL); + EXPECT_CALL(eth.mockAirmass, getAirmass(400)) + .WillRepeatedly(Return(AirmassResult{0.1008f, 50.0f})); + // This is easiest to trip on a wheel that requires sync engineConfiguration->trigger.customTotalToothCount = 6; engineConfiguration->trigger.customSkippedToothCount = 1; @@ -38,10 +41,6 @@ TEST(fuelControl, transitionIssue1592) { engineConfiguration->ambiguousOperationMode = FOUR_STROKE_CAM_SENSOR; engineConfiguration->isFasterEngineSpinUpEnabled = true; - engineConfiguration->fuelAlgorithm = LM_ALPHA_N; - - extern fuel_Map3D_t fuelMap; - fuelMap.setAll(13); extern fuel_Map3D_t fuelPhaseMap; fuelPhaseMap.setAll(0); setArrayValues(config->crankingFuelCoef, 1.0f); From 610bcce870a6eb41b356e2a0cf1bf1a0dc8578fe Mon Sep 17 00:00:00 2001 From: Matthew Kennedy Date: Tue, 28 Jul 2020 14:56:04 -0700 Subject: [PATCH 181/182] kinetis enum --- .../kinetis/config/controllers/algo/auto_generated_enums.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp index 125570e968..df70037513 100644 --- a/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp +++ b/firmware/config/boards/kinetis/config/controllers/algo/auto_generated_enums.cpp @@ -597,6 +597,8 @@ case LM_SPEED_DENSITY: return "LM_SPEED_DENSITY"; case LM_ALPHA_N_2: return "LM_ALPHA_N_2"; +case LM_MOCK: + return "LM_MOCK"; } return NULL; } From 2ddf9f12ff3c98c5772fead3073d4abfb149c59a Mon Sep 17 00:00:00 2001 From: GitHub set-date Action Date: Wed, 29 Jul 2020 00:31:50 +0000 Subject: [PATCH 182/182] Update date --- firmware/controllers/date_stamp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/controllers/date_stamp.h b/firmware/controllers/date_stamp.h index 8ce8f733fa..1335e3ad3b 100644 --- a/firmware/controllers/date_stamp.h +++ b/firmware/controllers/date_stamp.h @@ -1,2 +1,2 @@ #pragma once -#define VCS_DATE 20200728 +#define VCS_DATE 20200729

    >=-t0h17juh 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 Date: Fri, 24 Jul 2020 11:41:45 -0400 Subject: [PATCH 027/182] code style --- firmware/tunerstudio/rusefi.input | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/tunerstudio/rusefi.input b/firmware/tunerstudio/rusefi.input index dc6be42fb4..8bc870fb4c 100644 --- a/firmware/tunerstudio/rusefi.input +++ b/firmware/tunerstudio/rusefi.input @@ -347,7 +347,7 @@ enable2ndByteCanID = false rawOilPressure = scalar, U16, 242, "V",{1/@@PACK_MULT_VOLTAGE@@}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct From edf72346a48efba2dfa1d9e63ced4eee20e24497 Mon Sep 17 00:00:00 2001 From: GitHub build-firmware Action Date: Fri, 24 Jul 2020 15:44:37 +0000 Subject: [PATCH 028/182] Auto-generated configs and docs --- .../controllers/generated/signature_all.h | 6 +++--- .../generated/signature_frankenso_na6.h | 6 +++--- .../controllers/generated/signature_kin.h | 6 +++--- .../controllers/generated/signature_mre_f4.h | 6 +++--- .../controllers/generated/signature_mre_f7.h | 6 +++--- .../generated/signature_prometheus_405.h | 6 +++--- .../generated/signature_prometheus_469.h | 6 +++--- .../generated/signature_proteus_f4.h | 6 +++--- .../generated/signature_proteus_f7.h | 6 +++--- firmware/tunerstudio/generated/cache.zip | Bin 842300 -> 842327 bytes firmware/tunerstudio/generated/rusefi.ini | 8 ++++---- .../generated/rusefi_frankenso_na6.ini | 8 ++++---- .../tunerstudio/generated/rusefi_kinetis.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f4.ini | 8 ++++---- .../tunerstudio/generated/rusefi_mre_f7.ini | 8 ++++---- .../generated/rusefi_prometheus_405.ini | 8 ++++---- .../generated/rusefi_prometheus_469.ini | 8 ++++---- .../generated/rusefi_proteus_f4.ini | 8 ++++---- .../generated/rusefi_proteus_f7.ini | 8 ++++---- 19 files changed, 63 insertions(+), 63 deletions(-) diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h index e6553d4b8b..e57cc10ecf 100644 --- a/firmware/controllers/generated/signature_all.h +++ b/firmware/controllers/generated/signature_all.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD all -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 1241418013 -#define TS_SIGNATURE "rusEFI 2020.07.23.all.1241418013" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 3766939728 +#define TS_SIGNATURE "rusEFI 2020.07.24.all.3766939728" diff --git a/firmware/controllers/generated/signature_frankenso_na6.h b/firmware/controllers/generated/signature_frankenso_na6.h index dfee3f1ed0..bb12a1edbc 100644 --- a/firmware/controllers/generated/signature_frankenso_na6.h +++ b/firmware/controllers/generated/signature_frankenso_na6.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD frankenso_na6 -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 2541348350 -#define TS_SIGNATURE "rusEFI 2020.07.23.frankenso_na6.2541348350" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 1040293043 +#define TS_SIGNATURE "rusEFI 2020.07.24.frankenso_na6.1040293043" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h index e1d3ec6593..b4aa069aed 100644 --- a/firmware/controllers/generated/signature_kin.h +++ b/firmware/controllers/generated/signature_kin.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD kin -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 2227197319 -#define TS_SIGNATURE "rusEFI 2020.07.23.kin.2227197319" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 767044810 +#define TS_SIGNATURE "rusEFI 2020.07.24.kin.767044810" diff --git a/firmware/controllers/generated/signature_mre_f4.h b/firmware/controllers/generated/signature_mre_f4.h index 364a50f0be..d6356a7c31 100644 --- a/firmware/controllers/generated/signature_mre_f4.h +++ b/firmware/controllers/generated/signature_mre_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f4 -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 24467 -#define TS_SIGNATURE "rusEFI 2020.07.23.mre_f4.24467" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 2843223774 +#define TS_SIGNATURE "rusEFI 2020.07.24.mre_f4.2843223774" diff --git a/firmware/controllers/generated/signature_mre_f7.h b/firmware/controllers/generated/signature_mre_f7.h index b3e25944a5..0684115fc1 100644 --- a/firmware/controllers/generated/signature_mre_f7.h +++ b/firmware/controllers/generated/signature_mre_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD mre_f7 -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 24467 -#define TS_SIGNATURE "rusEFI 2020.07.23.mre_f7.24467" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 2843223774 +#define TS_SIGNATURE "rusEFI 2020.07.24.mre_f7.2843223774" diff --git a/firmware/controllers/generated/signature_prometheus_405.h b/firmware/controllers/generated/signature_prometheus_405.h index d3e4a195ec..d87086ccae 100644 --- a/firmware/controllers/generated/signature_prometheus_405.h +++ b/firmware/controllers/generated/signature_prometheus_405.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_405 -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 3168948633 -#define TS_SIGNATURE "rusEFI 2020.07.23.prometheus_405.3168948633" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 362424532 +#define TS_SIGNATURE "rusEFI 2020.07.24.prometheus_405.362424532" diff --git a/firmware/controllers/generated/signature_prometheus_469.h b/firmware/controllers/generated/signature_prometheus_469.h index fcac79cf3f..d662500890 100644 --- a/firmware/controllers/generated/signature_prometheus_469.h +++ b/firmware/controllers/generated/signature_prometheus_469.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD prometheus_469 -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 3168948633 -#define TS_SIGNATURE "rusEFI 2020.07.23.prometheus_469.3168948633" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 362424532 +#define TS_SIGNATURE "rusEFI 2020.07.24.prometheus_469.362424532" diff --git a/firmware/controllers/generated/signature_proteus_f4.h b/firmware/controllers/generated/signature_proteus_f4.h index e3cf60b6b4..007f83ee89 100644 --- a/firmware/controllers/generated/signature_proteus_f4.h +++ b/firmware/controllers/generated/signature_proteus_f4.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f4 -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 3295672530 -#define TS_SIGNATURE "rusEFI 2020.07.23.proteus_f4.3295672530" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 1830257055 +#define TS_SIGNATURE "rusEFI 2020.07.24.proteus_f4.1830257055" diff --git a/firmware/controllers/generated/signature_proteus_f7.h b/firmware/controllers/generated/signature_proteus_f7.h index dbde7ff7b5..c844db0527 100644 --- a/firmware/controllers/generated/signature_proteus_f7.h +++ b/firmware/controllers/generated/signature_proteus_f7.h @@ -3,6 +3,6 @@ // #define SIGNATURE_BOARD proteus_f7 -#define SIGNATURE_DATE 2020.07.23 -#define SIGNATURE_HASH 3295672530 -#define TS_SIGNATURE "rusEFI 2020.07.23.proteus_f7.3295672530" +#define SIGNATURE_DATE 2020.07.24 +#define SIGNATURE_HASH 1830257055 +#define TS_SIGNATURE "rusEFI 2020.07.24.proteus_f7.1830257055" diff --git a/firmware/tunerstudio/generated/cache.zip b/firmware/tunerstudio/generated/cache.zip index cca79cfb87571619154007dac339e5f5632b0f30..e89bb4a9562faa33cc9b805a89a5dad212a8ec8f 100644 GIT binary patch delta 268226 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 delta 265449 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 GpZ*`sFM5Xn diff --git a/firmware/tunerstudio/generated/rusefi.ini b/firmware/tunerstudio/generated/rusefi.ini index 07781fbfe9..831a9a561d 100644 --- a/firmware/tunerstudio/generated/rusefi.ini +++ b/firmware/tunerstudio/generated/rusefi.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.all.1241418013" + signature = "rusEFI 2020.07.24.all.3766939728" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.all.1241418013" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.all.3766939728" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:53 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:43:57 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini index e02d02691d..e43a92974b 100644 --- a/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini +++ b/firmware/tunerstudio/generated/rusefi_frankenso_na6.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.frankenso_na6.2541348350" + signature = "rusEFI 2020.07.24.frankenso_na6.1040293043" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.frankenso_na6.2541348350" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.frankenso_na6.1040293043" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:57 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:44:01 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_kinetis.ini b/firmware/tunerstudio/generated/rusefi_kinetis.ini index bfb5a0203c..0d2a3587bb 100644 --- a/firmware/tunerstudio/generated/rusefi_kinetis.ini +++ b/firmware/tunerstudio/generated/rusefi_kinetis.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.kin.2227197319" + signature = "rusEFI 2020.07.24.kin.767044810" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.kin.2227197319" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.kin.767044810" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Thu Jul 23 23:54:04 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt Fri Jul 24 15:44:08 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_mre_f4.ini b/firmware/tunerstudio/generated/rusefi_mre_f4.ini index e2de2ec9bc..faf5995f79 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.mre_f4.24467" + signature = "rusEFI 2020.07.24.mre_f4.2843223774" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.mre_f4.24467" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.mre_f4.2843223774" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:56 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:44:00 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_mre_f7.ini b/firmware/tunerstudio/generated/rusefi_mre_f7.ini index ce787a670f..9a7ef86516 100644 --- a/firmware/tunerstudio/generated/rusefi_mre_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_mre_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.mre_f7.24467" + signature = "rusEFI 2020.07.24.mre_f7.2843223774" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.mre_f7.24467" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.mre_f7.2843223774" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:55 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:43:59 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini index 19d7f8dce7..a7d947636a 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_405.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_405.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.prometheus_405.3168948633" + signature = "rusEFI 2020.07.24.prometheus_405.362424532" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.prometheus_405.3168948633" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.prometheus_405.362424532" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:54:00 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:44:04 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini index 8b723c80b8..3ae6fabe0f 100644 --- a/firmware/tunerstudio/generated/rusefi_prometheus_469.ini +++ b/firmware/tunerstudio/generated/rusefi_prometheus_469.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.prometheus_469.3168948633" + signature = "rusEFI 2020.07.24.prometheus_469.362424532" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.prometheus_469.3168948633" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.prometheus_469.362424532" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:53:59 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:44:03 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini index 00a0179b81..1ea42d30c7 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f4.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f4.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.proteus_f4.3295672530" + signature = "rusEFI 2020.07.24.proteus_f4.1830257055" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.proteus_f4.3295672530" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.proteus_f4.1830257055" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:54:03 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:44:07 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct diff --git a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini index 51d6e6e64d..b1d42cdfc6 100644 --- a/firmware/tunerstudio/generated/rusefi_proteus_f7.ini +++ b/firmware/tunerstudio/generated/rusefi_proteus_f7.ini @@ -33,12 +33,12 @@ enable2ndByteCanID = false [MegaTune] ; https://rusefi.com/forum/viewtopic.php?p=36201#p36201 - signature = "rusEFI 2020.07.23.proteus_f7.3295672530" + signature = "rusEFI 2020.07.24.proteus_f7.1830257055" [TunerStudio] queryCommand = "S" versionInfo = "V" ; firmwave version for title bar. - signature = "rusEFI 2020.07.23.proteus_f7.3295672530" ; signature is expected to be 7 or more characters. + signature = "rusEFI 2020.07.24.proteus_f7.1830257055" ; signature is expected to be 7 or more characters. [Constants] ; new packet serial format with CRC @@ -76,7 +76,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Thu Jul 23 23:54:01 UTC 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt Fri Jul 24 15:44:06 UTC 2020 pageSize = 20000 page = 1 @@ -1631,7 +1631,7 @@ page = 1 rawOilPressure = scalar, U16, 242, "V",{1/1000}, 0.0 ; we use this to match logs to tunes - tuneCrc16= scalar, U16, 244, "crc16", 1, 0 + tuneCrc16 = scalar, U16, 244, "crc16", 1, 0 ; ; see TunerStudioOutputChannels struct From 5654c71eefacf90509b0fcabfeafd6969e55a065 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 12:02:24 -0400 Subject: [PATCH 029/182] helping build --- java_tools/ts_plugin/build.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_tools/ts_plugin/build.xml b/java_tools/ts_plugin/build.xml index bfc068788e..dc66c4b1fe 100644 --- a/java_tools/ts_plugin/build.xml +++ b/java_tools/ts_plugin/build.xml @@ -13,7 +13,7 @@ From ae6effc66e2b489bc3ee0b2e6dd4665cd7918472 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 12:11:37 -0400 Subject: [PATCH 030/182] helping Android --- java_console/logging-api/build.gradle | 4 ---- java_tools/proxy_server/build.gradle | 9 +++++++++ .../java/com/devexperts/logging/DxFeedPatternLayout.java | 0 .../main/java/com/devexperts/logging/Log4j2Logging.java | 0 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 java_tools/proxy_server/build.gradle rename {java_console/logging-api => java_tools/proxy_server}/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java (100%) rename {java_console/logging-api => java_tools/proxy_server}/src/main/java/com/devexperts/logging/Log4j2Logging.java (100%) diff --git a/java_console/logging-api/build.gradle b/java_console/logging-api/build.gradle index 21aaaef2f2..ac70de7d36 100644 --- a/java_console/logging-api/build.gradle +++ b/java_console/logging-api/build.gradle @@ -3,9 +3,5 @@ plugins { } dependencies { - implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.3' - implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3' - //implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2' implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2' - } \ No newline at end of file diff --git a/java_tools/proxy_server/build.gradle b/java_tools/proxy_server/build.gradle new file mode 100644 index 0000000000..378b881df0 --- /dev/null +++ b/java_tools/proxy_server/build.gradle @@ -0,0 +1,9 @@ +plugins { + id 'java' +} + +dependencies { + implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.3' + implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3' + implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2' +} \ No newline at end of file diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java b/java_tools/proxy_server/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java similarity index 100% rename from java_console/logging-api/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java rename to java_tools/proxy_server/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/Log4j2Logging.java b/java_tools/proxy_server/src/main/java/com/devexperts/logging/Log4j2Logging.java similarity index 100% rename from java_console/logging-api/src/main/java/com/devexperts/logging/Log4j2Logging.java rename to java_tools/proxy_server/src/main/java/com/devexperts/logging/Log4j2Logging.java From 24422233f698c1cf85a8638bb8d1099c7bb9bf57 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 12:25:24 -0400 Subject: [PATCH 031/182] getting on the needle --- android/app/build.gradle | 1 + java_console/.idea/libraries/jsr305_2_0_1.xml | 11 +++++++++++ java_console/.idea/libraries/log4j_api_2_13_3.xml | 10 ++++++++++ java_console/logging-api/logging-api.iml | 1 + java_tools/proxy_server/proxy_server.iml | 1 + 5 files changed, 24 insertions(+) create mode 100644 java_console/.idea/libraries/jsr305_2_0_1.xml create mode 100644 java_console/.idea/libraries/log4j_api_2_13_3.xml diff --git a/android/app/build.gradle b/android/app/build.gradle index 6e5ee981a4..b04cd8cb2f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -16,6 +16,7 @@ android { defaultConfig { applicationId "com.rusefi.app" + // Version 21 = Android_5.0_Lollipop minSdkVersion 21 targetSdkVersion 30 versionCode 1 diff --git a/java_console/.idea/libraries/jsr305_2_0_1.xml b/java_console/.idea/libraries/jsr305_2_0_1.xml new file mode 100644 index 0000000000..7d31d5712f --- /dev/null +++ b/java_console/.idea/libraries/jsr305_2_0_1.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/java_console/.idea/libraries/log4j_api_2_13_3.xml b/java_console/.idea/libraries/log4j_api_2_13_3.xml new file mode 100644 index 0000000000..ea97150b0e --- /dev/null +++ b/java_console/.idea/libraries/log4j_api_2_13_3.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/java_console/logging-api/logging-api.iml b/java_console/logging-api/logging-api.iml index b1d8b0ac28..807d0b23b2 100644 --- a/java_console/logging-api/logging-api.iml +++ b/java_console/logging-api/logging-api.iml @@ -8,5 +8,6 @@ + \ No newline at end of file diff --git a/java_tools/proxy_server/proxy_server.iml b/java_tools/proxy_server/proxy_server.iml index e317acc97b..e9e81508f0 100644 --- a/java_tools/proxy_server/proxy_server.iml +++ b/java_tools/proxy_server/proxy_server.iml @@ -15,5 +15,6 @@ + \ No newline at end of file From 09a9ecf90ea6791c5d6747ea73c44ab824fe8889 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 12:27:38 -0400 Subject: [PATCH 032/182] helping Android --- android/app/src/main/java/com/rusefi/app/AndroidSerial.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java index 629cd0577f..ed7ba667d3 100644 --- a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java +++ b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java @@ -13,6 +13,7 @@ import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.dfu.DfuLogic; import com.rusefi.io.ByteReader; import com.rusefi.io.serial.AbstractIoStream; +import com.rusefi.io.tcp.TcpIoStream; import java.io.IOException; import java.util.List; @@ -49,7 +50,7 @@ public class AndroidSerial extends AbstractIoStream { @Override public void setInputListener(DataListener listener) { ByteReader reader = buffer -> usbSerialPort.read(buffer, 5000); - ByteReader.runReaderLoop("", listener, reader, Logger.CONSOLE); + ByteReader.runReaderLoop("", listener, reader, Logger.CONSOLE, TcpIoStream.DisconnectListener.VOID); } @Override From 862505f40ef70571149936e1d5b88f9c7c835aa0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 12:44:29 -0400 Subject: [PATCH 033/182] java logging migration --- .../java/com/rusefi/app/AndroidSerial.java | 7 +- .../src/main/java/com/rusefi/app/rusEFI.java | 5 +- .../autotest/src/com/rusefi/AutoTest.java | 2 +- .../src/com/rusefi/EnduranceTest.java | 2 +- .../autotest/src/com/rusefi/RealHwTest.java | 3 +- .../com/rusefi/LocalApplicationProxy.java | 25 ++++--- .../rusefi/binaryprotocol/BinaryProtocol.java | 36 +++++----- .../binaryprotocol/IncomingDataBuffer.java | 42 ++++++----- .../main/java/com/rusefi/file/FileUtils.java | 5 +- .../main/java/com/rusefi/io/ByteReader.java | 12 +++- .../main/java/com/rusefi/io/CommandQueue.java | 19 ++--- .../main/java/com/rusefi/io/DfuHelper.java | 5 +- .../src/main/java/com/rusefi/io/IoStream.java | 8 ++- .../main/java/com/rusefi/io/LinkManager.java | 26 +++---- .../com/rusefi/io/commands/HelloCommand.java | 15 ++-- .../java/com/rusefi/io/serial/PortHolder.java | 14 ++-- .../io/serial/SerialIoStreamJSerialComm.java | 23 +++--- .../com/rusefi/io/serial/StreamConnector.java | 35 ++++----- .../rusefi/io/tcp/BinaryProtocolProxy.java | 24 ++++--- .../rusefi/io/tcp/BinaryProtocolServer.java | 71 +++++++++---------- .../java/com/rusefi/io/tcp/TcpIoStream.java | 17 ++--- .../com/rusefi/tools/online/HttpUtil.java | 11 ++- .../com/rusefi/tools/online/ProxyClient.java | 4 +- .../java/com/rusefi/core/EngineState.java | 15 ++-- .../java/com/rusefi/core/MessagesCentral.java | 10 ++- .../tools/src/com/irnems/AdcFilter.java | 3 +- .../src/com/irnems/file/FrequencyDivider.java | 3 +- .../src/main/java/com/rusefi/ConsoleUI.java | 4 +- .../main/java/com/rusefi/EcuStimulator.java | 4 +- .../rusefi/autodetect/ReconnectSandbox.java | 3 +- .../rusefi/autodetect/SerialAutoChecker.java | 6 +- .../java/com/rusefi/etb/TestSequenceStep.java | 2 +- .../com/rusefi/maintenance/DfuFlasher.java | 7 +- .../java/com/rusefi/tools/ConsoleTools.java | 18 ++--- .../java/com/rusefi/ui/RecentCommands.java | 3 +- .../main/java/com/rusefi/ui/UIContext.java | 3 +- .../java/com/rusefi/ui/console/MainFrame.java | 4 +- .../rusefi/ui/etb/EtbMonteCarloSequence.java | 17 +++-- .../com/rusefi/ui/etb/EtbReturnToNeutral.java | 8 +-- .../com/rusefi/ui/etb/MagicSpotsFinder.java | 22 +++--- .../java/com/rusefi/ui/logview/LogViewer.java | 2 +- .../com/rusefi/ui/widgets/AnyCommand.java | 18 ++--- .../com/rusefi/ui/widgets/PotCommand.java | 5 +- .../test/java/com/rusefi/FullServerTest.java | 11 ++- .../java/com/rusefi/MockRusEfiDevice.java | 4 +- .../src/test/java/com/rusefi/ServerTest.java | 10 +-- .../src/test/java/com/rusefi/TestHelper.java | 14 ++-- .../io/BinaryProtocolServerSandbox.java | 7 +- .../io/TcpCommunicationIntegrationTest.java | 12 ++-- .../rusefi/proxy/BaseBroadcastingThread.java | 14 ++-- .../com/rusefi/proxy/NetworkConnector.java | 8 +-- .../main/java/com/rusefi/server/Backend.java | 52 +++++++------- .../com/rusefi/server/BackendLauncher.java | 3 +- .../server/ControllerConnectionState.java | 23 +++--- .../server/JsonUserDetailsResolver.java | 4 +- .../runConfigurations/RemoteTabSandbox.xml | 2 +- 56 files changed, 363 insertions(+), 369 deletions(-) diff --git a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java index ed7ba667d3..3d5e67bdd2 100644 --- a/android/app/src/main/java/com/rusefi/app/AndroidSerial.java +++ b/android/app/src/main/java/com/rusefi/app/AndroidSerial.java @@ -7,7 +7,6 @@ import com.hoho.android.usbserial.driver.ProbeTable; import com.hoho.android.usbserial.driver.UsbSerialDriver; import com.hoho.android.usbserial.driver.UsbSerialPort; import com.hoho.android.usbserial.driver.UsbSerialProber; -import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.binaryprotocol.IncomingDataBuffer; import com.rusefi.dfu.DfuLogic; @@ -32,9 +31,9 @@ public class AndroidSerial extends AbstractIoStream { return prober.findAllDrivers(usbManager); } - public AndroidSerial(UsbSerialPort usbSerialPort, Logger logger) { + public AndroidSerial(UsbSerialPort usbSerialPort) { this.usbSerialPort = usbSerialPort; - dataBuffer = IncomingDataBuffer.createDataBuffer("", this, logger); + dataBuffer = IncomingDataBuffer.createDataBuffer("", this); } @Override @@ -50,7 +49,7 @@ public class AndroidSerial extends AbstractIoStream { @Override public void setInputListener(DataListener listener) { ByteReader reader = buffer -> usbSerialPort.read(buffer, 5000); - ByteReader.runReaderLoop("", listener, reader, Logger.CONSOLE, TcpIoStream.DisconnectListener.VOID); + ByteReader.runReaderLoop("", listener, reader, TcpIoStream.DisconnectListener.VOID); } @Override diff --git a/android/app/src/main/java/com/rusefi/app/rusEFI.java b/android/app/src/main/java/com/rusefi/app/rusEFI.java index ad6414ede8..4f0e05ef26 100644 --- a/android/app/src/main/java/com/rusefi/app/rusEFI.java +++ b/android/app/src/main/java/com/rusefi/app/rusEFI.java @@ -34,7 +34,6 @@ import android.widget.TextView; import com.hoho.android.usbserial.driver.UsbSerialDriver; import com.hoho.android.usbserial.driver.UsbSerialPort; -import com.opensr5.Logger; import com.rusefi.Listener; import com.rusefi.dfu.DfuConnection; import com.rusefi.dfu.DfuImage; @@ -233,9 +232,9 @@ public class rusEFI extends Activity { port.open(connection); port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); - AndroidSerial serial = new AndroidSerial(port, Logger.CONSOLE); + AndroidSerial serial = new AndroidSerial(port); mResultView.append("Switching to DFU\n"); - DfuHelper.sendDfuRebootCommand(serial, new StringBuilder(), Logger.CONSOLE); + DfuHelper.sendDfuRebootCommand(serial, new StringBuilder()); } catch (IOException e) { throw new IllegalStateException(e); diff --git a/java_console/autotest/src/com/rusefi/AutoTest.java b/java_console/autotest/src/com/rusefi/AutoTest.java index 8c71ae3bcd..e8dc3cff7d 100644 --- a/java_console/autotest/src/com/rusefi/AutoTest.java +++ b/java_console/autotest/src/com/rusefi/AutoTest.java @@ -555,7 +555,7 @@ public class AutoTest { boolean failed = false; try { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); IoUtil.connectToSimulator(linkManager, startSimulator); new AutoTest(linkManager, linkManager.getCommandQueue()).mainTestBody(); } catch (Throwable e) { diff --git a/java_console/autotest/src/com/rusefi/EnduranceTest.java b/java_console/autotest/src/com/rusefi/EnduranceTest.java index 055ae8177e..a152327ed0 100644 --- a/java_console/autotest/src/com/rusefi/EnduranceTest.java +++ b/java_console/autotest/src/com/rusefi/EnduranceTest.java @@ -12,7 +12,7 @@ public class EnduranceTest { private static final int DEFAULT_COUNT = 2000; public static void main(String[] args) { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); CommandQueue commandQueue = linkManager.getCommandQueue(); long start = System.currentTimeMillis(); int count = parseCount(args); diff --git a/java_console/autotest/src/com/rusefi/RealHwTest.java b/java_console/autotest/src/com/rusefi/RealHwTest.java index 243628cb52..4977542b84 100644 --- a/java_console/autotest/src/com/rusefi/RealHwTest.java +++ b/java_console/autotest/src/com/rusefi/RealHwTest.java @@ -1,6 +1,5 @@ package com.rusefi; -import com.rusefi.io.CommandQueue; import com.rusefi.io.LinkManager; import org.jetbrains.annotations.NotNull; @@ -83,7 +82,7 @@ public class RealHwTest { } private static void runRealHardwareTest(String port) throws Exception { - LinkManager linkManager = new LinkManager(FileLog.LOGGER); + LinkManager linkManager = new LinkManager(); IoUtil.realHardwareConnect(linkManager, port); new AutoTest(linkManager, linkManager.getCommandQueue()).mainTestBody(); } diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java index b74eda005f..169523add4 100644 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java @@ -1,6 +1,8 @@ package com.rusefi; +import com.devexperts.logging.Logging; import com.opensr5.Logger; +import com.rusefi.core.MessagesCentral; import com.rusefi.io.IoStream; import com.rusefi.io.commands.HelloCommand; import com.rusefi.io.tcp.BinaryProtocolProxy; @@ -13,13 +15,14 @@ import com.rusefi.tools.online.ProxyClient; import java.io.IOException; +import static com.devexperts.logging.Logging.getLogging; + public class LocalApplicationProxy { + private static final Logging log = getLogging(LocalApplicationProxy.class); public static final int SERVER_PORT_FOR_APPLICATIONS = 8002; - private final Logger logger; private final ApplicationRequest applicationRequest; - public LocalApplicationProxy(Logger logger, ApplicationRequest applicationRequest) { - this.logger = logger; + public LocalApplicationProxy(ApplicationRequest applicationRequest) { this.applicationRequest = applicationRequest; } @@ -30,23 +33,23 @@ public class LocalApplicationProxy { * @param jsonHttpPort * @param disconnectListener */ - public static ServerHolder startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener) throws IOException { - String version = HttpUtil.executeGet(logger,ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); - logger.info("Server says version=" + version); + public static ServerHolder startAndRun(int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener) throws IOException { + String version = HttpUtil.executeGet(ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); + log.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); - IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", logger, rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers), disconnectListener); - LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest); - logger.info("Pushing " + applicationRequest); + IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers), disconnectListener); + LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(applicationRequest); + log.info("Pushing " + applicationRequest); localApplicationProxy.run(authenticatorToProxyStream); - return BinaryProtocolProxy.createProxy(logger, authenticatorToProxyStream, localApplicationPort); + return BinaryProtocolProxy.createProxy(authenticatorToProxyStream, localApplicationPort); } public void run(IoStream authenticatorToProxyStream) throws IOException { // right from connection push session authentication data - new HelloCommand(logger, applicationRequest.toJson()).handle(authenticatorToProxyStream); + new HelloCommand(applicationRequest.toJson()).handle(authenticatorToProxyStream); } public static void start(String[] strings) { diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java index 7509f55585..5cc5c561a6 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -1,5 +1,6 @@ package com.rusefi.binaryprotocol; +import com.devexperts.logging.Logging; import com.opensr5.ConfigurationImage; import com.opensr5.Logger; import com.opensr5.io.ConfigurationImageFile; @@ -12,6 +13,7 @@ import com.rusefi.config.generated.Fields; import com.rusefi.core.*; import com.rusefi.io.*; import com.rusefi.io.commands.GetOutputsCommand; +import com.rusefi.io.serial.PortHolder; import com.rusefi.stream.LogicdataStreamFile; import com.rusefi.stream.StreamFile; import com.rusefi.stream.TSHighSpeedLog; @@ -33,6 +35,7 @@ import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.IoHelper.*; /** @@ -45,6 +48,7 @@ import static com.rusefi.binaryprotocol.IoHelper.*; * 3/6/2015 */ public class BinaryProtocol implements BinaryProtocolCommands { + private static final Logging log = getLogging(BinaryProtocol.class); private static final String USE_PLAIN_PROTOCOL_PROPERTY = "protocol.plain"; private static final String CONFIGURATION_RUSEFI_BINARY = "current_configuration.rusefi_binary"; @@ -57,7 +61,6 @@ public class BinaryProtocol implements BinaryProtocolCommands { public static boolean PLAIN_PROTOCOL = Boolean.getBoolean(USE_PLAIN_PROTOCOL_PROPERTY); private final LinkManager linkManager; - private final Logger logger; private final IoStream stream; private final IncomingDataBuffer incomingData; private boolean isBurnPending; @@ -130,15 +133,14 @@ public class BinaryProtocol implements BinaryProtocolCommands { private final Thread hook = new Thread(() -> closeComposites(), "BinaryProtocol::hook"); - public BinaryProtocol(LinkManager linkManager, final Logger logger, IoStream stream, IncomingDataBuffer dataBuffer) { + public BinaryProtocol(LinkManager linkManager, IoStream stream, IncomingDataBuffer dataBuffer) { this.linkManager = linkManager; - this.logger = logger; this.stream = stream; communicationLoggingListener = new CommunicationLoggingListener() { @Override public void onPortHolderMessage(Class clazz, String message) { - MessagesCentral.getInstance().postMessage(logger, clazz, message); + MessagesCentral.getInstance().postMessage(clazz, message); } }; @@ -150,7 +152,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { needCompositeLogger = linkManager.getCompositeLogicEnabled(); lastLowRpmTime = System.currentTimeMillis(); } else if (System.currentTimeMillis() - lastLowRpmTime > HIGH_RPM_DELAY * Timeouts.SECOND) { - logger.info("Time to turn off composite logging"); + log.info("Time to turn off composite logging"); needCompositeLogger = false; } }; @@ -175,7 +177,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } public void doSend(final String command, boolean fireEvent) throws InterruptedException { - logger.info("Sending [" + command + "]"); + log.info("Sending [" + command + "]"); if (fireEvent && LinkManager.LOG_LEVEL.isDebugEnabled()) { communicationLoggingListener.onPortHolderMessage(BinaryProtocol.class, "Sending [" + command + "]"); } @@ -197,7 +199,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } catch (ExecutionException e) { throw new IllegalStateException(e); } catch (TimeoutException e) { - getLogger().error("timeout sending [" + command + "] giving up: " + e); + log.error("timeout sending [" + command + "] giving up: " + e); return; } /** @@ -247,7 +249,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } sleep(Timeouts.TEXT_PULL_PERIOD); } - logger.info("Stopping text pull"); + log.info("Stopping text pull"); } }; Thread tr = new Thread(textPull); @@ -275,10 +277,6 @@ public class BinaryProtocol implements BinaryProtocolCommands { compositeLogs.clear(); } - public Logger getLogger() { - return logger; - } - private void dropPending() { synchronized (ioLock) { if (isClosed) @@ -315,7 +313,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { private byte[] receivePacket(String msg, boolean allowLongResponse) throws EOFException { long start = System.currentTimeMillis(); synchronized (ioLock) { - return incomingData.getPacket(logger, msg, allowLongResponse, start); + return incomingData.getPacket(msg, allowLongResponse, start); } } @@ -331,7 +329,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { return; } setController(image); - logger.info("Got configuration from controller."); + log.info("Got configuration from controller."); ConnectionStatusLogic.INSTANCE.setValue(ConnectionStatusValue.CONNECTED); } @@ -343,7 +341,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { int offset = 0; long start = System.currentTimeMillis(); - logger.info("Reading from controller..."); + log.info("Reading from controller..."); while (offset < image.getSize() && (System.currentTimeMillis() - start < Timeouts.READ_IMAGE_TIMEOUT)) { if (isClosed) @@ -363,7 +361,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { if (!checkResponseCode(response, RESPONSE_OK) || response.length != requestSize + 1) { String code = (response == null || response.length == 0) ? "empty" : "code " + response[0]; String info = response == null ? "NO RESPONSE" : (code + " size " + response.length); - logger.info("readImage: ERROR UNEXPECTED Something is wrong, retrying... " + info); + log.info("readImage: ERROR UNEXPECTED Something is wrong, retrying... " + info); continue; } @@ -435,7 +433,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { sendPacket(packet); return receivePacket(msg, allowLongResponse); } catch (IOException e) { - logger.error(msg + ": executeCommand failed: " + e); + log.error(msg + ": executeCommand failed: " + e); close(); return null; } @@ -509,7 +507,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } private void sendPacket(byte[] command) throws IOException { - stream.sendPacket(command, logger); + stream.sendPacket(command); } @@ -549,7 +547,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { Thread.sleep(100); return new String(response, 1, response.length - 1); } catch (InterruptedException e) { - logger.error(e.toString()); + log.error(e.toString()); return null; } } diff --git a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java index 017fe2af9e..74efdc8c83 100644 --- a/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java +++ b/java_console/io/src/main/java/com/rusefi/binaryprotocol/IncomingDataBuffer.java @@ -1,6 +1,6 @@ package com.rusefi.binaryprotocol; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.Timeouts; import com.rusefi.config.generated.Fields; import com.rusefi.io.IoStream; @@ -13,6 +13,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.Objects; +import static com.devexperts.logging.Logging.getLogging; import static com.rusefi.binaryprotocol.IoHelper.*; /** @@ -23,39 +24,40 @@ import static com.rusefi.binaryprotocol.IoHelper.*; */ @ThreadSafe public class IncomingDataBuffer { + private static final Logging log = getLogging(IoStream.class); + private static final int BUFFER_SIZE = 32768; private static String loggingPrefix; /** * buffer for response bytes from controller */ private final CircularByteBuffer cbb; - private final Logger logger; private final AbstractIoStream.StreamStats streamStats; - public IncomingDataBuffer(Logger logger, AbstractIoStream.StreamStats streamStats) { + public IncomingDataBuffer(AbstractIoStream.StreamStats streamStats) { this.streamStats = Objects.requireNonNull(streamStats, "streamStats"); this.cbb = new CircularByteBuffer(BUFFER_SIZE); - this.logger = logger; } - public static IncomingDataBuffer createDataBuffer(String loggingPrefix, IoStream stream, Logger logger) { + public static IncomingDataBuffer createDataBuffer(String loggingPrefix, IoStream stream) { IncomingDataBuffer.loggingPrefix = loggingPrefix; - IncomingDataBuffer incomingData = new IncomingDataBuffer(logger, stream.getStreamStats()); + IncomingDataBuffer incomingData = new IncomingDataBuffer(stream.getStreamStats()); stream.setInputListener(incomingData::addData); return incomingData; } - public byte[] getPacket(Logger logger, String msg, boolean allowLongResponse) throws EOFException { - return getPacket(logger, msg, allowLongResponse, System.currentTimeMillis()); + public byte[] getPacket(String msg, boolean allowLongResponse) throws EOFException { + return getPacket(msg, allowLongResponse, System.currentTimeMillis()); } - public byte[] getPacket(Logger logger, String msg, boolean allowLongResponse, long start) throws EOFException { + public byte[] getPacket(String msg, boolean allowLongResponse, long start) throws EOFException { boolean isTimeout = waitForBytes(msg + " header", start, 2); if (isTimeout) return null; int packetSize = swap16(getShort()); - logger.trace( loggingPrefix + "Got packet size " + packetSize); + if (log.debugEnabled()) + log.debug(loggingPrefix + "Got packet size " + packetSize); if (packetSize < 0) return null; if (!allowLongResponse && packetSize > Math.max(BinaryProtocolCommands.BLOCKING_FACTOR, Fields.TS_OUTPUT_SIZE) + 10) @@ -72,20 +74,22 @@ public class IncomingDataBuffer { boolean isCrcOk = actualCrc == packetCrc; if (!isCrcOk) { - logger.trace(String.format("%x", actualCrc) + " vs " + String.format("%x", packetCrc)); + if (log.debugEnabled()) + log.debug(String.format("%x", actualCrc) + " vs " + String.format("%x", packetCrc)); return null; } streamStats.onPacketArrived(); - logger.trace("packet " + Arrays.toString(packet) + ": crc OK"); + if (log.debugEnabled()) + log.debug("packet " + Arrays.toString(packet) + ": crc OK"); return packet; } public void addData(byte[] freshData) { - logger.info("IncomingDataBuffer: " + freshData.length + " byte(s) arrived"); + log.info("IncomingDataBuffer: " + freshData.length + " byte(s) arrived"); synchronized (cbb) { if (cbb.size() - cbb.length() < freshData.length) { - logger.error("IncomingDataBuffer: buffer overflow not expected"); + log.error("IncomingDataBuffer: buffer overflow not expected"); cbb.clear(); } cbb.put(freshData); @@ -103,12 +107,12 @@ public class IncomingDataBuffer { } public boolean waitForBytes(int timeoutMs, String loggingMessage, long startTimestamp, int count) { - logger.info(loggingMessage + ": waiting for " + count + " byte(s)"); + log.info(loggingMessage + ": waiting for " + count + " byte(s)"); synchronized (cbb) { while (cbb.length() < count) { int timeout = (int) (startTimestamp + timeoutMs - System.currentTimeMillis()); if (timeout <= 0) { - logger.info(loggingMessage + ": timeout. Got only " + cbb.length()); + log.info(loggingMessage + ": timeout. Got only " + cbb.length()); return true; // timeout. Sad face. } try { @@ -126,10 +130,10 @@ public class IncomingDataBuffer { synchronized (cbb) { int pending = cbb.length(); if (pending > 0) { - logger.error("dropPending: Unexpected pending data: " + pending + " byte(s)"); + log.error("dropPending: Unexpected pending data: " + pending + " byte(s)"); byte[] bytes = new byte[pending]; cbb.get(bytes); - logger.error("data: " + Arrays.toString(bytes)); + log.error("data: " + Arrays.toString(bytes)); } } } @@ -163,7 +167,7 @@ public class IncomingDataBuffer { } public byte readByte(int timeoutMs) throws IOException { - boolean isTimeout = waitForBytes(timeoutMs,loggingPrefix + "readByte", System.currentTimeMillis(), 1); + boolean isTimeout = waitForBytes(timeoutMs, loggingPrefix + "readByte", System.currentTimeMillis(), 1); if (isTimeout) throw new IOException("Timeout in readByte"); return (byte) getByte(); diff --git a/java_console/io/src/main/java/com/rusefi/file/FileUtils.java b/java_console/io/src/main/java/com/rusefi/file/FileUtils.java index 7957e1bf4f..491d8a2055 100644 --- a/java_console/io/src/main/java/com/rusefi/file/FileUtils.java +++ b/java_console/io/src/main/java/com/rusefi/file/FileUtils.java @@ -1,6 +1,5 @@ package com.rusefi.file; -import com.opensr5.Logger; import com.rusefi.core.EngineState; import com.rusefi.io.LinkManager; @@ -12,8 +11,8 @@ import java.util.List; * Andrey Belomutskiy, (c) 2013-2020 */ public class FileUtils { - public static void readFile(String filename, EngineState.EngineStateListener listener, Logger logger) { - readFile2(filename, new EngineState(listener, logger)); + public static void readFile(String filename, EngineState.EngineStateListener listener) { + readFile2(filename, new EngineState(listener)); } public static void readFile2(String filename, EngineState engineState) { diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index d121a1d40c..bf771664f6 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -1,8 +1,10 @@ package com.rusefi.io; +import com.devexperts.logging.Logging; import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.config.generated.Fields; +import com.rusefi.io.tcp.BinaryProtocolServer; import com.rusefi.io.tcp.TcpIoStream; import java.io.IOException; @@ -10,8 +12,12 @@ import java.util.Arrays; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import static com.devexperts.logging.Logging.getLogging; + public interface ByteReader { - static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, Logger logger, TcpIoStream.DisconnectListener disconnectListener) { + Logging log = getLogging(ByteReader.class); + + static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, TcpIoStream.DisconnectListener disconnectListener) { /** * Threading of the whole input/output does not look healthy at all! * @@ -25,7 +31,7 @@ public interface ByteReader { threadExecutor.execute(() -> { Thread.currentThread().setName("TCP connector loop"); - logger.info(loggingPrefix + "Running TCP connection loop"); + log.info(loggingPrefix + "Running TCP connection loop"); byte inputBuffer[] = new byte[Fields.BLOCKING_FACTOR * 2]; while (true) { @@ -35,7 +41,7 @@ public interface ByteReader { throw new IOException("TcpIoStream: End of input?"); listener.onDataArrived(Arrays.copyOf(inputBuffer, result)); } catch (IOException e) { - logger.error("TcpIoStream: End of connection " + e); + log.error("TcpIoStream: End of connection " + e); disconnectListener.onDisconnect(); return; } diff --git a/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java b/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java index cd419aafa8..7654cf1e57 100644 --- a/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java +++ b/java_console/io/src/main/java/com/rusefi/io/CommandQueue.java @@ -1,6 +1,6 @@ package com.rusefi.io; -import com.opensr5.Logger; +import com.devexperts.logging.Logging; import com.rusefi.config.generated.Fields; import com.rusefi.core.MessagesCentral; import org.jetbrains.annotations.NotNull; @@ -9,6 +9,8 @@ import java.util.*; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; +import static com.devexperts.logging.Logging.getLogging; + /** * This singleton keeps re-sending commands till a proper confirmation is received * @@ -18,6 +20,7 @@ import java.util.concurrent.LinkedBlockingQueue; */ @SuppressWarnings("FieldCanBeLocal") public class CommandQueue { + private static final Logging log = getLogging(LinkManager.class); public static final String CONFIRMATION_PREFIX = "confirmation_"; public static final int DEFAULT_TIMEOUT = 500; private static final int COMMAND_CONFIRMATION_TIMEOUT = 1000; @@ -36,7 +39,6 @@ public class CommandQueue { private final List commandListeners = new ArrayList<>(); private final Runnable runnable; - private final Logger logger; private static boolean isSlowCommand(String cmd) { String lc = cmd.toLowerCase(); @@ -98,27 +100,26 @@ public class CommandQueue { } if (counter != 1) - MessagesCentral.getInstance().postMessage(logger, CommandQueue.class, "Took " + counter + " attempts"); + MessagesCentral.getInstance().postMessage(CommandQueue.class, "Took " + counter + " attempts"); } - public CommandQueue(LinkManager linkManager, Logger logger) { + public CommandQueue(LinkManager linkManager) { this.linkManager = linkManager; runnable = new Runnable() { @SuppressWarnings("InfiniteLoopStatement") @Override public void run() { - MessagesCentral.getInstance().postMessage(logger, COMMAND_QUEUE_CLASS, "SerialIO started"); + MessagesCentral.getInstance().postMessage(COMMAND_QUEUE_CLASS, "SerialIO started"); while (true) { try { sendPendingCommand(); } catch (Throwable e) { - logger.error("CommandQueue error" + e); + log.error("CommandQueue error" + e); System.exit(-2); } } } }; - this.logger = logger; Thread thread = new Thread(runnable, "Commands Queue"); thread.setDaemon(true); thread.start(); @@ -136,10 +137,10 @@ public class CommandQueue { MessagesCentral mc = MessagesCentral.getInstance(); String confirmation = LinkManager.unpackConfirmation(message); if (confirmation == null) - mc.postMessage(logger, CommandQueue.class, "Broken confirmation length: " + message); + mc.postMessage(CommandQueue.class, "Broken confirmation length: " + message); pendingConfirmations.add(confirmation); if (LinkManager.LOG_LEVEL.isDebugEnabled()) - mc.postMessage(logger, CommandQueue.class, "got valid conf! " + confirmation + ", still pending: " + pendingCommands.size()); + mc.postMessage(CommandQueue.class, "got valid conf! " + confirmation + ", still pending: " + pendingCommands.size()); // FileLog.MAIN.logLine("templog got valid conf " + confirmation + " " + System.currentTimeMillis() + " " + new Date()); diff --git a/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java b/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java index d8e7b0d7ba..e981f93d5c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java +++ b/java_console/io/src/main/java/com/rusefi/io/DfuHelper.java @@ -1,16 +1,15 @@ package com.rusefi.io; -import com.opensr5.Logger; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.generated.Fields; import java.io.IOException; public class DfuHelper { - public static void sendDfuRebootCommand(IoStream stream, StringBuilder messages, Logger logger) { + public static void sendDfuRebootCommand(IoStream stream, StringBuilder messages) { byte[] command = BinaryProtocol.getTextCommandBytes(Fields.CMD_REBOOT_DFU); try { - stream.sendPacket(command, logger); + stream.sendPacket(command); stream.close(); messages.append("Reboot command sent!\n"); } catch (IOException e) { diff --git a/java_console/io/src/main/java/com/rusefi/io/IoStream.java b/java_console/io/src/main/java/com/rusefi/io/IoStream.java index 9cfac2cc7d..4ddfef2f99 100644 --- a/java_console/io/src/main/java/com/rusefi/io/IoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/IoStream.java @@ -1,5 +1,6 @@ package com.rusefi.io; +import com.devexperts.logging.Logging; import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.opensr5.io.WriteStream; @@ -13,6 +14,8 @@ import org.jetbrains.annotations.NotNull; import java.io.EOFException; import java.io.IOException; +import static com.devexperts.logging.Logging.getLogging; + /** * Physical bi-directional controller communication level *

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 literal 0 HcmV?d00001 diff --git a/java_console/lib/dfu/usb4java-1.3.0.jar b/java_console/lib/dfu/usb4java-1.3.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..d5ac62c6bb644d657d731b0bba1f8c8054dc8e0b GIT binary patch literal 49868 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 z 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 + \ No newline at end of file From 608b9e6f0b97fb280d846bfedb19587b7943f2a8 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 23:36:30 -0400 Subject: [PATCH 017/182] time to use DFU --- java_console/bin/dfu_program.sh | 1 + .../java/com/rusefi/tools/ConsoleTools.java | 5 +-- .../main/java/com/rusefi/tools/DfuTool.java | 34 +++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 java_console/bin/dfu_program.sh create mode 100644 java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java diff --git a/java_console/bin/dfu_program.sh b/java_console/bin/dfu_program.sh new file mode 100644 index 0000000000..5179c03d71 --- /dev/null +++ b/java_console/bin/dfu_program.sh @@ -0,0 +1 @@ +java -jar console/rusefi_console.jar dfu $1 \ No newline at end of file diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index 6824f9fb64..f9d2079e20 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -72,7 +72,8 @@ public class ConsoleTools { registerTool("version", ConsoleTools::version, "Only print version"); - registerTool("lightui", ConsoleTools::lightUI, "Start lightweight GUI for tiny screens"); + registerTool("lightui", strings -> lightUI(), "Start lightweight GUI for tiny screens"); + registerTool("dfu", DfuTool::run, "Program specified file into ECU via DFU"); registerTool("detect", ConsoleTools::detect, "Find attached rusEFI"); @@ -115,7 +116,7 @@ public class ConsoleTools { System.out.println("tune_CRC16=" + crc16); } - private static void lightUI(String[] strings) { + private static void lightUI() { LightweightGUI.start(); } diff --git a/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java b/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java new file mode 100644 index 0000000000..53af297d59 --- /dev/null +++ b/java_console/ui/src/main/java/com/rusefi/tools/DfuTool.java @@ -0,0 +1,34 @@ +package com.rusefi.tools; + +import com.rusefi.dfu.BinaryImage; +import com.rusefi.dfu.DfuImage; +import com.rusefi.dfu.DfuLogic; +import com.rusefi.dfu.HexImage; +import com.rusefi.dfu.usb4java.DfuDeviceLocator; +import com.rusefi.dfu.usb4java.USBDfuConnection; +import cz.jaybee.intelhex.IntelHexException; + +import java.io.IOException; + +public class DfuTool { + public static void run(String[] args) throws IOException, IntelHexException { + if (args.length < 2) { + System.err.println(".dfu or .hex filename parameter expected"); + return; + } + String fileName = args[1]; + + DfuLogic.Logger logger = DfuLogic.Logger.CONSOLE; + USBDfuConnection device = DfuDeviceLocator.findDevice(logger); + if (device == null) { + System.err.println("No DFU devices found"); + return; + } + + BinaryImage image = fileName.toLowerCase().trim().endsWith(".dfu") ? new DfuImage().read(fileName) : HexImage.loadHexToBuffer(fileName, device.getFlashRange()); + + DfuLogic.uploadImage(logger, device, image, device.getFlashRange()); + + logger.info("DfuSe DFU " + device); + } +} From dc8ac260812f3ed9c3f04f4185f4bf6b7c4552e0 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 23:36:56 -0400 Subject: [PATCH 018/182] time to use DFU --- java_console/bin/dfu_program.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 java_console/bin/dfu_program.sh diff --git a/java_console/bin/dfu_program.sh b/java_console/bin/dfu_program.sh old mode 100644 new mode 100755 From 09c24406dea3a981f6b61549eaa91e2e97e79d27 Mon Sep 17 00:00:00 2001 From: rusefi Date: Thu, 23 Jul 2020 23:38:57 -0400 Subject: [PATCH 019/182] everyone loves darwin --- java_console/build.xml | 1 + .../lib/dfu/libusb4java-1.3.0-darwin-x86-64.jar | Bin 0 -> 59577 bytes 2 files changed, 1 insertion(+) create mode 100644 java_console/lib/dfu/libusb4java-1.3.0-darwin-x86-64.jar diff --git a/java_console/build.xml b/java_console/build.xml index 61eaa4f416..8bfd646026 100644 --- a/java_console/build.xml +++ b/java_console/build.xml @@ -152,6 +152,7 @@ + diff --git a/java_console/lib/dfu/libusb4java-1.3.0-darwin-x86-64.jar b/java_console/lib/dfu/libusb4java-1.3.0-darwin-x86-64.jar new file mode 100644 index 0000000000000000000000000000000000000000..41f939c1edf1a6b88b7f99c99eefe4135f7e5bcd GIT binary patch literal 59577 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 Date: Thu, 23 Jul 2020 23:42:50 -0400 Subject: [PATCH 020/182] proxy it's slow :( --- .../src/main/java/com/rusefi/server/rusEFISSLContext.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java b/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java index 68ee54bee0..79f28d2eb1 100644 --- a/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java +++ b/java_console/io/src/main/java/com/rusefi/server/rusEFISSLContext.java @@ -60,8 +60,12 @@ public class rusEFISSLContext { } public static Socket getSSLSocket(String host, int port) throws IOException { - if (isJenkins) - return new Socket(host, port); + if (isJenkins) { + Socket socket = new Socket(host, port); + // responsiveness matters (getting a byte sent to be received as promptly as possible) + socket.setTcpNoDelay(true); + return socket; + } return getSSLSocketFactory(null /*key*/, TLS).createSocket(host, port); } From fdf7281261629525f803918d642ad22265c754c4 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 00:10:06 -0400 Subject: [PATCH 021/182] proxy progress - getting REALLY close?! --- .../java/com/rusefi/io/tcp/BinaryProtocolProxy.java | 12 ++++++------ .../src/main/java/com/rusefi/server/Backend.java | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java index a0975014b3..5bc8bfcd55 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolProxy.java @@ -26,15 +26,15 @@ public class BinaryProtocolProxy { Function clientSocketRunnableFactory = clientSocket -> () -> { try { TcpIoStream clientStream = new TcpIoStream("[[proxy]] ", logger, clientSocket); - runProxy(targetEcuSocket, clientStream); + runProxy(logger, targetEcuSocket, clientStream); } catch (IOException e) { - logger.error("BinaryProtocolProxy::run" + e); + logger.error("BinaryProtocolProxy::run " + e); } }; return BinaryProtocolServer.tcpServerSocket(serverProxyPort, "proxy", clientSocketRunnableFactory, Logger.CONSOLE, null); } - public static void runProxy(IoStream targetEcu, IoStream clientStream) throws IOException { + public static void runProxy(Logger logger, IoStream targetEcu, IoStream clientStream) throws IOException { /* * Each client socket is running on it's own thread */ @@ -45,7 +45,7 @@ public class BinaryProtocolProxy { clientStream.write(TS_PROTOCOL.getBytes()); continue; } - proxyClientRequestToController(clientStream.getDataBuffer(), firstByte, targetEcu); + proxyClientRequestToController(logger, clientStream.getDataBuffer(), firstByte, targetEcu); proxyControllerResponseToClient(targetEcu, clientStream); } @@ -58,7 +58,7 @@ public class BinaryProtocolProxy { clientOutputStream.sendPacket(packet); } - private static void proxyClientRequestToController(IncomingDataBuffer in, byte firstByte, IoStream targetOutputStream) throws IOException { + private static void proxyClientRequestToController(Logger logger, IncomingDataBuffer in, byte firstByte, IoStream targetOutputStream) throws IOException { byte secondByte = in.readByte(); int length = firstByte * 256 + secondByte; @@ -67,7 +67,7 @@ public class BinaryProtocolProxy { DataInputStream dis = new DataInputStream(new ByteArrayInputStream(packet.getPacket())); byte command = (byte) dis.read(); - System.out.println("Relaying client command " + BinaryProtocol.findCommand(command)); + logger.info("Relaying client command " + BinaryProtocol.findCommand(command)); // sending proxied packet to controller targetOutputStream.sendPacket(packet); } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index cc231aa94b..bf81caed5f 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -183,7 +183,7 @@ public class Backend implements Closeable { applications.add(applicationConnectionState); } - BinaryProtocolProxy.runProxy(state.getStream(), applicationClientStream); + BinaryProtocolProxy.runProxy(logger, state.getStream(), applicationClientStream); } catch (Throwable e) { logger.info("Application Connector: Got error " + e); From d7f9a2b81f9ae30ea9922e7c784b6e980923277a Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 00:52:33 -0400 Subject: [PATCH 022/182] proxy progress - I am getting tired :( --- .../java/com/rusefi/LocalApplicationProxy.java | 3 +-- .../src/main/java/com/rusefi/io/ByteReader.java | 4 +++- .../main/java/com/rusefi/io/tcp/TcpIoStream.java | 14 +++++++++++++- .../java/com/rusefi/tools/online/HttpUtil.java | 15 +++++++++++---- .../java/com/rusefi/tools/online/ProxyClient.java | 4 ++-- .../src/com/rusefi/tools/online/Online.java | 2 +- .../src/main/java/com/rusefi/server/Backend.java | 3 ++- .../rusefi/server/JsonUserDetailsResolver.java | 4 ++-- 8 files changed, 35 insertions(+), 14 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java index 8f50b1fd65..ee5e2f16a3 100644 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java @@ -31,8 +31,7 @@ public class LocalApplicationProxy { * @param jsonHttpPort */ public static ServerHolder startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort) throws IOException { - HttpResponse httpResponse = HttpUtil.executeGet(logger,ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); - String version = HttpUtil.getResponse(httpResponse); + String version = HttpUtil.executeGet(logger,ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); logger.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); diff --git a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java index 07a2e25465..d121a1d40c 100644 --- a/java_console/io/src/main/java/com/rusefi/io/ByteReader.java +++ b/java_console/io/src/main/java/com/rusefi/io/ByteReader.java @@ -3,6 +3,7 @@ package com.rusefi.io; import com.opensr5.Logger; import com.opensr5.io.DataListener; import com.rusefi.config.generated.Fields; +import com.rusefi.io.tcp.TcpIoStream; import java.io.IOException; import java.util.Arrays; @@ -10,7 +11,7 @@ import java.util.concurrent.Executor; import java.util.concurrent.Executors; public interface ByteReader { - static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, Logger logger) { + static void runReaderLoop(String loggingPrefix, DataListener listener, ByteReader reader, Logger logger, TcpIoStream.DisconnectListener disconnectListener) { /** * Threading of the whole input/output does not look healthy at all! * @@ -35,6 +36,7 @@ public interface ByteReader { listener.onDataArrived(Arrays.copyOf(inputBuffer, result)); } catch (IOException e) { logger.error("TcpIoStream: End of connection " + e); + disconnectListener.onDisconnect(); return; } } diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java index 2eb96a4363..f1b4b00377 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/TcpIoStream.java @@ -23,6 +23,7 @@ public class TcpIoStream extends AbstractIoStream { private final OutputStream output; private final Logger logger; private final String loggingPrefix; + private final DisconnectListener disconnectListener; @NotNull private final Socket socket; private final IncomingDataBuffer dataBuffer; @@ -32,7 +33,12 @@ public class TcpIoStream extends AbstractIoStream { } public TcpIoStream(String loggingPrefix, Logger logger, Socket socket) throws IOException { + this(loggingPrefix, logger, socket, DisconnectListener.VOID); + } + + public TcpIoStream(String loggingPrefix, Logger logger, Socket socket, DisconnectListener disconnectListener) throws IOException { this.loggingPrefix = loggingPrefix; + this.disconnectListener = disconnectListener; if (socket == null) throw new NullPointerException("socket"); this.socket = socket; @@ -75,7 +81,13 @@ public class TcpIoStream extends AbstractIoStream { @Override public void setInputListener(final DataListener listener) { + ByteReader.runReaderLoop(loggingPrefix, listener, input::read, logger, disconnectListener); + } - ByteReader.runReaderLoop(loggingPrefix, listener, input::read, logger); + public interface DisconnectListener { + DisconnectListener VOID = () -> { + + }; + void onDisconnect(); } } diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java index 04476e7adb..f0bc5c2f51 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/HttpUtil.java @@ -26,8 +26,7 @@ public class HttpUtil { public static String RUSEFI_ONLINE_JSON_API_PREFIX = "https://rusefi.com/online/api.php?method="; - public static T getJsonResponse(HttpResponse response) throws IOException, ParseException { - String responseString = getResponse(response); + public static T getJsonResponse(String responseString) throws ParseException { JSONParser parser = new JSONParser(); return (T) parser.parse(responseString); @@ -40,7 +39,7 @@ public class HttpUtil { return responseString; } - public static HttpResponse executeGet(Logger logger, String url) throws IOException { + public static String executeGet(Logger logger, String url) throws IOException { HttpClient httpclient = new DefaultHttpClient(); HttpParams httpParameters = httpclient.getParams(); // HttpConnectionParams.setConnectionTimeout(httpParameters, CONNECTION_TIMEOUT); @@ -49,7 +48,15 @@ public class HttpUtil { HttpConnectionParams.setTcpNoDelay(httpParameters, true); logger.info("GET " + url); HttpGet httpget = new HttpGet(url); - return httpclient.execute(httpget); + + // in case of emergency + // -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog -Dorg.apache.commons.logging.simplelog.showdatetime=true -Dorg.apache.commons.logging.simplelog.log.org.apache.http=DEBUG -Dorg.apache.commons.logging.simplelog.log.org.apache.http.wire=ERROR + try { + HttpResponse httpResponse = httpclient.execute(httpget); + return HttpUtil.getResponse(httpResponse); + } finally { + httpget.releaseConnection(); + } } public static JSONObject parse(String jsonString) { diff --git a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java index b145623a0f..df392b5024 100644 --- a/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java +++ b/java_console/io/src/main/java/com/rusefi/tools/online/ProxyClient.java @@ -32,11 +32,11 @@ public class ProxyClient { @NotNull public static List getOnlineApplications(String url) throws IOException { - HttpResponse httpResponse = HttpUtil.executeGet(Logger.CONSOLE, url); + String responseString = HttpUtil.executeGet(Logger.CONSOLE, url); List userLists = new ArrayList<>(); try { - JSONArray array = HttpUtil.getJsonResponse(httpResponse); + JSONArray array = HttpUtil.getJsonResponse(responseString); for (int i = 0; i < array.size(); i++) { JSONObject element = (JSONObject) array.get(i); diff --git a/java_console/shared_ui/src/com/rusefi/tools/online/Online.java b/java_console/shared_ui/src/com/rusefi/tools/online/Online.java index 8c4bdd48ed..496227ed64 100644 --- a/java_console/shared_ui/src/com/rusefi/tools/online/Online.java +++ b/java_console/shared_ui/src/com/rusefi/tools/online/Online.java @@ -44,7 +44,7 @@ public class Online { System.out.println("response=" + response); System.out.println("code " + response.getStatusLine().getStatusCode()); - JSONObject object = HttpUtil.getJsonResponse(response); + JSONObject object = HttpUtil.getJsonResponse(HttpUtil.getResponse(response)); System.out.println("object=" + object); JSONArray info = (JSONArray) object.get("info"); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java index bf81caed5f..6759d01bd0 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/Backend.java @@ -68,7 +68,7 @@ public class Backend implements Closeable { public int serverPortForControllers; public Backend(UserDetailsResolver userDetailsResolver, int httpPort, Logger logger) { - this(userDetailsResolver, httpPort, logger, Timeouts.READ_IMAGE_TIMEOUT); + this(userDetailsResolver, httpPort, logger, 600 * SECOND); } public Backend(UserDetailsResolver userDetailsResolver, int httpPort, Logger logger, int applicationTimeout) { @@ -305,6 +305,7 @@ public class Backend implements Closeable { } for (ApplicationConnectionState inactiveClient : inactiveApplications) { + logger.error("Kicking out application " + inactiveClient); close(inactiveClient); } } diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java index a0e4387730..2b50771f50 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/server/JsonUserDetailsResolver.java @@ -15,8 +15,8 @@ public class JsonUserDetailsResolver implements UserDetailsResolver { public UserDetails apply(String authToken) { try { - HttpResponse response = HttpUtil.executeGet(Logger.CONSOLE,HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); - JSONObject json = HttpUtil.getJsonResponse(response); + String responseString = HttpUtil.executeGet(Logger.CONSOLE,HttpUtil.RUSEFI_ONLINE_JSON_API_PREFIX + "getUserByToken&rusefi_token=" + authToken); + JSONObject json = HttpUtil.getJsonResponse(responseString); System.out.println("String " + json); Object getUserByToken = json.get("getUserByToken"); if (getUserByToken instanceof String) { From 1701a221a4358ecdf608a53887a576da3d2c7a6f Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 00:59:32 -0400 Subject: [PATCH 023/182] proxy progress - I am getting tired :( --- .../java/com/rusefi/LocalApplicationProxy.java | 6 +++--- .../main/java/com/rusefi/tools/ConsoleTools.java | 2 +- .../com/rusefi/tools/NetworkConnectorStartup.java | 11 +++++++++-- .../src/test/java/com/rusefi/FullServerTest.java | 3 ++- .../test/java/com/rusefi/MockRusEfiDevice.java | 2 +- .../com/rusefi/proxy/BaseBroadcastingThread.java | 4 ++-- .../java/com/rusefi/proxy/NetworkConnector.java | 8 ++++---- .../main/java/com/rusefi/ts_plugin/RemoteTab.java | 15 +++++++++------ 8 files changed, 31 insertions(+), 20 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java index ee5e2f16a3..b74eda005f 100644 --- a/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java +++ b/java_console/io/src/main/java/com/rusefi/LocalApplicationProxy.java @@ -10,7 +10,6 @@ import com.rusefi.server.ApplicationRequest; import com.rusefi.server.rusEFISSLContext; import com.rusefi.tools.online.HttpUtil; import com.rusefi.tools.online.ProxyClient; -import org.apache.http.HttpResponse; import java.io.IOException; @@ -29,14 +28,15 @@ public class LocalApplicationProxy { * @param applicationRequest remote session we want to connect to * @param localApplicationPort local port we would bind for TunerStudio to connect to * @param jsonHttpPort + * @param disconnectListener */ - public static ServerHolder startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort) throws IOException { + public static ServerHolder startAndRun(Logger logger, int serverPortForRemoteUsers, ApplicationRequest applicationRequest, int localApplicationPort, int jsonHttpPort, TcpIoStream.DisconnectListener disconnectListener) throws IOException { String version = HttpUtil.executeGet(logger,ProxyClient.getHttpAddress(jsonHttpPort) + ProxyClient.VERSION_PATH); logger.info("Server says version=" + version); if (!version.contains(ProxyClient.BACKEND_VERSION)) throw new IOException("Unexpected backend version " + version + " while we want " + ProxyClient.BACKEND_VERSION); - IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", logger, rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers)); + IoStream authenticatorToProxyStream = new TcpIoStream("authenticatorToProxyStream ", logger, rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForRemoteUsers), disconnectListener); LocalApplicationProxy localApplicationProxy = new LocalApplicationProxy(logger, applicationRequest); logger.info("Pushing " + applicationRequest); localApplicationProxy.run(authenticatorToProxyStream); diff --git a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java index f9d2079e20..36a0d39b92 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/ConsoleTools.java @@ -63,7 +63,7 @@ public class ConsoleTools { registerTool("compile_fsio_file", ConsoleTools::runCompileTool, "Convert all lines from a file to RPN form."); registerTool("proxy_server", a -> BackendLauncher.start(), "NOT A USER TOOL"); - registerTool("network_connector", NetworkConnectorStartup::start, "Connect your rusEFI ECU to rusEFI Online"); + registerTool("network_connector", strings -> NetworkConnectorStartup.start(), "Connect your rusEFI ECU to rusEFI Online"); registerTool("network_authenticator", LocalApplicationProxy::start, "rusEFI Online Authenticator"); registerTool("print_auth_token", args -> printAuthToken(), "Print current rusEFI Online authentication token."); diff --git a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java index d51559bb9e..8a0bc3c3e5 100644 --- a/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java +++ b/java_console/ui/src/main/java/com/rusefi/tools/NetworkConnectorStartup.java @@ -2,6 +2,7 @@ package com.rusefi.tools; import com.rusefi.auth.AutoTokenUtil; import com.rusefi.autodetect.PortDetector; +import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; import com.rusefi.server.Backend; import com.rusefi.server.SessionDetails; @@ -10,7 +11,7 @@ import com.rusefi.ui.AuthTokenPanel; import java.io.IOException; public class NetworkConnectorStartup { - public static void start(String[] strings) throws IOException, InterruptedException { + public static void start() throws IOException, InterruptedException { String authToken = AuthTokenPanel.getAuthToken(); if (!AutoTokenUtil.isToken(authToken)) { System.err.println("Please configure authentication token using 'set_auth_token' command"); @@ -23,7 +24,13 @@ public class NetworkConnectorStartup { return; } - SessionDetails sessionDetails = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, Backend.SERVER_PORT_FOR_CONTROLLERS); + SessionDetails sessionDetails = NetworkConnector.runNetworkConnector(authToken, autoDetectedPort, Backend.SERVER_PORT_FOR_CONTROLLERS, new TcpIoStream.DisconnectListener() { + @Override + public void onDisconnect() { + System.err.println("Disconnect detected"); + System.exit(-1); + } + }); System.out.println("Running with " + sessionDetails.getOneTimeToken()); } } diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 7432f54066..385ddd2242 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -7,6 +7,7 @@ import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.generated.Fields; import com.rusefi.io.ConnectionStateListener; import com.rusefi.io.LinkManager; +import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.proxy.NetworkConnector; import com.rusefi.server.*; import org.junit.Before; @@ -74,7 +75,7 @@ public class FullServerTest { // start "rusEFI network connector" to connect controller with backend since in real life controller has only local serial port it does not have network - SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers); + SessionDetails deviceSessionDetails = NetworkConnector.runNetworkConnector(MockRusEfiDevice.TEST_TOKEN_1, TestHelper.LOCALHOST + ":" + controllerPort, serverPortForControllers, TcpIoStream.DisconnectListener.VOID); assertTrue("controllerRegistered", controllerRegistered.await(READ_IMAGE_TIMEOUT, TimeUnit.MILLISECONDS)); diff --git a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java index c640cd9d2a..3219ec5b06 100644 --- a/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java +++ b/java_console/ui/src/test/java/com/rusefi/MockRusEfiDevice.java @@ -35,7 +35,7 @@ public class MockRusEfiDevice { Socket socket = rusEFISSLContext.getSSLSocket(LOCALHOST, serverPort); BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(socket, sessionDetails, - logger) { + logger, TcpIoStream.DisconnectListener.VOID) { @Override protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { super.handleCommand(packet, stream); diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java index 3776b7b393..27fb3ae75c 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/BaseBroadcastingThread.java @@ -21,8 +21,8 @@ public class BaseBroadcastingThread { private final Thread thread; @SuppressWarnings("InfiniteLoopStatement") - public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, Logger logger) throws IOException { - TcpIoStream stream = new TcpIoStream("[broadcast] ", logger, socket); + public BaseBroadcastingThread(Socket socket, SessionDetails sessionDetails, Logger logger, TcpIoStream.DisconnectListener disconnectListener) throws IOException { + TcpIoStream stream = new TcpIoStream("[broadcast] ", logger, socket, disconnectListener); IncomingDataBuffer in = stream.getDataBuffer(); thread = BASE_BROADCASTING_THREAD.newThread(() -> { diff --git a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java index 9f1cfb639e..9e7b591eca 100644 --- a/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java +++ b/java_tools/proxy_server/src/main/java/com/rusefi/proxy/NetworkConnector.java @@ -24,7 +24,7 @@ import java.util.concurrent.TimeUnit; * Connector between rusEFI ECU and rusEFI server */ public class NetworkConnector { - public static SessionDetails runNetworkConnector(String authToken, String controllerPort, int serverPortForControllers) throws InterruptedException, IOException { + public static SessionDetails runNetworkConnector(String authToken, String controllerPort, int serverPortForControllers, TcpIoStream.DisconnectListener disconnectListener) throws InterruptedException, IOException { LinkManager linkManager = new LinkManager(Logger.CONSOLE) .setCompositeLogicEnabled(false) .setNeedPullData(false); @@ -49,11 +49,11 @@ public class NetworkConnector { return null; } - return runNetworkConnector(serverPortForControllers, linkManager, Logger.CONSOLE, authToken); + return runNetworkConnector(serverPortForControllers, linkManager, Logger.CONSOLE, authToken, disconnectListener); } @NotNull - private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, final Logger logger, String authToken) throws IOException { + private static SessionDetails runNetworkConnector(int serverPortForControllers, LinkManager linkManager, final Logger logger, String authToken, final TcpIoStream.DisconnectListener disconnectListener) throws IOException { IoStream targetEcuSocket = linkManager.getConnector().getBinaryProtocol().getStream(); HelloCommand.send(targetEcuSocket, logger); String helloResponse = HelloCommand.getHelloResponse(targetEcuSocket.getDataBuffer(), logger); @@ -71,7 +71,7 @@ public class NetworkConnector { BaseBroadcastingThread baseBroadcastingThread = new BaseBroadcastingThread(rusEFISSLContext.getSSLSocket(HttpUtil.RUSEFI_PROXY_HOSTNAME, serverPortForControllers), deviceSessionDetails, - logger) { + logger, disconnectListener) { @Override protected void handleCommand(BinaryProtocolServer.Packet packet, TcpIoStream stream) throws IOException { super.handleCommand(packet, stream); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index 386174d0df..d79277c053 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -112,9 +112,7 @@ public class RemoteTab { JButton connect = new JButton("Connect"); connect.addActionListener(event -> { - list.removeAll(); - list.add(new JLabel("Connecting to " + publicSession.getUserDetails().getUserName())); - AutoupdateUtil.trueLayout(list); + setStatus("Connecting to " + publicSession.getUserDetails().getUserName()); new Thread(new Runnable() { @Override @@ -131,6 +129,12 @@ public class RemoteTab { return userPanel; } + private void setStatus(String text) { + list.removeAll(); + list.add(new JLabel(text)); + AutoupdateUtil.trueLayout(list); + } + private void runAuthenticator(PublicSession publicSession, ControllerInfo controllerInfo) { SessionDetails sessionDetails = new SessionDetails(controllerInfo, AuthTokenPanel.getAuthToken(), Integer.parseInt(oneTimePasswordControl.getText())); @@ -142,10 +146,9 @@ public class RemoteTab { LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, applicationRequest, Integer.parseInt(getLocalPort()), - HttpUtil.PROXY_JSON_API_HTTP_PORT); + HttpUtil.PROXY_JSON_API_HTTP_PORT, () -> SwingUtilities.invokeLater(() -> setStatus("Disconnected"))); } catch (IOException e) { - // todo: proper handling - e.printStackTrace(); + setStatus("IO error: " + e); } } From 260c7a77862649b89c29c20116d9e549f125d8db Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 01:15:54 -0400 Subject: [PATCH 024/182] proxy progress - I am getting tired :( --- .../rusefi/io/tcp/BinaryProtocolServer.java | 21 +++++++++++-------- .../test/java/com/rusefi/FullServerTest.java | 2 +- .../java/com/rusefi/ts_plugin/RemoteTab.java | 19 ++++++++++++++--- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java index 55115aeb9d..ce3840f72b 100644 --- a/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/main/java/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -76,7 +76,8 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { /** * Starts a new thread - * @param port server port to accept connections + * + * @param port server port to accept connections * @param threadName * @param socketRunnableFactory method to invoke on a new thread for each new client connection * @param logger @@ -101,15 +102,17 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { if (serverSocketCreationCallback != null) serverSocketCreationCallback.onResult(null); Runnable runnable = () -> { - try { - while (!holder.isClosed()) { - // Wait for a connection - final Socket clientSocket = serverSocket.accept(); - logger.info("Binary protocol proxy port connection"); - new Thread(clientSocketRunnableFactory.apply(clientSocket), "proxy connection").start(); + while (!holder.isClosed()) { + // Wait for a connection + final Socket clientSocket; + try { + clientSocket = serverSocket.accept(); + } catch (IOException e) { + logger.info("Client socket closed right away" + e); + continue; } - } catch (IOException e) { - throw new IllegalStateException(e); + logger.info("Binary protocol proxy port connection"); + new Thread(clientSocketRunnableFactory.apply(clientSocket), "proxy connection").start(); } }; new Thread(runnable, threadName).start(); diff --git a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java index 385ddd2242..0053d29f12 100644 --- a/java_console/ui/src/test/java/com/rusefi/FullServerTest.java +++ b/java_console/ui/src/test/java/com/rusefi/FullServerTest.java @@ -84,7 +84,7 @@ public class FullServerTest { // start authenticator int authenticatorPort = 7004; // local port on which authenticator accepts connections from Tuner Studio - LocalApplicationProxy.startAndRun(logger, serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort); + LocalApplicationProxy.startAndRun(logger, serverPortForRemoteUsers, applicationRequest, authenticatorPort, httpPort, TcpIoStream.DisconnectListener.VOID); CountDownLatch connectionEstablishedCountDownLatch = new CountDownLatch(1); diff --git a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java index d79277c053..66c5c52d4e 100644 --- a/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java +++ b/java_tools/ts_plugin/src/main/java/com/rusefi/ts_plugin/RemoteTab.java @@ -5,6 +5,8 @@ import com.rusefi.LocalApplicationProxy; import com.rusefi.NamedThreadFactory; import com.rusefi.SignatureHelper; import com.rusefi.autoupdate.AutoupdateUtil; +import com.rusefi.io.tcp.ServerHolder; +import com.rusefi.io.tcp.TcpIoStream; import com.rusefi.server.ApplicationRequest; import com.rusefi.server.ControllerInfo; import com.rusefi.server.SessionDetails; @@ -21,6 +23,7 @@ import java.io.IOException; import java.util.List; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicReference; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; @@ -72,7 +75,7 @@ public class RemoteTab { } private String getLocalPort() { - return getConfig().getRoot().getProperty(APPLICATION_PORT, "8100"); + return getConfig().getRoot().getProperty(APPLICATION_PORT, "29001"); } private void requestListDownload() { @@ -142,11 +145,21 @@ public class RemoteTab { ApplicationRequest applicationRequest = new ApplicationRequest(sessionDetails, publicSession.getUserDetails().getUserId()); try { - LocalApplicationProxy.startAndRun(Logger.CONSOLE, + AtomicReference serverHolderAtomicReference = new AtomicReference<>(); + + TcpIoStream.DisconnectListener disconnectListener = () -> SwingUtilities.invokeLater(() -> { + setStatus("Disconnected"); + ServerHolder serverHolder = serverHolderAtomicReference.get(); + if (serverHolder != null) + serverHolder.close(); + }); + + ServerHolder serverHolder = LocalApplicationProxy.startAndRun(Logger.CONSOLE, LocalApplicationProxy.SERVER_PORT_FOR_APPLICATIONS, applicationRequest, Integer.parseInt(getLocalPort()), - HttpUtil.PROXY_JSON_API_HTTP_PORT, () -> SwingUtilities.invokeLater(() -> setStatus("Disconnected"))); + HttpUtil.PROXY_JSON_API_HTTP_PORT, disconnectListener); + serverHolderAtomicReference.set(serverHolder); } catch (IOException e) { setStatus("IO error: " + e); } From e1aa86a64014a742958075e3b816cf329926cf81 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 24 Jul 2020 11:30:43 -0400 Subject: [PATCH 025/182] getting on the needle --- java_console/logging-api/build.gradle | 8 + .../devexperts/logging/DefaultLogging.java | 150 ++ .../logging/DxFeedPatternLayout.java | 114 ++ .../com/devexperts/logging/Log4j2Logging.java | 187 +++ .../com/devexperts/logging/LogFormatter.java | 185 +++ .../java/com/devexperts/logging/Logging.java | 235 +++ .../logging/ThreadNameFormatter.java | 179 +++ .../com/devexperts/logging/TraceLogging.java | 146 ++ .../java/com/devexperts/logging/package.html | 16 + .../util/AbstractConcurrentSet.java | 221 +++ .../java/com/devexperts/util/IndexedSet.java | 1407 +++++++++++++++++ .../com/devexperts/util/IndexedSetStats.java | 69 + .../java/com/devexperts/util/Indexer.java | 110 ++ .../com/devexperts/util/IndexerFunction.java | 354 +++++ .../com/devexperts/util/IntComparator.java | 233 +++ .../com/devexperts/util/LongComparator.java | 233 +++ .../java/com/devexperts/util/QuickSort.java | 690 ++++++++ .../util/SynchronizedIndexedSet.java | 452 ++++++ .../java/com/devexperts/util/TimeUtil.java | 65 + 19 files changed, 5054 insertions(+) create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/DefaultLogging.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/Log4j2Logging.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/LogFormatter.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/Logging.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/ThreadNameFormatter.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/TraceLogging.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/logging/package.html create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/AbstractConcurrentSet.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/IndexedSet.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/IndexedSetStats.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/Indexer.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/IndexerFunction.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/IntComparator.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/LongComparator.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/QuickSort.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/SynchronizedIndexedSet.java create mode 100644 java_console/logging-api/src/main/java/com/devexperts/util/TimeUtil.java diff --git a/java_console/logging-api/build.gradle b/java_console/logging-api/build.gradle index c5fc4ba0d4..21aaaef2f2 100644 --- a/java_console/logging-api/build.gradle +++ b/java_console/logging-api/build.gradle @@ -1,3 +1,11 @@ plugins { id 'java' +} + +dependencies { + implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.13.3' + implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.13.3' + //implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2' + implementation group: 'com.google.code.findbugs', name: 'jsr305', version: '3.0.2' + } \ No newline at end of file diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/DefaultLogging.java b/java_console/logging-api/src/main/java/com/devexperts/logging/DefaultLogging.java new file mode 100644 index 0000000000..6d1b321bfd --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/DefaultLogging.java @@ -0,0 +1,150 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import java.io.IOException; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.logging.SimpleFormatter; + +/** + * Logging implementation that uses {@link java.util.logging} logging facilities. + */ +class DefaultLogging { + + Map configure() { + // Heuristically check if there was an attempt to manually configure logging + if (getProperty("java.util.logging.config.class", null) != null || + getProperty("java.util.logging.config.file", null) != null || + !hasDefaultHandlers(Logger.getLogger(""))) + { + return Collections.emptyMap(); // logging was already manually configured + } + return configureLogFile(getProperty(Logging.LOG_FILE_PROPERTY, null)); + } + + private boolean hasDefaultHandlers(Logger root) { + // Default configuration is 1 ConsoleHandler with SimpleFormatter and INFO level + Handler[] handlers = root.getHandlers(); + if (handlers.length != 1) + return false; + Handler handler = handlers[0]; + return handler.getClass() == ConsoleHandler.class && + handler.getFormatter().getClass() == SimpleFormatter.class && + handler.getLevel() == Level.INFO; + } + + Map configureLogFile(String log_file) { + Logger root = Logger.getLogger(""); + Map errors = new LinkedHashMap(); + + try { + // Don't reset configuration. Retain all manually configured loggers, but + // reconfigure the root logger, which (as we checked) has a default configuration with + // 1 ConsoleHandler with SimpleFormatter and INFO level + for (Handler handler : root.getHandlers()) + root.removeHandler(handler); + + // configure "log" file or console + Handler handler = null; + if (log_file != null) { + try { + handler = new FileHandler(log_file, getLimit(Logging.LOG_MAX_FILE_SIZE_PROPERTY, errors), 2, true); + } catch (IOException e) { + errors.put(log_file, e); + } + } + if (handler == null) + handler = new ConsoleHandler(); + handler.setFormatter(new LogFormatter()); + handler.setLevel(Level.ALL); + root.addHandler(handler); + + // configure "err" file + String err_file = getProperty(Logging.ERR_FILE_PROPERTY, null); + if (err_file != null) { + try { + handler = new FileHandler(err_file, getLimit(Logging.ERR_MAX_FILE_SIZE_PROPERTY, errors), 2, true); + handler.setFormatter(new LogFormatter()); + handler.setLevel(Level.WARNING); + root.addHandler(handler); + } catch (IOException e) { + errors.put(err_file, e); + } + } + } catch (SecurityException e) { + // ignore -- does not have persmission to change configuration + } + return errors; + } + + Object getPeer(String name) { + return Logger.getLogger(name); + } + + String getName(Object peer) { + return ((Logger)peer).getName(); + } + + boolean debugEnabled(Object peer) { + return ((Logger)peer).isLoggable(Level.FINE); + } + + void setDebugEnabled(Object peer, boolean debug_enabled) { + ((Logger)peer).setLevel(debug_enabled ? Level.ALL : Level.INFO); + } + + void log(Object peer, Level level, String msg, Throwable t) { + ((Logger)peer).log(level, msg, t); + } + + // ========== Utility methods ========== + + /** + * Safely, from security point of view, gets system property. + */ + static String getProperty(String key, String def) { + // For applets we need to be ready for security exception in getProperty() call + try { + return System.getProperty(key, def); + } catch (SecurityException e) { + return def; + } + } + + static int getLimit(String key, Map errors) { + String value = getProperty(key, Logging.DEFAULT_MAX_FILE_SIZE).trim(); + int multiplier = 1; + if (value.endsWith("K") || value.endsWith("k")) { + multiplier = 1024; + value = value.substring(0, value.length() - 1); + } else if (value.endsWith("M") || value.endsWith("m")) { + multiplier = 1024 * 1024; + value = value.substring(0, value.length() - 1); + } else if (value.endsWith("G") || value.endsWith("g")) { + multiplier = 1024 * 1024 * 1024; + value = value.substring(0, value.length() - 1); + } + try { + return Integer.valueOf(value) * multiplier; + } catch (NumberFormatException e) { + errors.put(key, e); + return 0; + } + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java b/java_console/logging-api/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java new file mode 100644 index 0000000000..2ab6e19f3f --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/DxFeedPatternLayout.java @@ -0,0 +1,114 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import org.apache.logging.log4j.core.Layout; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.DefaultConfiguration; +import org.apache.logging.log4j.core.config.Node; +import org.apache.logging.log4j.core.config.plugins.Plugin; +import org.apache.logging.log4j.core.config.plugins.PluginConfiguration; +import org.apache.logging.log4j.core.config.plugins.PluginFactory; +import org.apache.logging.log4j.core.layout.AbstractStringLayout; +import org.apache.logging.log4j.core.layout.ByteBufferDestination; +import org.apache.logging.log4j.core.layout.Encoder; +import org.apache.logging.log4j.core.pattern.MessagePatternConverter; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.nio.charset.Charset; +import java.util.Collections; +import java.util.Map; +import java.util.function.BiConsumer; + +/** + * Custom pattern layout for log4j2. Message formatting is delegated to {@link LogFormatter}. + */ +@SuppressWarnings("unused") //used by Log4j2 +@Plugin(name = "dxFeedPatternLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true) +public class DxFeedPatternLayout extends AbstractStringLayout { + private static final String LINE_SEP = DefaultLogging.getProperty("line.separator", "\n"); + + private final BiConsumer msgConsumer; + private final LogFormatter logFormatter; + + private DxFeedPatternLayout(Configuration configuration) { + super(configuration, Charset.defaultCharset(), null, null); + MessagePatternConverter messagePatternConverter = MessagePatternConverter.newInstance(configuration, null); + msgConsumer = (o, sb) -> { + // Format message + messagePatternConverter.format(o, sb); + if (o instanceof LogEvent) { + // Format exception + Throwable throwable = ((LogEvent)o).getThrown(); + if (throwable != null) { + sb.append(LINE_SEP); + StringWriter w = new StringWriter(); + throwable.printStackTrace(new PrintWriter(w)); + sb.append(w.getBuffer()); + // Remove extra line separator + sb.setLength(sb.length() - LINE_SEP.length()); + } + } + }; + logFormatter = new LogFormatter(); + } + + @Override + public String toSerializable(LogEvent event) { + StringBuilder text = getStringBuilder(); + String s = format(event, text).toString(); + trimToMaxSize(text); + return s; + } + + @Override + public void encode(LogEvent event, ByteBufferDestination destination) { + StringBuilder text = getStringBuilder(); + format(event, text); + Encoder encoder = getStringBuilderEncoder(); + encoder.encode(text, destination); + trimToMaxSize(text); + } + + private StringBuilder format(LogEvent event, StringBuilder text) { + char level = event.getLevel().name().charAt(0); + logFormatter.format(level, event.getTimeMillis(), event.getThreadName(), event.getLoggerName(), msgConsumer, + event, text); + return text; + } + + @Override + public Map getContentFormat() { + return Collections.emptyMap(); + } + + @Override + public String toString() { + return getContentFormat().toString(); + } + + public static DxFeedPatternLayout createDefaultLayout() { + return createDefaultLayout(null); + } + + /** + * Creates a DxFeedPatternLayout using the default options and the given configuration. Options include using UTF-8. + */ + @PluginFactory + public static DxFeedPatternLayout createDefaultLayout(@PluginConfiguration Configuration configuration) { + if (configuration == null) + configuration = new DefaultConfiguration(); + return new DxFeedPatternLayout(configuration); + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/Log4j2Logging.java b/java_console/logging-api/src/main/java/com/devexperts/logging/Log4j2Logging.java new file mode 100644 index 0000000000..a9da590cc0 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/Log4j2Logging.java @@ -0,0 +1,187 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.Appender; +import org.apache.logging.log4j.core.Logger; +import org.apache.logging.log4j.core.LoggerContext; +import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.apache.logging.log4j.core.appender.RollingFileAppender; +import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy; +import org.apache.logging.log4j.core.config.Configuration; +import org.apache.logging.log4j.core.config.NullConfiguration; +import org.apache.logging.log4j.core.filter.ThresholdFilter; +import org.apache.logging.log4j.core.layout.AbstractStringLayout; +import org.apache.logging.log4j.message.SimpleMessage; +import org.apache.logging.log4j.status.StatusLogger; + +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.logging.Level; + +import static org.apache.logging.log4j.Level.DEBUG; +import static org.apache.logging.log4j.Level.ERROR; +import static org.apache.logging.log4j.Level.INFO; +import static org.apache.logging.log4j.Level.OFF; +import static org.apache.logging.log4j.Level.WARN; +import static org.apache.logging.log4j.core.Filter.Result.ACCEPT; +import static org.apache.logging.log4j.core.Filter.Result.DENY; +import static org.apache.logging.log4j.core.config.ConfigurationSource.NULL_SOURCE; + +/** + * Logging implementation that uses log4j2 logging facilities. + */ +class Log4j2Logging extends DefaultLogging { + private static final String FQCN = Logging.class.getName() + "."; + + static { + StatusLogger.getLogger().setLevel(OFF); + } + + @Override + Map configure() { + LoggerContext ctx = (LoggerContext)LogManager.getContext(false); + if (ctx.getConfiguration().getConfigurationSource() != NULL_SOURCE) + return Collections.emptyMap(); // do nothing since log4j2 was already configured + return configureLogFile(getProperty(Logging.LOG_FILE_PROPERTY, null)); + } + + private static Map reconfigure(String logFile) { + LoggerContext ctx = (LoggerContext)LogManager.getContext(false); + Configuration config = ctx.getConfiguration(); + + Map errors = new LinkedHashMap<>(); + config.getRootLogger().setLevel(DEBUG); + String errFile = getProperty(Logging.ERR_FILE_PROPERTY, null); + for (Map.Entry entry : config.getRootLogger().getAppenders().entrySet()) { + entry.getValue().stop(); + // Safe to delete here since config.getRootLogger().getAppenders() returns new map + config.getRootLogger().removeAppender(entry.getKey()); + } + + Appender appender = null; + if (logFile != null) { + try { + appender = createFileAppender("common", logFile, Logging.LOG_MAX_FILE_SIZE_PROPERTY, errors); + } catch (Exception e) { + errors.put(logFile, e); + } + } + + if (appender == null) + appender = ConsoleAppender.newBuilder() + .withName("common") + .withLayout(getDetailedLayout()) + .setTarget(ConsoleAppender.Target.SYSTEM_OUT) + .build(); + + config.getRootLogger().addAppender(appender, DEBUG, + errFile == null ? null : ThresholdFilter.createFilter(WARN, DENY, ACCEPT)); + + if (errFile != null) { + try { + Appender errAppender = createFileAppender("error", errFile, Logging.ERR_MAX_FILE_SIZE_PROPERTY, errors); + config.getRootLogger().addAppender(errAppender, WARN, ThresholdFilter.createFilter(WARN, ACCEPT, DENY)); + } catch (Exception e) { + errors.put(errFile, e); + } + } + ctx.updateLoggers(); + return errors; + } + + private static AbstractStringLayout getDetailedLayout() { + return DxFeedPatternLayout.createDefaultLayout(null); + } + + private static RollingFileAppender createFileAppender(String name, String logFile, String maxSizeKey, + Map errors) + { + RollingFileAppender.Builder builder = RollingFileAppender.newBuilder(); + builder.setConfiguration(new NullConfiguration()); + builder.withName(name); + builder.withLayout(getDetailedLayout()); + builder.withFileName(logFile); + builder.withFilePattern(logFile); + builder.withAppend(true); + builder.withImmediateFlush(true); + + int limit = getLimit(maxSizeKey, errors); + if (limit == 0) + limit = 900 * 1024 * 1024; // Default in Logging.DEFAULT_MAX_FILE_SIZE + builder.withPolicy(SizeBasedTriggeringPolicy.createPolicy(Integer.toString(limit))); + + return builder.build(); + } + + @Override + Map configureLogFile(String logFile) { + return reconfigure(logFile); + } + + @Override + Object getPeer(String name) { + return LogManager.getLogger(name); + } + + @Override + String getName(Object peer) { + return ((Logger)peer).getName(); + } + + @Override + boolean debugEnabled(Object peer) { + return ((Logger)peer).isDebugEnabled(); + } + + @Override + void setDebugEnabled(Object peer, boolean debugEnabled) { + ((Logger)peer).setLevel(debugEnabled ? DEBUG : INFO); + } + + @Override + void log(Object peer, Level level, String msg, Throwable t) { + org.apache.logging.log4j.Level priority; + if (level.intValue() <= Level.FINE.intValue()) + priority = DEBUG; + else if (level.intValue() <= Level.INFO.intValue()) + priority = INFO; + else if (level.intValue() <= Level.WARNING.intValue()) + priority = WARN; + else + priority = ERROR; + + if (!((Logger)peer).isEnabled(priority)) + return; + + // Before calling log4j logger we must clear "interrupted" flag from current thread. + // If this flag is "true", log4j will log error in 1 appender only (and probably clear the flag). + // We will re-establish "interrupted" flag later. + boolean interrupted = Thread.interrupted(); + try { + ((Logger)peer).logMessage(FQCN, priority, null, new SimpleMessage(msg == null ? "" : msg), t); + } catch (Exception e) { + System.err.println(new LogFormatter().format('E', System.currentTimeMillis(), + Thread.currentThread().getName(), "Log4j", e + " during logging of " + msg)); + if (!(e instanceof IllegalStateException) || e.getMessage() == null || + !e.getMessage().equals("Current state = FLUSHED, new state = CODING")) + { + e.printStackTrace(System.err); + } + } finally { + if (interrupted) + Thread.currentThread().interrupt(); + } + } +} diff --git a/java_console/logging-api/src/main/java/com/devexperts/logging/LogFormatter.java b/java_console/logging-api/src/main/java/com/devexperts/logging/LogFormatter.java new file mode 100644 index 0000000000..2c3eb86700 --- /dev/null +++ b/java_console/logging-api/src/main/java/com/devexperts/logging/LogFormatter.java @@ -0,0 +1,185 @@ +/* + * !++ + * QDS - Quick Data Signalling Library + * !- + * Copyright (C) 2002 - 2020 Devexperts LLC + * !- + * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + * If a copy of the MPL was not distributed with this file, You can obtain one at + * http://mozilla.org/MPL/2.0/. + * !__ + */ +package com.devexperts.logging; + +import com.devexperts.util.TimeUtil; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Arrays; +import java.util.Calendar; +import java.util.TimeZone; +import java.util.function.BiConsumer; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; +import javax.annotation.concurrent.ThreadSafe; + +/** + * Thread-safe formatter for log messages. + * It is used for formatting log4j, log4j2 and {@link java.util.logging} log messages. + * Performs conversion of thread names according to patterns specified in configuration file. + *

X%T1lj@V3vK6GtaThZ`^Rn6C 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