diff --git a/Tests/Mieming/client_esp32C3/client/.vscode/extensions.json b/Tests/Mieming/client_esp32C3/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/Tests/Mieming/client_esp32C3/client/.vscode/settings.json b/Tests/Mieming/client_esp32C3/client/.vscode/settings.json
deleted file mode 100644
index 85c4d1b958928f8e741f91d4b9a8a6453eb0570d..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/.vscode/settings.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-    "files.associations": {
-        "optional": "cpp",
-        "array": "cpp",
-        "atomic": "cpp",
-        "*.tcc": "cpp",
-        "cctype": "cpp",
-        "clocale": "cpp",
-        "cmath": "cpp",
-        "cstdarg": "cpp",
-        "cstddef": "cpp",
-        "cstdint": "cpp",
-        "cstdio": "cpp",
-        "cstdlib": "cpp",
-        "cstring": "cpp",
-        "ctime": "cpp",
-        "cwchar": "cpp",
-        "cwctype": "cpp",
-        "deque": "cpp",
-        "list": "cpp",
-        "unordered_map": "cpp",
-        "unordered_set": "cpp",
-        "vector": "cpp",
-        "exception": "cpp",
-        "algorithm": "cpp",
-        "functional": "cpp",
-        "iterator": "cpp",
-        "map": "cpp",
-        "memory": "cpp",
-        "memory_resource": "cpp",
-        "numeric": "cpp",
-        "random": "cpp",
-        "string": "cpp",
-        "string_view": "cpp",
-        "system_error": "cpp",
-        "tuple": "cpp",
-        "type_traits": "cpp",
-        "utility": "cpp",
-        "fstream": "cpp",
-        "initializer_list": "cpp",
-        "iomanip": "cpp",
-        "iosfwd": "cpp",
-        "iostream": "cpp",
-        "istream": "cpp",
-        "limits": "cpp",
-        "new": "cpp",
-        "ostream": "cpp",
-        "sstream": "cpp",
-        "stdexcept": "cpp",
-        "streambuf": "cpp",
-        "cinttypes": "cpp",
-        "typeinfo": "cpp"
-    }
-}
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/include/ForteSensor.hpp b/Tests/Mieming/client_esp32C3/client/include/ForteSensor.hpp
deleted file mode 100644
index add5a01d566ef5977eef3e0286d908c4b49fcb0b..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/include/ForteSensor.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-#include "Message.hpp"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-template <class T>
-class ForteSensor {
-  public:
-	virtual T readData() = 0;
-	virtual void setup() = 0;
-	virtual std::list<Message> buildMessages() = 0;
-	[[nodiscard]] virtual SensorInformation getSensorInformation() const = 0;
-	virtual ~ForteSensor() = default;
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/include/MeasurementData.hpp b/Tests/Mieming/client_esp32C3/client/include/MeasurementData.hpp
deleted file mode 100644
index 36bd5db75fbdb714dad723d67b92affd4d4fd189..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/include/MeasurementData.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Created by cynthya on 10/6/22.
-//
-
-#ifndef CLIENT_MEASUREMENTDATA_HPP
-#define CLIENT_MEASUREMENTDATA_HPP
-
-#include "ArduinoJson.h"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-#include <list>
-#include <optional>
-#include <string>
-#include <utility>
-class MeasurementData {
-  public:
-	MeasurementData(double value, std::optional<int> channel, std::optional<int> i2cAddress,
-	                std::string measurementType)
-	    : value(value), measurementType(std::move(measurementType)), channel(channel), i2cAddress(i2cAddress)
-	{
-	}
-
-	MeasurementData(double value, std::string measurementType)
-	    : value(value), measurementType(std::move(measurementType))
-	{
-	}
-
-	[[nodiscard]] double getValue() const { return value; }
-	[[nodiscard]] const std::string &getMeasurementType() const { return measurementType; }
-	[[nodiscard]] const std::optional<int> &getChannel() const { return channel; }
-	[[nodiscard]] const std::optional<int> &getI2CAddress() const { return i2cAddress; }
-
-  private:
-	double value;
-	std::string measurementType; // TODO: consider using an enum
-	std::optional<int> channel;
-	std::optional<int> i2cAddress;
-};
-#endif // CLIENT_MEASUREMENTDATA_HPP
diff --git a/Tests/Mieming/client_esp32C3/client/include/NoDataAvailableException.hpp b/Tests/Mieming/client_esp32C3/client/include/NoDataAvailableException.hpp
deleted file mode 100644
index 83c56973868a76a1dca7f49487bcdb6fd33e86d8..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/include/NoDataAvailableException.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-#include <exception>
-#include <iostream>
-
-struct NoDataAvailableException : public std::exception {
-	const char *what() const noexcept override { return "Sensor could not read data"; }
-};
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/include/Pinout.hpp b/Tests/Mieming/client_esp32C3/client/include/Pinout.hpp
deleted file mode 100644
index f277fd91b274caa1de127f0380ba75164dd9b707..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/include/Pinout.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-constexpr int I2C_SDA = 18;
-constexpr int I2C_SCL = 19;
-
-// TODO: IF THE BOARD CHANGES (I.E. ESPCAM MODULE), THESE HAVE TO BE CHANGED (EITHER COMPILE TIME FLAG OR IFDEF OR SMTH)
-
-#endif
diff --git a/Tests/Mieming/client_esp32C3/client/include/Protocol.hpp b/Tests/Mieming/client_esp32C3/client/include/Protocol.hpp
deleted file mode 100644
index 92270db81e4a54e525f2cd054a15a03e7ebade15..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/include/Protocol.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-// Created by zoe on 10/5/22.
-//
-
-#ifndef CLIENT_PROTOCOL_HPP
-#define CLIENT_PROTOCOL_HPP
-
-#include <map>
-enum class Protocol { I2C, RS485, Analog };
-
-// protocol to string
-const static std::map<Protocol, const char *> protocolToString = {
-    {Protocol::I2C, "I2C"}, {Protocol::RS485, "RS485"}, {Protocol::Analog, "ANALOG"}};
-
-#endif // CLIENT_PROTOCOL_HPP
diff --git a/Tests/Mieming/client_esp32C3/client/include/SensorInformation.hpp b/Tests/Mieming/client_esp32C3/client/include/SensorInformation.hpp
deleted file mode 100644
index 4b8af5d357534be81670b503790960a2781bc282..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/include/SensorInformation.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Created by cynthya on 10/6/22.
-//
-
-#ifndef CLIENT_SENSORINFORMATION_HPP
-#define CLIENT_SENSORINFORMATION_HPP
-
-#include "Protocol.hpp"
-#include <string>
-
-class SensorInformation {
-  public:
-	SensorInformation(std::string sensorName, Protocol protocol) : sensorName(std::move(sensorName)), protocol(protocol)
-	{
-	}
-
-	[[nodiscard]] const std::string &getSensorName() const { return sensorName; }
-	[[nodiscard]] Protocol getProtocol() const { return protocol; }
-
-  private:
-	std::string sensorName;
-	Protocol protocol;
-};
-
-#endif // CLIENT_SENSORINFORMATION_HPP
diff --git a/Tests/Mieming/client_esp32C3/client/lib/README b/Tests/Mieming/client_esp32C3/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/Tests/Mieming/client_esp32C3/client/lib/caching/src/ram_caching.cpp b/Tests/Mieming/client_esp32C3/client/lib/caching/src/ram_caching.cpp
deleted file mode 100644
index 641f9744f12e4b7755ea78e786fcf06448f627f6..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/caching/src/ram_caching.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "ram_caching.hpp"
-
-namespace RtcMemory{
-    // 2D array of 20 Strings with maxLength of 251
-    RTC_DATA_ATTR char storage[maxLength_][maxSize_];
-    RTC_DATA_ATTR int storedElements;
-    RTC_DATA_ATTR int headElement = 0;
-    RTC_DATA_ATTR int tailElement = 0;
-
-    static const char* TAG = "CACHING";
-
-
-    void store(std::string message){
-
-        // turn data into char array
-        const char* jsonString = message.c_str();
-    
-        // move head to new element
-        headElement = (headElement + 1) % maxSize_;
-        // apparently I am not allowed to copy to rtc mem
-        for(int i=0; i<maxLength_; i++){
-            storage[i][headElement] = jsonString[i];
-            if(jsonString[i] == '\0'){
-                break;
-            }
-        }
-        storedElements++;
-        ESP_LOGE(TAG, "Moved message to storage.");
-    }
-
-    String get_from_storage(){
-        // remove element pointed at by tail
-        String buf = "";
-        char current = '\0';
-        for(int i = 0; i<maxLength_; i++){
-            current = storage[i][tailElement];
-            buf += current;
-            if(current == '\0'){
-                break;
-            }
-        }
-        // move tail to next element
-        tailElement = (tailElement + 1) % maxSize_;
-        storedElements--;
-        ESP_LOGE(TAG, "Retrieved message from storage");
-        return buf;
-    }
-
-    bool is_full(){
-        return headElement == tailElement;
-    }
-
-    int stored_amount(){
-        return storedElements;
-    }
-}
diff --git a/Tests/Mieming/client_esp32C3/client/lib/caching/src/ram_caching.hpp b/Tests/Mieming/client_esp32C3/client/lib/caching/src/ram_caching.hpp
deleted file mode 100644
index c1a4ac57312afe9505b565b0ccfb1cf73f9175e9..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/caching/src/ram_caching.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _RAM_CACHE
-#define _RAM_CACHE
-#include "esp_log.h"
-#include <ESP32Time.h>
-
-#define maxSize_ 20
-#define maxLength_ 251
-
-namespace RtcMemory {
-    void store(std::string message);
-    String get_from_storage();
-    bool is_full();
-    int stored_amount();
-}
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/lib/deep_sleep/f_deep_sleep.cpp b/Tests/Mieming/client_esp32C3/client/lib/deep_sleep/f_deep_sleep.cpp
deleted file mode 100644
index c434f53c5728c4bb840c8ec19087f802f9c63ffe..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/deep_sleep/f_deep_sleep.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "f_deep_sleep.hpp"
-#include "esp32-hal-log.h"
-#include "esp_log.h"
-
-namespace DeepSleep {
-static const std::string TAG = "DEEP_SLEEP";
-
-
-void print_wakeup_reason()
-{
-	esp_sleep_wakeup_cause_t wakeup_reason;
-
-	wakeup_reason = esp_sleep_get_wakeup_cause();
-
-	switch (wakeup_reason) {
-	case ESP_SLEEP_WAKEUP_EXT0:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by external signal using RTC_IO");
-		break;
-	case ESP_SLEEP_WAKEUP_EXT1:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by external signal using RTC_CNTL");
-		break;
-	case ESP_SLEEP_WAKEUP_TIMER:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by timer");
-		break;
-	case ESP_SLEEP_WAKEUP_TOUCHPAD:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by touchpad");
-		break;
-	case ESP_SLEEP_WAKEUP_ULP:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by ULP program");
-		break;
-	default:
-		ESP_LOGD(TAG.c_str(), "Wakeup was not caused by deep sleep: %d\n", wakeup_reason);
-		break;
-	}
-}
-
-void deep_sleep(int time_in_sec)
-{
-	esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
-	esp_deep_sleep_start();
-}
-
-}; // namespace DeepSleep
diff --git a/Tests/Mieming/client_esp32C3/client/lib/deep_sleep/f_deep_sleep.hpp b/Tests/Mieming/client_esp32C3/client/lib/deep_sleep/f_deep_sleep.hpp
deleted file mode 100644
index 7a528c840b8dab363a1f1b65a917f007294317c7..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/deep_sleep/f_deep_sleep.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef F_DEEP_SLEEP_H
-#define F_DEEP_SLEEP_H
-
-#include <Arduino.h>
-
-namespace DeepSleep {
-// https://en.cppreference.com/w/cpp/language/storage_duration
-// When used in a declaration at namespace scope, it specifies internal linkage.
-// internal linkage. The variable can be referred to from all scopes in the current translation unit. All variables
-// which are declared at file scope have this linkage, including variables declared static at file scope.
-static RTC_DATA_ATTR int bootCount = 0;
-
-void deep_sleep(int time_to_sleep_in_seconds);
-void print_wakeup_reason();
-
-} // namespace DeepSleep
-
-#endif
diff --git a/Tests/Mieming/client_esp32C3/client/lib/dr26_analogue/dr26.cpp b/Tests/Mieming/client_esp32C3/client/lib/dr26_analogue/dr26.cpp
deleted file mode 100644
index f41a4458a943d9aaf9845e4e4e2e44b1271868a2..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/dr26_analogue/dr26.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "dr26.hpp"
-
-void ForteDR26 ::setup()
-{
-	Wire.begin(6, 7);
-  //  ads.setGain(GAIN_ONE);
-  //  ads.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-
-
-    ads1.setGain(GAIN_ONE);
-    ads1.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-    delay(100);
-    channel=0;
-}
-
-float ForteDR26 ::readData()
-{
-	float volts=0;
-    for(int i=0; i<10; i++){
-        int16_t adc = 0;
-        float volt = 0;
-        try
-        {
-            adc = ads1.readADC_SingleEnded(channel);
-            volt = ads1.computeVolts(adc);
-        }
-        catch(NoDataAvailableException& e)
-        {
-	        throw NoDataAvailableException();  //propagate exception
-        }
-        volts += volt;
-    }
-
-    volts /= 10;
-    return volts;
-}
-
-// The following functions change the ADC input range: be careful
-// to never to exceed VDD +0.3V max, or to exceed the upper and
-// lower limits if you adjust the input range.
-// SETTING THE GAIN VALUE INCORRECTLY MAY DESTROY THE ADC!
-// The maximum output of the dendrometer is 2.5V, and so a gain of
-// one (max 4.096V) or two (max 2.048V) is optimal. Changing the gain
-// changes the accuracy of the sensor: higher gain gives a higher
-// precision but a smaller range.
-//
-// GAIN_TWOTHIRDS  // 2/3x gain +/- 6.144V  1 bit = 0.1875mV (default)
-// GAIN_ONE        // 1x gain   +/- 4.096V  1 bit = 0.125mV
-// GAIN_TWO        // 2x gain   +/- 2.048V  1 bit = 0.0625mV
-// GAIN_FOUR       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
-// GAIN_EIGHT      // 8x gain   +/- 0.512V  1 bit = 0.015625mV
-// GAIN_SIXTEEN    // 16x gain  +/- 0.256V  1 bit = 0.0078125mV
-void ForteDR26 ::changeGain(adsGain_t gain)
-{
-	ads1.setGain(gain);
-}
-
-void ForteDR26 ::setChannel(int c)
-{
-	channel=c;
-}
-std::list<Message> ForteDR26::buildMessages()
-{
-	std::list<Message> messages;
-	float data = readData();
-	MeasurementData IncrementData{data, 0, {}, "CIRCUMFERENCE_INCREMENT"};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
-}
-
-std::list<Message> ForteDR26::buildMessages(int channel,std::string measurementType)
-{
-	std::list<Message> messages;
-	float data = readData();
-	MeasurementData IncrementData{data, channel, {}, measurementType};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
-}
-SensorInformation ForteDR26::getSensorInformation() const
-{
-	return sensorInformation;
-}
-
-
-Adafruit_ADS1115 ForteDR26::ads1=ads1;
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/lib/dr26_analogue/dr26.hpp b/Tests/Mieming/client_esp32C3/client/lib/dr26_analogue/dr26.hpp
deleted file mode 100644
index b60c0997ec0180bc9e145d2588387022f9999f2a..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/dr26_analogue/dr26.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef _DR26
-#define _DR26
-
-#include "Adafruit_ADS1X15.h"
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "esp_log.h"
-#include <Wire.h>
-#include "NoDataAvailableException.hpp"
-
-class ForteDR26 : public ForteSensor<float> {
-  public:
-	void setup() override;
-	float readData() override;
-	void changeGain(adsGain_t gain);
-	void setChannel(int channel);
-	std::list<Message> buildMessages() override;
-	std::list<Message> buildMessages(int channel,std::string mesurment_type);
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-	static Adafruit_ADS1115 ads1;
-
-  private:
-	Adafruit_ADS1115 ads;
-	const SensorInformation sensorInformation{"DR26", Protocol::Analog};
-	int channel;
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/lib/drs26_digital/drs26.cpp b/Tests/Mieming/client_esp32C3/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 5c21f3a98e01d665c38a879fb23f37217b39e8f4..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <drs26.hpp>
-
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck
-*/
-
-void ForteDRS26 ::setup()
-{
-	drs26.begin(4);
-}
-
-out_data_drs26 ForteDRS26 ::readData()
-{
-	String sdiResponse = "";
-	String measurement_command =
-	    "1M!"; // The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is
-	           // specified as 1M!=Sebsir measurement request at adress 1
-	String data_command = "1D0!"; // and the followed data command 1D0! = Sensor data request at adress 1
-
-	drs26.sendCommand(measurement_command);
-	delay(1000);
-	drs26.sendCommand(data_command);
-
-	data = {-1, -1, -1};
-
-	while (drs26.available()) {
-		char next_character = drs26.read();
-		if ((next_character != '\n') && (next_character != '\r')) {
-			sdiResponse += next_character;
-			delay(10); // 1 character ~ 7.5ms
-		}
-	}
-
-	if (sdiResponse.length() > 1) {
-		data.id = sdiResponse.substring(0, 8).toInt();
-		data.circumferenceIncrement = sdiResponse.substring(9, 15).toFloat();
-		data.temperature = sdiResponse.substring(16, 22).toFloat();
-	}
-	return data;
-}
-
-std::list<Message> ForteDRS26 ::buildMessages()
-{
-	std::list<Message> messages;
-	MeasurementData circumferenceIncrementMeasurementData{
-	    data.circumferenceIncrement, 0, {}, measurementTypeToString.at(MeasurementType::CIRCUMFERENCE_INCREMENT)};
-	MeasurementData temperatureMeasurementData{
-	    data.temperature, 0, {}, measurementTypeToString.at(MeasurementType::TEMPERATURE)};
-
-	messages.emplace_back(Message{circumferenceIncrementMeasurementData, sensorInformation, 0});
-	messages.emplace_back(Message{temperatureMeasurementData, sensorInformation, 0});
-
-	ESP_LOGE(sensorInformation.getSensorName().c_str(), "test");
-	return messages;
-}
-SensorInformation ForteDRS26::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/client_esp32C3/client/lib/drs26_digital/drs26.hpp b/Tests/Mieming/client_esp32C3/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index 0d713ca66260895f63cdc1e2137ec4027294e8bd..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "Wire.h"
-#include "esp_log.h"
-#include <SDI12.h>
-#include <map>
-
-struct out_data_drs26 {
-	int id;
-	float circumferenceIncrement;
-	float temperature;
-};
-
-class ForteDRS26 : public ForteSensor<out_data_drs26> {
-  public:
-	void setup() override;
-	out_data_drs26 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	SDI12 drs26;
-	out_data_drs26 data;
-	const SensorInformation sensorInformation{"DRS26", Protocol::I2C};
-	enum class MeasurementType { TEMPERATURE, CIRCUMFERENCE_INCREMENT };
-
-	// enum to string
-	std::map<MeasurementType, const char *> measurementTypeToString = {
-	    {MeasurementType::TEMPERATURE, "TEMPERATURE"},
-	    {MeasurementType::CIRCUMFERENCE_INCREMENT, "CIRCUMFERENCE_INCREMENT"}};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/lib/espnow/src/ESPNow.cpp b/Tests/Mieming/client_esp32C3/client/lib/espnow/src/ESPNow.cpp
deleted file mode 100644
index 36f591578051891445785a23acff9258846d1dde..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/espnow/src/ESPNow.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-#include "ESPNow.hpp"
-
-static const char *TAG = "ESPNOW";
-
-uint8_t BROADCAST_MAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-esp_now_peer_info_t hostInfo;
-Preferences preferences;
-bool msg_recv = false;
-
-bool was_msg_received(){
-	if(msg_recv){
-		msg_recv = false;
-		return true;
-	}
-	return false;
-}
-
-void get_host_mac(uint8_t *destination)
-{
-	preferences.begin("config", true);
-	if (preferences.isKey("host")) {
-		preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
-	} else {
-		memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-		ESP_LOGE(TAG, "Backup MAC address used");
-	}
-	preferences.end();
-}
-
-esp_err_t add_host_to_peers(config received){
-	esp_now_peer_info_t newHost = {};
-	memset(&newHost, 0, sizeof(newHost));
-	memcpy(newHost.peer_addr, received.host, sizeof(received.host));
-	newHost.encrypt = false;
-	newHost.channel = 0;
-	return esp_now_add_peer(&newHost);
-}
-
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status)
-{
-	ESP_LOGE(TAG, "Message sent to");
-	for(int i=0; i<6; i++){
-		Serial.print(mac_addr[i], HEX);
-		Serial.print(":");
-	}
-	Serial.println();
-	// go to sleep
-}
-
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
-{
-	// is msg host -> yes -> set bool
-	// assume host change not happening, rare event
-	// => on host change, broadcast 
-	ESP_LOGE(TAG, "Message recieved");
-	preferences.begin("config", false);
-	config received_msg;
-	memcpy(&received_msg, incomingData, sizeof(received_msg)); // TODO: check for valid mac
-														  // all the esp32 macs so far use the same first 3(?) bytes so maybe use that	
-	switch (received_msg.type){
-		case dataAck:{
-			msg_recv = true;
-			Time::getInstance().setTime(
-			received_msg.epoch_seconds); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
-			Serial.println(Time::getInstance().getEpochSeconds());
-			if (!preferences.isKey("host")) {
-			preferences.putBytes("host", received_msg.host, sizeof(received_msg.host));
-			ESP_LOGI(TAG, "host MAC address saved to flash");
-
-			// add host to peers
-			add_host_to_peers(received_msg);
-			}
-		}
-		case hostChange:{
-			Time::getInstance().setTime(received_msg.epoch_seconds);
-			// delete old host
-			if(preferences.isKey("host")){
-				uint8_t old[6];
-				get_host_mac(old);
-				esp_now_del_peer(old);
-				preferences.putBytes("host", received_msg.host, sizeof(received_msg.host));
-			}
-			// add new host
-			add_host_to_peers(received_msg);
-		}
-		default:{
-			return;
-		}
-	}
-	preferences.end();
-}
-
-
-esp_err_t espnow_setup()
-{
-	esp_err_t result;
-	WiFi.mode(WIFI_STA);
-	result = esp_now_init();
-	if (result != ESP_OK) {
-		// initialization failed
-		return result; // not sure about this
-	}
-
-	get_host_mac(hostInfo.peer_addr); // check if there is a host saved in flash mem, broadcast otherwise
-
-	hostInfo.channel = 0;
-
-	// TODO: PMK is used to encrypt LMK with the AES-128 algorithm. Call esp_now_set_pmk() to set PMK. If PMK is not
-	// set, a default PMK will be used.
-	// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_now.html
-	hostInfo.encrypt = false;
-	esp_now_add_peer(&hostInfo);
-
-	preferences.clear();
-	esp_now_register_recv_cb(on_data_recv);
-	esp_now_register_send_cb(on_data_sent);
-
-	return ESP_OK;
-}
diff --git a/Tests/Mieming/client_esp32C3/client/lib/ina219/ina219.cpp b/Tests/Mieming/client_esp32C3/client/lib/ina219/ina219.cpp
deleted file mode 100644
index def6a9d73acefe00e1a160a1c3fc2ba64ab2099d..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "ina219.hpp"
-
-void ForteINA219 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!ina219.init()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getSensorName().c_str(), "Initialization failed");
-		return;
-	}
-}
-
-out_data_ina219 ForteINA219 ::readData()
-{
-	if (!ina219.getOverflow()) {
-		data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-		data.busVoltage_V = ina219.getBusVoltage_V();
-		data.current_mA = ina219.getCurrent_mA();
-		data.power_mW = ina219.getBusPower();
-		data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV / 1000);
-		data.ina219_overflow = ina219.getOverflow();
-
-		return data;
-	} else
-		return data;
-}
-
-std::list<Message> ForteINA219::buildMessages()
-{
-	throw "Not yet implemented";
-}
-SensorInformation ForteINA219::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/client_esp32C3/client/lib/ina219/ina219.hpp b/Tests/Mieming/client_esp32C3/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 4a34d9591a325f9232f90ef61b4a74077fe1cf51..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "Wire.h"
-#include "esp_log.h"
-#include <INA219_WE.h>
-
-struct out_data_ina219 {
-	float shuntVoltage_mV = 0.0;
-	float loadVoltage_V = 0.0;
-	float busVoltage_V = 0.0;
-	float current_mA = 0.0;
-	float power_mW = 0.0;
-	bool ina219_overflow = false;
-};
-
-class ForteINA219 : public ForteSensor<out_data_ina219> {
-  public:
-	void setup() override;
-	out_data_ina219 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	INA219_WE ina219;
-	out_data_ina219 data;
-	const SensorInformation sensorInformation{"INA219", Protocol::I2C};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/lib/scd30/scd30.cpp b/Tests/Mieming/client_esp32C3/client/lib/scd30/scd30.cpp
deleted file mode 100644
index 7cff381af4ac4034d955366bf571a89b7e551ddf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "scd30.hpp"
-
-void ForteSCD30 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!airSensor.begin()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getSensorName().c_str(), "Initialization failed.");
-		return;
-	}
-}
-
-out_data_scd30 ForteSCD30 ::readData()
-{
-	if (airSensor.dataAvailable()) {
-		data.C02 = airSensor.getCO2();
-		data.Temperature = airSensor.getTemperature();
-		data.Humidity = airSensor.getHumidity();
-
-		return data;
-	}
-	throw NoDataAvailableException();
-}
-
-std::list<Message> ForteSCD30::buildMessages()
-{
-	std::list<Message> messages;
-
-	out_data_scd30 data = readData();
-	MeasurementData CO2Data{data.C02, 0, {}, "CO2"};
-	MeasurementData TempData{data.Temperature, 0, {}, "Temperature"};
-	MeasurementData HumidData{data.Humidity, 0, {}, "Humidity"};
-
-	messages.emplace_back(Message(CO2Data, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(TempData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(HumidData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	
-	return messages;
-}
-
-SensorInformation ForteSCD30::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/client_esp32C3/client/lib/scd30/scd30.hpp b/Tests/Mieming/client_esp32C3/client/lib/scd30/scd30.hpp
deleted file mode 100644
index db3e85500924db80ac3c0b5cd3698314564f6fd6..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "NoDataAvailableException.hpp"
-#include "Pinout.hpp"
-#include "esp_log.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <Wire.h>
-
-struct out_data_scd30 {
-	float C02;
-	float Temperature;
-	float Humidity;
-};
-
-class ForteSCD30 : public ForteSensor<out_data_scd30> {
-  public:
-	void setup() override;
-	out_data_scd30 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	SCD30 airSensor;
-	out_data_scd30 data;
-	const SensorInformation sensorInformation{"SCD30", Protocol::I2C};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/lib/time/src/Time.cpp b/Tests/Mieming/client_esp32C3/client/lib/time/src/Time.cpp
deleted file mode 100644
index 5cc3dbcdb7086eb1a27bcf98dccef1e49e78beaf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/time/src/Time.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "Time.hpp"
-
-#include <utility>
-void Time::setTime(long epoch, int ms)
-{
-	this->rtc.setTime(epoch, ms);
-}
-tm Time::getTimeStruct()
-{
-	return this->rtc.getTimeStruct();
-}
-String Time::getDateTime(bool mode)
-{
-	return this->rtc.getDateTime(mode);
-}
-String Time::getTime(String format)
-{
-	return this->rtc.getTime(std::move(format));
-}
-unsigned long Time::getEpochSeconds()
-{
-	return this->rtc.getEpoch();
-}
-
-long Time::getMillis()
-{
-	return this->rtc.getMillis();
-}
diff --git a/Tests/Mieming/client_esp32C3/client/lib/time/src/Time.hpp b/Tests/Mieming/client_esp32C3/client/lib/time/src/Time.hpp
deleted file mode 100644
index 783bdef40ead148d61271c7cf92aeabb8f3242d7..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/lib/time/src/Time.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef ESPTIME
-#define ESPTIME
-
-#include <ESP32Time.h>
-
-class Time {
-  public:
-	static Time &getInstance()
-	{
-		static Time instance; // Guaranteed to be destroyed.
-		                      // Instantiated on first use.
-		return instance;
-	}
-
-	/*!
-	@brief  set the internal RTC time
-	@param  epoch
-	        epoch time in seconds
-	@param  ms
-	        microseconds (optional)
-	*/
-	void setTime(long epoch, int ms = 0);
-
-	/*!
-	@brief  get the internal RTC time as a tm struct
-	*/
-	tm getTimeStruct();
-
-	/*!
-	@brief  get the time and date as an Arduino String object
-	@param  mode
-	        true = Long date format
-	        false = Short date format
-	*/
-	String getDateTime(bool mode);
-
-	/*!
-	@brief  get the time as an Arduino String object with the specified format
-	@param	format
-	        time format
-	        http://www.cplusplus.com/reference/ctime/strftime/
-	*/
-	String getTime(String format = "%H:%M:%S");
-
-	/*!
-	@brief  get the current epoch seconds as long
-	*/
-	unsigned long getEpochSeconds();
-
-	/*!
-	@brief  get the current milliseconds as long
-	*/
-	long getMillis();
-
-  private:
-	Time() {} // Constructor? (the {} brackets) are needed here.
-
-	ESP32Time rtc = ESP32Time{};
-
-	// C++ 11
-	// =======
-	// We can use the better technique of deleting the methods
-	// we don't want.
-  public:
-	Time(Time const &) = delete;
-	void operator=(Time const &) = delete;
-
-	// Note: Scott Meyers mentions in his Effective Modern
-	//       C++ book, that deleted functions should generally
-	//       be public as it results in better error messages
-	//       due to the compilers behavior to check accessibility
-	//       before deleted status
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/platformio.ini b/Tests/Mieming/client_esp32C3/client/platformio.ini
deleted file mode 100644
index 19ee957dceb9496815c39ad024625a57d06ce6d1..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/platformio.ini
+++ /dev/null
@@ -1,35 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-monitor_speed = 115200
-; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6
-; we use c++17 features (i.e. optionals in ClientDataPackage.hpp)
-build_flags = 
-	-I include
-	-DCORE_DEBUG_LEVEL=5
-	-std=gnu++17
-build_unflags = -std=gnu++11
-monitor_port = /dev/ttyUSB0
-upload_port = /dev/ttyUSB0
-lib_deps =
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	adafruit/Adafruit ADS1X15@^2.4.0
-	wollewald/INA219_WE@^1.3.1
-	adafruit/Adafruit BusIO@^1.13.2
-	Adafruit_I2CDevice
-	SPI
-	envirodiy/SDI-12@^2.1.4
-	fbiego/ESP32Time@^2.0.0
-	bblanchon/ArduinoJson@^6.19.4
diff --git a/Tests/Mieming/client_esp32C3/client/src/main.cpp b/Tests/Mieming/client_esp32C3/client/src/main.cpp
deleted file mode 100644
index f4303c9b83258599091b98c1a3e6c20091aec328..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_esp32C3/client/src/main.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-#include "../lib/dr26_analogue/dr26.hpp"
-#include "NoDataAvailableException.hpp"
-#include "esp_log.h"
-#include "f_deep_sleep.hpp"
-#include <Arduino.h>
-#include <drs26.hpp>
-#include <ina219.hpp>
-#include <scd30.hpp>
-#include "ESPNow.hpp"
-// #include "esp32-hal-log.h"
-static const std::string TAG = "MAIN";
-
-
-ForteDR26 dr26_channel3;
-ForteDR26 dr26_channel1;
-ForteDR26 dr26_channel2;
-ForteDR26 dr26_channel0_power;
-
-void setup()
-{
-	Serial.begin(115200);
-	//Set the GPIO which conrtols the step up to OUTPUT
-	 gpio_set_direction(GPIO_NUM_3, GPIO_MODE_OUTPUT);
-	
-	
-
-
-	DeepSleep::print_wakeup_reason();
-	DeepSleep::bootCount++;
-	ESP_LOGD(TAG.c_str(), "Boot number: %d", DeepSleep::bootCount);
-
-gpio_set_level(GPIO_NUM_3, 1);
-	dr26_channel1.setup();
-	dr26_channel3.setChannel(3);
-	dr26_channel1.setChannel(1);
-	dr26_channel2.setChannel(2);
-	dr26_channel0_power.setChannel(0);
-gpio_set_level(GPIO_NUM_3, 0);
-
-	espnow_setup();
-	//	log_e("Setup complete.");
-}
-
-void loop()
-{
-gpio_set_level(GPIO_NUM_3, 1);	
-Serial.println("***********************1-DRS26 NOT YET CONNECTED**********************************");
-Serial.println(dr26_channel1.readData(),5);
-Serial.println("***********************2-DRS26**********************************");
-Serial.println(dr26_channel2.readData(),5);
-Serial.println("***********************3-DRS26 *********************************");
-Serial.println(dr26_channel3.readData(),5);
-
-
-Serial.println("***********************0-Voltage-Battery**********************************");
-dr26_channel3.changeGain(GAIN_TWOTHIRDS);
-Serial.println(dr26_channel0_power.readData(),5);
-
-
-
-	try {
-
-		auto messages = dr26_channel0_power.buildMessages(0,"Voltage-Battery");
-		
-		
-		for (const Message &message : messages) {
-			if(message.send() != ESP_OK){
-				RtcMemory::store(message.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message.getMessageAsMinifiedJsonString());
-			}
-		}
-		
-		dr26_channel3.changeGain(GAIN_ONE);
-		auto messages2=dr26_channel2.buildMessages(2,"CIRCUMFERENCE_INCREMENT");
-		
-		for (const Message &message2 : messages2) {
-			if(message2.send() != ESP_OK){
-				RtcMemory::store(message2.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message2.getMessageAsMinifiedJsonString());
-			}
-		}
-
-		auto messages3=dr26_channel3.buildMessages(3,"CIRCUMFERENCE_INCREMENT");
-
-		for (const Message &message3 : messages3) {
-			if(message3.send() != ESP_OK){
-				RtcMemory::store(message3.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message3.getMessageAsMinifiedJsonString());
-			}
-		}
-
-
-	} catch (const NoDataAvailableException &e) {
-		std::cerr << e.what() << '\n';
-	}
-	
-	gpio_set_level(GPIO_NUM_3, 0);
-	delay(5);
-	DeepSleep::deep_sleep(60);
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/.vscode/extensions.json b/Tests/Mieming/client_lowPower_esp32Wroom/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/.vscode/settings.json b/Tests/Mieming/client_lowPower_esp32Wroom/client/.vscode/settings.json
deleted file mode 100644
index 85c4d1b958928f8e741f91d4b9a8a6453eb0570d..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/.vscode/settings.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-    "files.associations": {
-        "optional": "cpp",
-        "array": "cpp",
-        "atomic": "cpp",
-        "*.tcc": "cpp",
-        "cctype": "cpp",
-        "clocale": "cpp",
-        "cmath": "cpp",
-        "cstdarg": "cpp",
-        "cstddef": "cpp",
-        "cstdint": "cpp",
-        "cstdio": "cpp",
-        "cstdlib": "cpp",
-        "cstring": "cpp",
-        "ctime": "cpp",
-        "cwchar": "cpp",
-        "cwctype": "cpp",
-        "deque": "cpp",
-        "list": "cpp",
-        "unordered_map": "cpp",
-        "unordered_set": "cpp",
-        "vector": "cpp",
-        "exception": "cpp",
-        "algorithm": "cpp",
-        "functional": "cpp",
-        "iterator": "cpp",
-        "map": "cpp",
-        "memory": "cpp",
-        "memory_resource": "cpp",
-        "numeric": "cpp",
-        "random": "cpp",
-        "string": "cpp",
-        "string_view": "cpp",
-        "system_error": "cpp",
-        "tuple": "cpp",
-        "type_traits": "cpp",
-        "utility": "cpp",
-        "fstream": "cpp",
-        "initializer_list": "cpp",
-        "iomanip": "cpp",
-        "iosfwd": "cpp",
-        "iostream": "cpp",
-        "istream": "cpp",
-        "limits": "cpp",
-        "new": "cpp",
-        "ostream": "cpp",
-        "sstream": "cpp",
-        "stdexcept": "cpp",
-        "streambuf": "cpp",
-        "cinttypes": "cpp",
-        "typeinfo": "cpp"
-    }
-}
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/ForteSensor.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/include/ForteSensor.hpp
deleted file mode 100644
index add5a01d566ef5977eef3e0286d908c4b49fcb0b..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/ForteSensor.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-#include "Message.hpp"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-template <class T>
-class ForteSensor {
-  public:
-	virtual T readData() = 0;
-	virtual void setup() = 0;
-	virtual std::list<Message> buildMessages() = 0;
-	[[nodiscard]] virtual SensorInformation getSensorInformation() const = 0;
-	virtual ~ForteSensor() = default;
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/MeasurementData.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/include/MeasurementData.hpp
deleted file mode 100644
index 36bd5db75fbdb714dad723d67b92affd4d4fd189..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/MeasurementData.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Created by cynthya on 10/6/22.
-//
-
-#ifndef CLIENT_MEASUREMENTDATA_HPP
-#define CLIENT_MEASUREMENTDATA_HPP
-
-#include "ArduinoJson.h"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-#include <list>
-#include <optional>
-#include <string>
-#include <utility>
-class MeasurementData {
-  public:
-	MeasurementData(double value, std::optional<int> channel, std::optional<int> i2cAddress,
-	                std::string measurementType)
-	    : value(value), measurementType(std::move(measurementType)), channel(channel), i2cAddress(i2cAddress)
-	{
-	}
-
-	MeasurementData(double value, std::string measurementType)
-	    : value(value), measurementType(std::move(measurementType))
-	{
-	}
-
-	[[nodiscard]] double getValue() const { return value; }
-	[[nodiscard]] const std::string &getMeasurementType() const { return measurementType; }
-	[[nodiscard]] const std::optional<int> &getChannel() const { return channel; }
-	[[nodiscard]] const std::optional<int> &getI2CAddress() const { return i2cAddress; }
-
-  private:
-	double value;
-	std::string measurementType; // TODO: consider using an enum
-	std::optional<int> channel;
-	std::optional<int> i2cAddress;
-};
-#endif // CLIENT_MEASUREMENTDATA_HPP
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/NoDataAvailableException.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/include/NoDataAvailableException.hpp
deleted file mode 100644
index 83c56973868a76a1dca7f49487bcdb6fd33e86d8..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/NoDataAvailableException.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-#include <exception>
-#include <iostream>
-
-struct NoDataAvailableException : public std::exception {
-	const char *what() const noexcept override { return "Sensor could not read data"; }
-};
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/Pinout.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/include/Pinout.hpp
deleted file mode 100644
index f277fd91b274caa1de127f0380ba75164dd9b707..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/Pinout.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-constexpr int I2C_SDA = 18;
-constexpr int I2C_SCL = 19;
-
-// TODO: IF THE BOARD CHANGES (I.E. ESPCAM MODULE), THESE HAVE TO BE CHANGED (EITHER COMPILE TIME FLAG OR IFDEF OR SMTH)
-
-#endif
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/Protocol.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/include/Protocol.hpp
deleted file mode 100644
index 92270db81e4a54e525f2cd054a15a03e7ebade15..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/Protocol.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-// Created by zoe on 10/5/22.
-//
-
-#ifndef CLIENT_PROTOCOL_HPP
-#define CLIENT_PROTOCOL_HPP
-
-#include <map>
-enum class Protocol { I2C, RS485, Analog };
-
-// protocol to string
-const static std::map<Protocol, const char *> protocolToString = {
-    {Protocol::I2C, "I2C"}, {Protocol::RS485, "RS485"}, {Protocol::Analog, "ANALOG"}};
-
-#endif // CLIENT_PROTOCOL_HPP
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/README b/Tests/Mieming/client_lowPower_esp32Wroom/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/SensorInformation.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/include/SensorInformation.hpp
deleted file mode 100644
index 4b8af5d357534be81670b503790960a2781bc282..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/include/SensorInformation.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Created by cynthya on 10/6/22.
-//
-
-#ifndef CLIENT_SENSORINFORMATION_HPP
-#define CLIENT_SENSORINFORMATION_HPP
-
-#include "Protocol.hpp"
-#include <string>
-
-class SensorInformation {
-  public:
-	SensorInformation(std::string sensorName, Protocol protocol) : sensorName(std::move(sensorName)), protocol(protocol)
-	{
-	}
-
-	[[nodiscard]] const std::string &getSensorName() const { return sensorName; }
-	[[nodiscard]] Protocol getProtocol() const { return protocol; }
-
-  private:
-	std::string sensorName;
-	Protocol protocol;
-};
-
-#endif // CLIENT_SENSORINFORMATION_HPP
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/README b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/caching/src/ram_caching.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/caching/src/ram_caching.cpp
deleted file mode 100644
index 641f9744f12e4b7755ea78e786fcf06448f627f6..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/caching/src/ram_caching.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "ram_caching.hpp"
-
-namespace RtcMemory{
-    // 2D array of 20 Strings with maxLength of 251
-    RTC_DATA_ATTR char storage[maxLength_][maxSize_];
-    RTC_DATA_ATTR int storedElements;
-    RTC_DATA_ATTR int headElement = 0;
-    RTC_DATA_ATTR int tailElement = 0;
-
-    static const char* TAG = "CACHING";
-
-
-    void store(std::string message){
-
-        // turn data into char array
-        const char* jsonString = message.c_str();
-    
-        // move head to new element
-        headElement = (headElement + 1) % maxSize_;
-        // apparently I am not allowed to copy to rtc mem
-        for(int i=0; i<maxLength_; i++){
-            storage[i][headElement] = jsonString[i];
-            if(jsonString[i] == '\0'){
-                break;
-            }
-        }
-        storedElements++;
-        ESP_LOGE(TAG, "Moved message to storage.");
-    }
-
-    String get_from_storage(){
-        // remove element pointed at by tail
-        String buf = "";
-        char current = '\0';
-        for(int i = 0; i<maxLength_; i++){
-            current = storage[i][tailElement];
-            buf += current;
-            if(current == '\0'){
-                break;
-            }
-        }
-        // move tail to next element
-        tailElement = (tailElement + 1) % maxSize_;
-        storedElements--;
-        ESP_LOGE(TAG, "Retrieved message from storage");
-        return buf;
-    }
-
-    bool is_full(){
-        return headElement == tailElement;
-    }
-
-    int stored_amount(){
-        return storedElements;
-    }
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/caching/src/ram_caching.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/caching/src/ram_caching.hpp
deleted file mode 100644
index c1a4ac57312afe9505b565b0ccfb1cf73f9175e9..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/caching/src/ram_caching.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _RAM_CACHE
-#define _RAM_CACHE
-#include "esp_log.h"
-#include <ESP32Time.h>
-
-#define maxSize_ 20
-#define maxLength_ 251
-
-namespace RtcMemory {
-    void store(std::string message);
-    String get_from_storage();
-    bool is_full();
-    int stored_amount();
-}
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.cpp
deleted file mode 100644
index c434f53c5728c4bb840c8ec19087f802f9c63ffe..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "f_deep_sleep.hpp"
-#include "esp32-hal-log.h"
-#include "esp_log.h"
-
-namespace DeepSleep {
-static const std::string TAG = "DEEP_SLEEP";
-
-
-void print_wakeup_reason()
-{
-	esp_sleep_wakeup_cause_t wakeup_reason;
-
-	wakeup_reason = esp_sleep_get_wakeup_cause();
-
-	switch (wakeup_reason) {
-	case ESP_SLEEP_WAKEUP_EXT0:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by external signal using RTC_IO");
-		break;
-	case ESP_SLEEP_WAKEUP_EXT1:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by external signal using RTC_CNTL");
-		break;
-	case ESP_SLEEP_WAKEUP_TIMER:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by timer");
-		break;
-	case ESP_SLEEP_WAKEUP_TOUCHPAD:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by touchpad");
-		break;
-	case ESP_SLEEP_WAKEUP_ULP:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by ULP program");
-		break;
-	default:
-		ESP_LOGD(TAG.c_str(), "Wakeup was not caused by deep sleep: %d\n", wakeup_reason);
-		break;
-	}
-}
-
-void deep_sleep(int time_in_sec)
-{
-	esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
-	esp_deep_sleep_start();
-}
-
-}; // namespace DeepSleep
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.hpp
deleted file mode 100644
index 7a528c840b8dab363a1f1b65a917f007294317c7..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef F_DEEP_SLEEP_H
-#define F_DEEP_SLEEP_H
-
-#include <Arduino.h>
-
-namespace DeepSleep {
-// https://en.cppreference.com/w/cpp/language/storage_duration
-// When used in a declaration at namespace scope, it specifies internal linkage.
-// internal linkage. The variable can be referred to from all scopes in the current translation unit. All variables
-// which are declared at file scope have this linkage, including variables declared static at file scope.
-static RTC_DATA_ATTR int bootCount = 0;
-
-void deep_sleep(int time_to_sleep_in_seconds);
-void print_wakeup_reason();
-
-} // namespace DeepSleep
-
-#endif
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/dr26_analogue/dr26.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/dr26_analogue/dr26.cpp
deleted file mode 100644
index f39dc49bc7fc79f03d39ead8c250b872fab9cbc8..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/dr26_analogue/dr26.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-#include "dr26.hpp"
-
-void ForteDR26 ::setup()
-{
-    pinMode(2,OUTPUT);
-	Wire.begin();
-  //  ads.setGain(GAIN_ONE);
-  //  ads.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-
-
-    ads1.setGain(GAIN_ONE);
-    ads1.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-    delay(100);
-    channel=0;
-}
-
-float ForteDR26 ::readData()
-{
-	float volts=0;
-    for(int i=0; i<10; i++){
-        int16_t adc = 0;
-        float volt = 0;
-        try
-        {
-            adc = ads1.readADC_SingleEnded(channel);
-            volt = ads1.computeVolts(adc);
-        }
-        catch(NoDataAvailableException& e)
-        {
-	        throw NoDataAvailableException();  //propagate exception
-        }
-        volts += volt;
-    }
-
-    volts /= 10;
-    return volts;
-}
-
-// The following functions change the ADC input range: be careful
-// to never to exceed VDD +0.3V max, or to exceed the upper and
-// lower limits if you adjust the input range.
-// SETTING THE GAIN VALUE INCORRECTLY MAY DESTROY THE ADC!
-// The maximum output of the dendrometer is 2.5V, and so a gain of
-// one (max 4.096V) or two (max 2.048V) is optimal. Changing the gain
-// changes the accuracy of the sensor: higher gain gives a higher
-// precision but a smaller range.
-//
-// GAIN_TWOTHIRDS  // 2/3x gain +/- 6.144V  1 bit = 0.1875mV (default)
-// GAIN_ONE        // 1x gain   +/- 4.096V  1 bit = 0.125mV
-// GAIN_TWO        // 2x gain   +/- 2.048V  1 bit = 0.0625mV
-// GAIN_FOUR       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
-// GAIN_EIGHT      // 8x gain   +/- 0.512V  1 bit = 0.015625mV
-// GAIN_SIXTEEN    // 16x gain  +/- 0.256V  1 bit = 0.0078125mV
-void ForteDR26 ::changeGain(adsGain_t gain)
-{
-	ads1.setGain(gain);
-}
-
-void ForteDR26 ::setChannel(int c)
-{
-	channel=c;
-}
-std::list<Message> ForteDR26::buildMessages()
-{
-	std::list<Message> messages;
-	float data = readData();
-	MeasurementData IncrementData{data, 0, {}, "CIRCUMFERENCE_INCREMENT"};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
-}
-
-std::list<Message> ForteDR26::buildMessages(int channel,std::string measurementType)
-{
-	std::list<Message> messages;
-	float data = readData();
-	MeasurementData IncrementData{data, channel, {}, measurementType};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
-}
-SensorInformation ForteDR26::getSensorInformation() const
-{
-	return sensorInformation;
-}
-
-
-Adafruit_ADS1115 ForteDR26::ads1=ads1;
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/dr26_analogue/dr26.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/dr26_analogue/dr26.hpp
deleted file mode 100644
index b60c0997ec0180bc9e145d2588387022f9999f2a..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/dr26_analogue/dr26.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef _DR26
-#define _DR26
-
-#include "Adafruit_ADS1X15.h"
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "esp_log.h"
-#include <Wire.h>
-#include "NoDataAvailableException.hpp"
-
-class ForteDR26 : public ForteSensor<float> {
-  public:
-	void setup() override;
-	float readData() override;
-	void changeGain(adsGain_t gain);
-	void setChannel(int channel);
-	std::list<Message> buildMessages() override;
-	std::list<Message> buildMessages(int channel,std::string mesurment_type);
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-	static Adafruit_ADS1115 ads1;
-
-  private:
-	Adafruit_ADS1115 ads;
-	const SensorInformation sensorInformation{"DR26", Protocol::Analog};
-	int channel;
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/drs26_digital/drs26.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 5c21f3a98e01d665c38a879fb23f37217b39e8f4..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <drs26.hpp>
-
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck
-*/
-
-void ForteDRS26 ::setup()
-{
-	drs26.begin(4);
-}
-
-out_data_drs26 ForteDRS26 ::readData()
-{
-	String sdiResponse = "";
-	String measurement_command =
-	    "1M!"; // The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is
-	           // specified as 1M!=Sebsir measurement request at adress 1
-	String data_command = "1D0!"; // and the followed data command 1D0! = Sensor data request at adress 1
-
-	drs26.sendCommand(measurement_command);
-	delay(1000);
-	drs26.sendCommand(data_command);
-
-	data = {-1, -1, -1};
-
-	while (drs26.available()) {
-		char next_character = drs26.read();
-		if ((next_character != '\n') && (next_character != '\r')) {
-			sdiResponse += next_character;
-			delay(10); // 1 character ~ 7.5ms
-		}
-	}
-
-	if (sdiResponse.length() > 1) {
-		data.id = sdiResponse.substring(0, 8).toInt();
-		data.circumferenceIncrement = sdiResponse.substring(9, 15).toFloat();
-		data.temperature = sdiResponse.substring(16, 22).toFloat();
-	}
-	return data;
-}
-
-std::list<Message> ForteDRS26 ::buildMessages()
-{
-	std::list<Message> messages;
-	MeasurementData circumferenceIncrementMeasurementData{
-	    data.circumferenceIncrement, 0, {}, measurementTypeToString.at(MeasurementType::CIRCUMFERENCE_INCREMENT)};
-	MeasurementData temperatureMeasurementData{
-	    data.temperature, 0, {}, measurementTypeToString.at(MeasurementType::TEMPERATURE)};
-
-	messages.emplace_back(Message{circumferenceIncrementMeasurementData, sensorInformation, 0});
-	messages.emplace_back(Message{temperatureMeasurementData, sensorInformation, 0});
-
-	ESP_LOGE(sensorInformation.getSensorName().c_str(), "test");
-	return messages;
-}
-SensorInformation ForteDRS26::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/drs26_digital/drs26.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index 0d713ca66260895f63cdc1e2137ec4027294e8bd..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "Wire.h"
-#include "esp_log.h"
-#include <SDI12.h>
-#include <map>
-
-struct out_data_drs26 {
-	int id;
-	float circumferenceIncrement;
-	float temperature;
-};
-
-class ForteDRS26 : public ForteSensor<out_data_drs26> {
-  public:
-	void setup() override;
-	out_data_drs26 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	SDI12 drs26;
-	out_data_drs26 data;
-	const SensorInformation sensorInformation{"DRS26", Protocol::I2C};
-	enum class MeasurementType { TEMPERATURE, CIRCUMFERENCE_INCREMENT };
-
-	// enum to string
-	std::map<MeasurementType, const char *> measurementTypeToString = {
-	    {MeasurementType::TEMPERATURE, "TEMPERATURE"},
-	    {MeasurementType::CIRCUMFERENCE_INCREMENT, "CIRCUMFERENCE_INCREMENT"}};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/README b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/README
deleted file mode 100644
index bbf1db0c44bf4b375af8aefcd9f6649864d64677..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/README
+++ /dev/null
@@ -1,11 +0,0 @@
-# basic usage
-
-To send data using espnow, create a new Message object,
-then use the addData(value, identifier) method for every value
-to fill the message.
-when every value is added, use the send() method to send the data
-to the host (fipy). If the esp client has never recieved a config
-message from the host, it will instead broadcast the message.
-
----
-right now, it is not possible to add more than 10 values.
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ClientDataPackage.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ClientDataPackage.hpp
deleted file mode 100644
index f08e6bba4ea43308e606f06f7870735d7f4820bc..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ClientDataPackage.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#pragma once
-
-#include <ArduinoJson.h>
-#include "MeasurementData.hpp"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-#include <list>
-#include <optional>
-#include <string>
-#include <utility>
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-class ClientDataPackage {
-  private:
-	MeasurementData measurementData;
-	SensorInformation sensorInformation;
-	unsigned long timestamp; // maybe make this array
-
-  public:
-	ClientDataPackage(MeasurementData value, SensorInformation sensorInformation, unsigned long timestamp)
-	    : measurementData(std::move(value)), sensorInformation(std::move(sensorInformation)), timestamp(timestamp)
-	{
-	}
-
-	[[nodiscard]] const MeasurementData &getMeasurementData() const { return measurementData; }
-	[[nodiscard]] const SensorInformation &getSensorInformation() const { return sensorInformation; }
-	[[nodiscard]] unsigned long getTimestamp() const { return timestamp; }
-
-	[[nodiscard]] std::string getDataPackageAsMinifiedJsonString() const
-	{
-		StaticJsonDocument<250> document; // 250 byte is the max send size of espnow
-
-		document["sensorName"] = sensorInformation.getSensorName();
-		document["timestamp"] = timestamp;
-		document["protocol"] = protocolToString.at(sensorInformation.getProtocol());
-		document["value"] = measurementData.getValue();
-
-		if (measurementData.getChannel().has_value()) {
-			document["channel"] = measurementData.getChannel().value();
-		}
-
-		if (measurementData.getI2CAddress().has_value()) {
-			document["i2cAddress"] = measurementData.getI2CAddress().value();
-		}
-
-		document["measurementType"] = measurementData.getMeasurementType();
-
-		std::string jsonString;
-		serializeJson(document, jsonString);
-		return jsonString;
-	}
-
-};
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ESPNow.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ESPNow.hpp
deleted file mode 100644
index 266b139b46c184d91ddf0b7e741b6a70a3adf72a..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ESPNow.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _ESPNOW
-#define _ESPNOW
-
-#include "Message.hpp"
-#include "Time.hpp"
-#include "esp_log.h"
-#include "ram_caching.hpp"
-#include <ClientDataPackage.hpp>
-#include <ESP32Time.h>
-#include <Preferences.h>
-#include <WiFi.h>
-#include <esp_now.h>
-
-enum MessageType{
-    dataAck,
-    hostChange
-};
-typedef struct config {
-	MessageType type;
-	uint8_t host[6];
-	long epoch_seconds;
-} config;
-
-esp_err_t espnow_setup();
-//esp_err_t espnow_send_message(const Message& message);
-bool is_host_defined();
-bool was_msg_received();
-void get_host_mac(uint8_t *destination);
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status);
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len);
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/Message.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/Message.cpp
deleted file mode 100644
index 7f7f8e2326e86ba647971170dbf3a43a83227c90..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/Message.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "Message.hpp"
-
-#include <utility>
-
-static const char *TAG = "MESSAGE";
-
-esp_err_t Message::send() const
-{
-	ESP_LOGI(TAG, "Sending message");
-	esp_err_t success;
-	auto messageData = getMessageAsMinifiedJsonString();
-
-	// conversion from std::string to c_str adds null terminator, which is why we add 1 to message length
-	success = esp_now_send(recipient, (uint8_t *)messageData.c_str(), (messageData.length() + 1) * sizeof(char));
-	if (success != ESP_OK) {
-		ESP_LOGE(TAG, "Error sending the data");
-		Serial.println(success, HEX);
-		// Removed caching from here, better do this in main
-	}
-	ESP_LOGE(TAG, "Sent data: %s", messageData.c_str());
-
-	ESP_LOGD(TAG, "time sent: %l", clientDataPackage.getTimestamp());
-	ESP_LOGD(TAG, "send status: %d", success);
-
-	return success;
-}
-
-std::string Message::getMessageAsMinifiedJsonString() const
-{
-	return clientDataPackage.getDataPackageAsMinifiedJsonString();
-}
-
-Message::Message(ClientDataPackage data) : clientDataPackage(std::move(data))
-{
-	// check for existing host mac address, use broadcast otherwise
-	get_host_mac(recipient);
-}
-Message::Message(MeasurementData const &data, const SensorInformation &information, unsigned long timestamp)
-    : clientDataPackage(data, information, timestamp)
-{
-	// check for existing host mac address, use broadcast otherwise
-	get_host_mac(recipient);
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/Message.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/Message.hpp
deleted file mode 100644
index 5a6ca8185393ababd2b3c83005a30cf8fd6052ab..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/Message.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-
-#include "ClientDataPackage.hpp"
-#include "ESPNow.hpp"
-#include "Time.hpp"
-#include "esp_log.h"
-#include <Arduino.h>
-#include <ArduinoJson.h>
-#include <ESP32Time.h>
-#include <esp_now.h>
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-class Message {
-  public:
-
-	explicit Message(ClientDataPackage data);
-
-	Message(MeasurementData const &data, const SensorInformation &information, unsigned long timestamp);
-	esp_err_t send() const;
-	[[nodiscard]] std::string getMessageAsMinifiedJsonString() const;
-
-  private:
-	ClientDataPackage clientDataPackage;
-	uint8_t recipient[6]{};
-};
-
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/ina219/ina219.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/ina219/ina219.cpp
deleted file mode 100644
index def6a9d73acefe00e1a160a1c3fc2ba64ab2099d..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "ina219.hpp"
-
-void ForteINA219 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!ina219.init()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getSensorName().c_str(), "Initialization failed");
-		return;
-	}
-}
-
-out_data_ina219 ForteINA219 ::readData()
-{
-	if (!ina219.getOverflow()) {
-		data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-		data.busVoltage_V = ina219.getBusVoltage_V();
-		data.current_mA = ina219.getCurrent_mA();
-		data.power_mW = ina219.getBusPower();
-		data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV / 1000);
-		data.ina219_overflow = ina219.getOverflow();
-
-		return data;
-	} else
-		return data;
-}
-
-std::list<Message> ForteINA219::buildMessages()
-{
-	throw "Not yet implemented";
-}
-SensorInformation ForteINA219::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/ina219/ina219.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 4a34d9591a325f9232f90ef61b4a74077fe1cf51..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "Wire.h"
-#include "esp_log.h"
-#include <INA219_WE.h>
-
-struct out_data_ina219 {
-	float shuntVoltage_mV = 0.0;
-	float loadVoltage_V = 0.0;
-	float busVoltage_V = 0.0;
-	float current_mA = 0.0;
-	float power_mW = 0.0;
-	bool ina219_overflow = false;
-};
-
-class ForteINA219 : public ForteSensor<out_data_ina219> {
-  public:
-	void setup() override;
-	out_data_ina219 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	INA219_WE ina219;
-	out_data_ina219 data;
-	const SensorInformation sensorInformation{"INA219", Protocol::I2C};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/scd30/scd30.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/scd30/scd30.cpp
deleted file mode 100644
index 7cff381af4ac4034d955366bf571a89b7e551ddf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "scd30.hpp"
-
-void ForteSCD30 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!airSensor.begin()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getSensorName().c_str(), "Initialization failed.");
-		return;
-	}
-}
-
-out_data_scd30 ForteSCD30 ::readData()
-{
-	if (airSensor.dataAvailable()) {
-		data.C02 = airSensor.getCO2();
-		data.Temperature = airSensor.getTemperature();
-		data.Humidity = airSensor.getHumidity();
-
-		return data;
-	}
-	throw NoDataAvailableException();
-}
-
-std::list<Message> ForteSCD30::buildMessages()
-{
-	std::list<Message> messages;
-
-	out_data_scd30 data = readData();
-	MeasurementData CO2Data{data.C02, 0, {}, "CO2"};
-	MeasurementData TempData{data.Temperature, 0, {}, "Temperature"};
-	MeasurementData HumidData{data.Humidity, 0, {}, "Humidity"};
-
-	messages.emplace_back(Message(CO2Data, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(TempData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(HumidData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	
-	return messages;
-}
-
-SensorInformation ForteSCD30::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/scd30/scd30.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/scd30/scd30.hpp
deleted file mode 100644
index db3e85500924db80ac3c0b5cd3698314564f6fd6..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "NoDataAvailableException.hpp"
-#include "Pinout.hpp"
-#include "esp_log.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <Wire.h>
-
-struct out_data_scd30 {
-	float C02;
-	float Temperature;
-	float Humidity;
-};
-
-class ForteSCD30 : public ForteSensor<out_data_scd30> {
-  public:
-	void setup() override;
-	out_data_scd30 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	SCD30 airSensor;
-	out_data_scd30 data;
-	const SensorInformation sensorInformation{"SCD30", Protocol::I2C};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/time/src/Time.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/time/src/Time.cpp
deleted file mode 100644
index 5cc3dbcdb7086eb1a27bcf98dccef1e49e78beaf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/time/src/Time.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "Time.hpp"
-
-#include <utility>
-void Time::setTime(long epoch, int ms)
-{
-	this->rtc.setTime(epoch, ms);
-}
-tm Time::getTimeStruct()
-{
-	return this->rtc.getTimeStruct();
-}
-String Time::getDateTime(bool mode)
-{
-	return this->rtc.getDateTime(mode);
-}
-String Time::getTime(String format)
-{
-	return this->rtc.getTime(std::move(format));
-}
-unsigned long Time::getEpochSeconds()
-{
-	return this->rtc.getEpoch();
-}
-
-long Time::getMillis()
-{
-	return this->rtc.getMillis();
-}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/time/src/Time.hpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/time/src/Time.hpp
deleted file mode 100644
index 783bdef40ead148d61271c7cf92aeabb8f3242d7..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/time/src/Time.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef ESPTIME
-#define ESPTIME
-
-#include <ESP32Time.h>
-
-class Time {
-  public:
-	static Time &getInstance()
-	{
-		static Time instance; // Guaranteed to be destroyed.
-		                      // Instantiated on first use.
-		return instance;
-	}
-
-	/*!
-	@brief  set the internal RTC time
-	@param  epoch
-	        epoch time in seconds
-	@param  ms
-	        microseconds (optional)
-	*/
-	void setTime(long epoch, int ms = 0);
-
-	/*!
-	@brief  get the internal RTC time as a tm struct
-	*/
-	tm getTimeStruct();
-
-	/*!
-	@brief  get the time and date as an Arduino String object
-	@param  mode
-	        true = Long date format
-	        false = Short date format
-	*/
-	String getDateTime(bool mode);
-
-	/*!
-	@brief  get the time as an Arduino String object with the specified format
-	@param	format
-	        time format
-	        http://www.cplusplus.com/reference/ctime/strftime/
-	*/
-	String getTime(String format = "%H:%M:%S");
-
-	/*!
-	@brief  get the current epoch seconds as long
-	*/
-	unsigned long getEpochSeconds();
-
-	/*!
-	@brief  get the current milliseconds as long
-	*/
-	long getMillis();
-
-  private:
-	Time() {} // Constructor? (the {} brackets) are needed here.
-
-	ESP32Time rtc = ESP32Time{};
-
-	// C++ 11
-	// =======
-	// We can use the better technique of deleting the methods
-	// we don't want.
-  public:
-	Time(Time const &) = delete;
-	void operator=(Time const &) = delete;
-
-	// Note: Scott Meyers mentions in his Effective Modern
-	//       C++ book, that deleted functions should generally
-	//       be public as it results in better error messages
-	//       due to the compilers behavior to check accessibility
-	//       before deleted status
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/platformio.ini b/Tests/Mieming/client_lowPower_esp32Wroom/client/platformio.ini
deleted file mode 100644
index 403649d23722ccefa12128ed61cf0acf5553ccb4..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/platformio.ini
+++ /dev/null
@@ -1,35 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32dev]
-platform = espressif32
-board = esp32dev
-framework = arduino
-monitor_speed = 115200
-; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6
-; we use c++17 features (i.e. optionals in ClientDataPackage.hpp)
-build_flags = 
-	-I include
-	-DCORE_DEBUG_LEVEL=5
-	-std=gnu++17
-build_unflags = -std=gnu++11
-monitor_port = /dev/ttyUSB0
-upload_port = /dev/ttyUSB0
-lib_deps =
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	adafruit/Adafruit ADS1X15@^2.4.0
-	wollewald/INA219_WE@^1.3.1
-	adafruit/Adafruit BusIO@^1.13.2
-	Adafruit_I2CDevice
-	SPI
-	envirodiy/SDI-12@^2.1.4
-	fbiego/ESP32Time@^2.0.0
-	bblanchon/ArduinoJson@^6.19.4
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/src/main.cpp b/Tests/Mieming/client_lowPower_esp32Wroom/client/src/main.cpp
deleted file mode 100644
index 8a9b49b43cb0ef2f78cfd9582c9d56acef68a991..0000000000000000000000000000000000000000
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/src/main.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-#include "../lib/dr26_analogue/dr26.hpp"
-#include "NoDataAvailableException.hpp"
-#include "esp_log.h"
-#include "f_deep_sleep.hpp"
-#include <Arduino.h>
-#include <drs26.hpp>
-#include <ina219.hpp>
-#include <scd30.hpp>
-#include "ESPNow.hpp"
-#include "LC709203F.h"
-
-LC709203F gg;
-// #include "esp32-hal-log.h"
-static const std::string TAG = "MAIN";
-
-
-ForteDR26 dr26_channel3;
-ForteDR26 dr26_channel1;
-ForteDR26 dr26_channel2;
-ForteDR26 dr26_channel0_power;
-
-void setup()
-{
-	Serial.begin(115200);
-	//Set the GPIO which conrtols the step up to OUTPUT
-	 gpio_set_direction(GPIO_NUM_32, GPIO_MODE_OUTPUT);
-	
-	gg.begin();
-	gg.setCellCapacity(LC709203F_APA_1000MAH);
-
-
-	DeepSleep::print_wakeup_reason();
-	DeepSleep::bootCount++;
-	ESP_LOGD(TAG.c_str(), "Boot number: %d", DeepSleep::bootCount);
-
-gpio_set_level(GPIO_NUM_32, 1);
-	dr26_channel1.setup();
-	dr26_channel3.setChannel(3);
-	dr26_channel1.setChannel(1);
-	dr26_channel2.setChannel(2);
-	dr26_channel0_power.setChannel(0);
-gpio_set_level(GPIO_NUM_32, 0);
-
-	espnow_setup();
-	//	log_e("Setup complete.");
-}
-
-void loop()
-{
-gpio_set_level(GPIO_NUM_32, 1);	
-Serial.println("***********************1-DRS26 NOT YET CONNECTED**********************************");
-Serial.println(dr26_channel1.readData(),5);
-Serial.println("***********************2-DRS26**********************************");
-Serial.println(dr26_channel2.readData(),5);
-Serial.println("***********************3-DRS26 *********************************");
-Serial.println(dr26_channel3.readData(),5);
-
-
-Serial.println("***********************0-Voltage-Battery**********************************");
-dr26_channel3.changeGain(GAIN_TWOTHIRDS);
-Serial.println(dr26_channel0_power.readData(),5);
-
-Serial.println("***********************REAL-Voltage-Battery**********************************");
-Serial.println(gg.cellVoltage_mV()/1000.0);
-
-	try {
-
-		auto messages = dr26_channel0_power.buildMessages();
-		
-		
-		for (const Message &message : messages) {
-			if(message.send() != ESP_OK){
-				RtcMemory::store(message.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message.getMessageAsMinifiedJsonString());
-			}
-		}
-		
-		dr26_channel3.changeGain(GAIN_ONE);
-		auto messages2=dr26_channel1.buildMessages(1,"CIRCUMFERENCE_INCREMENT");
-		
-		for (const Message &message2 : messages2) {
-			if(message2.send() != ESP_OK){
-				RtcMemory::store(message2.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message2.getMessageAsMinifiedJsonString());
-			}
-		}
-
-		auto messages3=dr26_channel2.buildMessages(2,"CIRCUMFERENCE_INCREMENT");
-
-		for (const Message &message3 : messages3) {
-			if(message3.send() != ESP_OK){
-				RtcMemory::store(message3.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message3.getMessageAsMinifiedJsonString());
-			}
-		}
-
-		auto messages4=gg.buildMessages();
-		for (const Message &message4 : messages4) {
-			if(message4.send() != ESP_OK){
-				RtcMemory::store(message4.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message4.getMessageAsMinifiedJsonString());
-			}
-		}
-
-
-	} catch (const NoDataAvailableException &e) {
-		std::cerr << e.what() << '\n';
-	}
-
-
-
-	Serial.print("This device: ");
-	Serial.println("\n");
-gpio_set_level(GPIO_NUM_32, 0);
-	delay(5000);
-	DeepSleep::deep_sleep(100);
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/.gitignore b/Tests/Mieming/host_esp32Wroom/client/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/Tests/Mieming/host_esp32Wroom/client/.gitkeep b/Tests/Mieming/host_esp32Wroom/client/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/Tests/Mieming/host_esp32Wroom/client/.vscode/extensions.json b/Tests/Mieming/host_esp32Wroom/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/.vscode/settings.json b/Tests/Mieming/host_esp32Wroom/client/.vscode/settings.json
deleted file mode 100644
index 85c4d1b958928f8e741f91d4b9a8a6453eb0570d..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/.vscode/settings.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-    "files.associations": {
-        "optional": "cpp",
-        "array": "cpp",
-        "atomic": "cpp",
-        "*.tcc": "cpp",
-        "cctype": "cpp",
-        "clocale": "cpp",
-        "cmath": "cpp",
-        "cstdarg": "cpp",
-        "cstddef": "cpp",
-        "cstdint": "cpp",
-        "cstdio": "cpp",
-        "cstdlib": "cpp",
-        "cstring": "cpp",
-        "ctime": "cpp",
-        "cwchar": "cpp",
-        "cwctype": "cpp",
-        "deque": "cpp",
-        "list": "cpp",
-        "unordered_map": "cpp",
-        "unordered_set": "cpp",
-        "vector": "cpp",
-        "exception": "cpp",
-        "algorithm": "cpp",
-        "functional": "cpp",
-        "iterator": "cpp",
-        "map": "cpp",
-        "memory": "cpp",
-        "memory_resource": "cpp",
-        "numeric": "cpp",
-        "random": "cpp",
-        "string": "cpp",
-        "string_view": "cpp",
-        "system_error": "cpp",
-        "tuple": "cpp",
-        "type_traits": "cpp",
-        "utility": "cpp",
-        "fstream": "cpp",
-        "initializer_list": "cpp",
-        "iomanip": "cpp",
-        "iosfwd": "cpp",
-        "iostream": "cpp",
-        "istream": "cpp",
-        "limits": "cpp",
-        "new": "cpp",
-        "ostream": "cpp",
-        "sstream": "cpp",
-        "stdexcept": "cpp",
-        "streambuf": "cpp",
-        "cinttypes": "cpp",
-        "typeinfo": "cpp"
-    }
-}
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/include/ForteSensor.hpp b/Tests/Mieming/host_esp32Wroom/client/include/ForteSensor.hpp
deleted file mode 100644
index add5a01d566ef5977eef3e0286d908c4b49fcb0b..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/include/ForteSensor.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-#include "Message.hpp"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-template <class T>
-class ForteSensor {
-  public:
-	virtual T readData() = 0;
-	virtual void setup() = 0;
-	virtual std::list<Message> buildMessages() = 0;
-	[[nodiscard]] virtual SensorInformation getSensorInformation() const = 0;
-	virtual ~ForteSensor() = default;
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/include/MeasurementData.hpp b/Tests/Mieming/host_esp32Wroom/client/include/MeasurementData.hpp
deleted file mode 100644
index 36bd5db75fbdb714dad723d67b92affd4d4fd189..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/include/MeasurementData.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-//
-// Created by cynthya on 10/6/22.
-//
-
-#ifndef CLIENT_MEASUREMENTDATA_HPP
-#define CLIENT_MEASUREMENTDATA_HPP
-
-#include "ArduinoJson.h"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-#include <list>
-#include <optional>
-#include <string>
-#include <utility>
-class MeasurementData {
-  public:
-	MeasurementData(double value, std::optional<int> channel, std::optional<int> i2cAddress,
-	                std::string measurementType)
-	    : value(value), measurementType(std::move(measurementType)), channel(channel), i2cAddress(i2cAddress)
-	{
-	}
-
-	MeasurementData(double value, std::string measurementType)
-	    : value(value), measurementType(std::move(measurementType))
-	{
-	}
-
-	[[nodiscard]] double getValue() const { return value; }
-	[[nodiscard]] const std::string &getMeasurementType() const { return measurementType; }
-	[[nodiscard]] const std::optional<int> &getChannel() const { return channel; }
-	[[nodiscard]] const std::optional<int> &getI2CAddress() const { return i2cAddress; }
-
-  private:
-	double value;
-	std::string measurementType; // TODO: consider using an enum
-	std::optional<int> channel;
-	std::optional<int> i2cAddress;
-};
-#endif // CLIENT_MEASUREMENTDATA_HPP
diff --git a/Tests/Mieming/host_esp32Wroom/client/include/NoDataAvailableException.hpp b/Tests/Mieming/host_esp32Wroom/client/include/NoDataAvailableException.hpp
deleted file mode 100644
index 83c56973868a76a1dca7f49487bcdb6fd33e86d8..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/include/NoDataAvailableException.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-#include <exception>
-#include <iostream>
-
-struct NoDataAvailableException : public std::exception {
-	const char *what() const noexcept override { return "Sensor could not read data"; }
-};
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/include/Pinout.hpp b/Tests/Mieming/host_esp32Wroom/client/include/Pinout.hpp
deleted file mode 100644
index f277fd91b274caa1de127f0380ba75164dd9b707..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/include/Pinout.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-constexpr int I2C_SDA = 18;
-constexpr int I2C_SCL = 19;
-
-// TODO: IF THE BOARD CHANGES (I.E. ESPCAM MODULE), THESE HAVE TO BE CHANGED (EITHER COMPILE TIME FLAG OR IFDEF OR SMTH)
-
-#endif
diff --git a/Tests/Mieming/host_esp32Wroom/client/include/Protocol.hpp b/Tests/Mieming/host_esp32Wroom/client/include/Protocol.hpp
deleted file mode 100644
index 92270db81e4a54e525f2cd054a15a03e7ebade15..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/include/Protocol.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-// Created by zoe on 10/5/22.
-//
-
-#ifndef CLIENT_PROTOCOL_HPP
-#define CLIENT_PROTOCOL_HPP
-
-#include <map>
-enum class Protocol { I2C, RS485, Analog };
-
-// protocol to string
-const static std::map<Protocol, const char *> protocolToString = {
-    {Protocol::I2C, "I2C"}, {Protocol::RS485, "RS485"}, {Protocol::Analog, "ANALOG"}};
-
-#endif // CLIENT_PROTOCOL_HPP
diff --git a/Tests/Mieming/host_esp32Wroom/client/include/README b/Tests/Mieming/host_esp32Wroom/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/Tests/Mieming/host_esp32Wroom/client/include/SensorInformation.hpp b/Tests/Mieming/host_esp32Wroom/client/include/SensorInformation.hpp
deleted file mode 100644
index 4b8af5d357534be81670b503790960a2781bc282..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/include/SensorInformation.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Created by cynthya on 10/6/22.
-//
-
-#ifndef CLIENT_SENSORINFORMATION_HPP
-#define CLIENT_SENSORINFORMATION_HPP
-
-#include "Protocol.hpp"
-#include <string>
-
-class SensorInformation {
-  public:
-	SensorInformation(std::string sensorName, Protocol protocol) : sensorName(std::move(sensorName)), protocol(protocol)
-	{
-	}
-
-	[[nodiscard]] const std::string &getSensorName() const { return sensorName; }
-	[[nodiscard]] Protocol getProtocol() const { return protocol; }
-
-  private:
-	std::string sensorName;
-	Protocol protocol;
-};
-
-#endif // CLIENT_SENSORINFORMATION_HPP
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/README b/Tests/Mieming/host_esp32Wroom/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.cpp
deleted file mode 100644
index 73f9ce623678c393d97d6730f9a721e27eef9d68..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.cpp
+++ /dev/null
@@ -1,355 +0,0 @@
-#include <Arduino.h>
-#include <SoftwareSerial.h>
-
-#include <SentecSensors.h>
-/***************************************
- *          RS485 SENSOR READOUT
- ****************************************/
-
-SentecSensorRS485::SentecSensorRS485(SoftwareSerial *ser, byte add)
-{
-    address = add;
-    RS485 = ser;
-}
-SentecSensorRS485::SentecSensorRS485(SoftwareSerial *ser, byte add, uint8_t serialControlPin)
-{
-    address = add;
-    RS485 = ser;
-    serialCommunicationControlPin = serialControlPin;
-}
-
-void SentecSensorRS485::write(byte queryFrame[], int length)
-{
-    // sends a message (bytes) to the sensor
-
-    // Initialize the transmitter
-    digitalWrite(serialCommunicationControlPin, HIGH);
-    // Send message: request a reading from the sensor
-    RS485->write(queryFrame, length);
-    RS485->flush();
-    // Initialize the receiver
-    digitalWrite(serialCommunicationControlPin, LOW);
-}
-
-String SentecSensorRS485::getValueStr(float value)
-{
-    if (valid)
-    {
-        return String(value, 1);
-    }
-    else
-    {
-        return String("null");
-    }
-}
-
-String SentecSensorRS485::getValueStr(int value)
-{
-    if (valid)
-    {
-        return String(value);
-    }
-    else
-    {
-        return String("null");
-    }
-}
-
-void SentecSensorRS485::queryAddress()
-{
-    // request the address of the sensor with ONLY ONE SENSOR ON THE BUS
-
-    byte tmp_addr = address; // store the address in a temporary byte
-    address = 0xFF;          // change the address to FF (0) for address check
-    readRegister(word(0x07, 0xD0), 2);
-    address = tmp_addr; // set the original address back
-}
-
-void SentecSensorRS485::readRegister(int registerStartAddress)
-{
-    readRegister(registerStartAddress, 1);
-}
-
-void SentecSensorRS485::readRegister(int registerStartAddress, int registerLength)
-{
-    // function code 0x03: get data measured by the sensor
-    byte query[8];
-    query[0] = address;
-    // function code
-    query[1] = 0x03;
-    // register start address
-    query[2] = registerStartAddress >> 8;
-    query[3] = registerStartAddress & 0xFF;
-    // register length
-    query[4] = registerLength >> 8;
-    query[5] = registerLength & 0xFF;
-    // calculate last two bytes (CRC check)
-    calculateCRC(query, sizeof(query) - 2);
- //#   Serial.print("Query (get data): 0x");                    #Print bytes
- //#   printBytes(query, 8);
-    // write the data request to the modbus line
-    write(query, sizeof(query));
-    // get response from sensor
-    getResponse();
-}
-
-void SentecSensorRS485::writeRegister(int registerAddress, int value)
-{
-    // function code 0x06: change sensor settings
-    // e.g. a new address, reset rainfal data...
-
-    byte query[8];
-    query[0] = address;
-    // function code
-    query[1] = 0x06;
-    // register start address
-    query[2] = registerAddress >> 8;
-    query[3] = registerAddress & 0xFF;
-    // register length
-    query[4] = value >> 8;
-    query[5] = value & 0xFF;
-    calculateCRC(query, sizeof(query) - 2);
-    Serial.print("Query (settings):    ");
-    printBytes(query, 8);
-    write(query, sizeof(query));
-    getResponse();
-}
-
-void SentecSensorRS485::setAddress(byte add)
-{
-    // change the address of a sensor
-    writeRegister(word(0x07, 0xD0), add);
-    // TODO check response: matches the sent message exactly
-    address = add;
-}
-
-void SentecSensorRS485::resetAnswerFrame()
-{
-    for (int i = 0; i < 10; i++)
-    {
-        answerFrame[i] = 0;
-    }
-}
-
-bool SentecSensorRS485::getResponse()
-{
-    // reads the response of a sensor
-    valid = true;
-    int idx = 0;
-    int byteReceived;
-    // usual response length: changed in the while loop to match the response,
-    //   changed only when reading data (then it's 7 or 9  bytes, sensor dpendent)
-    int responseLength = 8;
-    // reading an answer takes up to 39 milliseconds for 2 byte readRegister
-    const int timeout = 200;
-    const int retries = 1; //#editet to q
-    size_t tries = 1;
-
-    for (tries; tries <= retries; tries++)
-    {
-        // if we lose connection with the sensor, we get an array of zeros back
-        resetAnswerFrame();
-
-        unsigned long time = millis();
-        while (idx < responseLength && (millis() - time) < timeout)
-        {
-            if (RS485->available())
-            {
-                byteReceived = RS485->read();
-                // Serial.println(byteReceived, HEX);
-                // check for first byte. It has to be the device address unless for broadcasts with address = 0xFF
-                if (idx == 0 && address != 0xFF && byteReceived != address)
-                {
-                    Serial.print("Invalid byte. First byte needs to be address 0x");
-                    Serial.print(address, HEX);
-                    Serial.print(" but got 0x");
-                    Serial.print(byteReceived, HEX);
-                    Serial.println("instead");
-                }
-                else
-                {
-                    answerFrame[idx] = byteReceived;
-                    // for reading register: third received byte is data length, read number of bytes accordingly
-                    if (idx == 2 && answerFrame[1] == 0x03)
-                    {
-                        // 5 bytes for address, function, data length, CRC_H, CRC_L
-                        responseLength = 5 + byteReceived;
-                    }
-                    idx++;
-                }
-            }
-        }
-
-        delay(10);
-        Serial.print("Response: 0x");
-        printBytes(answerFrame, responseLength);
-        Serial.print("Tries: ");
-        Serial.println(tries);
-        Serial.print("Bytes received: ");
-        Serial.println(idx);
-        word crc_received = word(answerFrame[responseLength - 2], answerFrame[responseLength - 1]);
-        word crc = calculateCRC(answerFrame, responseLength - 2);
-        if (crc_received != word(crc))
-        {
-            Serial.print("CRC wrong: Expected ");
-            printBytes(crc);
-            Serial.print(" got ");
-            printBytes(crc_received);
-            Serial.println();
-            valid = false;
-            resetAnswerFrame();
-        }
-
-        if (answerFrame[0] == 0)
-        {
-            valid = false;
-        }
-        if(valid)
-        {
-            break;
-        }
-    }
-    return valid;
-}
-
-unsigned int SentecSensorRS485::calculateCRC(byte query[], int length)
-{
-    // Change the last two bytes of the queryFrame to conform to a CRC check
-    // Yes, this is necessary. No, I don't know exactly what it does.
-    unsigned int tmp1, tmp2, flag;
-    tmp1 = 0xFFFF;
-    for (unsigned char i = 0; i < length; i++)
-    {
-        tmp1 = tmp1 ^ query[i];
-        for (unsigned char j = 1; j <= 8; j++)
-        {
-            flag = tmp1 & 0x0001;
-            tmp1 >>= 1;
-            if (flag)
-                tmp1 ^= 0xA001;
-        }
-    }
-    // Reverse byte order.
-    tmp2 = tmp1 >> 8;
-    tmp1 = (tmp1 << 8) | tmp2;
-    tmp1 &= 0xFFFF;
-    // change last two query bytes
-    query[length + 1] = tmp1;
-    query[length] = tmp1 >> 8;
-
-    return tmp1; // the returned value is already swapped - CRC_L byte is first & CRC_H byte is last
-}
-
-void SentecSensorRS485::printBytes(byte *data, int length)
-{
-    // prints 8-bit data in hex with leading zeroes
-    char tmp[16];
-    for (int i = 0; i < length; i++)
-    {
-        sprintf(tmp, "%.2X", data[i]);
-        // sprintf(tmp, "0x%.2X",data[i]);
-        Serial.print(tmp);
-        Serial.print(" ");
-    }
-    Serial.println();
-}
-
-void SentecSensorRS485::printBytes(word data)
-{
-    char tmp[10];
-    sprintf(tmp, "0x%.2X", data >> 8);
-    Serial.print(tmp);
-    sprintf(tmp, "%.2X", data & 0xFF);
-    // sprintf(tmp, "0x%.2X",data[i]);
-    Serial.print(tmp);
-}
-
-word SolarRadiationSensor::getSolarRadiation()
-{
-    readRegister(0, 1);
-    glob = word(answerFrame[3], answerFrame[4]);
-    Serial.print("Global solar radiation: ");
-    Serial.print(glob, DEC);
-    Serial.println(" W/m^2");
-    return glob;
-}
-
-String SolarRadiationSensor::getSolarRadiationStr()
-{
-    return getValueStr((int)glob);
-}
-
-void RainGaugeSensor::resetPrecipitation()
-{
-    // clears rainfall rata from the rain gauge
-    // delay resetting after the last register reading
-    delay(100);
-    Serial.println("Resetting precipitation sum");
-    writeRegister(0x00, 0x5A);
-    // TODO check response: matches the sent message exactly
-}
-
-void RainGaugeSensor::resetSensor()
-{
-    // no clue what the difference between this one and the previous one is...
-    //   and the manual is not helpful, of course
-    delay(100);
-    Serial.println("Resetting precipitation sum");
-    writeRegister(0x37, 0x03);
-    // TODO check response: matches the sent message exactly
-}
-
-word RainGaugeSensor::getInstantaneousPrecipitation()
-{
-    // gets tips of scale since the last reset, i.e. total precipitation (I THINK)
-    //   manual says this is current precipitation - is it?
-    readRegister(0, 0x01);
-    precipitation = word(answerFrame[3], answerFrame[4]);
-    Serial.print("Precipitation: ");
-    Serial.print(precipitation / 10.0, 1);
-    Serial.println(" mm");
-    // resetPrecipitation();
-    return precipitation;
-}
-
-String RainGaugeSensor::getPrecipitationStr()
-{
-    return getValueStr((float)(precipitation / 10.0));
-}
-
-float SoilMoistureSensor::getMoistureTemp()
-{
-    readRegister(0, 2); // start register at 0, read 2 variables (vwc, soil temp)
-    moistureRaw = (answerFrame[3] << 8) + answerFrame[4];
-    // TODO: neg. temp check
-    if (answerFrame[5] < 0x80)
-    {
-        temperatureRaw = (answerFrame[5] << 8) +  answerFrame[6];
-    }
-    else
-    {
-        temperatureRaw = (answerFrame[5]<<8) + answerFrame[6] - 65536;
-    }
-    Serial.begin(115200);
-    Serial.print("Soil moisture: ");
-    Serial.print((moistureRaw - moistureOffset) / 10.0, 1);
-    Serial.println(" %");
-    Serial.print("Temperature: ");
-    Serial.print((temperatureRaw - temperatureOffset) / 10.0 , 1);
-    Serial.println(" °C");
-    return (temperatureRaw - temperatureOffset) / 10.0;
-}
-
-float SoilMoistureSensor::getMoisture(){
-   return (moistureRaw - moistureOffset) / 10.0;
-}
-
-String SoilMoistureSensor::getMoistureStr()
-{
-    return getValueStr((float)((moistureRaw - moistureOffset) / 10.0));
-}
-
-String SoilMoistureSensor::getTemperatureStr()
-{
-    return getValueStr((float)((temperatureRaw - temperatureOffset) / 10.0));
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h b/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h
deleted file mode 100644
index f2a130254e4457a6a300b454c5a5ad43a04f2865..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/SentecSensors/SentecSensors.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef SENTECSENSORS_H
-#define SENTECSENSORS_H
-
-#include <Arduino.h>
-#include <SoftwareSerial.h>
-
-class SentecSensorRS485
-{
-public:
-    byte address;
-    uint8_t serialCommunicationControlPin = 19;
-    SoftwareSerial *RS485;
-    byte answerFrame[10];
-    // TODO use valid flag to log None
-    bool valid = false;
-    SentecSensorRS485(SoftwareSerial *ser, byte add);
-    SentecSensorRS485(SoftwareSerial *ser, byte add, uint8_t serialControlPin);
-
-    void write(byte queryFrame[], int length);
-    String getValueStr(float value);
-    String getValueStr(int value);
-    void queryAddress();
-    void readRegister(int registerStartAddress);
-    void readRegister(int registerStartAddress, int registerLength);
-    void writeRegister(int registerAddress, int value);
-    void setAddress(byte add);
-    void resetAnswerFrame();
-    bool getResponse();
-    unsigned int calculateCRC(byte query[], int length);
-    void printBytes(byte *data, int length);
-    void printBytes(word data);
-};
-
-class SolarRadiationSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // global radiation [W/m^2]
-    word glob = 0;
-
-    word getSolarRadiation();
-    String getSolarRadiationStr();
-};
-
-class RainGaugeSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // precipitation values [mm]
-    word precipitation = 0;     // prcp since reset? (I THINK!!!)
-
-    void resetPrecipitation();
-    void resetSensor();
-    word getInstantaneousPrecipitation();
-    String getPrecipitationStr();
-};
-
-class SoilMoistureSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // vwc: volumetric water content [%]
-    uint16_t moistureRaw = 0;
-    int moistureOffset = 0;
-    // soil temperature [deg C]
-    int temperatureRaw = 0;
-    int temperatureOffset = 0;
-
-    float getMoistureTemp();
-    float getMoisture();
-    String getMoistureStr();
-    String getTemperatureStr();
-};
-
-
-#endif
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/caching/src/ram_caching.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/caching/src/ram_caching.cpp
deleted file mode 100644
index 641f9744f12e4b7755ea78e786fcf06448f627f6..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/caching/src/ram_caching.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-#include "ram_caching.hpp"
-
-namespace RtcMemory{
-    // 2D array of 20 Strings with maxLength of 251
-    RTC_DATA_ATTR char storage[maxLength_][maxSize_];
-    RTC_DATA_ATTR int storedElements;
-    RTC_DATA_ATTR int headElement = 0;
-    RTC_DATA_ATTR int tailElement = 0;
-
-    static const char* TAG = "CACHING";
-
-
-    void store(std::string message){
-
-        // turn data into char array
-        const char* jsonString = message.c_str();
-    
-        // move head to new element
-        headElement = (headElement + 1) % maxSize_;
-        // apparently I am not allowed to copy to rtc mem
-        for(int i=0; i<maxLength_; i++){
-            storage[i][headElement] = jsonString[i];
-            if(jsonString[i] == '\0'){
-                break;
-            }
-        }
-        storedElements++;
-        ESP_LOGE(TAG, "Moved message to storage.");
-    }
-
-    String get_from_storage(){
-        // remove element pointed at by tail
-        String buf = "";
-        char current = '\0';
-        for(int i = 0; i<maxLength_; i++){
-            current = storage[i][tailElement];
-            buf += current;
-            if(current == '\0'){
-                break;
-            }
-        }
-        // move tail to next element
-        tailElement = (tailElement + 1) % maxSize_;
-        storedElements--;
-        ESP_LOGE(TAG, "Retrieved message from storage");
-        return buf;
-    }
-
-    bool is_full(){
-        return headElement == tailElement;
-    }
-
-    int stored_amount(){
-        return storedElements;
-    }
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/caching/src/ram_caching.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/caching/src/ram_caching.hpp
deleted file mode 100644
index c1a4ac57312afe9505b565b0ccfb1cf73f9175e9..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/caching/src/ram_caching.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef _RAM_CACHE
-#define _RAM_CACHE
-#include "esp_log.h"
-#include <ESP32Time.h>
-
-#define maxSize_ 20
-#define maxLength_ 251
-
-namespace RtcMemory {
-    void store(std::string message);
-    String get_from_storage();
-    bool is_full();
-    int stored_amount();
-}
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.cpp
deleted file mode 100644
index c434f53c5728c4bb840c8ec19087f802f9c63ffe..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "f_deep_sleep.hpp"
-#include "esp32-hal-log.h"
-#include "esp_log.h"
-
-namespace DeepSleep {
-static const std::string TAG = "DEEP_SLEEP";
-
-
-void print_wakeup_reason()
-{
-	esp_sleep_wakeup_cause_t wakeup_reason;
-
-	wakeup_reason = esp_sleep_get_wakeup_cause();
-
-	switch (wakeup_reason) {
-	case ESP_SLEEP_WAKEUP_EXT0:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by external signal using RTC_IO");
-		break;
-	case ESP_SLEEP_WAKEUP_EXT1:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by external signal using RTC_CNTL");
-		break;
-	case ESP_SLEEP_WAKEUP_TIMER:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by timer");
-		break;
-	case ESP_SLEEP_WAKEUP_TOUCHPAD:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by touchpad");
-		break;
-	case ESP_SLEEP_WAKEUP_ULP:
-		ESP_LOGD(TAG.c_str(), "Wakeup caused by ULP program");
-		break;
-	default:
-		ESP_LOGD(TAG.c_str(), "Wakeup was not caused by deep sleep: %d\n", wakeup_reason);
-		break;
-	}
-}
-
-void deep_sleep(int time_in_sec)
-{
-	esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
-	esp_deep_sleep_start();
-}
-
-}; // namespace DeepSleep
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.hpp
deleted file mode 100644
index 7a528c840b8dab363a1f1b65a917f007294317c7..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/deep_sleep/f_deep_sleep.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef F_DEEP_SLEEP_H
-#define F_DEEP_SLEEP_H
-
-#include <Arduino.h>
-
-namespace DeepSleep {
-// https://en.cppreference.com/w/cpp/language/storage_duration
-// When used in a declaration at namespace scope, it specifies internal linkage.
-// internal linkage. The variable can be referred to from all scopes in the current translation unit. All variables
-// which are declared at file scope have this linkage, including variables declared static at file scope.
-static RTC_DATA_ATTR int bootCount = 0;
-
-void deep_sleep(int time_to_sleep_in_seconds);
-void print_wakeup_reason();
-
-} // namespace DeepSleep
-
-#endif
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/dr26_analogue/dr26.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/dr26_analogue/dr26.cpp
deleted file mode 100644
index f41a4458a943d9aaf9845e4e4e2e44b1271868a2..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/dr26_analogue/dr26.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "dr26.hpp"
-
-void ForteDR26 ::setup()
-{
-	Wire.begin(6, 7);
-  //  ads.setGain(GAIN_ONE);
-  //  ads.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-
-
-    ads1.setGain(GAIN_ONE);
-    ads1.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-    delay(100);
-    channel=0;
-}
-
-float ForteDR26 ::readData()
-{
-	float volts=0;
-    for(int i=0; i<10; i++){
-        int16_t adc = 0;
-        float volt = 0;
-        try
-        {
-            adc = ads1.readADC_SingleEnded(channel);
-            volt = ads1.computeVolts(adc);
-        }
-        catch(NoDataAvailableException& e)
-        {
-	        throw NoDataAvailableException();  //propagate exception
-        }
-        volts += volt;
-    }
-
-    volts /= 10;
-    return volts;
-}
-
-// The following functions change the ADC input range: be careful
-// to never to exceed VDD +0.3V max, or to exceed the upper and
-// lower limits if you adjust the input range.
-// SETTING THE GAIN VALUE INCORRECTLY MAY DESTROY THE ADC!
-// The maximum output of the dendrometer is 2.5V, and so a gain of
-// one (max 4.096V) or two (max 2.048V) is optimal. Changing the gain
-// changes the accuracy of the sensor: higher gain gives a higher
-// precision but a smaller range.
-//
-// GAIN_TWOTHIRDS  // 2/3x gain +/- 6.144V  1 bit = 0.1875mV (default)
-// GAIN_ONE        // 1x gain   +/- 4.096V  1 bit = 0.125mV
-// GAIN_TWO        // 2x gain   +/- 2.048V  1 bit = 0.0625mV
-// GAIN_FOUR       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
-// GAIN_EIGHT      // 8x gain   +/- 0.512V  1 bit = 0.015625mV
-// GAIN_SIXTEEN    // 16x gain  +/- 0.256V  1 bit = 0.0078125mV
-void ForteDR26 ::changeGain(adsGain_t gain)
-{
-	ads1.setGain(gain);
-}
-
-void ForteDR26 ::setChannel(int c)
-{
-	channel=c;
-}
-std::list<Message> ForteDR26::buildMessages()
-{
-	std::list<Message> messages;
-	float data = readData();
-	MeasurementData IncrementData{data, 0, {}, "CIRCUMFERENCE_INCREMENT"};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
-}
-
-std::list<Message> ForteDR26::buildMessages(int channel,std::string measurementType)
-{
-	std::list<Message> messages;
-	float data = readData();
-	MeasurementData IncrementData{data, channel, {}, measurementType};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
-}
-SensorInformation ForteDR26::getSensorInformation() const
-{
-	return sensorInformation;
-}
-
-
-Adafruit_ADS1115 ForteDR26::ads1=ads1;
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/dr26_analogue/dr26.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/dr26_analogue/dr26.hpp
deleted file mode 100644
index b60c0997ec0180bc9e145d2588387022f9999f2a..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/dr26_analogue/dr26.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef _DR26
-#define _DR26
-
-#include "Adafruit_ADS1X15.h"
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "esp_log.h"
-#include <Wire.h>
-#include "NoDataAvailableException.hpp"
-
-class ForteDR26 : public ForteSensor<float> {
-  public:
-	void setup() override;
-	float readData() override;
-	void changeGain(adsGain_t gain);
-	void setChannel(int channel);
-	std::list<Message> buildMessages() override;
-	std::list<Message> buildMessages(int channel,std::string mesurment_type);
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-	static Adafruit_ADS1115 ads1;
-
-  private:
-	Adafruit_ADS1115 ads;
-	const SensorInformation sensorInformation{"DR26", Protocol::Analog};
-	int channel;
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/drs26_digital/drs26.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 5c21f3a98e01d665c38a879fb23f37217b39e8f4..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <drs26.hpp>
-
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck
-*/
-
-void ForteDRS26 ::setup()
-{
-	drs26.begin(4);
-}
-
-out_data_drs26 ForteDRS26 ::readData()
-{
-	String sdiResponse = "";
-	String measurement_command =
-	    "1M!"; // The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is
-	           // specified as 1M!=Sebsir measurement request at adress 1
-	String data_command = "1D0!"; // and the followed data command 1D0! = Sensor data request at adress 1
-
-	drs26.sendCommand(measurement_command);
-	delay(1000);
-	drs26.sendCommand(data_command);
-
-	data = {-1, -1, -1};
-
-	while (drs26.available()) {
-		char next_character = drs26.read();
-		if ((next_character != '\n') && (next_character != '\r')) {
-			sdiResponse += next_character;
-			delay(10); // 1 character ~ 7.5ms
-		}
-	}
-
-	if (sdiResponse.length() > 1) {
-		data.id = sdiResponse.substring(0, 8).toInt();
-		data.circumferenceIncrement = sdiResponse.substring(9, 15).toFloat();
-		data.temperature = sdiResponse.substring(16, 22).toFloat();
-	}
-	return data;
-}
-
-std::list<Message> ForteDRS26 ::buildMessages()
-{
-	std::list<Message> messages;
-	MeasurementData circumferenceIncrementMeasurementData{
-	    data.circumferenceIncrement, 0, {}, measurementTypeToString.at(MeasurementType::CIRCUMFERENCE_INCREMENT)};
-	MeasurementData temperatureMeasurementData{
-	    data.temperature, 0, {}, measurementTypeToString.at(MeasurementType::TEMPERATURE)};
-
-	messages.emplace_back(Message{circumferenceIncrementMeasurementData, sensorInformation, 0});
-	messages.emplace_back(Message{temperatureMeasurementData, sensorInformation, 0});
-
-	ESP_LOGE(sensorInformation.getSensorName().c_str(), "test");
-	return messages;
-}
-SensorInformation ForteDRS26::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/drs26_digital/drs26.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index 0d713ca66260895f63cdc1e2137ec4027294e8bd..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "Wire.h"
-#include "esp_log.h"
-#include <SDI12.h>
-#include <map>
-
-struct out_data_drs26 {
-	int id;
-	float circumferenceIncrement;
-	float temperature;
-};
-
-class ForteDRS26 : public ForteSensor<out_data_drs26> {
-  public:
-	void setup() override;
-	out_data_drs26 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	SDI12 drs26;
-	out_data_drs26 data;
-	const SensorInformation sensorInformation{"DRS26", Protocol::I2C};
-	enum class MeasurementType { TEMPERATURE, CIRCUMFERENCE_INCREMENT };
-
-	// enum to string
-	std::map<MeasurementType, const char *> measurementTypeToString = {
-	    {MeasurementType::TEMPERATURE, "TEMPERATURE"},
-	    {MeasurementType::CIRCUMFERENCE_INCREMENT, "CIRCUMFERENCE_INCREMENT"}};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/README b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/README
deleted file mode 100644
index bbf1db0c44bf4b375af8aefcd9f6649864d64677..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/README
+++ /dev/null
@@ -1,11 +0,0 @@
-# basic usage
-
-To send data using espnow, create a new Message object,
-then use the addData(value, identifier) method for every value
-to fill the message.
-when every value is added, use the send() method to send the data
-to the host (fipy). If the esp client has never recieved a config
-message from the host, it will instead broadcast the message.
-
----
-right now, it is not possible to add more than 10 values.
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ClientDataPackage.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ClientDataPackage.hpp
deleted file mode 100644
index f08e6bba4ea43308e606f06f7870735d7f4820bc..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ClientDataPackage.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#pragma once
-
-#include <ArduinoJson.h>
-#include "MeasurementData.hpp"
-#include "Protocol.hpp"
-#include "SensorInformation.hpp"
-#include <list>
-#include <optional>
-#include <string>
-#include <utility>
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-class ClientDataPackage {
-  private:
-	MeasurementData measurementData;
-	SensorInformation sensorInformation;
-	unsigned long timestamp; // maybe make this array
-
-  public:
-	ClientDataPackage(MeasurementData value, SensorInformation sensorInformation, unsigned long timestamp)
-	    : measurementData(std::move(value)), sensorInformation(std::move(sensorInformation)), timestamp(timestamp)
-	{
-	}
-
-	[[nodiscard]] const MeasurementData &getMeasurementData() const { return measurementData; }
-	[[nodiscard]] const SensorInformation &getSensorInformation() const { return sensorInformation; }
-	[[nodiscard]] unsigned long getTimestamp() const { return timestamp; }
-
-	[[nodiscard]] std::string getDataPackageAsMinifiedJsonString() const
-	{
-		StaticJsonDocument<250> document; // 250 byte is the max send size of espnow
-
-		document["sensorName"] = sensorInformation.getSensorName();
-		document["timestamp"] = timestamp;
-		document["protocol"] = protocolToString.at(sensorInformation.getProtocol());
-		document["value"] = measurementData.getValue();
-
-		if (measurementData.getChannel().has_value()) {
-			document["channel"] = measurementData.getChannel().value();
-		}
-
-		if (measurementData.getI2CAddress().has_value()) {
-			document["i2cAddress"] = measurementData.getI2CAddress().value();
-		}
-
-		document["measurementType"] = measurementData.getMeasurementType();
-
-		std::string jsonString;
-		serializeJson(document, jsonString);
-		return jsonString;
-	}
-
-};
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp
deleted file mode 100644
index 990ed1ff0992538d4a84bd45b601aa97a20e4f87..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#include "ESPNow.hpp"
-
-static const char *TAG = "ESPNOW";
-
-uint8_t BROADCAST_MAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-esp_now_peer_info_t hostInfo;
-Preferences preferences;
-bool msg_recv = false;
-
-bool was_msg_received(){
-	if(msg_recv){
-		msg_recv = false;
-		return true;
-	}
-	return false;
-}
-
-void get_host_mac(uint8_t *destination)
-{
-	preferences.begin("config", true);
-	if (preferences.isKey("host")) {
-		preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
-	} else {
-		memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-		ESP_LOGI(TAG, "Backup MAC address used");
-	}
-	preferences.end();
-}
-
-esp_err_t add_host_to_peers(config received){
-	esp_now_peer_info_t host;
-	memset(&host, 0, sizeof(host));
-	memcpy(host.peer_addr, received.host, sizeof(received.host));
-	host.encrypt = false;
-	host.channel = 0;
-	return esp_now_add_peer(&host);
-}
-
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status)
-{
-	ESP_LOGE(TAG, "Message sent to");
-	for(int i=0; i<6; i++){
-		Serial.print(mac_addr[i], HEX);
-		Serial.print(":");
-	}
-	Serial.println();
-	// go to sleep
-}
-
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
-{
-	// is msg host -> yes -> set bool
-	// assume host change not happening, rare event
-	// => on host change, broadcast 
-	ESP_LOGE(TAG, "Message recieved");
-	config received_msg;
-	memcpy(&received_msg, incomingData, sizeof(received_msg)); // TODO: check for valid mac
-														  // all the esp32 macs so far use the same first 3(?) bytes so maybe use that	
-	switch (received_msg.type){
-		case dataAck:{
-			ESP_LOGI(TAG, "dataAck received.");
-			msg_recv = true;
-			Time::getInstance().setTime(
-			received_msg.epoch_seconds); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
-			Serial.println(Time::getInstance().getEpochSeconds());
-			preferences.begin("config", false);		
-			if (!preferences.isKey("host")) {
-				if(preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)) > 0){;
-				ESP_LOGI(TAG, "host MAC address saved to flash");
-				}
-
-				// add host to peers
-				add_host_to_peers(received_msg);
-			}
-			preferences.end();
-		}
-		case hostChange:{
-			ESP_LOGI(TAG, "hostChange received");
-			Time::getInstance().setTime(received_msg.epoch_seconds);
-			// delete old host
-			preferences.begin("config", false);		
-			if(preferences.isKey("host")){
-				ESP_LOGI(TAG, "removing old host");
-				uint8_t old[6];
-				preferences.end();
-				get_host_mac(old); // maybe problem here, re-opening preferences
-				esp_now_del_peer(old);
-			}
-			// add new host
-			preferences.begin("config", false);		
-			if(preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)) > 0){
-				ESP_LOGI(TAG, "Host Mac address saved to flash:");
-			}
-			else{
-				ESP_LOGI(TAG, "Couldn't save Host Mac to flash");
-			}
-			preferences.end();
-			add_host_to_peers(received_msg);
-		}
-		default:{
-			break;
-		}
-	}
-}
-
-
-esp_err_t espnow_setup()
-{
-	esp_err_t result;
-	WiFi.mode(WIFI_STA);
-	result = esp_now_init();
-	if (result != ESP_OK) {
-		// initialization failed
-		return result; // not sure about this
-	}
-
-	get_host_mac(hostInfo.peer_addr); // check if there is a host saved in flash mem, broadcast otherwise
-
-	hostInfo.channel = 0;
-
-	// TODO: PMK is used to encrypt LMK with the AES-128 algorithm. Call esp_now_set_pmk() to set PMK. If PMK is not
-	// set, a default PMK will be used.
-	// https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/network/esp_now.html
-	hostInfo.encrypt = false;
-	esp_now_add_peer(&hostInfo);
-
-	esp_now_register_recv_cb(on_data_recv);
-	esp_now_register_send_cb(on_data_sent);
-
-	return ESP_OK;
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.hpp
deleted file mode 100644
index 266b139b46c184d91ddf0b7e741b6a70a3adf72a..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/ESPNow.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _ESPNOW
-#define _ESPNOW
-
-#include "Message.hpp"
-#include "Time.hpp"
-#include "esp_log.h"
-#include "ram_caching.hpp"
-#include <ClientDataPackage.hpp>
-#include <ESP32Time.h>
-#include <Preferences.h>
-#include <WiFi.h>
-#include <esp_now.h>
-
-enum MessageType{
-    dataAck,
-    hostChange
-};
-typedef struct config {
-	MessageType type;
-	uint8_t host[6];
-	long epoch_seconds;
-} config;
-
-esp_err_t espnow_setup();
-//esp_err_t espnow_send_message(const Message& message);
-bool is_host_defined();
-bool was_msg_received();
-void get_host_mac(uint8_t *destination);
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status);
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len);
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/Message.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/Message.cpp
deleted file mode 100644
index 7f7f8e2326e86ba647971170dbf3a43a83227c90..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/Message.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "Message.hpp"
-
-#include <utility>
-
-static const char *TAG = "MESSAGE";
-
-esp_err_t Message::send() const
-{
-	ESP_LOGI(TAG, "Sending message");
-	esp_err_t success;
-	auto messageData = getMessageAsMinifiedJsonString();
-
-	// conversion from std::string to c_str adds null terminator, which is why we add 1 to message length
-	success = esp_now_send(recipient, (uint8_t *)messageData.c_str(), (messageData.length() + 1) * sizeof(char));
-	if (success != ESP_OK) {
-		ESP_LOGE(TAG, "Error sending the data");
-		Serial.println(success, HEX);
-		// Removed caching from here, better do this in main
-	}
-	ESP_LOGE(TAG, "Sent data: %s", messageData.c_str());
-
-	ESP_LOGD(TAG, "time sent: %l", clientDataPackage.getTimestamp());
-	ESP_LOGD(TAG, "send status: %d", success);
-
-	return success;
-}
-
-std::string Message::getMessageAsMinifiedJsonString() const
-{
-	return clientDataPackage.getDataPackageAsMinifiedJsonString();
-}
-
-Message::Message(ClientDataPackage data) : clientDataPackage(std::move(data))
-{
-	// check for existing host mac address, use broadcast otherwise
-	get_host_mac(recipient);
-}
-Message::Message(MeasurementData const &data, const SensorInformation &information, unsigned long timestamp)
-    : clientDataPackage(data, information, timestamp)
-{
-	// check for existing host mac address, use broadcast otherwise
-	get_host_mac(recipient);
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/Message.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/Message.hpp
deleted file mode 100644
index 5a6ca8185393ababd2b3c83005a30cf8fd6052ab..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/espnow/src/Message.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#pragma once
-
-#include "ClientDataPackage.hpp"
-#include "ESPNow.hpp"
-#include "Time.hpp"
-#include "esp_log.h"
-#include <Arduino.h>
-#include <ArduinoJson.h>
-#include <ESP32Time.h>
-#include <esp_now.h>
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-class Message {
-  public:
-
-	explicit Message(ClientDataPackage data);
-
-	Message(MeasurementData const &data, const SensorInformation &information, unsigned long timestamp);
-	esp_err_t send() const;
-	[[nodiscard]] std::string getMessageAsMinifiedJsonString() const;
-
-  private:
-	ClientDataPackage clientDataPackage;
-	uint8_t recipient[6]{};
-};
-
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/ina219/ina219.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/ina219/ina219.cpp
deleted file mode 100644
index 930885f2d99e6ccd1571b778441dfd39668c2108..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "ina219.hpp"
-
-void ForteINA219 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!ina219.init()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getSensorName().c_str(), "Initialization failed");
-		return;
-	}
-}
-
-out_data_ina219 ForteINA219 ::readData()
-{
-	if (!ina219.getOverflow()) {
-		data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-		data.busVoltage_V = ina219.getBusVoltage_V();
-		data.current_mA = ina219.getCurrent_mA();
-		data.power_mW = ina219.getBusPower();
-		data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV / 1000);
-		data.ina219_overflow = ina219.getOverflow();
-
-		return data;
-	} else
-		return data;
-}
-
-std::list<Message> ForteINA219::buildMessages()
-{
-	std::list<Message> messages;
-	out_data_ina219 data = readData();
-	MeasurementData shuntVoltageData{
-		data.shuntVoltage_mV, 0, {}, measurementTypeToString.at(MeasurementType::SHUNT_VOLTAGE)
-	};
-	MeasurementData busVoltageData{
-		data.busVoltage_V, 0, {}, measurementTypeToString.at(MeasurementType::BUS_VOLTAGE)
-	};
-	MeasurementData currentMilliAmpData{
-		data.current_mA, 0, {}, measurementTypeToString.at(MeasurementType::CURRENT_mA)
-	};
-	MeasurementData powerMilliWattData{
-		data.power_mW, 0, {}, measurementTypeToString.at(MeasurementType::POWER_mA)
-	};
-	MeasurementData loadVoltageData{
-		data.loadVoltage_V, 0, {}, measurementTypeToString.at(MeasurementType::LOAD_VOLTAGE_V)
-	};
-	MeasurementData ina219OverflowData{
-		data.ina219_overflow, 0, {}, measurementTypeToString.at(MeasurementType::INA219_OVERFLOW)
-	};
-
-	messages.emplace_back(Message(shuntVoltageData, sensorInformation, 0));
-	messages.emplace_back(Message(busVoltageData, sensorInformation,0));
-	messages.emplace_back(Message(currentMilliAmpData, sensorInformation, 0));
-	messages.emplace_back(Message(powerMilliWattData, sensorInformation, 0));
-	messages.emplace_back(Message(loadVoltageData, sensorInformation, 0));
-	messages.emplace_back(Message(ina219OverflowData, sensorInformation, 0));
-
-	return messages;
-}
-SensorInformation ForteINA219::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/ina219/ina219.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 1985b996820f696290be13bc776a5f238fcd466a..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "Pinout.hpp"
-#include "Wire.h"
-#include "esp_log.h"
-#include <INA219_WE.h>
-
-struct out_data_ina219 {
-	float shuntVoltage_mV = 0.0;
-	float loadVoltage_V = 0.0;
-	float busVoltage_V = 0.0;
-	float current_mA = 0.0;
-	float power_mW = 0.0;
-	bool ina219_overflow = false;
-};
-
-class ForteINA219 : public ForteSensor<out_data_ina219> {
-  public:
-	void setup() override;
-	out_data_ina219 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	INA219_WE ina219;
-	out_data_ina219 data;
-	const SensorInformation sensorInformation{"INA219", Protocol::I2C};
-	enum class MeasurementType {SHUNT_VOLTAGE, BUS_VOLTAGE, CURRENT_mA, POWER_mA, LOAD_VOLTAGE_V, INA219_OVERFLOW};
-
-	std::map<MeasurementType, const char*> measurementTypeToString = {
-		{MeasurementType::SHUNT_VOLTAGE, "SHUNT_VOLTAGE"},
-		{MeasurementType::BUS_VOLTAGE, "BUS_VOLTAGE"},
-		{MeasurementType::CURRENT_mA, "CURRENT_mA"},
-		{MeasurementType::POWER_mA, "POWER_mA"},
-		{MeasurementType::LOAD_VOLTAGE_V, "LOAD_VOLTAGE_V"},
-		{MeasurementType::INA219_OVERFLOW, "INA219_OVERFLOW"}};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp
deleted file mode 100644
index e69a251121ae3a7884d314ed85d77fab2c3b4521..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-#include "rs485.hpp"
-// RS485 control
-#define RXPin 14 // Serial Receive pin
-#define TXPin 15 // Serial Transmit pin
-
-#define RE_DE_PIN 19 // Line to pull high or low to receive or send data from RS485
-
-#define POWER_SWITCH_PIN_12V 12
-#define POWER_SWITCH_PIN_5V 13
-
-// Configure sensors
-SoftwareSerial RS485Serial(TXPin, RXPin);
-SolarRadiationSensor solarSensor(&RS485Serial, 1, RE_DE_PIN);
-RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial, 2, RE_DE_PIN);         // Give 2 Sensor Adress 2
-SoilMoistureSensor soilSensor3 = SoilMoistureSensor(&RS485Serial, 3, RE_DE_PIN); //.....
-SoilMoistureSensor soilSensor4 = SoilMoistureSensor(&RS485Serial, 4, RE_DE_PIN);
-SoilMoistureSensor soilSensor5 = SoilMoistureSensor(&RS485Serial, 5, RE_DE_PIN);
-
-void Forte_RS485::setup()
-{
-	// configure the pins to be output only
-	pinMode(RE_DE_PIN, OUTPUT);
-	pinMode(POWER_SWITCH_PIN_12V, OUTPUT);
-	pinMode(POWER_SWITCH_PIN_5V, OUTPUT);
-	// Set data rates: Serial baud rate has to be WAY HIGHER than RS485Serial!
-	Serial.begin(115200);
-	RS485Serial.begin(4800);
-}
-
-out_data_rs485 Forte_RS485::readData()
-{
-	// Power on sensor
-	digitalWrite(POWER_SWITCH_PIN_12V, HIGH);
-	digitalWrite(POWER_SWITCH_PIN_5V, HIGH);
-	// Wait for sensors to power up
-	// TODO minimize delay
-	delay(500);
-	out_data_rs485 output;
-	output.solarRadiation = solarSensor.getSolarRadiation();
-	output.soilTemperature3 = soilSensor3.getMoistureTemp();
-	output.soilTemperature4 = soilSensor4.getMoistureTemp();
-	output.soilTemperature5 = soilSensor5.getMoistureTemp();
-	output.soilMoisture3 = soilSensor3.getMoisture();
-	output.soilMoisture4 = soilSensor4.getMoisture();
-	output.soilMoisture5 = soilSensor5.getMoisture();
-	output.precipitation = rainGauge.getInstantaneousPrecipitation();
-	digitalWrite(POWER_SWITCH_PIN_12V, LOW);
-	digitalWrite(POWER_SWITCH_PIN_5V, LOW);
-
-	gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_12V);
-	gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_5V);
-	return output;
-}
-
-std::list<Message> Forte_RS485::buildMessages()
-{
-	std::list<Message> messages;
-	out_data_rs485 output = readData();
-	MeasurementData solarRadiation {output.solarRadiation, measurementTypeToString.at(MeasurementType::SOLAR_RADIATION)};
-	MeasurementData soilTemp3{output.soilTemperature3, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_3)};
-	MeasurementData soilTemp4 {output.soilTemperature4, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_4)};
-	MeasurementData soilTemp5 {output.soilTemperature5, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_5)};
-	MeasurementData soilMoisture3 {output.soilMoisture3, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_3)};
-	MeasurementData soilMoisture4 {output.soilMoisture4, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_4)};
-	MeasurementData soilMoisture5 {output.soilMoisture5, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_5)};
-	MeasurementData precipitation {output.precipitation, measurementTypeToString.at(MeasurementType::PRECIPITATION)};
-
-	messages.emplace_back(Message{solarRadiation,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilTemp3,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilTemp4,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilTemp5,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilMoisture3,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilMoisture4,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message{soilMoisture5,sensorInformation, Time::getInstance().getEpochSeconds()});
-	messages.emplace_back(Message(precipitation, sensorInformation, Time::getInstance().getEpochSeconds()));
-
-	return messages;
-}
-
-SensorInformation Forte_RS485::getSensorInformation() const
-{
-	return sensorInformation;
-}
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp
deleted file mode 100644
index 0bac7654280994dcbef1d242f2dce10e19952aab..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/rs485/rs485.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef _RS485
-#define _RS485
-
-#include "SPI.h"
-// RTC (I2C)
-#include "RTClib.h"
-#include "Message.hpp"
-#include "ForteSensor.hpp"
-#include "SentecSensors.h"
-
-struct out_data_rs485{
-    float solarRadiation;
-    float soilMoisture3;
-    float soilTemperature3;
-    float soilMoisture4;
-    float soilTemperature4;
-    float soilMoisture5;
-    float soilTemperature5;
-    float precipitation;
-};
-
-class Forte_RS485 : public ForteSensor <out_data_rs485> {
-  public:
-	void setup() override;
-	out_data_rs485 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-    const SensorInformation sensorInformation{"RS485", Protocol::RS485};
-
-    enum class MeasurementType { 
-        SOLAR_RADIATION,
-        SOIL_MOISTURE_3,
-        SOIL_TEMPERATURE_3,
-        SOIL_MOISTURE_4,
-        SOIL_TEMPERATURE_4,
-        SOIL_MOISTURE_5,
-        SOIL_TEMPERATURE_5,
-        PRECIPITATION
-      };
-
-    std::map<MeasurementType, const char *> measurementTypeToString = {
-	    {MeasurementType::SOLAR_RADIATION, "SOLAR_RADIATION"},
-	    {MeasurementType::SOIL_MOISTURE_3, "SOIL_MOISTURE_3"},
-      {MeasurementType::SOIL_TEMPERATURE_3, "SOIL_TEMPERATURE_3"},
-      {MeasurementType::SOIL_MOISTURE_4, "SOIL_MOISTURE_4"},
-      {MeasurementType::SOIL_TEMPERATURE_4, "SOIL_TEMPERATURE_4"},
-	    {MeasurementType::SOIL_MOISTURE_5, "SOIL_MOISTURE_5"},
-      {MeasurementType::SOIL_TEMPERATURE_5, "SOIL_TEMPERATURE_5"},
-      {MeasurementType::PRECIPITATION, "PRECIPATION"}
-        };
-};
-#endif 
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/scd30/scd30.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/scd30/scd30.cpp
deleted file mode 100644
index 7cff381af4ac4034d955366bf571a89b7e551ddf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "scd30.hpp"
-
-void ForteSCD30 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!airSensor.begin()) {
-		// Sensor init went wrong
-		ESP_LOGW(sensorInformation.getSensorName().c_str(), "Initialization failed.");
-		return;
-	}
-}
-
-out_data_scd30 ForteSCD30 ::readData()
-{
-	if (airSensor.dataAvailable()) {
-		data.C02 = airSensor.getCO2();
-		data.Temperature = airSensor.getTemperature();
-		data.Humidity = airSensor.getHumidity();
-
-		return data;
-	}
-	throw NoDataAvailableException();
-}
-
-std::list<Message> ForteSCD30::buildMessages()
-{
-	std::list<Message> messages;
-
-	out_data_scd30 data = readData();
-	MeasurementData CO2Data{data.C02, 0, {}, "CO2"};
-	MeasurementData TempData{data.Temperature, 0, {}, "Temperature"};
-	MeasurementData HumidData{data.Humidity, 0, {}, "Humidity"};
-
-	messages.emplace_back(Message(CO2Data, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(TempData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	messages.emplace_back(Message(HumidData, sensorInformation, Time::getInstance().getEpochSeconds()));
-	
-	return messages;
-}
-
-SensorInformation ForteSCD30::getSensorInformation() const
-{
-	return sensorInformation;
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/scd30/scd30.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/scd30/scd30.hpp
deleted file mode 100644
index db3e85500924db80ac3c0b5cd3698314564f6fd6..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include "ForteSensor.hpp"
-#include "Message.hpp"
-#include "NoDataAvailableException.hpp"
-#include "Pinout.hpp"
-#include "esp_log.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <Wire.h>
-
-struct out_data_scd30 {
-	float C02;
-	float Temperature;
-	float Humidity;
-};
-
-class ForteSCD30 : public ForteSensor<out_data_scd30> {
-  public:
-	void setup() override;
-	out_data_scd30 readData() override;
-	std::list<Message> buildMessages() override;
-	[[nodiscard]] SensorInformation getSensorInformation() const override;
-
-  private:
-	SCD30 airSensor;
-	out_data_scd30 data;
-	const SensorInformation sensorInformation{"SCD30", Protocol::I2C};
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/time/src/Time.cpp b/Tests/Mieming/host_esp32Wroom/client/lib/time/src/Time.cpp
deleted file mode 100644
index 5cc3dbcdb7086eb1a27bcf98dccef1e49e78beaf..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/time/src/Time.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "Time.hpp"
-
-#include <utility>
-void Time::setTime(long epoch, int ms)
-{
-	this->rtc.setTime(epoch, ms);
-}
-tm Time::getTimeStruct()
-{
-	return this->rtc.getTimeStruct();
-}
-String Time::getDateTime(bool mode)
-{
-	return this->rtc.getDateTime(mode);
-}
-String Time::getTime(String format)
-{
-	return this->rtc.getTime(std::move(format));
-}
-unsigned long Time::getEpochSeconds()
-{
-	return this->rtc.getEpoch();
-}
-
-long Time::getMillis()
-{
-	return this->rtc.getMillis();
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/lib/time/src/Time.hpp b/Tests/Mieming/host_esp32Wroom/client/lib/time/src/Time.hpp
deleted file mode 100644
index 783bdef40ead148d61271c7cf92aeabb8f3242d7..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/lib/time/src/Time.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef ESPTIME
-#define ESPTIME
-
-#include <ESP32Time.h>
-
-class Time {
-  public:
-	static Time &getInstance()
-	{
-		static Time instance; // Guaranteed to be destroyed.
-		                      // Instantiated on first use.
-		return instance;
-	}
-
-	/*!
-	@brief  set the internal RTC time
-	@param  epoch
-	        epoch time in seconds
-	@param  ms
-	        microseconds (optional)
-	*/
-	void setTime(long epoch, int ms = 0);
-
-	/*!
-	@brief  get the internal RTC time as a tm struct
-	*/
-	tm getTimeStruct();
-
-	/*!
-	@brief  get the time and date as an Arduino String object
-	@param  mode
-	        true = Long date format
-	        false = Short date format
-	*/
-	String getDateTime(bool mode);
-
-	/*!
-	@brief  get the time as an Arduino String object with the specified format
-	@param	format
-	        time format
-	        http://www.cplusplus.com/reference/ctime/strftime/
-	*/
-	String getTime(String format = "%H:%M:%S");
-
-	/*!
-	@brief  get the current epoch seconds as long
-	*/
-	unsigned long getEpochSeconds();
-
-	/*!
-	@brief  get the current milliseconds as long
-	*/
-	long getMillis();
-
-  private:
-	Time() {} // Constructor? (the {} brackets) are needed here.
-
-	ESP32Time rtc = ESP32Time{};
-
-	// C++ 11
-	// =======
-	// We can use the better technique of deleting the methods
-	// we don't want.
-  public:
-	Time(Time const &) = delete;
-	void operator=(Time const &) = delete;
-
-	// Note: Scott Meyers mentions in his Effective Modern
-	//       C++ book, that deleted functions should generally
-	//       be public as it results in better error messages
-	//       due to the compilers behavior to check accessibility
-	//       before deleted status
-};
-
-#endif
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/platformio.ini b/Tests/Mieming/host_esp32Wroom/client/platformio.ini
deleted file mode 100644
index 7d1e3d4572d2efb5b492d0f7d9ac467575e7f1d4..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/platformio.ini
+++ /dev/null
@@ -1,42 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32dev]
-platform = espressif32
-board = esp32dev
-framework = arduino
-monitor_speed = 115200
-; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6
-; we use c++17 features (i.e. optionals in ClientDataPackage.hpp)
-build_flags = 
-	-I include
-	-DCORE_DEBUG_LEVEL=5
-	-std=gnu++17
-build_unflags = -std=gnu++11
-monitor_port = /dev/ttyUSB0
-upload_port = /dev/ttyUSB0
-lib_deps =
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	adafruit/Adafruit ADS1X15@^2.4.0
-	wollewald/INA219_WE@^1.3.1
-	adafruit/Adafruit BusIO@^1.13.2
-	Adafruit_I2CDevice
-	SPI
-	envirodiy/SDI-12@^2.1.4
-	fbiego/ESP32Time@^2.0.0
-	bblanchon/ArduinoJson@^6.19.4
-	plerup/EspSoftwareSerial@^6.16.1
-	4-20ma/ModbusMaster@^2.0.1
-	adafruit/RTClib@^2.1.1
-	sensirion/arduino-sht@^1.2.2
-	robtillaart/SHT85@^0.3.2
-	fbiego/ESP32Time@^2.0.0
-	bblanchon/ArduinoJson@^6.19.4
diff --git a/Tests/Mieming/host_esp32Wroom/client/test/TestClientDataPackage.cpp b/Tests/Mieming/host_esp32Wroom/client/test/TestClientDataPackage.cpp
deleted file mode 100644
index eea536cfbc63f7c6dc9797d8288a5887c384aa0c..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/test/TestClientDataPackage.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Created by zoe on 10/6/22.
-//
-
-#include "TestClientDataPackage.hpp"
-#include "MeasurementData.hpp"
-#include "Protocol.hpp"
-#include <vector>
-
-void test_export_to_json()
-{
-	auto dataPackage =
-	    ClientDataPackage(MeasurementData{1.1, 0, {}, "TEMPERATURE"}, SensorInformation{"DRS26", Protocol::Analog}, 0);
-
-	std::string json = dataPackage.getDataPackageAsMinifiedJsonString();
-	// expected
-	std::string expected =
-	    R"({"sensorName":"DRS26","timestamp":0,"protocol":"ANALOG","value":1.1,"channel":0,"measurementType":"TEMPERATURE"})";
-
-	TEST_ASSERT_EQUAL_STRING(expected.c_str(), json.c_str());
-}
-void test_export_to_json_no_analog()
-{
-	auto dataPackage =
-	    ClientDataPackage(MeasurementData{1.1, {}, {}, "TEMPERATURE"}, SensorInformation{"DRS26_DIGITAL", Protocol::I2C}, 0);
-
-	std::string json = dataPackage.getDataPackageAsMinifiedJsonString();
-	// expected
-	std::string expected =
-	    R"({"sensorName":"DRS26_DIGITAL","timestamp":0,"protocol":"I2C","value":1.1,"measurementType":"TEMPERATURE"})";
-
-	TEST_ASSERT_EQUAL_STRING(expected.c_str(), json.c_str());
-}
-
-void test_export_to_json_no_channel_no_address()
-{
-	auto dataPackage =
-	    ClientDataPackage(MeasurementData{1.1,"TEMPERATURE"}, SensorInformation{"DRS26_DIGITAL", Protocol::I2C}, 0);
-
-	std::string json = dataPackage.getDataPackageAsMinifiedJsonString();
-	// expected
-	std::string expected =
-	    R"({"sensorName":"DRS26_DIGITAL","timestamp":0,"protocol":"I2C","value":1.1,"measurementType":"TEMPERATURE"})";
-
-	TEST_ASSERT_EQUAL_STRING(expected.c_str(), json.c_str());
-}
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/test/TestClientDataPackage.hpp b/Tests/Mieming/host_esp32Wroom/client/test/TestClientDataPackage.hpp
deleted file mode 100644
index fa5f20396c423714daff914dfd16b24c8cd6cff5..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/test/TestClientDataPackage.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Created by zoe on 10/6/22.
-//
-
-#ifndef CLIENT_TESTCLIENTDATAPACKAGE_HPP
-#define CLIENT_TESTCLIENTDATAPACKAGE_HPP
-
-#include <unity.h>
-#include <Arduino.h>
-#include <ClientDataPackage.hpp>
-
-void test_export_to_json();
-void test_export_to_json_no_analog();
-void test_export_to_json_no_channel_no_address();
-
-#endif // CLIENT_TESTCLIENTDATAPACKAGE_HPP
diff --git a/Tests/Mieming/host_esp32Wroom/client/test/TestESPNow.cpp b/Tests/Mieming/host_esp32Wroom/client/test/TestESPNow.cpp
deleted file mode 100644
index 3a4c149bb8742e61c0a235691e7e0b8d9a3eda76..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/test/TestESPNow.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "TestESPNow.hpp"
-
-void test_on_data_recv_valid_config()
-{
-	uint8_t mac_addr[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-	int len = 0;
-	config conf = {host : {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, time_millis : 0};
-
-	// preferences / hostinfo would need to be global for this to work
-
-	TEST_FAIL();
-}
diff --git a/Tests/Mieming/host_esp32Wroom/client/test/TestESPNow.hpp b/Tests/Mieming/host_esp32Wroom/client/test/TestESPNow.hpp
deleted file mode 100644
index a2512b2ffd4ca48031415456d658302d4bae6b91..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/test/TestESPNow.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-#include <Arduino.h>
-#include <ESPNow.hpp>
-#include <unity.h>
-
-void test_on_data_recv_valid_config();
\ No newline at end of file
diff --git a/Tests/Mieming/host_esp32Wroom/client/test/main.cpp b/Tests/Mieming/host_esp32Wroom/client/test/main.cpp
deleted file mode 100644
index 5ad5f3f7a0c3626689b5093cfbec886b6afa4e96..0000000000000000000000000000000000000000
--- a/Tests/Mieming/host_esp32Wroom/client/test/main.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "TestESPNow.hpp"
-#include <Arduino.h>
-#include <unity.h>
-#include "TestClientDataPackage.hpp"
-
-void setup()
-{
-	delay(2000); // service delay
-
-	UNITY_BEGIN();
-	RUN_TEST(test_on_data_recv_valid_config);
-	RUN_TEST(test_export_to_json);
-	RUN_TEST(test_export_to_json_no_analog);
-	RUN_TEST(test_export_to_json_no_channel_no_address);
-	UNITY_END();
-}
-
-void loop() {}
\ No newline at end of file
diff --git a/client/client/.gitignore b/client/client/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/client/client/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/client/client/.gitkeep b/client/client/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/client/client/.idea/.gitignore b/client/client/.idea/.gitignore
deleted file mode 100644
index 13566b81b018ad684f3a35fee301741b2734c8f4..0000000000000000000000000000000000000000
--- a/client/client/.idea/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/client/client/.idea/client.iml b/client/client/.idea/client.iml
deleted file mode 100644
index f08604bb65b25149b195f9e9f282f9683a428592..0000000000000000000000000000000000000000
--- a/client/client/.idea/client.iml
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module classpath="CMake" type="CPP_MODULE" version="4" />
\ No newline at end of file
diff --git a/client/client/.idea/discord.xml b/client/client/.idea/discord.xml
deleted file mode 100644
index 8cf359dc797a2f4ea9396035b180f3b2a608f406..0000000000000000000000000000000000000000
--- a/client/client/.idea/discord.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="DiscordProjectSettings">
-    <option name="show" value="PROJECT" />
-    <option name="description" value="" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/client/client/.idea/misc.xml b/client/client/.idea/misc.xml
deleted file mode 100644
index 79b3c94830bab93d40d0770f2765540fe24ed423..0000000000000000000000000000000000000000
--- a/client/client/.idea/misc.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
-</project>
\ No newline at end of file
diff --git a/client/client/.idea/modules.xml b/client/client/.idea/modules.xml
deleted file mode 100644
index 0742ebc3adff31ae2584d375adada6d0fdf83f93..0000000000000000000000000000000000000000
--- a/client/client/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="ProjectModuleManager">
-    <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/client.iml" filepath="$PROJECT_DIR$/.idea/client.iml" />
-    </modules>
-  </component>
-</project>
\ No newline at end of file
diff --git a/client/client/.idea/vcs.xml b/client/client/.idea/vcs.xml
deleted file mode 100644
index b2bdec2d71b6a5ce4ae49efc37516809c50e4d5e..0000000000000000000000000000000000000000
--- a/client/client/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="VcsDirectoryMappings">
-    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
-  </component>
-</project>
\ No newline at end of file
diff --git a/client/client/.vscode/extensions.json b/client/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/client/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/client/client/.vscode/settings.json b/client/client/.vscode/settings.json
deleted file mode 100644
index f2678ea4c48c26f99077dbbf0eb0fc0f3aff8455..0000000000000000000000000000000000000000
--- a/client/client/.vscode/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-    "files.associations": {
-        "optional": "cpp"
-    }
-}
\ No newline at end of file
diff --git a/client/client/CMakeLists.txt b/client/client/CMakeLists.txt
deleted file mode 100644
index b3419c616f3665d0bcbb3f960fa1f731d1092c13..0000000000000000000000000000000000000000
--- a/client/client/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
-# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-#
-# If you need to override existing CMake configuration or add extra,
-# please create `CMakeListsUser.txt` in the root of project.
-# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
-
-cmake_minimum_required(VERSION 3.13)
-set(CMAKE_SYSTEM_NAME Generic)
-set(CMAKE_C_COMPILER_WORKS 1)
-set(CMAKE_CXX_COMPILER_WORKS 1)
-
-project("client" C CXX)
-
-include(CMakeListsPrivate.txt)
-
-if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
-include(CMakeListsUser.txt)
-endif()
-
-add_custom_target(
-    Production ALL
-    COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_custom_target(
-    Debug ALL
-    COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_executable(Z_DUMMY_TARGET ${SRC_LIST})
diff --git a/client/client/CMakeListsPrivate.txt b/client/client/CMakeListsPrivate.txt
deleted file mode 100644
index f4383485a4b1e7858b65c3291d1cda3af73b34e0..0000000000000000000000000000000000000000
--- a/client/client/CMakeListsPrivate.txt
+++ /dev/null
@@ -1,296 +0,0 @@
-# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
-# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-#
-# If you need to override existing CMake configuration or add extra,
-# please create `CMakeListsUser.txt` in the root of project.
-# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
-
-
-
-set(CMAKE_CONFIGURATION_TYPES "esp32-c3-devkitm-1" CACHE STRING "Build Types reflect PlatformIO Environments" FORCE)
-
-# Convert "Home Directory" that may contain unescaped backslashes on Windows
-
-
-SET(CMAKE_C_COMPILER "$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-gcc")
-SET(CMAKE_CXX_COMPILER "$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-g++")
-SET(CMAKE_CXX_FLAGS "-std=gnu++17 -march=rv32imc -fexceptions -fno-rtti -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Wno-error=format= -nostartfiles -Wno-format -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD")
-SET(CMAKE_C_FLAGS "-march=rv32imc -std=gnu99 -Wno-old-style-declaration -ffunction-sections -fdata-sections -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wno-unused-parameter -Wno-sign-compare -ggdb -Wno-error=format= -nostartfiles -Wno-format -Os -freorder-blocks -Wwrite-strings -fstack-protector -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -MMD")
-
-SET(CMAKE_C_STANDARD 99)
-set(CMAKE_CXX_STANDARD 17)
-
-if (CMAKE_BUILD_TYPE MATCHES "esp32-c3-devkitm-1")
-    add_definitions(-DPLATFORMIO=60104)
-    add_definitions(-DARDUINO_ESP32C3_DEV)
-    add_definitions(-DCORE_DEBUG_LEVEL=5)
-    add_definitions(-DHAVE_CONFIG_H)
-    add_definitions(-DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\")
-    add_definitions(-DUNITY_INCLUDE_CONFIG_H)
-    add_definitions(-DWITH_POSIX)
-    add_definitions(-D_GNU_SOURCE)
-    add_definitions(-DIDF_VER=\"v4.4.2\")
-    add_definitions(-DESP_PLATFORM)
-    add_definitions(-D_POSIX_READER_WRITER_LOCKS)
-    add_definitions(-DARDUINO_ARCH_ESP32)
-    add_definitions(-DESP32)
-    add_definitions(-DF_CPU=160000000L)
-    add_definitions(-DARDUINO=10812)
-    add_definitions(-DARDUINO_VARIANT=\"esp32c3\")
-    add_definitions(-DARDUINO_BOARD=\"Espressif\ ESP32-C3-DevKitM-1\")
-    add_definitions(-DARDUINO_PARTITION_default)
-
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/include")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/src")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/scd30")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/ina219")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/drs26_digital")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/deep_sleep")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/espnow/src")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/includes")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/caching/src")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/time/src")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/ArduinoJson/src")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src")
-    include_directories("${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_common/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_common/tinycrypt/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_core")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_core/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_core/storage")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/btc/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_models/common/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_models/client/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/mesh_models/server/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/api/core/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/api/models/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/esp_ble_mesh/api")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/gpio_button/button/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp32-camera/driver/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp32-camera/conversions/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qio_qspi/include")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/cores/esp32")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/variants/esp32c3")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/dr26_analogue")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/rs485")
-    include_directories("$ENV{HOME}/GitRepos/sensor-system/client/libs/sht85")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/FS/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SD/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/USB/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/Update/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src")
-    include_directories("$ENV{HOME}/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src")
-    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/8.4.0")
-    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include/c++/8.4.0/riscv32-esp-elf")
-    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/lib/gcc/riscv32-esp-elf/8.4.0/include-fixed")
-    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/lib/gcc/riscv32-esp-elf/8.4.0/include")
-    include_directories("$ENV{HOME}/.platformio/packages/toolchain-riscv32-esp/riscv32-esp-elf/include")
-
-    FILE(GLOB_RECURSE EXTRA_LIB_SOURCES
-        ${CMAKE_CURRENT_LIST_DIR}/.pio/libdeps/esp32-c3-devkitm-1/*.*
-        $ENV{HOME}/GitRepos/sensor-system/client/libs/*.*
-    )
-endif()
-
-
-FILE(GLOB_RECURSE SRC_LIST
-    ${CMAKE_CURRENT_LIST_DIR}/src/*.*
-    ${CMAKE_CURRENT_LIST_DIR}/lib/*.*
-    ${CMAKE_CURRENT_LIST_DIR}/test/*.*
-)
-
-list(APPEND SRC_LIST ${EXTRA_LIB_SOURCES})
diff --git a/client/client/src/main.cpp b/client/client/src/main.cpp
deleted file mode 100644
index 3836f7f746d67e89bc9f533d4ae99d14f2181611..0000000000000000000000000000000000000000
--- a/client/client/src/main.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "dr26.hpp"
-#include "NoDataAvailableException.hpp"
-#include "esp_log.h"
-#include "f_deep_sleep.hpp"
-#include <Arduino.h>
-#include <drs26.hpp>
-#include <ina219.hpp>
-#include <scd30.hpp>
-#include "ESPNow.hpp"
-// #include "esp32-hal-log.h"
-static const std::string TAG = "MAIN";
-
-ForteDRS26 drs26;
-//
-//ForteDR26 dr26_channel0;
-//ForteDR26 dr26_channel1;
-
-void setup()
-{
-	Serial.begin(115200);
-
-	DeepSleep::print_wakeup_reason();
-	DeepSleep::bootCount++;
-	ESP_LOGD(TAG.c_str(), "Boot number: %d", DeepSleep::bootCount);
-
-
-//	dr26_channel1.setup();
-//	dr26_channel0.setChannel(0);
-//	dr26_channel1.setChannel(1);
-	drs26.setup();
-	espnow_setup();
-	//	log_e("Setup complete.");
-}
-
-void loop()
-{
-//
-//Serial.println("***********************1-DRS26**********************************");
-//Serial.println(dr26_channel0.readData(),5);
-//Serial.println("***********************2-DRS26**********************************");
-//Serial.println(dr26_channel1.readData(),5);
-
-	try {
-
-		auto messages = drs26.buildMessages();
-
-		for (const Message &message : messages) {
-			if(message.send() != ESP_OK){
-				RtcMemory::store(message.getMessageAsMinifiedJsonString());
-			}
-			delay(5000);
-			if(!was_msg_received()){
-				RtcMemory::store(message.getMessageAsMinifiedJsonString());
-			}
-		}
-
-	} catch (const NoDataAvailableException &e) {
-		std::cerr << e.what() << '\n';
-	}
-
-	Serial.print("This device: ");
-	Serial.println("\n");
-
-	delay(5000);
-	DeepSleep::deep_sleep(5);
-}
diff --git a/client/client/test/README b/client/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/client/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/client/client/test/TestClientDataPackage.cpp b/client/client/test/TestClientDataPackage.cpp
deleted file mode 100644
index eea536cfbc63f7c6dc9797d8288a5887c384aa0c..0000000000000000000000000000000000000000
--- a/client/client/test/TestClientDataPackage.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// Created by zoe on 10/6/22.
-//
-
-#include "TestClientDataPackage.hpp"
-#include "MeasurementData.hpp"
-#include "Protocol.hpp"
-#include <vector>
-
-void test_export_to_json()
-{
-	auto dataPackage =
-	    ClientDataPackage(MeasurementData{1.1, 0, {}, "TEMPERATURE"}, SensorInformation{"DRS26", Protocol::Analog}, 0);
-
-	std::string json = dataPackage.getDataPackageAsMinifiedJsonString();
-	// expected
-	std::string expected =
-	    R"({"sensorName":"DRS26","timestamp":0,"protocol":"ANALOG","value":1.1,"channel":0,"measurementType":"TEMPERATURE"})";
-
-	TEST_ASSERT_EQUAL_STRING(expected.c_str(), json.c_str());
-}
-void test_export_to_json_no_analog()
-{
-	auto dataPackage =
-	    ClientDataPackage(MeasurementData{1.1, {}, {}, "TEMPERATURE"}, SensorInformation{"DRS26_DIGITAL", Protocol::I2C}, 0);
-
-	std::string json = dataPackage.getDataPackageAsMinifiedJsonString();
-	// expected
-	std::string expected =
-	    R"({"sensorName":"DRS26_DIGITAL","timestamp":0,"protocol":"I2C","value":1.1,"measurementType":"TEMPERATURE"})";
-
-	TEST_ASSERT_EQUAL_STRING(expected.c_str(), json.c_str());
-}
-
-void test_export_to_json_no_channel_no_address()
-{
-	auto dataPackage =
-	    ClientDataPackage(MeasurementData{1.1,"TEMPERATURE"}, SensorInformation{"DRS26_DIGITAL", Protocol::I2C}, 0);
-
-	std::string json = dataPackage.getDataPackageAsMinifiedJsonString();
-	// expected
-	std::string expected =
-	    R"({"sensorName":"DRS26_DIGITAL","timestamp":0,"protocol":"I2C","value":1.1,"measurementType":"TEMPERATURE"})";
-
-	TEST_ASSERT_EQUAL_STRING(expected.c_str(), json.c_str());
-}
\ No newline at end of file
diff --git a/client/client/test/TestClientDataPackage.hpp b/client/client/test/TestClientDataPackage.hpp
deleted file mode 100644
index fa5f20396c423714daff914dfd16b24c8cd6cff5..0000000000000000000000000000000000000000
--- a/client/client/test/TestClientDataPackage.hpp
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Created by zoe on 10/6/22.
-//
-
-#ifndef CLIENT_TESTCLIENTDATAPACKAGE_HPP
-#define CLIENT_TESTCLIENTDATAPACKAGE_HPP
-
-#include <unity.h>
-#include <Arduino.h>
-#include <ClientDataPackage.hpp>
-
-void test_export_to_json();
-void test_export_to_json_no_analog();
-void test_export_to_json_no_channel_no_address();
-
-#endif // CLIENT_TESTCLIENTDATAPACKAGE_HPP
diff --git a/client/client/test/TestESPNow.cpp b/client/client/test/TestESPNow.cpp
deleted file mode 100644
index 3a4c149bb8742e61c0a235691e7e0b8d9a3eda76..0000000000000000000000000000000000000000
--- a/client/client/test/TestESPNow.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "TestESPNow.hpp"
-
-void test_on_data_recv_valid_config()
-{
-	uint8_t mac_addr[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-	int len = 0;
-	config conf = {host : {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, time_millis : 0};
-
-	// preferences / hostinfo would need to be global for this to work
-
-	TEST_FAIL();
-}
diff --git a/client/client/test/TestESPNow.hpp b/client/client/test/TestESPNow.hpp
deleted file mode 100644
index a2512b2ffd4ca48031415456d658302d4bae6b91..0000000000000000000000000000000000000000
--- a/client/client/test/TestESPNow.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-#include <Arduino.h>
-#include <ESPNow.hpp>
-#include <unity.h>
-
-void test_on_data_recv_valid_config();
\ No newline at end of file
diff --git a/client/client/test/main.cpp b/client/client/test/main.cpp
deleted file mode 100644
index 5ad5f3f7a0c3626689b5093cfbec886b6afa4e96..0000000000000000000000000000000000000000
--- a/client/client/test/main.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "TestESPNow.hpp"
-#include <Arduino.h>
-#include <unity.h>
-#include "TestClientDataPackage.hpp"
-
-void setup()
-{
-	delay(2000); // service delay
-
-	UNITY_BEGIN();
-	RUN_TEST(test_on_data_recv_valid_config);
-	RUN_TEST(test_export_to_json);
-	RUN_TEST(test_export_to_json_no_analog);
-	RUN_TEST(test_export_to_json_no_channel_no_address);
-	UNITY_END();
-}
-
-void loop() {}
\ No newline at end of file
diff --git a/Tests/Mieming/client_esp32C3/client/.gitignore b/client/client_central_mast/.gitignore
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/.gitignore
rename to client/client_central_mast/.gitignore
diff --git a/Tests/Mieming/client_esp32C3/client/.gitkeep b/client/client_central_mast/.gitkeep
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/.gitkeep
rename to client/client_central_mast/.gitkeep
diff --git a/client/client/platformio.ini b/client/client_central_mast/platformio.ini
similarity index 77%
rename from client/client/platformio.ini
rename to client/client_central_mast/platformio.ini
index b1168679c8c4d514f117b44943c9a2bed37ada34..ff8b091e2261a5a43c777684f8b151b67f11f345 100644
--- a/client/client/platformio.ini
+++ b/client/client_central_mast/platformio.ini
@@ -8,9 +8,9 @@
 ; Please visit documentation for the other options and examples
 ; https://docs.platformio.org/page/projectconf.html
 
-[env:esp32-c3-devkitm-1]
+[env:esp32dev]
 platform = espressif32
-board = esp32-c3-devkitm-1
+board = esp32dev
 framework = arduino
 monitor_speed = 115200
 lib_ldf_mode = deep
@@ -23,8 +23,8 @@ build_flags =
     -DCORE_DEBUG_LEVEL=5
     -std=gnu++17
 build_unflags = -std=gnu++11
-;monitor_port = /dev/ttyUSB0
-;upload_port = /dev/ttyUSB0
+monitor_port = /dev/ttyUSB0
+upload_port = /dev/ttyUSB0
 lib_deps =
     sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
     Wire
@@ -36,3 +36,10 @@ lib_deps =
     envirodiy/SDI-12@^2.1.4
     fbiego/ESP32Time@^2.0.0
     bblanchon/ArduinoJson@^6.19.4
+    plerup/EspSoftwareSerial@6.16.1
+    4-20ma/ModbusMaster@^2.0.1
+    adafruit/RTClib@^2.1.1
+    sensirion/arduino-sht@^1.2.2
+    robtillaart/SHT85@^0.3.2
+    fbiego/ESP32Time@^2.0.0
+    bblanchon/ArduinoJson@^6.19.4
diff --git a/Tests/Mieming/host_esp32Wroom/client/src/main.cpp b/client/client_central_mast/src/main.cpp
similarity index 100%
rename from Tests/Mieming/host_esp32Wroom/client/src/main.cpp
rename to client/client_central_mast/src/main.cpp
diff --git a/Tests/Mieming/client_esp32C3/client/test/README b/client/client_central_mast/test/README
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/test/README
rename to client/client_central_mast/test/README
diff --git a/Tests/Mieming/client_esp32C3/client/test/TestClientDataPackage.cpp b/client/client_central_mast/test/TestClientDataPackage.cpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/test/TestClientDataPackage.cpp
rename to client/client_central_mast/test/TestClientDataPackage.cpp
diff --git a/Tests/Mieming/client_esp32C3/client/test/TestClientDataPackage.hpp b/client/client_central_mast/test/TestClientDataPackage.hpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/test/TestClientDataPackage.hpp
rename to client/client_central_mast/test/TestClientDataPackage.hpp
diff --git a/Tests/Mieming/client_esp32C3/client/test/TestESPNow.cpp b/client/client_central_mast/test/TestESPNow.cpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/test/TestESPNow.cpp
rename to client/client_central_mast/test/TestESPNow.cpp
diff --git a/Tests/Mieming/client_esp32C3/client/test/TestESPNow.hpp b/client/client_central_mast/test/TestESPNow.hpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/test/TestESPNow.hpp
rename to client/client_central_mast/test/TestESPNow.hpp
diff --git a/Tests/Mieming/client_esp32C3/client/test/main.cpp b/client/client_central_mast/test/main.cpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/test/main.cpp
rename to client/client_central_mast/test/main.cpp
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/.gitignore b/client/client_satellite/.gitignore
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/.gitignore
rename to client/client_satellite/.gitignore
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/.gitkeep b/client/client_satellite/.gitkeep
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/.gitkeep
rename to client/client_satellite/.gitkeep
diff --git a/client/client_satellite/platformio.ini b/client/client_satellite/platformio.ini
new file mode 100644
index 0000000000000000000000000000000000000000..b7c388a5d2b4fd93dd5ddb27969ebd259d807847
--- /dev/null
+++ b/client/client_satellite/platformio.ini
@@ -0,0 +1,33 @@
+[env:esp32dev]
+platform = espressif32@^5.0.0
+board = esp32dev
+framework = arduino
+monitor_speed = 115200
+lib_ldf_mode = deep
+lib_extra_dirs =
+    ../libs
+; C++17 https://community.platformio.org/t/esp32-c-17-toolchain-missing-std-optional/25850/6
+; we use c++17 features (i.e. optionals in ClientDataPackage.hpp)
+build_flags =
+    -I include
+    -DCORE_DEBUG_LEVEL=5
+    -std=gnu++17
+build_unflags = -std=gnu++11
+
+lib_deps =
+    sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
+    Wire
+    adafruit/Adafruit ADS1X15@^2.4.0
+    wollewald/INA219_WE@^1.3.1
+    adafruit/Adafruit BusIO@^1.13.2
+    Adafruit_I2CDevice
+    SPI
+    envirodiy/SDI-12@^2.1.4
+    fbiego/ESP32Time@^2.0.0
+    bblanchon/ArduinoJson@^6.19.4
+    4-20ma/ModbusMaster@^2.0.1
+    adafruit/RTClib@^2.1.1
+    sensirion/arduino-sht@^1.2.2
+    robtillaart/SHT85@^0.3.2
+    plerup/EspSoftwareSerial@6.16.1
+
diff --git a/client/client_satellite/src/main.cpp b/client/client_satellite/src/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b430f2c6a42670555b4397fdab96ea8131f0d3cd
--- /dev/null
+++ b/client/client_satellite/src/main.cpp
@@ -0,0 +1,123 @@
+#include "dr26.hpp"
+#include "NoDataAvailableException.hpp"
+#include "f_deep_sleep.hpp"
+#include <Arduino.h>
+#include "ESPNow.hpp"
+#include "LC709203F.h"
+
+// FIXME: Use descriptive names for the constants below.
+LC709203F gg;
+static const std::string TAG = "MAIN";
+
+
+ForteDR26 dr26_channel3;
+ForteDR26 dr26_channel1;
+ForteDR26 dr26_channel2;
+ForteDR26 dr26_channel0_power;
+
+void setup() {
+    Serial.begin(115200);
+    //Set the GPIO which conrtols the step up to OUTPUT
+    gpio_set_direction(GPIO_NUM_32, GPIO_MODE_OUTPUT);
+
+    gg.begin();
+    gg.setCellCapacity(LC709203F_APA_1000MAH);
+
+
+    DeepSleep::print_wakeup_reason();
+    DeepSleep::bootCount++;
+    ESP_LOGD(TAG.c_str(), "Boot number: %d", DeepSleep::bootCount);
+
+    gpio_set_level(GPIO_NUM_32, 1);
+    dr26_channel1.setup();
+    dr26_channel3.setChannel(3);
+    dr26_channel1.setChannel(1);
+    dr26_channel2.setChannel(2);
+    dr26_channel0_power.setChannel(0);
+    gpio_set_level(GPIO_NUM_32, 0);
+
+    espnow_setup();
+    //	log_e("Setup complete.");
+}
+
+void loop() {
+    gpio_set_level(GPIO_NUM_32, 1);
+    Serial.println(
+            "***********************1-DRS26 NOT YET CONNECTED**********************************");
+    Serial.println(dr26_channel1.readData(), 5);
+    Serial.println("***********************2-DRS26**********************************");
+    Serial.println(dr26_channel2.readData(), 5);
+    Serial.println("***********************3-DRS26 *********************************");
+    Serial.println(dr26_channel3.readData(), 5);
+
+
+    Serial.println("***********************0-Voltage-Battery**********************************");
+    dr26_channel3.changeGain(GAIN_TWOTHIRDS);
+    Serial.println(dr26_channel0_power.readData(), 5);
+
+    Serial.println("***********************REAL-Voltage-Battery**********************************");
+    Serial.println(gg.cellVoltage_mV() / 1000.0);
+
+    try {
+
+        auto messages = dr26_channel0_power.buildMessages();
+
+
+        for (const Message &message: messages) {
+            if (message.send() != ESP_OK) {
+                RtcMemory::store(message.getMessageAsMinifiedJsonString());
+            }
+            delay(5000);
+            if (!was_msg_received()) {
+                RtcMemory::store(message.getMessageAsMinifiedJsonString());
+            }
+        }
+
+        dr26_channel3.changeGain(GAIN_ONE);
+        auto messages2 = dr26_channel1.buildMessages(1, "CIRCUMFERENCE_INCREMENT");
+
+        for (const Message &message2: messages2) {
+            if (message2.send() != ESP_OK) {
+                RtcMemory::store(message2.getMessageAsMinifiedJsonString());
+            }
+            delay(5000);
+            if (!was_msg_received()) {
+                RtcMemory::store(message2.getMessageAsMinifiedJsonString());
+            }
+        }
+
+        auto messages3 = dr26_channel2.buildMessages(2, "CIRCUMFERENCE_INCREMENT");
+
+        for (const Message &message3: messages3) {
+            if (message3.send() != ESP_OK) {
+                RtcMemory::store(message3.getMessageAsMinifiedJsonString());
+            }
+            delay(5000);
+            if (!was_msg_received()) {
+                RtcMemory::store(message3.getMessageAsMinifiedJsonString());
+            }
+        }
+
+        auto messages4 = gg.buildMessages();
+        for (const Message &message4: messages4) {
+            if (message4.send() != ESP_OK) {
+                RtcMemory::store(message4.getMessageAsMinifiedJsonString());
+            }
+            delay(5000);
+            if (!was_msg_received()) {
+                RtcMemory::store(message4.getMessageAsMinifiedJsonString());
+            }
+        }
+
+
+    } catch (const NoDataAvailableException &e) {
+        std::cerr << e.what() << '\n';
+    }
+
+
+    Serial.print("This device: ");
+    Serial.println("\n");
+    gpio_set_level(GPIO_NUM_32, 0);
+    delay(5000);
+    DeepSleep::deep_sleep(100);
+}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/test/README b/client/client_satellite/test/README
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/test/README
rename to client/client_satellite/test/README
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestClientDataPackage.cpp b/client/client_satellite/test/TestClientDataPackage.cpp
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestClientDataPackage.cpp
rename to client/client_satellite/test/TestClientDataPackage.cpp
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestClientDataPackage.hpp b/client/client_satellite/test/TestClientDataPackage.hpp
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestClientDataPackage.hpp
rename to client/client_satellite/test/TestClientDataPackage.hpp
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestESPNow.cpp b/client/client_satellite/test/TestESPNow.cpp
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestESPNow.cpp
rename to client/client_satellite/test/TestESPNow.cpp
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestESPNow.hpp b/client/client_satellite/test/TestESPNow.hpp
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/test/TestESPNow.hpp
rename to client/client_satellite/test/TestESPNow.hpp
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/test/main.cpp b/client/client_satellite/test/main.cpp
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/test/main.cpp
rename to client/client_satellite/test/main.cpp
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/LC7090203F/LC709203F.cpp b/client/libs/LC7090203F/LC709203F.cpp
similarity index 95%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/lib/LC7090203F/LC709203F.cpp
rename to client/libs/LC7090203F/LC709203F.cpp
index f0cefcd217efeb1a76030109ebe6c71149608259..b7db139da8b51d3bc9fad1475324ff1e71b98d73 100644
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/LC7090203F/LC709203F.cpp
+++ b/client/libs/LC7090203F/LC709203F.cpp
@@ -1,284 +1,284 @@
-/*!
- *  @file LC709203F.cpp
- *
- *  @mainpage LC709203F Battery Monitor code
- *
- *  @section intro_sec Introduction
- *
- * 	I2C Driver for the LC709203F Battery Monitor IC
- *
- *  @section author Author
- *
- *  Daniel deBeer (EzSBC)
- *
- * 	@section license License
- *
- * 	BSD (see license.txt)
- *
- * 	@section  HISTORY
- *
- *     v1.0 - First release
- */
-
-#include "Arduino.h"
-#include <Wire.h>
-#include "LC709203F.h"
-
-/*!
- *    @brief  Instantiates a new LC709203F class
- */
-LC709203F::LC709203F(void) {}
-
-LC709203F::~LC709203F(void) {}
-
-uint8_t i2c_address = LC709203F_I2C_ADDR ;
-
-/*!
- *    @brief  Sets up the hardware and initializes I2C
- *    @param  
- *    @return True if initialization was successful, otherwise false.
- */
-bool LC709203F::begin( void ) 
-{
-  Wire.begin();
-  setPowerMode(LC709203F_POWER_OPERATE) ;
-  setCellCapacity(LC709203F_APA_500MAH) ;
-  setTemperatureMode(LC709203F_TEMPERATURE_THERMISTOR) ;
-  
-  return true;
-}
-
-
-/*!
- *    @brief  Get IC version
- *    @return 16-bit value read from LC709203F_RO_ICVERSION registers
- */
-uint16_t LC709203F::getICversion(void) 
-{
-  uint16_t vers = 0;
-  vers = read16(LC709203F_RO_ICVERSION);
-  return vers;
-}
-
-
-/*!
- *    @brief  Initialize the RSOC algorithm
- *    @return
- */
-void LC709203F::initRSOC(void) 
-{
-  write16(LC709203F_WO_INITRSOC, 0xAA55);
-}
-
-
-/*!
- *    @brief  Get battery voltage
- *    @return Cell voltage in milliVolt
- */
-uint16_t LC709203F::cellVoltage_mV(void) 
-{
-  uint16_t mV = 0;
-  mV = read16(LC709203F_RO_CELLVOLTAGE);
-  return 1000 * ( mV / 1000.0 ) ;
-}
-
-
-/*!
- *    @brief  Get cell remaining charge in percent (0-100%)
- *    @return point value from 0 to 1000
- */
-uint16_t LC709203F::cellRemainingPercent10(void) 
-{
-  uint16_t percent = 0;
-  percent = read16(LC709203F_RO_ITE );
-  return percent ;
-}
-
-/*!
- *    @brief  Get battery state of charge in percent (0-100%)
- *    @return point value from 0 to 100
- */
-uint16_t LC709203F::cellStateOfCharge(void)
-{
-  uint16_t percent = 0;
-  percent = read16(LC709203F_RW_RSOC );
-  return percent ;
-}
-
-
-/*!
- *    @brief  Get battery thermistor temperature
- *    @return value from -20 to 60 *C  // CdB Needs testing, no thermistor on ESP32_Bat_R2 board
- */
-uint16_t LC709203F::getCellTemperature(void) 
-{
-  uint16_t temp = 0;
-  temp = read16(LC709203F_RW_CELLTEMPERATURE );
-  return temp ;
-}
-
-
-/*!
- *    @brief  Set the temperature mode (external or internal)
- *    @param t The desired mode: LC709203F_TEMPERATURE_I2C or
- * LC709203F_TEMPERATURE_THERMISTOR
- */
-void LC709203F::setTemperatureMode(lc709203_tempmode_t t) 
-{
-  return write16(LC709203F_RW_STATUSBIT, (uint16_t)t);
-}
-
-
-/*!
- *    @brief  Set the cell capacity, 
- *    @param apa The lc709203_adjustment_t enumerated approximate cell capacity
- */
-void LC709203F::setCellCapacity(lc709203_adjustment_t apa) 
-{
-  write16(LC709203F_RW_APA, (uint16_t)apa);
-}
-
-
-/*!
- *    @brief  Set the alarm pin to respond to an RSOC percentage level
- *    @param percent The threshold value, set to 0 to disable alarm
- */
-void LC709203F::setAlarmRSOC(uint8_t percent) 
-{
-  write16(LC709203F_RW_ALARMRSOC, percent);
-}
-
-
-/*!
- *    @brief  Set the alarm pin to respond to a battery voltage level
- *    @param voltage The threshold value, set to 0 to disable alarm
- */
-void LC709203F::setAlarmVoltage(float voltage) 
-{
-  write16(LC709203F_RW_ALARMVOLT, voltage * 1000);
-}
-
-
-/*!
- *    @brief  Set the power mode, LC709203F_POWER_OPERATE or
- *            LC709203F_POWER_SLEEP
- *    @param t The power mode desired
- *    @return 
- */
-void LC709203F::setPowerMode(lc709203_powermode_t t) 
-{
-  write16(LC709203F_RW_POWERMODE, (uint16_t)t);
-}
-
-/*!
- *    @brief  Set cell type 
- *    @param t The profile, Table 8.  Normally 1 for 3.7 nominal 4.2V Full carge cells
- *    @return
- */
-void LC709203F::setCellProfile(lc709203_cell_profile_t t) 
-{
-  write16(LC709203F_RW_PROFILE, (uint16_t)t);
-}
-
-/*!
- *    @brief  Get the thermistor Beta value //For completeness since we have to write it.
- *    @return The uint16_t Beta value
- */
-uint16_t LC709203F::getThermistorBeta(void) 
-{
-  uint16_t val = 0;
-  val = read16(LC709203F_RW_THERMISTORB);
-  return val;
-}
-
-
-/*!
- *    @brief  Set the thermistor Beta value
- *    @param b The value to set it to
- *    @return 
- */
-void LC709203F::setThermistorB(uint16_t beta) 
-{
-  write16(LC709203F_RW_THERMISTORB, beta);
-}
-
-
-std::list<Message> LC709203F::buildMessages()
-{
-	std::list<Message> messages;
-	float data =cellVoltage_mV()/1000.0;
-	MeasurementData IncrementData{data, 0, {},"Voltage-Batterie"};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
-}
-
-
-//
-// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-//
-/*
-    INTERNAL I2C FUNCTIONS and CRC CALCULATION
-*/
-
-
-/**
- * Performs a CRC8 calculation on the supplied values.
- *
- * @param data  Pointer to the data to use when calculating the CRC8.
- * @param len   The number of bytes in 'data'.
- *
- * @return The computed CRC8 value.
- */
-static uint8_t crc8(uint8_t *data, int len) 
-{
-  const uint8_t POLYNOMIAL(0x07);
-  uint8_t crc(0x00);
-
-  for (int j = len; j; --j) {
-    crc ^= *data++;
-
-    for (int i = 8; i; --i) {
-      crc = (crc & 0x80) ? (crc << 1) ^ POLYNOMIAL : (crc << 1);
-    }
-  }
-  return crc;
-}
-
-
-// writes a 16-bit word (d) to register pointer regAddress
-// when selecting a register pointer to read from, data = 0
-void LC709203F::write16(uint8_t regAddress, uint16_t data)
-{
-  // Setup array to hold bytes to send including CRC-8
-  uint8_t crcArray[5];
-  crcArray[0] = 0x16;
-  crcArray[1] = regAddress;
-  crcArray[2] = lowByte(data);
-  crcArray[3] = highByte(data);
-  // Calculate crc of preceding four bytes and place in crcArray[4]
-  crcArray[4] = crc8( crcArray, 4 );
-  // Device address
-  Wire.beginTransmission(i2c_address);
-  // Register address
-  Wire.write(regAddress);
-  // low byte
-  Wire.write(crcArray[2]);
-  // high byte
-  Wire.write(crcArray[3]);
-  // Send crc8 
-  Wire.write(crcArray[4]);
-  Wire.endTransmission();
-}
-
-int16_t LC709203F::read16( uint8_t regAddress)
-{
-  int16_t data = 0;
-  Wire.beginTransmission(i2c_address);
-  Wire.write(regAddress);
-  Wire.endTransmission(false);
-  Wire.requestFrom(i2c_address, 2);
-  uint8_t lowByteData = Wire.read();
-  uint8_t highByteData = Wire.read();
-  data = word(highByteData, lowByteData);
-  return( data );
-}
+/*!
+ *  @file LC709203F.cpp
+ *
+ *  @mainpage LC709203F Battery Monitor code
+ *
+ *  @section intro_sec Introduction
+ *
+ * 	I2C Driver for the LC709203F Battery Monitor IC
+ *
+ *  @section author Author
+ *
+ *  Daniel deBeer (EzSBC)
+ *
+ * 	@section license License
+ *
+ * 	BSD (see license.txt)
+ *
+ * 	@section  HISTORY
+ *
+ *     v1.0 - First release
+ */
+
+#include "Arduino.h"
+#include <Wire.h>
+#include "LC709203F.h"
+
+/*!
+ *    @brief  Instantiates a new LC709203F class
+ */
+LC709203F::LC709203F(void) {}
+
+LC709203F::~LC709203F(void) {}
+
+uint8_t i2c_address = LC709203F_I2C_ADDR ;
+
+/*!
+ *    @brief  Sets up the hardware and initializes I2C
+ *    @param  
+ *    @return True if initialization was successful, otherwise false.
+ */
+bool LC709203F::begin( void ) 
+{
+  Wire.begin();
+  setPowerMode(LC709203F_POWER_OPERATE) ;
+  setCellCapacity(LC709203F_APA_500MAH) ;
+  setTemperatureMode(LC709203F_TEMPERATURE_THERMISTOR) ;
+  
+  return true;
+}
+
+
+/*!
+ *    @brief  Get IC version
+ *    @return 16-bit value read from LC709203F_RO_ICVERSION registers
+ */
+uint16_t LC709203F::getICversion(void) 
+{
+  uint16_t vers = 0;
+  vers = read16(LC709203F_RO_ICVERSION);
+  return vers;
+}
+
+
+/*!
+ *    @brief  Initialize the RSOC algorithm
+ *    @return
+ */
+void LC709203F::initRSOC(void) 
+{
+  write16(LC709203F_WO_INITRSOC, 0xAA55);
+}
+
+
+/*!
+ *    @brief  Get battery voltage
+ *    @return Cell voltage in milliVolt
+ */
+uint16_t LC709203F::cellVoltage_mV(void) 
+{
+  uint16_t mV = 0;
+  mV = read16(LC709203F_RO_CELLVOLTAGE);
+  return 1000 * ( mV / 1000.0 ) ;
+}
+
+
+/*!
+ *    @brief  Get cell remaining charge in percent (0-100%)
+ *    @return point value from 0 to 1000
+ */
+uint16_t LC709203F::cellRemainingPercent10(void) 
+{
+  uint16_t percent = 0;
+  percent = read16(LC709203F_RO_ITE );
+  return percent ;
+}
+
+/*!
+ *    @brief  Get battery state of charge in percent (0-100%)
+ *    @return point value from 0 to 100
+ */
+uint16_t LC709203F::cellStateOfCharge(void)
+{
+  uint16_t percent = 0;
+  percent = read16(LC709203F_RW_RSOC );
+  return percent ;
+}
+
+
+/*!
+ *    @brief  Get battery thermistor temperature
+ *    @return value from -20 to 60 *C  // CdB Needs testing, no thermistor on ESP32_Bat_R2 board
+ */
+uint16_t LC709203F::getCellTemperature(void) 
+{
+  uint16_t temp = 0;
+  temp = read16(LC709203F_RW_CELLTEMPERATURE );
+  return temp ;
+}
+
+
+/*!
+ *    @brief  Set the temperature mode (external or internal)
+ *    @param t The desired mode: LC709203F_TEMPERATURE_I2C or
+ * LC709203F_TEMPERATURE_THERMISTOR
+ */
+void LC709203F::setTemperatureMode(lc709203_tempmode_t t) 
+{
+  return write16(LC709203F_RW_STATUSBIT, (uint16_t)t);
+}
+
+
+/*!
+ *    @brief  Set the cell capacity, 
+ *    @param apa The lc709203_adjustment_t enumerated approximate cell capacity
+ */
+void LC709203F::setCellCapacity(lc709203_adjustment_t apa) 
+{
+  write16(LC709203F_RW_APA, (uint16_t)apa);
+}
+
+
+/*!
+ *    @brief  Set the alarm pin to respond to an RSOC percentage level
+ *    @param percent The threshold value, set to 0 to disable alarm
+ */
+void LC709203F::setAlarmRSOC(uint8_t percent) 
+{
+  write16(LC709203F_RW_ALARMRSOC, percent);
+}
+
+
+/*!
+ *    @brief  Set the alarm pin to respond to a battery voltage level
+ *    @param voltage The threshold value, set to 0 to disable alarm
+ */
+void LC709203F::setAlarmVoltage(float voltage) 
+{
+  write16(LC709203F_RW_ALARMVOLT, voltage * 1000);
+}
+
+
+/*!
+ *    @brief  Set the power mode, LC709203F_POWER_OPERATE or
+ *            LC709203F_POWER_SLEEP
+ *    @param t The power mode desired
+ *    @return 
+ */
+void LC709203F::setPowerMode(lc709203_powermode_t t) 
+{
+  write16(LC709203F_RW_POWERMODE, (uint16_t)t);
+}
+
+/*!
+ *    @brief  Set cell type 
+ *    @param t The profile, Table 8.  Normally 1 for 3.7 nominal 4.2V Full carge cells
+ *    @return
+ */
+void LC709203F::setCellProfile(lc709203_cell_profile_t t) 
+{
+  write16(LC709203F_RW_PROFILE, (uint16_t)t);
+}
+
+/*!
+ *    @brief  Get the thermistor Beta value //For completeness since we have to write it.
+ *    @return The uint16_t Beta value
+ */
+uint16_t LC709203F::getThermistorBeta(void) 
+{
+  uint16_t val = 0;
+  val = read16(LC709203F_RW_THERMISTORB);
+  return val;
+}
+
+
+/*!
+ *    @brief  Set the thermistor Beta value
+ *    @param b The value to set it to
+ *    @return 
+ */
+void LC709203F::setThermistorB(uint16_t beta) 
+{
+  write16(LC709203F_RW_THERMISTORB, beta);
+}
+
+
+std::list<Message> LC709203F::buildMessages()
+{
+	std::list<Message> messages;
+	float data =cellVoltage_mV()/1000.0;
+	MeasurementData IncrementData{data, 0, {},"Voltage-Batterie"};
+	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
+	return messages;
+}
+
+
+//
+// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
+//
+/*
+    INTERNAL I2C FUNCTIONS and CRC CALCULATION
+*/
+
+
+/**
+ * Performs a CRC8 calculation on the supplied values.
+ *
+ * @param data  Pointer to the data to use when calculating the CRC8.
+ * @param len   The number of bytes in 'data'.
+ *
+ * @return The computed CRC8 value.
+ */
+static uint8_t crc8(uint8_t *data, int len) 
+{
+  const uint8_t POLYNOMIAL(0x07);
+  uint8_t crc(0x00);
+
+  for (int j = len; j; --j) {
+    crc ^= *data++;
+
+    for (int i = 8; i; --i) {
+      crc = (crc & 0x80) ? (crc << 1) ^ POLYNOMIAL : (crc << 1);
+    }
+  }
+  return crc;
+}
+
+
+// writes a 16-bit word (d) to register pointer regAddress
+// when selecting a register pointer to read from, data = 0
+void LC709203F::write16(uint8_t regAddress, uint16_t data)
+{
+  // Setup array to hold bytes to send including CRC-8
+  uint8_t crcArray[5];
+  crcArray[0] = 0x16;
+  crcArray[1] = regAddress;
+  crcArray[2] = lowByte(data);
+  crcArray[3] = highByte(data);
+  // Calculate crc of preceding four bytes and place in crcArray[4]
+  crcArray[4] = crc8( crcArray, 4 );
+  // Device address
+  Wire.beginTransmission(i2c_address);
+  // Register address
+  Wire.write(regAddress);
+  // low byte
+  Wire.write(crcArray[2]);
+  // high byte
+  Wire.write(crcArray[3]);
+  // Send crc8 
+  Wire.write(crcArray[4]);
+  Wire.endTransmission();
+}
+
+int16_t LC709203F::read16( uint8_t regAddress)
+{
+  int16_t data = 0;
+  Wire.beginTransmission(i2c_address);
+  Wire.write(regAddress);
+  Wire.endTransmission(false);
+  Wire.requestFrom(i2c_address, 2);
+  uint8_t lowByteData = Wire.read();
+  uint8_t highByteData = Wire.read();
+  data = word(highByteData, lowByteData);
+  return( data );
+}
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/LC7090203F/LC709203F.h b/client/libs/LC7090203F/LC709203F.h
similarity index 97%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/lib/LC7090203F/LC709203F.h
rename to client/libs/LC7090203F/LC709203F.h
index bf4a1b47b3e025ac0c393f2e391ced3611d7a727..2b139191cd4da2f3ed52249999bd25baceb003d2 100644
--- a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/LC7090203F/LC709203F.h
+++ b/client/libs/LC7090203F/LC709203F.h
@@ -1,112 +1,112 @@
-/*!
- *  @file LC709203F.h
- *
- * 	I2C Driver for the  LC709203F LiPo Cell Monitor
- *
- *	BSD license (see license.txt)
- */
-
-#ifndef _LC709203F_H
-#define _LC709203F_H
-
-#include "Arduino.h"
-//#include <I2CDevice.h>
-#include <Wire.h>
-#include "Message.hpp"
-
-#define LC709203F_I2C_ADDR              0x0B    // LC709203F default i2c address
-
-// Registers per datasheet Table 6
-
-#define LC709203F_WO_BEFORE_RSOC        0x04    // Executes RSOC initialization with sampled maximum voltage when 0xAA55 is set
-#define LC709203F_RW_THERMISTORB 	      0x06    // Sets B−constant of the thermistor to be measured.
-#define LC709203F_WO_INITRSOC 			    0x07    // Executes RSOC initialization when 0xAA55 is set.
-#define LC709203F_RW_CELLTEMPERATURE 	  0x08 	  // Read or Write Cell Temperature  For ESP32-Bar-Rev2 must write temperature, no thermistor on board
-#define LC709203F_RO_CELLVOLTAGE 		    0x09    // Read cell voltage
-#define LC709203F_RW_CURRENTDIRECTION   0x0A    // Selects Auto/Charge/Discharge mode 0x0000: Auto mode, 0x0001: Charge mode, 0xFFFF: Discharge mode
-#define LC709203F_RW_APA 				        0x0B    // APA Register, Table 7
-#define LC709203F_RW_APTHERMISTOR       0x0C    // Sets a value to adjust temperature measurement delay timing. Defaults to0x001E
-#define LC709203F_RW_RSOC               0x0D    // Read cell indicator to empty in 1% steps
-#define LC709203F_RO_ITE     			      0x0F    // Read cell indicator to empty in 0.1% steps
-#define LC709203F_RO_ICVERSION 		      0x11    // Contains the ID number of the IC
-#define LC709203F_RW_PROFILE	 		      0x12    // Adjusts the battery profile for nominal and fully charged voltages, see Table 8
-#define LC709203F_RW_ALARMRSOC 		      0x13    // Alarm on percent threshold
-#define LC709203F_RW_ALARMVOLT 		      0x14    // Alarm on voltage threshold
-#define LC709203F_RW_POWERMODE 		      0x15    // Sets sleep/power mode 0x0001: Operational mode 0x0002: Sleep mode
-#define LC709203F_RW_STATUSBIT 		      0x16    // Temperature method, 0x0000: I2C mode, 0x0001: Thermistor mode 
-#define LC709203F_RO_CELLPROFILE        0x1A    // Displays battery profile code
-
-static uint8_t crc8(uint8_t *data, int len);
-
-/*!  Approx cell capacity Table 7 */
-typedef enum {
-  LC709203F_APA_100MAH              = 0x08,
-  LC709203F_APA_200MAH              = 0x0B,
-  LC709203F_APA_500MAH              = 0x10,
-  LC709203F_APA_1000MAH             = 0x19,
-  LC709203F_APA_2000MAH             = 0x2D,
-  LC709203F_APA_3000MAH             = 0x36,
-} lc709203_adjustment_t;
-
-/*!  Cell profile */
-typedef enum {
-  LC709203_NOM3p7_Charge4p2         = 1,
-  LC709203_NOM3p8_Charge4p35        = 3,
-  LC709203_NOM3p8_Charge4p35_Less500mAh = 6,
-  LC709203_ICR18650_SAMSUNG         = 5,
-  LC709203_ICR18650_PANASONIC       = 4
-}lc709203_cell_profile_t ;
-
-/*!  Cell temperature source */
-typedef enum {
-  LC709203F_TEMPERATURE_I2C         = 0x0000,
-  LC709203F_TEMPERATURE_THERMISTOR  = 0x0001,
-} lc709203_tempmode_t;
-
-/*!  Chip power state */
-typedef enum {
-  LC709203F_POWER_OPERATE           = 0x0001,
-  LC709203F_POWER_SLEEP             = 0x0002,
-} lc709203_powermode_t;
-
-/*!
- *    @brief  Class that stores state and functions for interacting with
- *            the LC709203F I2C LiPo monitor
- */
-class LC709203F {
-public:
-  LC709203F();
-  ~LC709203F();
-
-  bool begin( void );
-  void initRSOC(void);
-
-  void setPowerMode(lc709203_powermode_t t);
-  void setCellCapacity(lc709203_adjustment_t apa);
-  void setCellProfile(lc709203_cell_profile_t t);
-  
-  uint16_t getICversion(void);
-
-  uint16_t cellVoltage_mV(void);
-  uint16_t cellRemainingPercent10(void);	// Remaining capacity in increments of 0.1% as integer
-	uint16_t cellStateOfCharge(void);				// In increments of 1% as integer
-	
-
-  uint16_t getThermistorBeta(void);
-  void setThermistorB(uint16_t beta);
-
-  void setTemperatureMode(lc709203_tempmode_t t);
-  uint16_t getCellTemperature(void);
-
-  void setAlarmRSOC(uint8_t percent);
-  void setAlarmVoltage(float voltage);
-  std::list<Message> buildMessages();
-
-protected:
-  void write16( uint8_t regAddress, uint16_t data);
-  int16_t read16(uint8_t regAddress);
-private:
-  const SensorInformation sensorInformation{"DR26", Protocol::Analog};
-};
-
-#endif
+/*!
+ *  @file LC709203F.h
+ *
+ * 	I2C Driver for the  LC709203F LiPo Cell Monitor
+ *
+ *	BSD license (see license.txt)
+ */
+
+#ifndef _LC709203F_H
+#define _LC709203F_H
+
+#include "Arduino.h"
+//#include <I2CDevice.h>
+#include <Wire.h>
+#include "Message.hpp"
+
+#define LC709203F_I2C_ADDR              0x0B    // LC709203F default i2c address
+
+// Registers per datasheet Table 6
+
+#define LC709203F_WO_BEFORE_RSOC        0x04    // Executes RSOC initialization with sampled maximum voltage when 0xAA55 is set
+#define LC709203F_RW_THERMISTORB 	      0x06    // Sets B−constant of the thermistor to be measured.
+#define LC709203F_WO_INITRSOC 			    0x07    // Executes RSOC initialization when 0xAA55 is set.
+#define LC709203F_RW_CELLTEMPERATURE 	  0x08 	  // Read or Write Cell Temperature  For ESP32-Bar-Rev2 must write temperature, no thermistor on board
+#define LC709203F_RO_CELLVOLTAGE 		    0x09    // Read cell voltage
+#define LC709203F_RW_CURRENTDIRECTION   0x0A    // Selects Auto/Charge/Discharge mode 0x0000: Auto mode, 0x0001: Charge mode, 0xFFFF: Discharge mode
+#define LC709203F_RW_APA 				        0x0B    // APA Register, Table 7
+#define LC709203F_RW_APTHERMISTOR       0x0C    // Sets a value to adjust temperature measurement delay timing. Defaults to0x001E
+#define LC709203F_RW_RSOC               0x0D    // Read cell indicator to empty in 1% steps
+#define LC709203F_RO_ITE     			      0x0F    // Read cell indicator to empty in 0.1% steps
+#define LC709203F_RO_ICVERSION 		      0x11    // Contains the ID number of the IC
+#define LC709203F_RW_PROFILE	 		      0x12    // Adjusts the battery profile for nominal and fully charged voltages, see Table 8
+#define LC709203F_RW_ALARMRSOC 		      0x13    // Alarm on percent threshold
+#define LC709203F_RW_ALARMVOLT 		      0x14    // Alarm on voltage threshold
+#define LC709203F_RW_POWERMODE 		      0x15    // Sets sleep/power mode 0x0001: Operational mode 0x0002: Sleep mode
+#define LC709203F_RW_STATUSBIT 		      0x16    // Temperature method, 0x0000: I2C mode, 0x0001: Thermistor mode 
+#define LC709203F_RO_CELLPROFILE        0x1A    // Displays battery profile code
+
+static uint8_t crc8(uint8_t *data, int len);
+
+/*!  Approx cell capacity Table 7 */
+typedef enum {
+  LC709203F_APA_100MAH              = 0x08,
+  LC709203F_APA_200MAH              = 0x0B,
+  LC709203F_APA_500MAH              = 0x10,
+  LC709203F_APA_1000MAH             = 0x19,
+  LC709203F_APA_2000MAH             = 0x2D,
+  LC709203F_APA_3000MAH             = 0x36,
+} lc709203_adjustment_t;
+
+/*!  Cell profile */
+typedef enum {
+  LC709203_NOM3p7_Charge4p2         = 1,
+  LC709203_NOM3p8_Charge4p35        = 3,
+  LC709203_NOM3p8_Charge4p35_Less500mAh = 6,
+  LC709203_ICR18650_SAMSUNG         = 5,
+  LC709203_ICR18650_PANASONIC       = 4
+}lc709203_cell_profile_t ;
+
+/*!  Cell temperature source */
+typedef enum {
+  LC709203F_TEMPERATURE_I2C         = 0x0000,
+  LC709203F_TEMPERATURE_THERMISTOR  = 0x0001,
+} lc709203_tempmode_t;
+
+/*!  Chip power state */
+typedef enum {
+  LC709203F_POWER_OPERATE           = 0x0001,
+  LC709203F_POWER_SLEEP             = 0x0002,
+} lc709203_powermode_t;
+
+/*!
+ *    @brief  Class that stores state and functions for interacting with
+ *            the LC709203F I2C LiPo monitor
+ */
+class LC709203F {
+public:
+  LC709203F();
+  ~LC709203F();
+
+  bool begin( void );
+  void initRSOC(void);
+
+  void setPowerMode(lc709203_powermode_t t);
+  void setCellCapacity(lc709203_adjustment_t apa);
+  void setCellProfile(lc709203_cell_profile_t t);
+  
+  uint16_t getICversion(void);
+
+  uint16_t cellVoltage_mV(void);
+  uint16_t cellRemainingPercent10(void);	// Remaining capacity in increments of 0.1% as integer
+	uint16_t cellStateOfCharge(void);				// In increments of 1% as integer
+	
+
+  uint16_t getThermistorBeta(void);
+  void setThermistorB(uint16_t beta);
+
+  void setTemperatureMode(lc709203_tempmode_t t);
+  uint16_t getCellTemperature(void);
+
+  void setAlarmRSOC(uint8_t percent);
+  void setAlarmVoltage(float voltage);
+  std::list<Message> buildMessages();
+
+protected:
+  void write16( uint8_t regAddress, uint16_t data);
+  int16_t read16(uint8_t regAddress);
+private:
+  const SensorInformation sensorInformation{"DR26", Protocol::Analog};
+};
+
+#endif
diff --git a/client/libs/SentecSensors/SentecSensors.cpp b/client/libs/SentecSensors/SentecSensors.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8a2c47010ac191f56cfd5515bb5ac91ca546ba86
--- /dev/null
+++ b/client/libs/SentecSensors/SentecSensors.cpp
@@ -0,0 +1,330 @@
+#include <SentecSensors.h>
+/***************************************
+ *          RS485 SENSOR READOUT
+ ****************************************/
+
+SentecSensorRS485::SentecSensorRS485(SoftwareSerial *ser, byte add)
+{
+	address = add;
+	RS485 = ser;
+}
+SentecSensorRS485::SentecSensorRS485(SoftwareSerial *ser, byte add, uint8_t serialControlPin)
+{
+	address = add;
+	RS485 = ser;
+	serialCommunicationControlPin = serialControlPin;
+}
+
+void SentecSensorRS485::write(byte queryFrame[], int length)
+{
+	// sends a message (bytes) to the sensor
+
+	// Initialize the transmitter
+	digitalWrite(serialCommunicationControlPin, HIGH);
+	// Send message: request a reading from the sensor
+	RS485->write(queryFrame, length);
+	RS485->flush();
+	// Initialize the receiver
+	digitalWrite(serialCommunicationControlPin, LOW);
+}
+
+String SentecSensorRS485::getValueStr(float value)
+{
+	if (valid) {
+		return String(value, 1);
+	} else {
+		return String("null");
+	}
+}
+
+String SentecSensorRS485::getValueStr(int value)
+{
+	if (valid) {
+		return String(value);
+	} else {
+		return String("null");
+	}
+}
+
+void SentecSensorRS485::queryAddress()
+{
+	// request the address of the sensor with ONLY ONE SENSOR ON THE BUS
+
+	byte tmp_addr = address; // store the address in a temporary byte
+	address = 0xFF;          // change the address to FF (0) for address check
+	readRegister(word(0x07, 0xD0), 2);
+	address = tmp_addr; // set the original address back
+}
+
+void SentecSensorRS485::readRegister(int registerStartAddress)
+{
+	readRegister(registerStartAddress, 1);
+}
+
+void SentecSensorRS485::readRegister(int registerStartAddress, int registerLength)
+{
+	// function code 0x03: get data measured by the sensor
+	byte query[8];
+	query[0] = address;
+	// function code
+	query[1] = 0x03;
+	// register start address
+	query[2] = registerStartAddress >> 8;
+	query[3] = registerStartAddress & 0xFF;
+	// register length
+	query[4] = registerLength >> 8;
+	query[5] = registerLength & 0xFF;
+	// calculate last two bytes (CRC check)
+	calculateCRC(query, sizeof(query) - 2);
+	// #   Serial.print("Query (get data): 0x");                    #Print bytes
+	// #   printBytes(query, 8);
+	//  write the data request to the modbus line
+	write(query, sizeof(query));
+	// get response from sensor
+	getResponse();
+}
+
+void SentecSensorRS485::writeRegister(int registerAddress, int value)
+{
+	// function code 0x06: change sensor settings
+	// e.g. a new address, reset rainfal data...
+
+	byte query[8];
+	query[0] = address;
+	// function code
+	query[1] = 0x06;
+	// register start address
+	query[2] = registerAddress >> 8;
+	query[3] = registerAddress & 0xFF;
+	// register length
+	query[4] = value >> 8;
+	query[5] = value & 0xFF;
+	calculateCRC(query, sizeof(query) - 2);
+	Serial.print("Query (settings):    ");
+	printBytes(query, 8);
+	write(query, sizeof(query));
+	getResponse();
+}
+
+void SentecSensorRS485::setAddress(byte add)
+{
+	// change the address of a sensor
+	writeRegister(word(0x07, 0xD0), add);
+	// TODO check response: matches the sent message exactly
+	address = add;
+}
+
+void SentecSensorRS485::resetAnswerFrame()
+{
+	for (int i = 0; i < 10; i++) {
+		answerFrame[i] = 0;
+	}
+}
+
+bool SentecSensorRS485::getResponse()
+{
+	// reads the response of a sensor
+	valid = true;
+	int idx = 0;
+	int byteReceived;
+	// usual response length: changed in the while loop to match the response,
+	//   changed only when reading data (then it's 7 or 9  bytes, sensor dpendent)
+	int responseLength = 8;
+	// reading an answer takes up to 39 milliseconds for 2 byte readRegister
+	const int timeout = 200;
+	const int retries = 1; // #editet to q
+	size_t tries = 1;
+
+	for (tries; tries <= retries; tries++) {
+		// if we lose connection with the sensor, we get an array of zeros back
+		resetAnswerFrame();
+
+		unsigned long time = millis();
+		while (idx < responseLength && (millis() - time) < timeout) {
+			if (RS485->available()) {
+				byteReceived = RS485->read();
+				// Serial.println(byteReceived, HEX);
+				// check for first byte. It has to be the device address unless for broadcasts with address = 0xFF
+				if (idx == 0 && address != 0xFF && byteReceived != address) {
+					Serial.print("Invalid byte. First byte needs to be address 0x");
+					Serial.print(address, HEX);
+					Serial.print(" but got 0x");
+					Serial.print(byteReceived, HEX);
+					Serial.println("instead");
+				} else {
+					answerFrame[idx] = byteReceived;
+					// for reading register: third received byte is data length, read number of bytes accordingly
+					if (idx == 2 && answerFrame[1] == 0x03) {
+						// 5 bytes for address, function, data length, CRC_H, CRC_L
+						responseLength = 5 + byteReceived;
+					}
+					idx++;
+				}
+			}
+		}
+
+		delay(10);
+		Serial.print("Response: 0x");
+		printBytes(answerFrame, responseLength);
+		Serial.print("Tries: ");
+		Serial.println(tries);
+		Serial.print("Bytes received: ");
+		Serial.println(idx);
+		word crc_received = word(answerFrame[responseLength - 2], answerFrame[responseLength - 1]);
+		word crc = calculateCRC(answerFrame, responseLength - 2);
+		if (crc_received != word(crc)) {
+			Serial.print("CRC wrong: Expected ");
+			printBytes(crc);
+			Serial.print(" got ");
+			printBytes(crc_received);
+			Serial.println();
+			valid = false;
+			resetAnswerFrame();
+		}
+
+		if (answerFrame[0] == 0) {
+			valid = false;
+		}
+		if (valid) {
+			break;
+		}
+	}
+	return valid;
+}
+
+unsigned int SentecSensorRS485::calculateCRC(byte query[], int length)
+{
+	// Change the last two bytes of the queryFrame to conform to a CRC check
+	// Yes, this is necessary. No, I don't know exactly what it does.
+	unsigned int tmp1, tmp2, flag;
+	tmp1 = 0xFFFF;
+	for (unsigned char i = 0; i < length; i++) {
+		tmp1 = tmp1 ^ query[i];
+		for (unsigned char j = 1; j <= 8; j++) {
+			flag = tmp1 & 0x0001;
+			tmp1 >>= 1;
+			if (flag)
+				tmp1 ^= 0xA001;
+		}
+	}
+	// Reverse byte order.
+	tmp2 = tmp1 >> 8;
+	tmp1 = (tmp1 << 8) | tmp2;
+	tmp1 &= 0xFFFF;
+	// change last two query bytes
+	query[length + 1] = tmp1;
+	query[length] = tmp1 >> 8;
+
+	return tmp1; // the returned value is already swapped - CRC_L byte is first & CRC_H byte is last
+}
+
+void SentecSensorRS485::printBytes(byte *data, int length)
+{
+	// prints 8-bit data in hex with leading zeroes
+	char tmp[16];
+	for (int i = 0; i < length; i++) {
+		sprintf(tmp, "%.2X", data[i]);
+		// sprintf(tmp, "0x%.2X",data[i]);
+		Serial.print(tmp);
+		Serial.print(" ");
+	}
+	Serial.println();
+}
+
+void SentecSensorRS485::printBytes(word data)
+{
+	char tmp[10];
+	sprintf(tmp, "0x%.2X", data >> 8);
+	Serial.print(tmp);
+	sprintf(tmp, "%.2X", data & 0xFF);
+	// sprintf(tmp, "0x%.2X",data[i]);
+	Serial.print(tmp);
+}
+
+word SolarRadiationSensor::getSolarRadiation()
+{
+	readRegister(0, 1);
+	glob = word(answerFrame[3], answerFrame[4]);
+	Serial.print("Global solar radiation: ");
+	Serial.print(glob, DEC);
+	Serial.println(" W/m^2");
+	return glob;
+}
+
+String SolarRadiationSensor::getSolarRadiationStr()
+{
+	return getValueStr((int)glob);
+}
+
+void RainGaugeSensor::resetPrecipitation()
+{
+	// clears rainfall rata from the rain gauge
+	// delay resetting after the last register reading
+	delay(100);
+	Serial.println("Resetting precipitation sum");
+	writeRegister(0x00, 0x5A);
+	// TODO check response: matches the sent message exactly
+}
+
+void RainGaugeSensor::resetSensor()
+{
+	// no clue what the difference between this one and the previous one is...
+	//   and the manual is not helpful, of course
+	delay(100);
+	Serial.println("Resetting precipitation sum");
+	writeRegister(0x37, 0x03);
+	// TODO check response: matches the sent message exactly
+}
+
+word RainGaugeSensor::getInstantaneousPrecipitation()
+{
+	// gets tips of scale since the last reset, i.e. total precipitation (I THINK)
+	//   manual says this is current precipitation - is it?
+	readRegister(0, 0x01);
+	precipitation = word(answerFrame[3], answerFrame[4]);
+	Serial.print("Precipitation: ");
+	Serial.print(precipitation / 10.0, 1);
+	Serial.println(" mm");
+	// resetPrecipitation();
+	return precipitation;
+}
+
+String RainGaugeSensor::getPrecipitationStr()
+{
+	return getValueStr((float)(precipitation / 10.0));
+}
+
+float SoilMoistureSensor::getMoistureTemp()
+{
+	readRegister(0, 2); // start register at 0, read 2 variables (vwc, soil temp)
+	moistureRaw = (answerFrame[3] << 8) + answerFrame[4];
+	// TODO: neg. temp check
+	if (answerFrame[5] < 0x80) {
+		temperatureRaw = (answerFrame[5] << 8) + answerFrame[6];
+	} else {
+		temperatureRaw = (answerFrame[5] << 8) + answerFrame[6] - 65536;
+	}
+	Serial.begin(115200);
+	Serial.print("Soil moisture: ");
+	Serial.print((moistureRaw - moistureOffset) / 10.0, 1);
+	Serial.println(" %");
+	Serial.print("Temperature: ");
+	Serial.print((temperatureRaw - temperatureOffset) / 10.0, 1);
+	Serial.println(" °C");
+	return (temperatureRaw - temperatureOffset) / 10.0;
+}
+
+float SoilMoistureSensor::getMoisture()
+{
+	return (moistureRaw - moistureOffset) / 10.0;
+}
+
+String SoilMoistureSensor::getMoistureStr()
+{
+	return getValueStr((float)((moistureRaw - moistureOffset) / 10.0));
+}
+
+String SoilMoistureSensor::getTemperatureStr()
+{
+	return getValueStr((float)((temperatureRaw - temperatureOffset) / 10.0));
+}
diff --git a/client/libs/SentecSensors/SentecSensors.h b/client/libs/SentecSensors/SentecSensors.h
new file mode 100644
index 0000000000000000000000000000000000000000..7785ca2c1b90c08e0c0cf62764a18db546929374
--- /dev/null
+++ b/client/libs/SentecSensors/SentecSensors.h
@@ -0,0 +1,71 @@
+#ifndef SENTECSENSORS_H
+#define SENTECSENSORS_H
+
+#include <Arduino.h>
+#include <SoftwareSerial.h>
+
+class SentecSensorRS485 {
+  public:
+	byte address;
+	uint8_t serialCommunicationControlPin = 19;
+	SoftwareSerial *RS485;
+	byte answerFrame[10];
+	// TODO use valid flag to log None
+	bool valid = false;
+	SentecSensorRS485(SoftwareSerial *ser, byte add);
+	SentecSensorRS485(SoftwareSerial *ser, byte add, uint8_t serialControlPin);
+
+	void write(byte queryFrame[], int length);
+	String getValueStr(float value);
+	String getValueStr(int value);
+	void queryAddress();
+	void readRegister(int registerStartAddress);
+	void readRegister(int registerStartAddress, int registerLength);
+	void writeRegister(int registerAddress, int value);
+	void setAddress(byte add);
+	void resetAnswerFrame();
+	bool getResponse();
+	unsigned int calculateCRC(byte query[], int length);
+	void printBytes(byte *data, int length);
+	void printBytes(word data);
+};
+
+class SolarRadiationSensor : public SentecSensorRS485 {
+  public:
+	using SentecSensorRS485::SentecSensorRS485;
+	// global radiation [W/m^2]
+	word glob = 0;
+
+	word getSolarRadiation();
+	String getSolarRadiationStr();
+};
+
+class RainGaugeSensor : public SentecSensorRS485 {
+  public:
+	using SentecSensorRS485::SentecSensorRS485;
+	// precipitation values [mm]
+	word precipitation = 0; // prcp since reset? (I THINK!!!)
+
+	void resetPrecipitation();
+	void resetSensor();
+	word getInstantaneousPrecipitation();
+	String getPrecipitationStr();
+};
+
+class SoilMoistureSensor : public SentecSensorRS485 {
+  public:
+	using SentecSensorRS485::SentecSensorRS485;
+	// vwc: volumetric water content [%]
+	uint16_t moistureRaw = 0;
+	int moistureOffset = 0;
+	// soil temperature [deg C]
+	int temperatureRaw = 0;
+	int temperatureOffset = 0;
+
+	float getMoistureTemp();
+	float getMoisture();
+	String getMoistureStr();
+	String getTemperatureStr();
+};
+
+#endif
diff --git a/client/libs/deep_sleep/f_deep_sleep.cpp b/client/libs/deep_sleep/f_deep_sleep.cpp
index c434f53c5728c4bb840c8ec19087f802f9c63ffe..f4eb3177e284bbe4ddbea7414a1dec9df3572d96 100644
--- a/client/libs/deep_sleep/f_deep_sleep.cpp
+++ b/client/libs/deep_sleep/f_deep_sleep.cpp
@@ -1,11 +1,8 @@
 #include "f_deep_sleep.hpp"
-#include "esp32-hal-log.h"
-#include "esp_log.h"
 
 namespace DeepSleep {
 static const std::string TAG = "DEEP_SLEEP";
 
-
 void print_wakeup_reason()
 {
 	esp_sleep_wakeup_cause_t wakeup_reason;
diff --git a/client/libs/deep_sleep/f_deep_sleep.hpp b/client/libs/deep_sleep/f_deep_sleep.hpp
index 7a528c840b8dab363a1f1b65a917f007294317c7..0a84e8b1c7f67212b634c534190ced948e3d266c 100644
--- a/client/libs/deep_sleep/f_deep_sleep.hpp
+++ b/client/libs/deep_sleep/f_deep_sleep.hpp
@@ -1,6 +1,8 @@
 #ifndef F_DEEP_SLEEP_H
 #define F_DEEP_SLEEP_H
 
+#include "esp32-hal-log.h"
+#include "esp_log.h"
 #include <Arduino.h>
 
 namespace DeepSleep {
diff --git a/client/libs/dr26_analogue/dr26.cpp b/client/libs/dr26_analogue/dr26.cpp
index f4d06efafba6683cdd0c89698f4cbb58e4cb78fe..cb908156140c1cb5893ba3b5c74d8dd024e19821 100644
--- a/client/libs/dr26_analogue/dr26.cpp
+++ b/client/libs/dr26_analogue/dr26.cpp
@@ -1,32 +1,31 @@
 #include "dr26.hpp"
 
-void ForteDR26 ::setup()
-{
-	Wire.begin(6, 7);
-  //  ads.setGain(GAIN_ONE);
-  //  ads.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
+void ForteDR26::setup() {
 
+    // This was changed by Bilal on november 25th from
+    //	Wire.begin(6,7);
+    pinMode(2, OUTPUT);
+    Wire.begin();
+    //  ads.setGain(GAIN_ONE);
+    //  ads.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
 
     ads1.setGain(GAIN_ONE);
-    ads1.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
+    ads1.begin() ? Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
     delay(100);
-    channel=0;
+    channel = 0;
 }
 
-float ForteDR26 ::readData()
-{
-	float volts=0;
-    for(int i=0; i<10; i++){
+float ForteDR26::readData() {
+    float volts = 0;
+    for (int i = 0; i < 10; i++) {
         int16_t adc = 0;
         float volt = 0;
-        try
-        {
+        try {
             adc = ads1.readADC_SingleEnded(channel);
             volt = ads1.computeVolts(adc);
         }
-        catch(NoDataAvailableException& e)
-        {
-	        throw NoDataAvailableException();  //propagate exception
+        catch (NoDataAvailableException &e) {
+            throw NoDataAvailableException();  //propagate exception
         }
         volts += volt;
     }
@@ -50,28 +49,35 @@ float ForteDR26 ::readData()
 // GAIN_FOUR       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
 // GAIN_EIGHT      // 8x gain   +/- 0.512V  1 bit = 0.015625mV
 // GAIN_SIXTEEN    // 16x gain  +/- 0.256V  1 bit = 0.0078125mV
-void ForteDR26 ::changeGain(adsGain_t gain)
-{
-	ads.setGain(gain);
+void ForteDR26::changeGain(adsGain_t gain) {
+    ads1.setGain(gain);
 }
 
-void ForteDR26 ::setChannel(int c)
-{
-	channel=c;
+void ForteDR26::setChannel(int c) {
+    channel = c;
 }
 
-std::list<Message> ForteDR26::buildMessages()
-{
-	std::list<Message> messages;
-	float data = readData();
-	MeasurementData IncrementData{data, 0, {}, "CIRCUMFERENCE_INCREMENT"};
-	messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
-	return messages;
+std::list<Message> ForteDR26::buildMessages() {
+    std::list<Message> messages;
+    float data = readData();
+    MeasurementData IncrementData{data, 0, {}, "CIRCUMFERENCE_INCREMENT"};
+    messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
+    return messages;
 }
-SensorInformation ForteDR26::getSensorInformation() const
-{
-	return sensorInformation;
+
+// FIXME: Channel shadows a member variable, we don't need it, just take the member variable instead
+// FIXME: passing the measurementType as a string is not a good idea, we should use an enum like we do for other sensors
+std::list<Message> ForteDR26::buildMessages(int channel, std::string measurementType) {
+    std::list<Message> messages;
+    float data = readData();
+    MeasurementData IncrementData{data, channel, {}, measurementType};
+    messages.emplace_back(IncrementData, sensorInformation, Time::getInstance().getEpochSeconds());
+    return messages;
+}
+
+SensorInformation ForteDR26::getSensorInformation() const {
+    return sensorInformation;
 }
 
 
-Adafruit_ADS1115 ForteDR26::ads1=ads1;
\ No newline at end of file
+Adafruit_ADS1115 ForteDR26::ads1 = ads1; // TODO: What is this?
\ No newline at end of file
diff --git a/client/libs/dr26_analogue/dr26.hpp b/client/libs/dr26_analogue/dr26.hpp
index d6927ec0530c108341d2952c343137361dd95c2f..b60c0997ec0180bc9e145d2588387022f9999f2a 100644
--- a/client/libs/dr26_analogue/dr26.hpp
+++ b/client/libs/dr26_analogue/dr26.hpp
@@ -16,6 +16,7 @@ class ForteDR26 : public ForteSensor<float> {
 	void changeGain(adsGain_t gain);
 	void setChannel(int channel);
 	std::list<Message> buildMessages() override;
+	std::list<Message> buildMessages(int channel,std::string mesurment_type);
 	[[nodiscard]] SensorInformation getSensorInformation() const override;
 	static Adafruit_ADS1115 ads1;
 
diff --git a/client/libs/drs26_digital/readme.md b/client/libs/drs26_digital/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..35f428894626d86f69d41bd1a2eab088fb46e81d
--- /dev/null
+++ b/client/libs/drs26_digital/readme.md
@@ -0,0 +1,2 @@
+Currently sets up data out on pin 4 from my understanding. If we keep the digital version, this
+should be changed to a variable pin.
\ No newline at end of file
diff --git a/client/libs/espnow/src/ESPNow.cpp b/client/libs/espnow/src/ESPNow.cpp
index 28eedfb4ca218230fba60d353e867261bc46a8c3..9c9ca0581d8117644582ff5b0a3acd788a17068c 100644
--- a/client/libs/espnow/src/ESPNow.cpp
+++ b/client/libs/espnow/src/ESPNow.cpp
@@ -22,7 +22,7 @@ void get_host_mac(uint8_t *destination)
 		preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
 	} else {
 		memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-		ESP_LOGE(TAG, "Backup MAC address used");
+		ESP_LOGI(TAG, "Backup MAC address used");
 	}
 	preferences.end();
 }
@@ -53,40 +53,54 @@ void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
 	// assume host change not happening, rare event
 	// => on host change, broadcast 
 	ESP_LOGE(TAG, "Message recieved");
-	preferences.begin("config", false);
 	config received_msg;
 	memcpy(&received_msg, incomingData, sizeof(received_msg)); // TODO: check for valid mac
 														  // all the esp32 macs so far use the same first 3(?) bytes so maybe use that	
 	switch (received_msg.type){
 		case dataAck:{
+			ESP_LOGI(TAG, "dataAck received.");
 			msg_recv = true;
 			Time::getInstance().setTime(
 			received_msg.epoch_seconds); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
 			Serial.println(Time::getInstance().getEpochSeconds());
+			preferences.begin("config", false);
 			if (!preferences.isKey("host")) {
-			preferences.putBytes("host", received_msg.host, sizeof(received_msg.host));
+				if(preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)) > 0){;
 			ESP_LOGI(TAG, "host MAC address saved to flash");
+				}
 
 			// add host to peers
 			add_host_to_peers(received_msg);
 			}
+			preferences.end();
 		}
 		case hostChange:{
+			ESP_LOGI(TAG, "hostChange received");
 			Time::getInstance().setTime(received_msg.epoch_seconds);
 			// delete old host
+			preferences.begin("config", false);
 			if(preferences.isKey("host")){
+				ESP_LOGI(TAG, "removing old host");
 				uint8_t old[6];
-				get_host_mac(old);
+				preferences.end();
+				get_host_mac(old); // maybe problem here, re-opening preferences
 				esp_now_del_peer(old);
 			}
 			// add new host
+			preferences.begin("config", false);
+			if(preferences.putBytes("host", received_msg.host, sizeof(received_msg.host)) > 0){
+				ESP_LOGI(TAG, "Host Mac address saved to flash:");
+			}
+			else{
+				ESP_LOGI(TAG, "Couldn't save Host Mac to flash");
+			}
+			preferences.end();
 			add_host_to_peers(received_msg);
 		}
 		default:{
-			return;
+			break;
 		}
 	}
-	preferences.end();
 }
 
 
@@ -110,7 +124,6 @@ esp_err_t espnow_setup()
 	hostInfo.encrypt = false;
 	esp_now_add_peer(&hostInfo);
 
-	preferences.clear();
 	esp_now_register_recv_cb(on_data_recv);
 	esp_now_register_send_cb(on_data_sent);
 
diff --git a/client/libs/espnow/src/Message.cpp b/client/libs/espnow/src/Message.cpp
index 7f7f8e2326e86ba647971170dbf3a43a83227c90..03d8f88961926939a862e6b834514808ec0e3a66 100644
--- a/client/libs/espnow/src/Message.cpp
+++ b/client/libs/espnow/src/Message.cpp
@@ -1,7 +1,5 @@
 #include "Message.hpp"
 
-#include <utility>
-
 static const char *TAG = "MESSAGE";
 
 esp_err_t Message::send() const
diff --git a/client/libs/espnow/src/Message.hpp b/client/libs/espnow/src/Message.hpp
index 5a6ca8185393ababd2b3c83005a30cf8fd6052ab..ba2724deaf3e01ffcc56d146ca75909d20c69446 100644
--- a/client/libs/espnow/src/Message.hpp
+++ b/client/libs/espnow/src/Message.hpp
@@ -8,12 +8,12 @@
 #include <ArduinoJson.h>
 #include <ESP32Time.h>
 #include <esp_now.h>
+#include <utility>
 
-// Format of the message sent from host to client
+// Format of the message sent from host to client_satellite
 // if more things are sent from the host the name might not be accurate anymore
 class Message {
   public:
-
 	explicit Message(ClientDataPackage data);
 
 	Message(MeasurementData const &data, const SensorInformation &information, unsigned long timestamp);
@@ -24,4 +24,3 @@ class Message {
 	ClientDataPackage clientDataPackage;
 	uint8_t recipient[6]{};
 };
-
diff --git a/client/libs/ina219/ina219.cpp b/client/libs/ina219/ina219.cpp
index def6a9d73acefe00e1a160a1c3fc2ba64ab2099d..930885f2d99e6ccd1571b778441dfd39668c2108 100644
--- a/client/libs/ina219/ina219.cpp
+++ b/client/libs/ina219/ina219.cpp
@@ -27,7 +27,35 @@ out_data_ina219 ForteINA219 ::readData()
 
 std::list<Message> ForteINA219::buildMessages()
 {
-	throw "Not yet implemented";
+	std::list<Message> messages;
+	out_data_ina219 data = readData();
+	MeasurementData shuntVoltageData{
+		data.shuntVoltage_mV, 0, {}, measurementTypeToString.at(MeasurementType::SHUNT_VOLTAGE)
+	};
+	MeasurementData busVoltageData{
+		data.busVoltage_V, 0, {}, measurementTypeToString.at(MeasurementType::BUS_VOLTAGE)
+	};
+	MeasurementData currentMilliAmpData{
+		data.current_mA, 0, {}, measurementTypeToString.at(MeasurementType::CURRENT_mA)
+	};
+	MeasurementData powerMilliWattData{
+		data.power_mW, 0, {}, measurementTypeToString.at(MeasurementType::POWER_mA)
+	};
+	MeasurementData loadVoltageData{
+		data.loadVoltage_V, 0, {}, measurementTypeToString.at(MeasurementType::LOAD_VOLTAGE_V)
+	};
+	MeasurementData ina219OverflowData{
+		data.ina219_overflow, 0, {}, measurementTypeToString.at(MeasurementType::INA219_OVERFLOW)
+	};
+
+	messages.emplace_back(Message(shuntVoltageData, sensorInformation, 0));
+	messages.emplace_back(Message(busVoltageData, sensorInformation,0));
+	messages.emplace_back(Message(currentMilliAmpData, sensorInformation, 0));
+	messages.emplace_back(Message(powerMilliWattData, sensorInformation, 0));
+	messages.emplace_back(Message(loadVoltageData, sensorInformation, 0));
+	messages.emplace_back(Message(ina219OverflowData, sensorInformation, 0));
+
+	return messages;
 }
 SensorInformation ForteINA219::getSensorInformation() const
 {
diff --git a/client/libs/ina219/ina219.hpp b/client/libs/ina219/ina219.hpp
index 4a34d9591a325f9232f90ef61b4a74077fe1cf51..1985b996820f696290be13bc776a5f238fcd466a 100644
--- a/client/libs/ina219/ina219.hpp
+++ b/client/libs/ina219/ina219.hpp
@@ -28,6 +28,15 @@ class ForteINA219 : public ForteSensor<out_data_ina219> {
 	INA219_WE ina219;
 	out_data_ina219 data;
 	const SensorInformation sensorInformation{"INA219", Protocol::I2C};
+	enum class MeasurementType {SHUNT_VOLTAGE, BUS_VOLTAGE, CURRENT_mA, POWER_mA, LOAD_VOLTAGE_V, INA219_OVERFLOW};
+
+	std::map<MeasurementType, const char*> measurementTypeToString = {
+		{MeasurementType::SHUNT_VOLTAGE, "SHUNT_VOLTAGE"},
+		{MeasurementType::BUS_VOLTAGE, "BUS_VOLTAGE"},
+		{MeasurementType::CURRENT_mA, "CURRENT_mA"},
+		{MeasurementType::POWER_mA, "POWER_mA"},
+		{MeasurementType::LOAD_VOLTAGE_V, "LOAD_VOLTAGE_V"},
+		{MeasurementType::INA219_OVERFLOW, "INA219_OVERFLOW"}};
 };
 
 #endif
\ No newline at end of file
diff --git a/client/libs/ina219/readme.md b/client/libs/ina219/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..9ca7733b3b3b6d9ff3a89df7fac3422b6c9e0335
--- /dev/null
+++ b/client/libs/ina219/readme.md
@@ -0,0 +1,6 @@
+Currently set up to follow I2C pinouts from `../includes/Pinout.hpp`:
+
+```cpp
+constexpr int I2C_SDA = 18;
+constexpr int I2C_SCL = 19;
+```
\ No newline at end of file
diff --git a/client/libs/rs485/SentecSensors.cpp b/client/libs/rs485/SentecSensors.cpp
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/client/libs/rs485/SentecSensors.h b/client/libs/rs485/SentecSensors.h
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/client/libs/rs485/rs485.cpp b/client/libs/rs485/rs485.cpp
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e69a251121ae3a7884d314ed85d77fab2c3b4521 100644
--- a/client/libs/rs485/rs485.cpp
+++ b/client/libs/rs485/rs485.cpp
@@ -0,0 +1,83 @@
+#include "rs485.hpp"
+// RS485 control
+#define RXPin 14 // Serial Receive pin
+#define TXPin 15 // Serial Transmit pin
+
+#define RE_DE_PIN 19 // Line to pull high or low to receive or send data from RS485
+
+#define POWER_SWITCH_PIN_12V 12
+#define POWER_SWITCH_PIN_5V 13
+
+// Configure sensors
+SoftwareSerial RS485Serial(TXPin, RXPin);
+SolarRadiationSensor solarSensor(&RS485Serial, 1, RE_DE_PIN);
+RainGaugeSensor rainGauge = RainGaugeSensor(&RS485Serial, 2, RE_DE_PIN);         // Give 2 Sensor Adress 2
+SoilMoistureSensor soilSensor3 = SoilMoistureSensor(&RS485Serial, 3, RE_DE_PIN); //.....
+SoilMoistureSensor soilSensor4 = SoilMoistureSensor(&RS485Serial, 4, RE_DE_PIN);
+SoilMoistureSensor soilSensor5 = SoilMoistureSensor(&RS485Serial, 5, RE_DE_PIN);
+
+void Forte_RS485::setup()
+{
+	// configure the pins to be output only
+	pinMode(RE_DE_PIN, OUTPUT);
+	pinMode(POWER_SWITCH_PIN_12V, OUTPUT);
+	pinMode(POWER_SWITCH_PIN_5V, OUTPUT);
+	// Set data rates: Serial baud rate has to be WAY HIGHER than RS485Serial!
+	Serial.begin(115200);
+	RS485Serial.begin(4800);
+}
+
+out_data_rs485 Forte_RS485::readData()
+{
+	// Power on sensor
+	digitalWrite(POWER_SWITCH_PIN_12V, HIGH);
+	digitalWrite(POWER_SWITCH_PIN_5V, HIGH);
+	// Wait for sensors to power up
+	// TODO minimize delay
+	delay(500);
+	out_data_rs485 output;
+	output.solarRadiation = solarSensor.getSolarRadiation();
+	output.soilTemperature3 = soilSensor3.getMoistureTemp();
+	output.soilTemperature4 = soilSensor4.getMoistureTemp();
+	output.soilTemperature5 = soilSensor5.getMoistureTemp();
+	output.soilMoisture3 = soilSensor3.getMoisture();
+	output.soilMoisture4 = soilSensor4.getMoisture();
+	output.soilMoisture5 = soilSensor5.getMoisture();
+	output.precipitation = rainGauge.getInstantaneousPrecipitation();
+	digitalWrite(POWER_SWITCH_PIN_12V, LOW);
+	digitalWrite(POWER_SWITCH_PIN_5V, LOW);
+
+	gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_12V);
+	gpio_hold_en((gpio_num_t)POWER_SWITCH_PIN_5V);
+	return output;
+}
+
+std::list<Message> Forte_RS485::buildMessages()
+{
+	std::list<Message> messages;
+	out_data_rs485 output = readData();
+	MeasurementData solarRadiation {output.solarRadiation, measurementTypeToString.at(MeasurementType::SOLAR_RADIATION)};
+	MeasurementData soilTemp3{output.soilTemperature3, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_3)};
+	MeasurementData soilTemp4 {output.soilTemperature4, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_4)};
+	MeasurementData soilTemp5 {output.soilTemperature5, measurementTypeToString.at(MeasurementType::SOIL_TEMPERATURE_5)};
+	MeasurementData soilMoisture3 {output.soilMoisture3, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_3)};
+	MeasurementData soilMoisture4 {output.soilMoisture4, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_4)};
+	MeasurementData soilMoisture5 {output.soilMoisture5, measurementTypeToString.at(MeasurementType::SOIL_MOISTURE_5)};
+	MeasurementData precipitation {output.precipitation, measurementTypeToString.at(MeasurementType::PRECIPITATION)};
+
+	messages.emplace_back(Message{solarRadiation,sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message{soilTemp3,sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message{soilTemp4,sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message{soilTemp5,sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message{soilMoisture3,sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message{soilMoisture4,sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message{soilMoisture5,sensorInformation, Time::getInstance().getEpochSeconds()});
+	messages.emplace_back(Message(precipitation, sensorInformation, Time::getInstance().getEpochSeconds()));
+
+	return messages;
+}
+
+SensorInformation Forte_RS485::getSensorInformation() const
+{
+	return sensorInformation;
+}
\ No newline at end of file
diff --git a/client/libs/rs485/rs485.hpp b/client/libs/rs485/rs485.hpp
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0bac7654280994dcbef1d242f2dce10e19952aab 100644
--- a/client/libs/rs485/rs485.hpp
+++ b/client/libs/rs485/rs485.hpp
@@ -0,0 +1,54 @@
+#ifndef _RS485
+#define _RS485
+
+#include "SPI.h"
+// RTC (I2C)
+#include "RTClib.h"
+#include "Message.hpp"
+#include "ForteSensor.hpp"
+#include "SentecSensors.h"
+
+struct out_data_rs485{
+    float solarRadiation;
+    float soilMoisture3;
+    float soilTemperature3;
+    float soilMoisture4;
+    float soilTemperature4;
+    float soilMoisture5;
+    float soilTemperature5;
+    float precipitation;
+};
+
+class Forte_RS485 : public ForteSensor <out_data_rs485> {
+  public:
+	void setup() override;
+	out_data_rs485 readData() override;
+	std::list<Message> buildMessages() override;
+	[[nodiscard]] SensorInformation getSensorInformation() const override;
+
+  private:
+    const SensorInformation sensorInformation{"RS485", Protocol::RS485};
+
+    enum class MeasurementType { 
+        SOLAR_RADIATION,
+        SOIL_MOISTURE_3,
+        SOIL_TEMPERATURE_3,
+        SOIL_MOISTURE_4,
+        SOIL_TEMPERATURE_4,
+        SOIL_MOISTURE_5,
+        SOIL_TEMPERATURE_5,
+        PRECIPITATION
+      };
+
+    std::map<MeasurementType, const char *> measurementTypeToString = {
+	    {MeasurementType::SOLAR_RADIATION, "SOLAR_RADIATION"},
+	    {MeasurementType::SOIL_MOISTURE_3, "SOIL_MOISTURE_3"},
+      {MeasurementType::SOIL_TEMPERATURE_3, "SOIL_TEMPERATURE_3"},
+      {MeasurementType::SOIL_MOISTURE_4, "SOIL_MOISTURE_4"},
+      {MeasurementType::SOIL_TEMPERATURE_4, "SOIL_TEMPERATURE_4"},
+	    {MeasurementType::SOIL_MOISTURE_5, "SOIL_MOISTURE_5"},
+      {MeasurementType::SOIL_TEMPERATURE_5, "SOIL_TEMPERATURE_5"},
+      {MeasurementType::PRECIPITATION, "PRECIPATION"}
+        };
+};
+#endif 
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/.gitignore b/code-snippets/client/DRS26/Example_forte_libary/client/.gitignore
deleted file mode 100644
index 6dea8206d255251b692bc51b06adced35f789ce8..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
-!lib/
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/.vscode/extensions.json b/code-snippets/client/DRS26/Example_forte_libary/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/include/README b/code-snippets/client/DRS26/Example_forte_libary/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/include/forte_sensor.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/include/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/include/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/include/pinout.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/include/pinout.hpp
deleted file mode 100644
index 7de77a4b3aab0cc8559c510091fd238db43b729d..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/include/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-#define SDI_DATA 8
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/README b/code-snippets/client/DRS26/Example_forte_libary/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/drs26.cpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 4c3378ae05042fcd0bdc89bc905060be97dcd99e..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <drs26.hpp>
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck 
-*/
-
-void Forte_DRS26 ::setup()
-{
-    drs26.begin(SDI_DATA);
-}
-
-out_data_drs26 *Forte_DRS26 ::read_data()
-{
-    String sdiResponse = "";
-    String measurement_command="1M!"; //The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is specified as 1M!=Sebsir measurement request at adress 1
-    String data_command="1D0!";       //and the followed data command 1D0! = Sensor data request at adress 1 
-
-    drs26.sendCommand(measurement_command);
-    delay(1000);
-    drs26.sendCommand(data_command);
-
-    while (drs26.available())
-    {
-        char next_character = drs26.read();
-        if ((next_character != '\n') && (next_character != '\r'))
-        {
-            sdiResponse += next_character;
-            delay(10); // 1 character ~ 7.5ms
-        }
-    }
-
-    if (sdiResponse.length() > 1)
-    {
-        data.id = sdiResponse.substring(0, 8).toInt();
-        data.circumference = sdiResponse.substring(9, 15).toFloat();
-        data.temperatur = sdiResponse.substring(16, 22).toFloat();
-        return &data;
-    }
-
-    return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/drs26.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index 83d02ae0a5a5f88e556e1f4a811dc6510b122f98..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include <forte_sensor.hpp>
-#include <SDI12.h>
-#include <pinout.hpp>
-#include "Wire.h"
-
-     
-struct out_data_drs26 {
-        int id;
-        float circumference;
-        float temperatur;
-    };
-
-
-class Forte_DRS26 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_drs26* read_data();
- 
-    private:
-        SDI12 drs26;
-        out_data_drs26 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/forte_sensor.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/pinout.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/pinout.hpp
deleted file mode 100644
index a61eb93d3898e7beea9550f34651b0a0f00ae75f..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/drs26_digital/pinout.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for SDI12
-#define SDI_DATA 8
-#endif
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/ina219.cpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/ina219.cpp
deleted file mode 100644
index df1fa146bc49b7e1f824bec42e7e860c260cd6b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "ina219.hpp"
-#include "Wire.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <INA219_WE.h>
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        
-        return &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/ina219.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 91b8c4ba9edf1b6603737e8c0b7aa777b5e1594a..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <INA219_WE.h>
-
-     
-struct out_data {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data* read_data();
- 
-    private:
-        INA219_WE ina219;
-        out_data data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/pinout.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 9d336e45e266d1952527918387a8d36679bc3ae4..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 5
-#define I2C_SCL 4
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/pinout.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/scd30.cpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/scd30.cpp
deleted file mode 100644
index 84276568291b2d87c23222bf57e286cf7f5ab03b..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "scd30.hpp"
-#include "Wire.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-float* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data1[0] = airSensor.getCO2();
-        data1[1] = airSensor.getTemperature();
-        data1[2] = airSensor.getHumidity();
-
-        return data1;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/scd30.hpp b/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/scd30.hpp
deleted file mode 100644
index a95ab8ea5467e932f4a2bd47b872acf1024cd87b..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        float* read_data();
-
-    private:
-        SCD30 airSensor;
-        float data1[3];
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/platformio.ini b/code-snippets/client/DRS26/Example_forte_libary/client/platformio.ini
deleted file mode 100644
index 774bd23457cc773cf1c6b4adfc4cd74961e766a9..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/platformio.ini
+++ /dev/null
@@ -1,19 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = 
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	wollewald/INA219_WE@^1.3.1
-	envirodiy/SDI-12@^2.1.4
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/src/main.cpp b/code-snippets/client/DRS26/Example_forte_libary/client/src/main.cpp
deleted file mode 100644
index d65495a98003a80b59b410efad06dc93502c944a..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/src/main.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#include <Arduino.h>
-
-#include <drs26.hpp>
-
-Forte_DRS26 sensor1;
-
-void setup() {
-
-  Serial.begin(9600);
-  sensor1.setup();
-}
-
-void loop() {
-  
-  
-  out_data_drs26* data;
-  sensor1.read_data();
-  
-  data = sensor1.read_data();
-
-  if(data==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Sensor ID "); Serial.println(data->id);
-        Serial.print("Cicumfence "); Serial.println(data->circumference);
-        Serial.print("Temperature "); Serial.println(data->temperatur);
-        Serial.println();
-    }
-  delay(5000);
-  
-}
-
diff --git a/code-snippets/client/DRS26/Example_forte_libary/client/test/README b/code-snippets/client/DRS26/Example_forte_libary/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/DRS26/Example_forte_libary/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/DRS26/Example_forte_libary/drs26_breadboard.png b/code-snippets/client/DRS26/Example_forte_libary/drs26_breadboard.png
deleted file mode 100644
index f92d811bc6abc726a47edf07774ada8e1c4f4a09..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/DRS26/Example_forte_libary/drs26_breadboard.png and /dev/null differ
diff --git a/code-snippets/client/INA219/Example/basic_example_arduino/basic_example_arduino.ino b/code-snippets/client/INA219/Example/basic_example_arduino/basic_example_arduino.ino
deleted file mode 100644
index 0b8e2e8b42368135e2374507276397b272cb2964..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example/basic_example_arduino/basic_example_arduino.ino
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <Wire.h>
-#include <INA219_WE.h>
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-
-INA219_WE ina219 = INA219_WE();
-int sda_pin = 5; // GPIO16 as I2C SDA
-int scl_pin = 4; // GPIO17 as I2C SCL
-void setup() {
-  Serial.begin(9600);
-  Wire.setPins(sda_pin, scl_pin);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  Serial.println("INA219 Current Sensor Example Sketch - Continuous");
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/INA219/Example/basic_example_io/.gitignore b/code-snippets/client/INA219/Example/basic_example_io/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example/basic_example_io/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/code-snippets/client/INA219/Example/basic_example_io/.vscode/extensions.json b/code-snippets/client/INA219/Example/basic_example_io/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example/basic_example_io/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/INA219/Example/basic_example_io/include/README b/code-snippets/client/INA219/Example/basic_example_io/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example/basic_example_io/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/INA219/Example/basic_example_io/platformio.ini b/code-snippets/client/INA219/Example/basic_example_io/platformio.ini
deleted file mode 100644
index 785eef08c12434f0af85c1306c7653a68961eea6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example/basic_example_io/platformio.ini
+++ /dev/null
@@ -1,15 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = wollewald/INA219_WE@^1.3.1
diff --git a/code-snippets/client/INA219/Example/basic_example_io/src/main.cpp b/code-snippets/client/INA219/Example/basic_example_io/src/main.cpp
deleted file mode 100644
index 0b8e2e8b42368135e2374507276397b272cb2964..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example/basic_example_io/src/main.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <Wire.h>
-#include <INA219_WE.h>
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-
-INA219_WE ina219 = INA219_WE();
-int sda_pin = 5; // GPIO16 as I2C SDA
-int scl_pin = 4; // GPIO17 as I2C SCL
-void setup() {
-  Serial.begin(9600);
-  Wire.setPins(sda_pin, scl_pin);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  Serial.println("INA219 Current Sensor Example Sketch - Continuous");
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/INA219/Example/basic_example_io/test/README b/code-snippets/client/INA219/Example/basic_example_io/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example/basic_example_io/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/.gitignore b/code-snippets/client/INA219/Example_forte_libary/client/.gitignore
deleted file mode 100644
index 6dea8206d255251b692bc51b06adced35f789ce8..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
-!lib/
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/.vscode/extensions.json b/code-snippets/client/INA219/Example_forte_libary/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/include/README b/code-snippets/client/INA219/Example_forte_libary/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/include/forte_sensor.hpp b/code-snippets/client/INA219/Example_forte_libary/client/include/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/include/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/include/pinout.hpp b/code-snippets/client/INA219/Example_forte_libary/client/include/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/include/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/README b/code-snippets/client/INA219/Example_forte_libary/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/ina219.cpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/ina219.cpp
deleted file mode 100644
index 7f4beb3527965f301f0f9c50679189958275220c..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "ina219.hpp"
-
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data_ina219* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        
-        return &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/ina219.hpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/ina219.hpp
deleted file mode 100644
index a975ba51978c825f33740d6a84aeb7bf4f96bcd6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <INA219_WE.h>
-#include "Wire.h"
-
-
-     
-struct out_data_ina219 {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_ina219* read_data();
- 
-    private:
-        INA219_WE ina219;
-        out_data_ina219 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/pinout.hpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 9d336e45e266d1952527918387a8d36679bc3ae4..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 5
-#define I2C_SCL 4
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/pinout.hpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/scd30.cpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/scd30.cpp
deleted file mode 100644
index 84276568291b2d87c23222bf57e286cf7f5ab03b..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "scd30.hpp"
-#include "Wire.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-float* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data1[0] = airSensor.getCO2();
-        data1[1] = airSensor.getTemperature();
-        data1[2] = airSensor.getHumidity();
-
-        return data1;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/scd30.hpp b/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/scd30.hpp
deleted file mode 100644
index a95ab8ea5467e932f4a2bd47b872acf1024cd87b..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        float* read_data();
-
-    private:
-        SCD30 airSensor;
-        float data1[3];
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/platformio.ini b/code-snippets/client/INA219/Example_forte_libary/client/platformio.ini
deleted file mode 100644
index 1f54ab848812cd679cfa03c95ed91860c145660d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/platformio.ini
+++ /dev/null
@@ -1,18 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = 
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	wollewald/INA219_WE@^1.3.1
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/src/main.cpp b/code-snippets/client/INA219/Example_forte_libary/client/src/main.cpp
deleted file mode 100644
index 8e0ffb9b7dcd614e29bd8c51d2a013da26e35ad0..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/src/main.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-
-#include <Arduino.h>
-#include <ina219.hpp>
-
-Forte_INA219 sensor1;
-
-void setup() {
-  Serial.begin(9600);
-  sensor1.setup();
-}
-
-void loop() {
-  
-  out_data_ina219* data;
-  data = sensor1.read_data();
-
-  if(data==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Shunt Voltage [mV]: "); Serial.println(data->shuntVoltage_mV);
-        Serial.print("Bus Voltage [V]: "); Serial.println(data->busVoltage_V);
-        Serial.print("Load Voltage [V]: "); Serial.println(data->loadVoltage_V);
-        Serial.print("Current[mA]: "); Serial.println(data->current_mA);
-        Serial.print("Bus Power [mW]: "); Serial.println(data->power_mW);
-        data->ina219_overflow== false ? Serial.println("Values OK - no overflow") : Serial.println("Overflow! Choose higher PGAIN");
-        Serial.println();
-    }
-  delay(5000);
-}
diff --git a/code-snippets/client/INA219/Example_forte_libary/client/test/README b/code-snippets/client/INA219/Example_forte_libary/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219/Example_forte_libary/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/INA219/circuit_diagramm_pic.png b/code-snippets/client/INA219/circuit_diagramm_pic.png
deleted file mode 100644
index 65780746d9fef5d3bb25d44dc75f66f6937476d7..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/INA219/circuit_diagramm_pic.png and /dev/null differ
diff --git a/code-snippets/client/INA219/documentaion DeepSleep Timer wake up.docx b/code-snippets/client/INA219/documentaion DeepSleep Timer wake up.docx
deleted file mode 100644
index ee0673a1875d3f47e2a8e49a751cf2ee5ba5199b..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/INA219/documentaion DeepSleep Timer wake up.docx and /dev/null differ
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_arduino/basic_example_arduino.ino b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_arduino/basic_example_arduino.ino
deleted file mode 100644
index 0b8e2e8b42368135e2374507276397b272cb2964..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_arduino/basic_example_arduino.ino
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <Wire.h>
-#include <INA219_WE.h>
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-
-INA219_WE ina219 = INA219_WE();
-int sda_pin = 5; // GPIO16 as I2C SDA
-int scl_pin = 4; // GPIO17 as I2C SCL
-void setup() {
-  Serial.begin(9600);
-  Wire.setPins(sda_pin, scl_pin);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  Serial.println("INA219 Current Sensor Example Sketch - Continuous");
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/.gitignore b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/.vscode/extensions.json b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/include/README b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/platformio.ini b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/platformio.ini
deleted file mode 100644
index 785eef08c12434f0af85c1306c7653a68961eea6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/platformio.ini
+++ /dev/null
@@ -1,15 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = wollewald/INA219_WE@^1.3.1
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/src/main.cpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/src/main.cpp
deleted file mode 100644
index 0b8e2e8b42368135e2374507276397b272cb2964..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/src/main.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-#include <Wire.h>
-#include <INA219_WE.h>
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-
-INA219_WE ina219 = INA219_WE();
-int sda_pin = 5; // GPIO16 as I2C SDA
-int scl_pin = 4; // GPIO17 as I2C SCL
-void setup() {
-  Serial.begin(9600);
-  Wire.setPins(sda_pin, scl_pin);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  Serial.println("INA219 Current Sensor Example Sketch - Continuous");
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/test/README b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example/basic_example_io/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/.gitignore b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/.gitignore
deleted file mode 100644
index 6dea8206d255251b692bc51b06adced35f789ce8..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
-!lib/
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/.vscode/extensions.json b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/README b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/forte_sensor.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/pinout.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/include/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/README b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/ina219.cpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/ina219.cpp
deleted file mode 100644
index fde41673e18fea8f7379fe3379155c3cff58cffa..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "ina219.hpp"
-
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        
-        return &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/ina219.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 2dcc568ab6ba8a0a05c688ecec32f2b8c4a618a0..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <INA219_WE.h>
-#include "Wire.h"
-
-
-     
-struct out_data {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data* read_data();
- 
-    private:
-        INA219_WE ina219;
-        out_data data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/pinout.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 793bc6b2edc966602bde83eeb2b1609a19e11f48..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SCL 6
-#define I2C_SDA 7
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/pinout.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/scd30.cpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/scd30.cpp
deleted file mode 100644
index 84276568291b2d87c23222bf57e286cf7f5ab03b..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "scd30.hpp"
-#include "Wire.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-float* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data1[0] = airSensor.getCO2();
-        data1[1] = airSensor.getTemperature();
-        data1[2] = airSensor.getHumidity();
-
-        return data1;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/scd30.hpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/scd30.hpp
deleted file mode 100644
index a95ab8ea5467e932f4a2bd47b872acf1024cd87b..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        float* read_data();
-
-    private:
-        SCD30 airSensor;
-        float data1[3];
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/platformio.ini b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/platformio.ini
deleted file mode 100644
index 1f54ab848812cd679cfa03c95ed91860c145660d..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/platformio.ini
+++ /dev/null
@@ -1,18 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = 
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	wollewald/INA219_WE@^1.3.1
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/ example.csv b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/ example.csv
deleted file mode 100644
index 4c32286a390dd7dba83ca48995379ae00ce61c75..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/ example.csv	
+++ /dev/null
@@ -1,51 +0,0 @@
-,Shunt Voltage [mV],Bus Voltage [V].Load Voltage [V],Current[mA],Bus Power [mW],Overflow
-0.28,1.8,1.8,2.7,4.0,0
-0.27,1.8,1.8,2.9,6.0,0
-0.28,1.8,1.8,2.8,6.0,0
-0.3,1.8,1.8,3.0,6.0,0
-0.29,1.8,1.8,2.9,6.0,0
-0.3,1.8,1.8,2.9,6.0,0
-0.29,1.8,1.8,3.0,6.0,0
-0.27,1.8,1.8,2.7,4.0,0
-0.26,1.8,1.8,2.6,4.0,0
-0.25,1.8,1.8,2.6,4.0,0
-0.26,1.8,1.8,2.6,4.0,0
-0.27,1.8,1.8,2.8,6.0,0
-0.28,1.8,1.8,2.8,6.0,0
-0.27,1.8,1.8,2.9,6.0,0
-0.27,1.8,1.8,2.9,6.0,0
-0.31,1.8,1.8,2.9,6.0,0
-0.27,1.8,1.8,2.8,6.0,0
-0.28,1.8,1.8,2.8,6.0,0
-0.26,1.8,1.8,2.6,4.0,0
-0.28,1.8,1.8,2.9,6.0,0
-0.28,1.8,1.8,2.7,4.0,0
-0.28,1.8,1.8,2.9,6.0,0
-0.3,1.8,1.8,2.7,4.0,0
-0.27,1.8,1.8,2.8,6.0,0
-0.29,1.8,1.8,2.7,4.0,0
-0.27,1.8,1.8,2.9,6.0,0
-0.29,1.8,1.8,2.9,6.0,0
-0.3,1.8,1.8,2.7,4.0,0
-0.28,1.8,1.8,2.9,6.0,0
-0.28,1.8,1.8,2.9,6.0,0
-0.28,1.8,1.8,2.7,4.0,0
-0.28,1.8,1.8,2.8,6.0,0
-0.26,1.8,1.8,3.0,6.0,0
-0.28,1.8,1.8,2.9,6.0,0
-0.29,1.8,1.8,2.7,4.0,0
-0.27,1.8,1.8,2.9,6.0,0
-0.29,1.8,1.8,2.7,4.0,0
-0.27,1.8,1.8,2.9,6.0,0
-0.26,1.8,1.8,2.7,4.0,0
-0.29,1.8,1.8,2.7,4.0,0
-0.28,1.8,1.8,2.8,6.0,0
-0.27,1.8,1.8,3.0,6.0,0
-0.27,1.8,1.8,2.8,6.0,0
-0.27,1.8,1.8,2.8,6.0,0
-0.29,1.8,1.8,2.9,6.0,0
-0.26,1.8,1.8,3.0,6.0,0
-0.29,1.8,1.8,2.9,6.0,0
-0.23,1.8,1.8,2.7,4.0,0
-0.28,1.8,1.8,2.9,6.0,0
-0.27,1.8,1.8,2.9,6.0,0
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/py_serial.py b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/py_serial.py
deleted file mode 100644
index 68fe585e33801152959f0bb81f899ccb0b5a68f4..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/py_serial.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import serial.tools.list_ports
-
-ports = serial.tools.list_ports.comports()
-serialInst= serial.Serial()
-
-portList = []
-
-for onePort in ports:
-    portList.append(str(onePort))
-    print(str(onePort))
-
-serialInst.port = "/dev/ttyUSB0"
-serialInst.baudrate=9600
-serialInst.open()
-
-f= open('readmee.txt', 'w') 
-f.write("shajfksad\n")
-f.writelines("hsjdhsjhd")
-f.writelines("hsjdhsjhd")
-
-while True:
-        if serialInst.in_waiting:
-            packet=serialInst.readline()
-           # print(packet.decode('utf'))
-            f.writelines(packet.decode('utf'))
-
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/py_writeIntoTextfile.py b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/py_writeIntoTextfile.py
deleted file mode 100644
index 8d248bd929ea151894ba6a34f7b46f812bd3c4c7..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/py_writeIntoTextfile.py
+++ /dev/null
@@ -1,4 +0,0 @@
-f= open('readmee.txt', 'w') 
-f.write("shajfksad\n")
-f.writelines("hsjdhsjhd")
-f.writelines("hsjdhsjhd")
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/raw_data.txt b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/raw_data.txt
deleted file mode 100644
index cc4884482aeec96ed2f0dfd38bc1fddf5dbee9f5..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/raw_data.txt
+++ /dev/null
@@ -1,52 +0,0 @@
-
-Shunt Voltage [mV],Bus Voltage [V].Load Voltage [V],Current[mA],Bus Power [mW],Overflow
-0.28,1.80,1.80,2.70,4.00,0
-0.27,1.80,1.80,2.90,6.00,0
-0.28,1.80,1.80,2.80,6.00,0
-0.30,1.80,1.80,3.00,6.00,0
-0.29,1.80,1.80,2.90,6.00,0
-0.30,1.80,1.80,2.90,6.00,0
-0.29,1.80,1.80,3.00,6.00,0
-0.27,1.80,1.80,2.70,4.00,0
-0.26,1.80,1.80,2.60,4.00,0
-0.25,1.80,1.80,2.60,4.00,0
-0.26,1.80,1.80,2.60,4.00,0
-0.27,1.80,1.80,2.80,6.00,0
-0.28,1.80,1.80,2.80,6.00,0
-0.27,1.80,1.80,2.90,6.00,0
-0.27,1.80,1.80,2.90,6.00,0
-0.31,1.80,1.80,2.90,6.00,0
-0.27,1.80,1.80,2.80,6.00,0
-0.28,1.80,1.80,2.80,6.00,0
-0.26,1.80,1.80,2.60,4.00,0
-0.28,1.80,1.80,2.90,6.00,0
-0.28,1.80,1.80,2.70,4.00,0
-0.28,1.80,1.80,2.90,6.00,0
-0.30,1.80,1.80,2.70,4.00,0
-0.27,1.80,1.80,2.80,6.00,0
-0.29,1.80,1.80,2.70,4.00,0
-0.27,1.80,1.80,2.90,6.00,0
-0.29,1.80,1.80,2.90,6.00,0
-0.30,1.80,1.80,2.70,4.00,0
-0.28,1.80,1.80,2.90,6.00,0
-0.28,1.80,1.80,2.90,6.00,0
-0.28,1.80,1.80,2.70,4.00,0
-0.28,1.80,1.80,2.80,6.00,0
-0.26,1.80,1.80,3.00,6.00,0
-0.28,1.80,1.80,2.90,6.00,0
-0.29,1.80,1.80,2.70,4.00,0
-0.27,1.80,1.80,2.90,6.00,0
-0.29,1.80,1.80,2.70,4.00,0
-0.27,1.80,1.80,2.90,6.00,0
-0.26,1.80,1.80,2.70,4.00,0
-0.29,1.80,1.80,2.70,4.00,0
-0.28,1.80,1.80,2.80,6.00,0
-0.27,1.80,1.80,3.00,6.00,0
-0.27,1.80,1.80,2.80,6.00,0
-0.27,1.80,1.80,2.80,6.00,0
-0.29,1.80,1.80,2.90,6.00,0
-0.26,1.80,1.80,3.00,6.00,0
-0.29,1.80,1.80,2.90,6.00,0
-0.23,1.80,1.80,2.70,4.00,0
-0.28,1.80,1.80,2.90,6.00,0
-0.27,1.80,1.80,2.90,6.00,0
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/text_to_csv.py b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/text_to_csv.py
deleted file mode 100644
index 7655df60b4da84a7bff51976e0e7556f2eaebad9..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/text_to_csv.py
+++ /dev/null
@@ -1,6 +0,0 @@
-import pandas as pd
-
-read_file=pd.read_csv(r'/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/raw_data.txt')
-
-read_file.to_csv(r'/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/ example.csv')
-read_file.to_excel(r'/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/python_txt_to_csv/ example.csv')
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/readme.txt b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/readme.txt
deleted file mode 100644
index 175272b775dc05983991a69b26fc0cfea702e4c6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/readme.txt
+++ /dev/null
@@ -1 +0,0 @@
-hsjdhsjhdhsjdhsjhd
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/readmee.txt b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/readmee.txt
deleted file mode 100644
index 93a0c8bfc5b951e95da23935309a366d68dfb9db..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/readmee.txt
+++ /dev/null
@@ -1,5038 +0,0 @@
-shajfksad
-hsjdhsjhdhsjdhsjhdif you want to start the sensor mesaurment type 'y' 
-Measuring..
-Finished Mesasrument.
-Output data
-
-
-
-
-
-
-
-
-
-
-
-Shunt Voltage [mV],Bus Voltage [V].Load Voltage [V],Current[mA],Bus Power [mW],Overflow
-0.24,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.27,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.70,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.19,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.70,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.19,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.19,1.65,1.65,1.90,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.70,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.00,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.70,4.00,0
-0.25,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.19,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,1.90,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,1.80,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.20,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.00,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.20,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,1.90,4.00,0
-0.20,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.20,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.60,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.27,1.65,1.65,2.10,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.20,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.19,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.26,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.00,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.00,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.19,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.18,1.65,1.65,2.30,4.00,0
-0.27,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.20,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.00,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.20,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.70,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.27,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.27,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.00,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.70,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.27,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,1.90,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.27,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,1.90,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.18,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.19,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.70,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.20,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.60,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.19,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.70,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.70,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.60,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.27,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,1.90,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.20,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,1.90,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.00,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.20,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.80,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.19,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.00,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,1.90,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.18,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.27,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.20,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.20,1.64,1.64,1.90,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.19,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.27,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.19,1.65,1.65,2.20,4.00,0
-0.20,1.64,1.64,2.70,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.00,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,1.90,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.19,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.20,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.27,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.19,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,1.90,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.20,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.19,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.20,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.20,1.64,1.64,2.50,4.00,0
-0.19,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.20,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.18,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,1.90,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.20,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,1.90,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.21,1.65,1.65,2.00,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.19,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.20,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.00,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.27,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.26,1.65,1.65,2.50,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,1.90,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.80,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.50,4.00,0
-0.21,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.00,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.18,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.17,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.20,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.19,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.26,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.27,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,1.90,4.00,0
-0.20,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.27,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,1.90,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.00,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.19,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,1.90,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.70,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,1.90,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.70,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.27,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.19,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.00,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.10,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.27,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.19,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.19,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,1.90,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.20,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.20,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.19,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.60,4.00,0
-0.21,1.65,1.65,1.90,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.00,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.20,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.19,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.26,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.19,1.65,1.65,2.40,4.00,0
-0.27,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.19,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.00,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.27,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,1.90,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.20,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.27,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.20,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,1.80,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.20,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.20,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.00,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,1.90,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.00,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.70,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.70,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,1.90,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.27,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.28,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.27,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.28,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.19,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,1.90,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.00,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.70,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.00,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.27,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.26,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,1.90,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.19,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.00,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.70,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.70,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.20,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.20,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.20,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.21,1.65,1.65,2.50,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.20,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.00,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.00,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.23,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.70,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.20,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.27,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.60,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.60,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,1.90,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.19,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,1.90,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.60,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.20,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.25,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.00,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.19,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.19,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.20,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,1.90,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.19,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,1.90,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.26,1.64,1.64,2.00,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.60,4.00,0
-0.24,1.64,1.64,2.00,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.00,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.27,1.65,1.65,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.27,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.26,1.64,1.64,1.90,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.19,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.21,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.60,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.20,1.65,1.65,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.20,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.26,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.26,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.10,4.00,0
-0.24,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.22,1.65,1.65,1.90,4.00,0
-0.24,1.64,1.64,1.90,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.10,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,1.90,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.10,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.30,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.10,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.70,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.18,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.26,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.25,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.26,1.65,1.65,2.40,4.00,0
-0.21,1.65,1.65,2.20,4.00,0
-0.24,1.64,1.64,2.70,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.10,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.65,1.65,2.50,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.21,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.20,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.21,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.21,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.30,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.40,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.19,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.64,1.64,2.10,4.00,0
-0.24,1.64,1.64,2.60,4.00,0
-0.24,1.64,1.64,1.90,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.23,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.26,1.64,1.64,2.10,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.20,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.21,1.65,1.65,2.30,4.00,0
-0.24,1.64,1.64,2.50,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.21,1.64,1.64,2.00,4.00,0
-0.23,1.64,1.64,2.50,4.00,0
-0.25,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.23,1.65,1.65,2.30,4.00,0
-0.23,1.64,1.64,2.60,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.23,1.65,1.65,2.20,4.00,0
-0.23,1.64,1.64,2.40,4.00,0
-0.22,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.24,1.65,1.65,2.40,4.00,0
-0.22,1.64,1.64,2.20,4.00,0
-0.22,1.65,1.65,2.30,4.00,0
-0.22,1.64,1.64,2.30,4.00,0
-0.24,1.65,1.65,2.20,4.00,0
-0.23,1.65,1.65,2.40,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.64,1.64,2.30,4.00,0
-0.22,1.64,1.64,2.40,4.00,0
-0.25,1.64,1.64,2.20,4.00,0
-0.23,1.64,1.64,2.30,4.00,0
-0.24,1.64,1.64,2.30,4.00,0
-0.25,1.65,1.65,2.40,4.00,0
-
-Shunt Voltage [mV]: 0.24
-Bus Voltage [V]: 1.64
-Load Voltage [V]: 1.64
-Current[mA]: 2.30
-Bus Power [mW]: 4.00
-Values OK - no overflow
-
-if you want to start the sensor mesaurment type 'y' 
-Measuring..
-Guru Meditation Error: Core  0 panic'ed (Store access fault). Exception was unhandled.
-
-Core  0 register dump:
-MEPC    : 0x4005882e  RA      : 0x420000f2  SP      : 0x3fc939c0  GP      : 0x3fc8b600  
-TP      : 0x3fc8939c  T0      : 0x3fd1f30e  T1      : 0x3c0302fc  T2      : 0x3e6b851f  
-S0/FP   : 0x3fc8c000  S1      : 0x00000000  A0      : 0x00000000  A1      : 0x3fc8c44c  
-A2      : 0xfffffff4  A3      : 0x00000014  A4      : 0x00000015  A5      : 0x00000000  
-A6      : 0x00000000  A7      : 0x00000000  S2      : 0x0001d4c0  S3      : 0x00000000  
-S4      : 0x3fc8c000  S5      : 0x00000000  S6      : 0x00000000  S7      : 0x00000000  
-S8      : 0x00000000  S9      : 0x00000000  S10     : 0x00000000  S11     : 0x00000000  
-T3      : 0x00000000  T4      : 0x40800000  T5      : 0x400ccccd  T6      : 0x3fd1eb85  
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/src/main.cpp b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/src/main.cpp
deleted file mode 100644
index 9c8e79175a7501f3f29a07d753527bba71a05167..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/src/main.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-
-#include <Arduino.h>
-#include <ina219.hpp>
-
-Forte_INA219 sensor1;
-
-void setup()
-{
-	Serial.begin(9600);
-	sensor1.setup();
-}
-
-void loop()
-{
-
-	out_data *data;
-	data = sensor1.read_data();
-
-	if (data == 0) {
-		Serial.println("Waiting for data!");
-		Serial.println();
-	} else {
-		Serial.print("Shunt Voltage [mV]: ");
-		Serial.println(data->shuntVoltage_mV);
-		Serial.print("Bus Voltage [V]: ");
-		Serial.println(data->busVoltage_V);
-		Serial.print("Load Voltage [V]: ");
-		Serial.println(data->loadVoltage_V);
-		Serial.print("Current[mA]: ");
-		Serial.println(data->current_mA);
-		Serial.print("Bus Power [mW]: ");
-		Serial.println(data->power_mW);
-		data->ina219_overflow == false ? Serial.println("Values OK - no overflow")
-		                               : Serial.println("Overflow! Choose higher PGAIN");
-		Serial.println();
-	}
-	delay(5000);
-
-	int samples = 5000;
-	out_data *data_raw = (out_data *)malloc(samples * sizeof(out_data));
-
-	Serial.println("if you want to start the sensor mesaurment type 'y' ");
-/*	while (Serial.read() != 'y') {
-		delay(1000);
-	}
-*/
-	Serial.println("Measuring..");
-
-	for (int i = 0; i < samples; i++) {
-		data_raw[i] = *sensor1.read_data();
-	//	Serial.println(sensor1.read_data()->current_mA);
-		delay(1);
-	}
-	Serial.println("Finished Mesasrument.");
-
-	delay(1000);
-	Serial.println("Output data");
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	Serial.println();
-	
-	/*
-	for (int i = 0; i < samples; i++) {
-
-		if (&data_raw[i] == 0) {
-			Serial.println("Waiting for data!");
-			Serial.println();
-		} else {
-			Serial.print("Shunt Voltage [mV]: ");
-			Serial.println(data_raw[i].shuntVoltage_mV);
-			Serial.print("Bus Voltage [V]: ");
-			Serial.println(data_raw[i].busVoltage_V);
-			Serial.print("Load Voltage [V]: ");
-			Serial.println(data_raw[i].loadVoltage_V);
-			Serial.print("Current[mA]: ");
-			Serial.println(data_raw[i].current_mA);
-			Serial.print("Bus Power [mW]: ");
-			Serial.println(data_raw[i].power_mW);
-			data_raw[i].ina219_overflow == false ? Serial.println("Values OK - no overflow")
-			                                     : Serial.println("Overflow! Choose higher PGAIN");
-			Serial.println();
-		}
-	}
-	*/
-
-Serial.print("Shunt Voltage [mV],");
-Serial.print("Bus Voltage [V].");
-Serial.print("Load Voltage [V],");
-Serial.print("Current[mA],");
-Serial.print("Bus Power [mW],");
-Serial.println("Overflow");
-
-	for (int i = 0; i < samples; i++) {
-
-		if (&data_raw[i] == 0) {
-			Serial.println("Waiting for data!");
-			Serial.println();
-		} else {
-			Serial.print(data_raw[i].shuntVoltage_mV);
-			Serial.print(",");
-			Serial.print(data_raw[i].busVoltage_V);
-			Serial.print(",");
-			Serial.print(data_raw[i].loadVoltage_V);
-			Serial.print(",");
-			Serial.print(data_raw[i].current_mA);
-			Serial.print(",");
-			Serial.print(data_raw[i].power_mW);
-			Serial.print(",");
-			data_raw[i].ina219_overflow == false ? Serial.println("0") : Serial.println("1");
-		}
-	}
-
-	Serial.println();
-}
\ No newline at end of file
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/test/README b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/Example_forte_libary/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/circuit_diagramm_pic.png b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/circuit_diagramm_pic.png
deleted file mode 100644
index 65780746d9fef5d3bb25d44dc75f66f6937476d7..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/circuit_diagramm_pic.png and /dev/null differ
diff --git a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/documentaion DeepSleep Timer wake up.docx b/code-snippets/client/INA219_POWER_MEASURMENT_STATION/documentaion DeepSleep Timer wake up.docx
deleted file mode 100644
index ee0673a1875d3f47e2a8e49a751cf2ee5ba5199b..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/INA219_POWER_MEASURMENT_STATION/documentaion DeepSleep Timer wake up.docx and /dev/null differ
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/.gitignore b/code-snippets/client/SCD30/Example_forte_libary/client/.gitignore
deleted file mode 100644
index 6dea8206d255251b692bc51b06adced35f789ce8..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
-!lib/
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/.vscode/extensions.json b/code-snippets/client/SCD30/Example_forte_libary/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/include/README b/code-snippets/client/SCD30/Example_forte_libary/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/include/forte_sensor.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/include/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/include/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/include/pinout.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/include/pinout.hpp
deleted file mode 100644
index 7de77a4b3aab0cc8559c510091fd238db43b729d..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/include/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-#define SDI_DATA 8
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/README b/code-snippets/client/SCD30/Example_forte_libary/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/drs26.cpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index eeacce1df551248025c9005524c03f11c6ccab93..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include <drs26.hpp>
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck 
-*/
-
-void Forte_DRS26 ::setup()
-{
-    drs26.begin(SDI_DATA);
-}
-
-out_data *Forte_DRS26 ::read_data()
-{
-    String sdiResponse = "";
-    String measurement_command="1M!"; //The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is specified as 1M!=Sebsir measurement request at adress 1
-    String data_command="1D0!";       //and the followed data command 1D0! = Sensor data request at adress 1 
-
-    drs26.sendCommand(measurement_command);
-    delay(1000);
-    drs26.sendCommand(data_command);
-
-    while (drs26.available())
-    {
-        char next_character = drs26.read();
-        if ((next_character != '\n') && (next_character != '\r'))
-        {
-            sdiResponse += next_character;
-            delay(10); // 1 character ~ 7.5ms
-        }
-    }
-
-    if (sdiResponse.length() > 1)
-    {
-        data.id = sdiResponse.substring(0, 8).toInt();
-        data.circumference = sdiResponse.substring(9, 15).toFloat();
-        data.temperatur = sdiResponse.substring(16, 22).toFloat();
-        return &data;
-    }
-
-    return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/drs26.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index f34dad204d52a157db704dc0ef7730d806a251a0..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <SDI12.h>
-#include <pinout.hpp>
-#include "Wire.h"
-
-     
-struct out_data {
-        int id;
-        float circumference;
-        float temperatur;
-    };
-
-
-class Forte_DRS26 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data* read_data();
- 
-    private:
-        SDI12 drs26;
-        out_data data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/forte_sensor.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/pinout.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/pinout.hpp
deleted file mode 100644
index 4c284359487510b4740a2ac4b555e4fa19b68d05..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/drs26_digital/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 5
-#define I2C_SCL 4
-#define SDI_DATA 8
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/ina219.cpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/ina219.cpp
deleted file mode 100644
index df1fa146bc49b7e1f824bec42e7e860c260cd6b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "ina219.hpp"
-#include "Wire.h"
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <INA219_WE.h>
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        
-        return &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/ina219.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 91b8c4ba9edf1b6603737e8c0b7aa777b5e1594a..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <INA219_WE.h>
-
-     
-struct out_data {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data* read_data();
- 
-    private:
-        INA219_WE ina219;
-        out_data data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/pinout.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 9d336e45e266d1952527918387a8d36679bc3ae4..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 5
-#define I2C_SCL 4
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/pinout.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/scd30.cpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/scd30.cpp
deleted file mode 100644
index c7c2084754bfc94aef7b1ca25947ede9c4c03fc1..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "scd30.hpp"
-
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-out_data_scd30* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data.C02= airSensor.getCO2();
-        data.Temperature = airSensor.getTemperature();
-        data.Humidity = airSensor.getHumidity();
-
-        return   &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/scd30.hpp b/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/scd30.hpp
deleted file mode 100644
index d630c0fa808fcdd7ad59dd13eac1e110c6346628..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <Wire.h>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-struct out_data_scd30
-{
-    float C02;
-    float Temperature;
-    float Humidity;
-};
-
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_scd30* read_data();
-
-    private:
-        SCD30 airSensor;
-        out_data_scd30 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/platformio.ini b/code-snippets/client/SCD30/Example_forte_libary/client/platformio.ini
deleted file mode 100644
index 774bd23457cc773cf1c6b4adfc4cd74961e766a9..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/platformio.ini
+++ /dev/null
@@ -1,19 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = 
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	wollewald/INA219_WE@^1.3.1
-	envirodiy/SDI-12@^2.1.4
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/src/main.cpp b/code-snippets/client/SCD30/Example_forte_libary/client/src/main.cpp
deleted file mode 100644
index c97c6ae8050b03db1c85f3fae3bf46d9c1b7f2ea..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/src/main.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-
-#include <Arduino.h>
-
-#include <scd30.hpp>
-
-Forte_SCD30 scd30;
-
-void setup() {
-  Serial.begin(9600);
-  scd30.setup();
-}
-
-void loop() {
-  
-  out_data_scd30* data;
-  data = scd30.read_data();
-
-  if(data==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Sensor CO2 "); Serial.println(data->C02);
-        Serial.print("Humidity "); Serial.println(data->Humidity);
-        Serial.print("Temperature "); Serial.println(data->Temperature);
-        Serial.println();
-    }
-  delay(5000);
-}
-
diff --git a/code-snippets/client/SCD30/Example_forte_libary/client/test/README b/code-snippets/client/SCD30/Example_forte_libary/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/SCD30/Example_forte_libary/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/deep_sleep/.~lock.documentaion DeepSleep Timer wake up.docx# b/code-snippets/client/deep_sleep/.~lock.documentaion DeepSleep Timer wake up.docx#
deleted file mode 100644
index 9ae15a60afed4bba4536b4bdce48c5f787d2d47b..0000000000000000000000000000000000000000
--- a/code-snippets/client/deep_sleep/.~lock.documentaion DeepSleep Timer wake up.docx#	
+++ /dev/null
@@ -1 +0,0 @@
-,hassan,hassan-Lifebook-U7411,17.08.2022 16:52,file:///home/hassan/.config/libreoffice/4;
\ No newline at end of file
diff --git a/code-snippets/client/deep_sleep/ESP32_LOW_POWER Management.pdf b/code-snippets/client/deep_sleep/ESP32_LOW_POWER Management.pdf
deleted file mode 100644
index c93ade6a83ac217e56d40a0e53fe2f56c9b0dcc7..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/deep_sleep/ESP32_LOW_POWER Management.pdf and /dev/null differ
diff --git a/code-snippets/client/deep_sleep/documentaion DeepSleep Timer wake up.docx b/code-snippets/client/deep_sleep/documentaion DeepSleep Timer wake up.docx
deleted file mode 100644
index ec4930d43b77bb43e1a22e65f8c6fc565b9ae987..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/deep_sleep/documentaion DeepSleep Timer wake up.docx and /dev/null differ
diff --git a/code-snippets/client/deep_sleep/f_deep_sleep/examples/deep_sleep_timer_wake_up/deep_sleep_timer_wake_up.ino b/code-snippets/client/deep_sleep/f_deep_sleep/examples/deep_sleep_timer_wake_up/deep_sleep_timer_wake_up.ino
deleted file mode 100644
index c17462c33f91d844ba4e09cbe9e2de11685e633c..0000000000000000000000000000000000000000
--- a/code-snippets/client/deep_sleep/f_deep_sleep/examples/deep_sleep_timer_wake_up/deep_sleep_timer_wake_up.ino
+++ /dev/null
@@ -1,31 +0,0 @@
-#include <f_deep_sleep.h>
-/*
-This code is under Public Domain License.
-Author: Pranav Cherukupalli <cherukupallip@gmail.com>
-*/
-
-/* Data saved on the RTC memory will not be deletet while the deep sleep mode */
-RTC_DATA_ATTR int bootCount = 0;
-/* First we configure the wake up source We set our ESP32 to wake up every 5 seconds */
-#define TIME_TO_SLEEP 5
-
-void setup(){
-  Serial.begin(115200);
-  Serial.println("******************After weak up Programm starts in setup**********************");
-  delay(1000); //Take some time to open up the Serial Monitor
-
-}
-
-
-void loop(){
-  ++bootCount;
-  Serial.println("Boot number: " + String(bootCount));
-  //Print the wakeup reason for ESP32
-  print_wakeup_reason();
-  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) + " Seconds");
-  Serial.println("Going to sleep now");
-  Serial.println();
-  Serial.flush();
-  //going to sleep
-  deep_sleep(TIME_TO_SLEEP);
-}
diff --git a/code-snippets/client/deep_sleep/f_deep_sleep/f_deep_sleep.cpp b/code-snippets/client/deep_sleep/f_deep_sleep/f_deep_sleep.cpp
deleted file mode 100644
index fc827756ab8792770dad6c1fdc41ccbfb3fbcd09..0000000000000000000000000000000000000000
--- a/code-snippets/client/deep_sleep/f_deep_sleep/f_deep_sleep.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "f_deep_sleep.h"
-
-void print_wakeup_reason(){
-  esp_sleep_wakeup_cause_t wakeup_reason;
-
-  wakeup_reason = esp_sleep_get_wakeup_cause();
-
-  switch(wakeup_reason)
-  {
-    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
-    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
-    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
-    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
-    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
-    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
-  }
-}
-
-
-void deep_sleep(int time_in_sec){//Increment boot number and print it every reboot
-  esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
-  esp_deep_sleep_start();
-}
diff --git a/code-snippets/client/deep_sleep/f_deep_sleep/f_deep_sleep.h b/code-snippets/client/deep_sleep/f_deep_sleep/f_deep_sleep.h
deleted file mode 100644
index 876500d27ddac67e99ff0bbc4cecf74acdbeca6a..0000000000000000000000000000000000000000
--- a/code-snippets/client/deep_sleep/f_deep_sleep/f_deep_sleep.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef F_DEEP_SLEEP_H
-#define F_DEEP_SLEEP_H
-#include <Arduino.h>
-void deep_sleep(int time_to_sleep);
-void print_wakeup_reason();
-#endif
diff --git a/code-snippets/client/main_client_station/.gitignore b/code-snippets/client/main_client_station/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/code-snippets/client/main_client_station/.vscode/extensions.json b/code-snippets/client/main_client_station/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/main_client_station/.vscode/settings.json b/code-snippets/client/main_client_station/.vscode/settings.json
deleted file mode 100644
index 691a8f68f405ccdc2ba08296bd21c804bbec2ff3..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "C_Cpp.errorSquiggles": "Disabled"
-}
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/README.md b/code-snippets/client/main_client_station/README.md
deleted file mode 100644
index 56969c608fe5ba87344dc2e9902dcdea7bb96215..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Main client station
-
-This is the main client station which  has a solar and 
--humidity sensor
--rain precipitation
--solarRadiation
diff --git a/code-snippets/client/main_client_station/include/README b/code-snippets/client/main_client_station/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/main_client_station/include/forte_sensor.hpp b/code-snippets/client/main_client_station/include/forte_sensor.hpp
deleted file mode 100644
index 4ca8e39602ae03062a79a2acb8c25e634521f8b8..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/include/forte_sensor.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-// #include "Message.hpp"
-template <class T>
-class Forte_Sensor {
-  public:
-	virtual T read_data() = 0;
-	virtual void setup() = 0;
-	//virtual Message build_message() = 0;
-
-  private:
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/Message/ClientDataPackage.hpp b/code-snippets/client/main_client_station/lib/Message/ClientDataPackage.hpp
deleted file mode 100644
index 52f2be6032a190e6346bef71457cb78c983b0038..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/Message/ClientDataPackage.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#define NUM_SENSORS 10
-// packing the struct without padding, makes reading it on the fipy easier
-#pragma pack(1)
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-struct ClientDataPackage {
-	int identifiers[NUM_SENSORS];
-	float values[NUM_SENSORS];
-	int amountData;
-	long timestamp; // maybe make this array
-};
diff --git a/code-snippets/client/main_client_station/lib/Message/Message.cpp b/code-snippets/client/main_client_station/lib/Message/Message.cpp
deleted file mode 100644
index 6975ab6cd228ab218df9759abddc498a082c288c..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/Message/Message.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "Message.hpp"
-
-void Message::add_data(float value, int identifier)
-{
-	if (data.amountData < NUM_SENSORS) {
-		data.values[data.amountData] = value;
-		data.identifiers[data.amountData] = identifier;
-		data.amountData++;
-	}
-}
-
-ClientDataPackage Message ::get_client_data_package() const
-{
-	return data;
-}
-
-Message ::Message()
-{
-	// check for existing host mac address, use broadcast otherwise
-
-	data.amountData = 0;
-	data.timestamp = Time::getInstance().getMillis(); // I am assuming we are not sending data from Unix Epoch
-}
-
-Message ::Message(ClientDataPackage old_data)
-{
-	data = old_data;
-	// memcpy(&data, &old_data, sizeof(data));
-}
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/Message/Message.hpp b/code-snippets/client/main_client_station/lib/Message/Message.hpp
deleted file mode 100644
index 397ca6f707105be90fb76add8200b8edef93c8ed..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/Message/Message.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "ClientDataPackage.hpp"
-#include "Time.hpp"
-#include <Arduino.h>
-#include <ESP32Time.h>
-#include <esp_now.h>
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-class Message {
-  public:
-	Message();
-	Message(ClientDataPackage old_data);
-	void add_data(float value, int identifier);
-	ClientDataPackage get_client_data_package() const;
-
-  private:
-	ClientDataPackage data;
-};
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/SentecSensors/SentecSensors.cpp b/code-snippets/client/main_client_station/lib/SentecSensors/SentecSensors.cpp
deleted file mode 100644
index 76ca9f90ad538bf75288798863868642fa59cd50..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/SentecSensors/SentecSensors.cpp
+++ /dev/null
@@ -1,416 +0,0 @@
-#include <Arduino.h>
-#include <SoftwareSerial.h>
-
-#include <SentecSensors.h>
-/***************************************
- *          RS485 SENSOR READOUT
- ****************************************/
-
-SentecSensorRS485::SentecSensorRS485(SoftwareSerial *ser, byte add)
-{
-    address = add;
-    RS485 = ser;
-}
-
-void SentecSensorRS485::write(byte queryFrame[], int length)
-{
-    // sends a message (bytes) to the sensor
-
-    // Initialize the transmitter
-    digitalWrite(serialCommunicationControlPin, HIGH);
-    // Send message: request a reading from the sensor
-    RS485->write(queryFrame, length);
-    RS485->flush();
-    // Initialize the receiver
-    digitalWrite(serialCommunicationControlPin, LOW);
-}
-
-String SentecSensorRS485::getValueStr(float value)
-{
-    if (valid)
-    {
-        return String(value, 1);
-    }
-    else
-    {
-        return String("null");
-    }
-}
-
-String SentecSensorRS485::getValueStr(int value)
-{
-    if (valid)
-    {
-        return String(value);
-    }
-    else
-    {
-        return String("null");
-    }
-}
-
-void SentecSensorRS485::queryAddress()
-{
-    // request the address of the sensor with ONLY ONE SENSOR ON THE BUS
-
-    byte tmp_addr = address; // store the address in a temporary byte
-    address = 0xFF;          // change the address to FF (0) for address check
-    readRegister(word(0x07, 0xD0), 2);
-    address = tmp_addr; // set the original address back
-}
-
-void SentecSensorRS485::readRegister(int registerStartAddress)
-{
-    readRegister(registerStartAddress, 1);
-}
-
-void SentecSensorRS485::readRegister(int registerStartAddress, int registerLength)
-{
-    // function code 0x03: get data measured by the sensor
-    byte query[8];
-    query[0] = address;
-    // function code
-    query[1] = 0x03;
-    // register start address
-    query[2] = registerStartAddress >> 8;
-    query[3] = registerStartAddress & 0xFF;
-    // register length
-    query[4] = registerLength >> 8;
-    query[5] = registerLength & 0xFF;
-    // calculate last two bytes (CRC check)
-    calculateCRC(query, sizeof(query) - 2);
- //#   Serial.print("Query (get data): 0x");                    #Print bytes
- //#   printBytes(query, 8);
-    // write the data request to the modbus line
-    write(query, sizeof(query));
-    // get response from sensor
-    getResponse();
-}
-
-void SentecSensorRS485::writeRegister(int registerAddress, int value)
-{
-    // function code 0x06: change sensor settings
-    // e.g. a new address, reset rainfal data...
-
-    byte query[8];
-    query[0] = address;
-    // function code
-    query[1] = 0x06;
-    // register start address
-    query[2] = registerAddress >> 8;
-    query[3] = registerAddress & 0xFF;
-    // register length
-    query[4] = value >> 8;
-    query[5] = value & 0xFF;
-    calculateCRC(query, sizeof(query) - 2);
-    Serial.print("Query (settings):    ");
-    printBytes(query, 8);
-    write(query, sizeof(query));
-    getResponse();
-}
-
-void SentecSensorRS485::setAddress(byte add)
-{
-    // change the address of a sensor
-    writeRegister(word(0x07, 0xD0), add);
-    // TODO check response: matches the sent message exactly
-    address = add;
-}
-
-void SentecSensorRS485::resetAnswerFrame()
-{
-    for (int i = 0; i < 10; i++)
-    {
-        answerFrame[i] = 0;
-    }
-}
-
-bool SentecSensorRS485::getResponse()
-{
-    // reads the response of a sensor
-    valid = true;
-    int idx = 0;
-    int byteReceived;
-    // usual response length: changed in the while loop to match the response,
-    //   changed only when reading data (then it's 7 or 9  bytes, sensor dpendent)
-    int responseLength = 8;
-    // reading an answer takes up to 39 milliseconds for 2 byte readRegister
-    const int timeout = 200;
-    const int retries = 3; //#editet to q
-    size_t tries = 1;
-
-    for (tries; tries <= retries; tries++)
-    {
-        // if we lose connection with the sensor, we get an array of zeros back
-        resetAnswerFrame();
-
-        unsigned long time = millis();
-        while (idx < responseLength && (millis() - time) < timeout)
-        {
-            if (RS485->available())
-            {
-                byteReceived = RS485->read();
-                // Serial.println(byteReceived, HEX);
-                // check for first byte. It has to be the device address unless for broadcasts with address = 0xFF
-                if (idx == 0 && address != 0xFF && byteReceived != address)
-                {
-                    Serial.print("Invalid byte. First byte needs to be address 0x");
-                    Serial.print(address, HEX);
-                    Serial.print(" but got 0x");
-                    Serial.print(byteReceived, HEX);
-                    Serial.println("instead");
-                }
-                else
-                {
-                    answerFrame[idx] = byteReceived;
-                    // for reading register: third received byte is data length, read number of bytes accordingly
-                    if (idx == 2 && answerFrame[1] == 0x03)
-                    {
-                        // 5 bytes for address, function, data length, CRC_H, CRC_L
-                        responseLength = 5 + byteReceived;
-                    }
-                    idx++;
-                }
-            }
-        }
-
-        delay(10);
-        Serial.print("Response: 0x");
-        printBytes(answerFrame, responseLength);
-        Serial.print("Tries: ");
-        Serial.println(tries);
-        Serial.print("Bytes received: ");
-        Serial.println(idx);
-        word crc_received = word(answerFrame[responseLength - 2], answerFrame[responseLength - 1]);
-        word crc = calculateCRC(answerFrame, responseLength - 2);
-        if (crc_received != word(crc))
-        {
-            Serial.print("CRC wrong: Expected ");
-            printBytes(crc);
-            Serial.print(" got ");
-            printBytes(crc_received);
-            Serial.println();
-            valid = false;
-            resetAnswerFrame();
-        }
-
-        if (answerFrame[0] == 0)
-        {
-            valid = false;
-        }
-        if(valid)
-        {
-            break;
-        }
-    }
-    return valid;
-}
-
-unsigned int SentecSensorRS485::calculateCRC(byte query[], int length)
-{
-    // Change the last two bytes of the queryFrame to conform to a CRC check
-    // Yes, this is necessary. No, I don't know exactly what it does.
-    unsigned int tmp1, tmp2, flag;
-    tmp1 = 0xFFFF;
-    for (unsigned char i = 0; i < length; i++)
-    {
-        tmp1 = tmp1 ^ query[i];
-        for (unsigned char j = 1; j <= 8; j++)
-        {
-            flag = tmp1 & 0x0001;
-            tmp1 >>= 1;
-            if (flag)
-                tmp1 ^= 0xA001;
-        }
-    }
-    // Reverse byte order.
-    tmp2 = tmp1 >> 8;
-    tmp1 = (tmp1 << 8) | tmp2;
-    tmp1 &= 0xFFFF;
-    // change last two query bytes
-    query[length + 1] = tmp1;
-    query[length] = tmp1 >> 8;
-
-    return tmp1; // the returned value is already swapped - CRC_L byte is first & CRC_H byte is last
-}
-
-void SentecSensorRS485::printBytes(byte *data, int length)
-{
-    // prints 8-bit data in hex with leading zeroes
-    char tmp[16];
-    for (int i = 0; i < length; i++)
-    {
-        sprintf(tmp, "%.2X", data[i]);
-        // sprintf(tmp, "0x%.2X",data[i]);
-        Serial.print(tmp);
-        Serial.print(" ");
-    }
-    Serial.println();
-}
-
-void SentecSensorRS485::printBytes(word data)
-{
-    char tmp[10];
-    sprintf(tmp, "0x%.2X", data >> 8);
-    Serial.print(tmp);
-    sprintf(tmp, "%.2X", data & 0xFF);
-    // sprintf(tmp, "0x%.2X",data[i]);
-    Serial.print(tmp);
-}
-
-word SolarRadiationSensor::getSolarRadiation()
-{
-    readRegister(0, 1);
-    glob = word(answerFrame[3], answerFrame[4]);
-    Serial.print("Global solar radiation: ");
-    Serial.print(glob, DEC);
-    Serial.println(" W/m^2");
-    return glob;
-}
-
-String SolarRadiationSensor::getSolarRadiationStr()
-{
-    return getValueStr((int)glob);
-}
-
-void RainGaugeSensor::queryTime()
-{
-    // get time setting of the rain gauge
-    readRegister(0x34, 0x03);
-}
-
-void RainGaugeSensor::setTime()
-{
-    // set time of the rain gauge
-    byte query[15];
-    query[0] = address;
-    query[1] = 0x10; // function code
-    query[2] = 0x00; // register start address high
-    query[3] = 0x34; // register start address low
-    query[4] = 0x00; // register length high
-    query[5] = 0x03; // register length low
-    query[6] = 0x06; // data length
-    // TODO parse timestamp... hard-code a random date for now.
-    query[7] = 0x20;  // year
-    query[8] = 0x04;  // month
-    query[9] = 0x03;  // day
-    query[10] = 0x17; // hours
-    query[11] = 0x06; // minutes
-    query[12] = 0x28; // seconds
-    query[13] = 0x00; // CRC low
-    query[14] = 0x00; // CRC high
-
-    calculateCRC(query, sizeof(query) - 2);
-    Serial.print("Query (set time):    ");
-    printBytes(query, 15);
-    write(query, sizeof(query));
-    getResponse();
-}
-
-void RainGaugeSensor::resetPrecipitation()
-{
-    // clears rainfall rata from the rain gauge
-    // delay resetting after the last register reading
-    delay(100);
-    Serial.println("Resetting precipitation sum");
-    writeRegister(0x00, 0x5A);
-    // TODO check response: matches the sent message exactly
-}
-
-void RainGaugeSensor::resetSensor()
-{
-    // no clue what the difference between this one and the previous one is...
-    //   and the manual is not helpful, of course
-    delay(100);
-    Serial.println("Resetting precipitation sum");
-    writeRegister(0x37, 0x03);
-    // TODO check response: matches the sent message exactly
-}
-
-void RainGaugeSensor::getPrecipitation()
-{
-    // get all precipitation statistics
-    readRegister(0, 0x0A);
-    word prcpToday = word(answerFrame[3], answerFrame[4]);
-    word prcpInstantaneous = word(answerFrame[5], answerFrame[6]); // TODO I'm pretty sure this value is bullshit (0.1 mm resolution)
-    word prcpYesterday = word(answerFrame[7], answerFrame[8]);
-    word prcpTotal = word(answerFrame[9], answerFrame[10]);
-    word prcpHourly = word(answerFrame[11], answerFrame[12]);
-    word prcpLastHourly = word(answerFrame[13], answerFrame[14]);
-    word prcp24max = word(answerFrame[15], answerFrame[16]);
-    word prcp24maxPeriod = word(answerFrame[17], answerFrame[18]);
-    word prcp24min = word(answerFrame[19], answerFrame[20]);
-    word prcp24minPeriod = word(answerFrame[21], answerFrame[22]);
-
-    Serial.print("Today: ");
-    Serial.print(prcpToday / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("Instantaneous: ");
-    Serial.print(prcpInstantaneous / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("Total: ");
-    Serial.print(prcpTotal / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("Hourly: ");
-    Serial.print(prcpHourly / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("24 max: ");
-    Serial.print(prcp24max / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("24 min: ");
-    Serial.print(prcp24min / 10.0, 1);
-    Serial.println(" mm");
-}
-
-word RainGaugeSensor::getInstantaneousPrecipitation()
-{
-    // gets tips of scale since the last reset, i.e. total precipitation (I THINK)
-    //   manual says this is current precipitation - is it?
-    readRegister(0, 0x01);
-    precipitation = word(answerFrame[3], answerFrame[4]);
-    Serial.print("Precipitation: ");
-    Serial.print(precipitation / 10.0, 1);
-    Serial.println(" mm");
-    // resetPrecipitation();
-    return precipitation;
-}
-
-String RainGaugeSensor::getPrecipitationStr()
-{
-    return getValueStr((float)(precipitation / 10.0));
-}
-
-word SoilMoistureSensor::getMoistureTemp()
-{
-    readRegister(0, 2); // start register at 0, read 2 variables (vwc, soil temp)
-    moistureRaw = word(answerFrame[3], answerFrame[4]);
-    if (answerFrame[5] < 0x80)
-    {
-        temperatureRaw = word(answerFrame[5], answerFrame[6]);
-    }
-    else
-    {
-        temperatureRaw = word(answerFrame[5], answerFrame[6]) - 65536;
-    }
-    Serial.print("Soil moisture: ");
-    Serial.print((moistureRaw - moistureOffset) / 10.0, 1);
-    Serial.println(" %");
-    Serial.print("Temperature: ");
-    Serial.print((temperatureRaw - temperatureOffset) / 10.0 , 1);
-    Serial.println(" °C");
-    return temperatureRaw;
-}
-
-float SoilMoistureSensor::getMoisture(){
-   return (float)((moistureRaw - moistureOffset) / 10.0);
-}
-
-String SoilMoistureSensor::getMoistureStr()
-{
-    return getValueStr((float)((moistureRaw - moistureOffset) / 10.0));
-}
-
-String SoilMoistureSensor::getTemperatureStr()
-{
-    return getValueStr((float)((temperatureRaw - temperatureOffset) / 10.0));
-}
diff --git a/code-snippets/client/main_client_station/lib/SentecSensors/SentecSensors.h b/code-snippets/client/main_client_station/lib/SentecSensors/SentecSensors.h
deleted file mode 100644
index b21f8c56c2af6353d8a06aeb41c2a1ded08449ac..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/SentecSensors/SentecSensors.h
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef SENTECSENSORS_H
-#define SENTECSENSORS_H
-
-#include <Arduino.h>
-#include <SoftwareSerial.h>
-
-class SentecSensorRS485
-{
-public:
-    byte address;
-    uint8_t serialCommunicationControlPin = 6;
-    SoftwareSerial *RS485;
-    byte answerFrame[10];
-    // TODO use valid flag to log None
-    bool valid = false;
-    SentecSensorRS485(SoftwareSerial *ser, byte add);
-
-    void write(byte queryFrame[], int length);
-    String getValueStr(float value);
-    String getValueStr(int value);
-    void queryAddress();
-    void readRegister(int registerStartAddress);
-    void readRegister(int registerStartAddress, int registerLength);
-    void writeRegister(int registerAddress, int value);
-    void setAddress(byte add);
-    void resetAnswerFrame();
-    bool getResponse();
-    unsigned int calculateCRC(byte query[], int length);
-    void printBytes(byte *data, int length);
-    void printBytes(word data);
-};
-
-class SolarRadiationSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // global radiation [W/m^2]
-    word glob = 0;
-
-    word getSolarRadiation();
-    String getSolarRadiationStr();
-};
-
-class RainGaugeSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // precipitation values [mm]
-    word precipitation = 0;     // prcp since reset? (I THINK!!!)
-    word prcpToday = 0;         // prcp since 00:00
-    word prcpInstantaneous = 0; // rainfall since last query - THIS IS OFF
-    word prcpYesterday = 0;     // prcp sum yesterday 00:00-24:00
-    word prcpTotal = 0;         // prcp since sensor power-up
-    word prcpHourly = 0;        // prcp this hour
-    word prcpLastHourly = 0;    // prcp last hour
-    word prcp24max = 0;         // max mm in the last 24h
-    word prcp24maxPeriod = 0;   // time when max prcp was measured
-    word prcp24min = 0;         // min mm in the last 24h
-    word prcp24minPeriod = 0;   // time when min prcp was measured
-
-    void queryTime();
-    void setTime();
-    void resetPrecipitation();
-    void resetSensor();
-    void getPrecipitation();
-    word getInstantaneousPrecipitation();
-    String getPrecipitationStr();
-};
-
-class SoilMoistureSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // vwc: volumetric water content [%]
-    word moistureRaw = 0;
-    int moistureOffset = 0;
-    // soil temperature [deg C]
-    int temperatureRaw = 0;
-    int temperatureOffset = 0;
-
-    word getMoistureTemp();
-    float getMoisture();
-    String getMoistureStr();
-    String getTemperatureStr();
-};
-
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/caching/src/ram_caching.cpp b/code-snippets/client/main_client_station/lib/caching/src/ram_caching.cpp
deleted file mode 100644
index 9325e7c7909473c998d2a113779d94480fa3589c..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/caching/src/ram_caching.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "ram_caching.hpp"
-
-RTC_DATA_ATTR int cachedAmount = -1;
-RTC_DATA_ATTR ClientDataPackage backup[NUM_SENSORS];
-
-ClientDataPackage ram_cache_pop()
-{
-	return backup[cachedAmount--];
-}
-
-void ram_cache_push(ClientDataPackage data)
-{
-	backup[++cachedAmount] = data;
-}
-
-bool ram_cache_is_empty()
-{
-	return cachedAmount == -1;
-}
-
-bool ram_cache_is_full()
-{
-	return cachedAmount == 9;
-}
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/caching/src/ram_caching.hpp b/code-snippets/client/main_client_station/lib/caching/src/ram_caching.hpp
deleted file mode 100644
index 466668ba65578e0a9aa3f0af9bf20174889b0eb2..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/caching/src/ram_caching.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _RAM_CACHE
-#define _RAM_CACHE
-#include "ClientDataPackage.hpp"
-#include <ESP32Time.h>
-
-bool ram_cache_is_empty();
-bool ram_cache_is_full();
-void ram_cache_push(ClientDataPackage data);
-ClientDataPackage ram_cache_pop();
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/espnow/README b/code-snippets/client/main_client_station/lib/espnow/README
deleted file mode 100644
index 55f89c0b2141283b3dd2d94c882cdaccbe2064fe..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/espnow/README
+++ /dev/null
@@ -1,11 +0,0 @@
-# basic usage
-
-To send data using espnow, create a new Message object,
-then use the add_data(value, identifier) method for every value
-to fill the message.
-when every value is added, use the send() method to send the data
-to the host (fipy). If the esp client has never recieved a config
-message from the host, it will instead broadcast the message.
-
----
-right now, it is not possible to add more than 10 values.
diff --git a/code-snippets/client/main_client_station/lib/espnow/src/ClientDataPackage.hpp b/code-snippets/client/main_client_station/lib/espnow/src/ClientDataPackage.hpp
deleted file mode 100644
index 52f2be6032a190e6346bef71457cb78c983b0038..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/espnow/src/ClientDataPackage.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#define NUM_SENSORS 10
-// packing the struct without padding, makes reading it on the fipy easier
-#pragma pack(1)
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-struct ClientDataPackage {
-	int identifiers[NUM_SENSORS];
-	float values[NUM_SENSORS];
-	int amountData;
-	long timestamp; // maybe make this array
-};
diff --git a/code-snippets/client/main_client_station/lib/espnow/src/ESPNow.cpp b/code-snippets/client/main_client_station/lib/espnow/src/ESPNow.cpp
deleted file mode 100644
index 359b43c50b855b7f90d955995befe915a3846e3d..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/espnow/src/ESPNow.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "ESPNow.hpp"
-
-uint8_t BROADCAST_MAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-esp_now_peer_info_t hostInfo;
-Preferences preferences;
-
-void get_host_mac(uint8_t *destination)
-{
-	preferences.begin("config", true);
-	if (!preferences.isKey("host")) {
-		preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
-	} else {
-		memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-		Serial.println("backup mac used");
-	}
-	preferences.end();
-}
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status)
-{
-	// go to sleep
-}
-
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
-{
-	Serial.println("message recieved");
-	config new_config;
-	memcpy(&new_config, incomingData, sizeof(new_config)); // TODO: check for valid mac
-
-	// put the host address in flash mem
-	preferences.begin("config", false);
-	if (!preferences.isKey("host")) {
-		preferences.putBytes("host", new_config.host, sizeof(new_config.host));
-		Serial.println("host mac saved to flash");
-	} else{
-		Serial.println("host mac already exists");
-	}// host change shouldn't be an issue
-	preferences.end();
-	// sync time
-	Time::getInstance().setTime(
-	    new_config.time_millis); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
-	Serial.println("Saved Time: " + (String) new_config.time_millis);
-	Serial.flush();
-}
-
-esp_err_t espnow_setup()
-{
-	esp_err_t result;
-	WiFi.mode(WIFI_STA);
-	result = esp_now_init();
-	if (result != ESP_OK) {
-		// initialization failed
-		return result; // not sure about this
-	}
-
-	get_host_mac(hostInfo.peer_addr); // check if there is a host saved in flash mem, broadcast otherwise
-
-	hostInfo.channel = 0;
-	hostInfo.encrypt = 0;
-	esp_now_add_peer(&hostInfo);
-
-	esp_now_register_recv_cb(on_data_recv);
-	esp_now_register_send_cb(on_data_sent);
-
-	return ESP_OK;
-}
-
-esp_err_t espnow_send_message(const Message& message){
-	Serial.println("sending Message");
-	esp_err_t success;
-	ClientDataPackage dataP = message.get_client_data_package();
-	uint8_t recipient;
-	get_host_mac(&recipient);
-
-	success = esp_now_send(&recipient, (uint8_t *) &dataP, sizeof(ClientDataPackage));
-	// if(success != ESP_OK){
-	//     if(!ram_cache_is_full()){
-	//         ram_cache_push(*data);
-	//     }
-	// }
-
-	for (int i = 0; i < dataP.amountData; i++) {
-		Serial.println(dataP.values[i]);
-	}
-	
-	Serial.println((String) "time sent: " + dataP.timestamp);
-	Serial.println((String) "Send status: " + success);
-	Serial.println();
-	Serial.println("done");
-	Serial.flush();
-	return success;
-}
diff --git a/code-snippets/client/main_client_station/lib/espnow/src/ESPNow.hpp b/code-snippets/client/main_client_station/lib/espnow/src/ESPNow.hpp
deleted file mode 100644
index e4ac43b351c4431e8a1bd1b15740ae5fe085e2fe..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/espnow/src/ESPNow.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _ESPNOW
-#define _ESPNOW
-
-#include "Message.hpp"
-#include "Time.hpp"
-#include "ram_caching.hpp"
-#include <ClientDataPackage.hpp>
-#include <ESP32Time.h>
-#include <Preferences.h>
-#include <WiFi.h>
-#include <esp_now.h>
-
-typedef struct config {
-	uint8_t host[6];
-	long time_millis;
-} config;
-
-esp_err_t espnow_setup();
-esp_err_t espnow_send_message(const Message& message);
-bool is_host_defined();
-void get_host_mac(uint8_t *destination);
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status);
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len);
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/espnow/src/Message.cpp b/code-snippets/client/main_client_station/lib/espnow/src/Message.cpp
deleted file mode 100644
index 6975ab6cd228ab218df9759abddc498a082c288c..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/espnow/src/Message.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "Message.hpp"
-
-void Message::add_data(float value, int identifier)
-{
-	if (data.amountData < NUM_SENSORS) {
-		data.values[data.amountData] = value;
-		data.identifiers[data.amountData] = identifier;
-		data.amountData++;
-	}
-}
-
-ClientDataPackage Message ::get_client_data_package() const
-{
-	return data;
-}
-
-Message ::Message()
-{
-	// check for existing host mac address, use broadcast otherwise
-
-	data.amountData = 0;
-	data.timestamp = Time::getInstance().getMillis(); // I am assuming we are not sending data from Unix Epoch
-}
-
-Message ::Message(ClientDataPackage old_data)
-{
-	data = old_data;
-	// memcpy(&data, &old_data, sizeof(data));
-}
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/espnow/src/Message.hpp b/code-snippets/client/main_client_station/lib/espnow/src/Message.hpp
deleted file mode 100644
index 397ca6f707105be90fb76add8200b8edef93c8ed..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/espnow/src/Message.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "ClientDataPackage.hpp"
-#include "Time.hpp"
-#include <Arduino.h>
-#include <ESP32Time.h>
-#include <esp_now.h>
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-class Message {
-  public:
-	Message();
-	Message(ClientDataPackage old_data);
-	void add_data(float value, int identifier);
-	ClientDataPackage get_client_data_package() const;
-
-  private:
-	ClientDataPackage data;
-};
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/rs485/SentecSensors.cpp b/code-snippets/client/main_client_station/lib/rs485/SentecSensors.cpp
deleted file mode 100644
index 76ca9f90ad538bf75288798863868642fa59cd50..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/rs485/SentecSensors.cpp
+++ /dev/null
@@ -1,416 +0,0 @@
-#include <Arduino.h>
-#include <SoftwareSerial.h>
-
-#include <SentecSensors.h>
-/***************************************
- *          RS485 SENSOR READOUT
- ****************************************/
-
-SentecSensorRS485::SentecSensorRS485(SoftwareSerial *ser, byte add)
-{
-    address = add;
-    RS485 = ser;
-}
-
-void SentecSensorRS485::write(byte queryFrame[], int length)
-{
-    // sends a message (bytes) to the sensor
-
-    // Initialize the transmitter
-    digitalWrite(serialCommunicationControlPin, HIGH);
-    // Send message: request a reading from the sensor
-    RS485->write(queryFrame, length);
-    RS485->flush();
-    // Initialize the receiver
-    digitalWrite(serialCommunicationControlPin, LOW);
-}
-
-String SentecSensorRS485::getValueStr(float value)
-{
-    if (valid)
-    {
-        return String(value, 1);
-    }
-    else
-    {
-        return String("null");
-    }
-}
-
-String SentecSensorRS485::getValueStr(int value)
-{
-    if (valid)
-    {
-        return String(value);
-    }
-    else
-    {
-        return String("null");
-    }
-}
-
-void SentecSensorRS485::queryAddress()
-{
-    // request the address of the sensor with ONLY ONE SENSOR ON THE BUS
-
-    byte tmp_addr = address; // store the address in a temporary byte
-    address = 0xFF;          // change the address to FF (0) for address check
-    readRegister(word(0x07, 0xD0), 2);
-    address = tmp_addr; // set the original address back
-}
-
-void SentecSensorRS485::readRegister(int registerStartAddress)
-{
-    readRegister(registerStartAddress, 1);
-}
-
-void SentecSensorRS485::readRegister(int registerStartAddress, int registerLength)
-{
-    // function code 0x03: get data measured by the sensor
-    byte query[8];
-    query[0] = address;
-    // function code
-    query[1] = 0x03;
-    // register start address
-    query[2] = registerStartAddress >> 8;
-    query[3] = registerStartAddress & 0xFF;
-    // register length
-    query[4] = registerLength >> 8;
-    query[5] = registerLength & 0xFF;
-    // calculate last two bytes (CRC check)
-    calculateCRC(query, sizeof(query) - 2);
- //#   Serial.print("Query (get data): 0x");                    #Print bytes
- //#   printBytes(query, 8);
-    // write the data request to the modbus line
-    write(query, sizeof(query));
-    // get response from sensor
-    getResponse();
-}
-
-void SentecSensorRS485::writeRegister(int registerAddress, int value)
-{
-    // function code 0x06: change sensor settings
-    // e.g. a new address, reset rainfal data...
-
-    byte query[8];
-    query[0] = address;
-    // function code
-    query[1] = 0x06;
-    // register start address
-    query[2] = registerAddress >> 8;
-    query[3] = registerAddress & 0xFF;
-    // register length
-    query[4] = value >> 8;
-    query[5] = value & 0xFF;
-    calculateCRC(query, sizeof(query) - 2);
-    Serial.print("Query (settings):    ");
-    printBytes(query, 8);
-    write(query, sizeof(query));
-    getResponse();
-}
-
-void SentecSensorRS485::setAddress(byte add)
-{
-    // change the address of a sensor
-    writeRegister(word(0x07, 0xD0), add);
-    // TODO check response: matches the sent message exactly
-    address = add;
-}
-
-void SentecSensorRS485::resetAnswerFrame()
-{
-    for (int i = 0; i < 10; i++)
-    {
-        answerFrame[i] = 0;
-    }
-}
-
-bool SentecSensorRS485::getResponse()
-{
-    // reads the response of a sensor
-    valid = true;
-    int idx = 0;
-    int byteReceived;
-    // usual response length: changed in the while loop to match the response,
-    //   changed only when reading data (then it's 7 or 9  bytes, sensor dpendent)
-    int responseLength = 8;
-    // reading an answer takes up to 39 milliseconds for 2 byte readRegister
-    const int timeout = 200;
-    const int retries = 3; //#editet to q
-    size_t tries = 1;
-
-    for (tries; tries <= retries; tries++)
-    {
-        // if we lose connection with the sensor, we get an array of zeros back
-        resetAnswerFrame();
-
-        unsigned long time = millis();
-        while (idx < responseLength && (millis() - time) < timeout)
-        {
-            if (RS485->available())
-            {
-                byteReceived = RS485->read();
-                // Serial.println(byteReceived, HEX);
-                // check for first byte. It has to be the device address unless for broadcasts with address = 0xFF
-                if (idx == 0 && address != 0xFF && byteReceived != address)
-                {
-                    Serial.print("Invalid byte. First byte needs to be address 0x");
-                    Serial.print(address, HEX);
-                    Serial.print(" but got 0x");
-                    Serial.print(byteReceived, HEX);
-                    Serial.println("instead");
-                }
-                else
-                {
-                    answerFrame[idx] = byteReceived;
-                    // for reading register: third received byte is data length, read number of bytes accordingly
-                    if (idx == 2 && answerFrame[1] == 0x03)
-                    {
-                        // 5 bytes for address, function, data length, CRC_H, CRC_L
-                        responseLength = 5 + byteReceived;
-                    }
-                    idx++;
-                }
-            }
-        }
-
-        delay(10);
-        Serial.print("Response: 0x");
-        printBytes(answerFrame, responseLength);
-        Serial.print("Tries: ");
-        Serial.println(tries);
-        Serial.print("Bytes received: ");
-        Serial.println(idx);
-        word crc_received = word(answerFrame[responseLength - 2], answerFrame[responseLength - 1]);
-        word crc = calculateCRC(answerFrame, responseLength - 2);
-        if (crc_received != word(crc))
-        {
-            Serial.print("CRC wrong: Expected ");
-            printBytes(crc);
-            Serial.print(" got ");
-            printBytes(crc_received);
-            Serial.println();
-            valid = false;
-            resetAnswerFrame();
-        }
-
-        if (answerFrame[0] == 0)
-        {
-            valid = false;
-        }
-        if(valid)
-        {
-            break;
-        }
-    }
-    return valid;
-}
-
-unsigned int SentecSensorRS485::calculateCRC(byte query[], int length)
-{
-    // Change the last two bytes of the queryFrame to conform to a CRC check
-    // Yes, this is necessary. No, I don't know exactly what it does.
-    unsigned int tmp1, tmp2, flag;
-    tmp1 = 0xFFFF;
-    for (unsigned char i = 0; i < length; i++)
-    {
-        tmp1 = tmp1 ^ query[i];
-        for (unsigned char j = 1; j <= 8; j++)
-        {
-            flag = tmp1 & 0x0001;
-            tmp1 >>= 1;
-            if (flag)
-                tmp1 ^= 0xA001;
-        }
-    }
-    // Reverse byte order.
-    tmp2 = tmp1 >> 8;
-    tmp1 = (tmp1 << 8) | tmp2;
-    tmp1 &= 0xFFFF;
-    // change last two query bytes
-    query[length + 1] = tmp1;
-    query[length] = tmp1 >> 8;
-
-    return tmp1; // the returned value is already swapped - CRC_L byte is first & CRC_H byte is last
-}
-
-void SentecSensorRS485::printBytes(byte *data, int length)
-{
-    // prints 8-bit data in hex with leading zeroes
-    char tmp[16];
-    for (int i = 0; i < length; i++)
-    {
-        sprintf(tmp, "%.2X", data[i]);
-        // sprintf(tmp, "0x%.2X",data[i]);
-        Serial.print(tmp);
-        Serial.print(" ");
-    }
-    Serial.println();
-}
-
-void SentecSensorRS485::printBytes(word data)
-{
-    char tmp[10];
-    sprintf(tmp, "0x%.2X", data >> 8);
-    Serial.print(tmp);
-    sprintf(tmp, "%.2X", data & 0xFF);
-    // sprintf(tmp, "0x%.2X",data[i]);
-    Serial.print(tmp);
-}
-
-word SolarRadiationSensor::getSolarRadiation()
-{
-    readRegister(0, 1);
-    glob = word(answerFrame[3], answerFrame[4]);
-    Serial.print("Global solar radiation: ");
-    Serial.print(glob, DEC);
-    Serial.println(" W/m^2");
-    return glob;
-}
-
-String SolarRadiationSensor::getSolarRadiationStr()
-{
-    return getValueStr((int)glob);
-}
-
-void RainGaugeSensor::queryTime()
-{
-    // get time setting of the rain gauge
-    readRegister(0x34, 0x03);
-}
-
-void RainGaugeSensor::setTime()
-{
-    // set time of the rain gauge
-    byte query[15];
-    query[0] = address;
-    query[1] = 0x10; // function code
-    query[2] = 0x00; // register start address high
-    query[3] = 0x34; // register start address low
-    query[4] = 0x00; // register length high
-    query[5] = 0x03; // register length low
-    query[6] = 0x06; // data length
-    // TODO parse timestamp... hard-code a random date for now.
-    query[7] = 0x20;  // year
-    query[8] = 0x04;  // month
-    query[9] = 0x03;  // day
-    query[10] = 0x17; // hours
-    query[11] = 0x06; // minutes
-    query[12] = 0x28; // seconds
-    query[13] = 0x00; // CRC low
-    query[14] = 0x00; // CRC high
-
-    calculateCRC(query, sizeof(query) - 2);
-    Serial.print("Query (set time):    ");
-    printBytes(query, 15);
-    write(query, sizeof(query));
-    getResponse();
-}
-
-void RainGaugeSensor::resetPrecipitation()
-{
-    // clears rainfall rata from the rain gauge
-    // delay resetting after the last register reading
-    delay(100);
-    Serial.println("Resetting precipitation sum");
-    writeRegister(0x00, 0x5A);
-    // TODO check response: matches the sent message exactly
-}
-
-void RainGaugeSensor::resetSensor()
-{
-    // no clue what the difference between this one and the previous one is...
-    //   and the manual is not helpful, of course
-    delay(100);
-    Serial.println("Resetting precipitation sum");
-    writeRegister(0x37, 0x03);
-    // TODO check response: matches the sent message exactly
-}
-
-void RainGaugeSensor::getPrecipitation()
-{
-    // get all precipitation statistics
-    readRegister(0, 0x0A);
-    word prcpToday = word(answerFrame[3], answerFrame[4]);
-    word prcpInstantaneous = word(answerFrame[5], answerFrame[6]); // TODO I'm pretty sure this value is bullshit (0.1 mm resolution)
-    word prcpYesterday = word(answerFrame[7], answerFrame[8]);
-    word prcpTotal = word(answerFrame[9], answerFrame[10]);
-    word prcpHourly = word(answerFrame[11], answerFrame[12]);
-    word prcpLastHourly = word(answerFrame[13], answerFrame[14]);
-    word prcp24max = word(answerFrame[15], answerFrame[16]);
-    word prcp24maxPeriod = word(answerFrame[17], answerFrame[18]);
-    word prcp24min = word(answerFrame[19], answerFrame[20]);
-    word prcp24minPeriod = word(answerFrame[21], answerFrame[22]);
-
-    Serial.print("Today: ");
-    Serial.print(prcpToday / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("Instantaneous: ");
-    Serial.print(prcpInstantaneous / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("Total: ");
-    Serial.print(prcpTotal / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("Hourly: ");
-    Serial.print(prcpHourly / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("24 max: ");
-    Serial.print(prcp24max / 10.0, 1);
-    Serial.println(" mm");
-    Serial.print("24 min: ");
-    Serial.print(prcp24min / 10.0, 1);
-    Serial.println(" mm");
-}
-
-word RainGaugeSensor::getInstantaneousPrecipitation()
-{
-    // gets tips of scale since the last reset, i.e. total precipitation (I THINK)
-    //   manual says this is current precipitation - is it?
-    readRegister(0, 0x01);
-    precipitation = word(answerFrame[3], answerFrame[4]);
-    Serial.print("Precipitation: ");
-    Serial.print(precipitation / 10.0, 1);
-    Serial.println(" mm");
-    // resetPrecipitation();
-    return precipitation;
-}
-
-String RainGaugeSensor::getPrecipitationStr()
-{
-    return getValueStr((float)(precipitation / 10.0));
-}
-
-word SoilMoistureSensor::getMoistureTemp()
-{
-    readRegister(0, 2); // start register at 0, read 2 variables (vwc, soil temp)
-    moistureRaw = word(answerFrame[3], answerFrame[4]);
-    if (answerFrame[5] < 0x80)
-    {
-        temperatureRaw = word(answerFrame[5], answerFrame[6]);
-    }
-    else
-    {
-        temperatureRaw = word(answerFrame[5], answerFrame[6]) - 65536;
-    }
-    Serial.print("Soil moisture: ");
-    Serial.print((moistureRaw - moistureOffset) / 10.0, 1);
-    Serial.println(" %");
-    Serial.print("Temperature: ");
-    Serial.print((temperatureRaw - temperatureOffset) / 10.0 , 1);
-    Serial.println(" °C");
-    return temperatureRaw;
-}
-
-float SoilMoistureSensor::getMoisture(){
-   return (float)((moistureRaw - moistureOffset) / 10.0);
-}
-
-String SoilMoistureSensor::getMoistureStr()
-{
-    return getValueStr((float)((moistureRaw - moistureOffset) / 10.0));
-}
-
-String SoilMoistureSensor::getTemperatureStr()
-{
-    return getValueStr((float)((temperatureRaw - temperatureOffset) / 10.0));
-}
diff --git a/code-snippets/client/main_client_station/lib/rs485/SentecSensors.h b/code-snippets/client/main_client_station/lib/rs485/SentecSensors.h
deleted file mode 100644
index b21f8c56c2af6353d8a06aeb41c2a1ded08449ac..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/rs485/SentecSensors.h
+++ /dev/null
@@ -1,88 +0,0 @@
-#ifndef SENTECSENSORS_H
-#define SENTECSENSORS_H
-
-#include <Arduino.h>
-#include <SoftwareSerial.h>
-
-class SentecSensorRS485
-{
-public:
-    byte address;
-    uint8_t serialCommunicationControlPin = 6;
-    SoftwareSerial *RS485;
-    byte answerFrame[10];
-    // TODO use valid flag to log None
-    bool valid = false;
-    SentecSensorRS485(SoftwareSerial *ser, byte add);
-
-    void write(byte queryFrame[], int length);
-    String getValueStr(float value);
-    String getValueStr(int value);
-    void queryAddress();
-    void readRegister(int registerStartAddress);
-    void readRegister(int registerStartAddress, int registerLength);
-    void writeRegister(int registerAddress, int value);
-    void setAddress(byte add);
-    void resetAnswerFrame();
-    bool getResponse();
-    unsigned int calculateCRC(byte query[], int length);
-    void printBytes(byte *data, int length);
-    void printBytes(word data);
-};
-
-class SolarRadiationSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // global radiation [W/m^2]
-    word glob = 0;
-
-    word getSolarRadiation();
-    String getSolarRadiationStr();
-};
-
-class RainGaugeSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // precipitation values [mm]
-    word precipitation = 0;     // prcp since reset? (I THINK!!!)
-    word prcpToday = 0;         // prcp since 00:00
-    word prcpInstantaneous = 0; // rainfall since last query - THIS IS OFF
-    word prcpYesterday = 0;     // prcp sum yesterday 00:00-24:00
-    word prcpTotal = 0;         // prcp since sensor power-up
-    word prcpHourly = 0;        // prcp this hour
-    word prcpLastHourly = 0;    // prcp last hour
-    word prcp24max = 0;         // max mm in the last 24h
-    word prcp24maxPeriod = 0;   // time when max prcp was measured
-    word prcp24min = 0;         // min mm in the last 24h
-    word prcp24minPeriod = 0;   // time when min prcp was measured
-
-    void queryTime();
-    void setTime();
-    void resetPrecipitation();
-    void resetSensor();
-    void getPrecipitation();
-    word getInstantaneousPrecipitation();
-    String getPrecipitationStr();
-};
-
-class SoilMoistureSensor : public SentecSensorRS485
-{
-public:
-    using SentecSensorRS485::SentecSensorRS485;
-    // vwc: volumetric water content [%]
-    word moistureRaw = 0;
-    int moistureOffset = 0;
-    // soil temperature [deg C]
-    int temperatureRaw = 0;
-    int temperatureOffset = 0;
-
-    word getMoistureTemp();
-    float getMoisture();
-    String getMoistureStr();
-    String getTemperatureStr();
-};
-
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/rs485/forte_sensor.hpp b/code-snippets/client/main_client_station/lib/rs485/forte_sensor.hpp
deleted file mode 100644
index 4ca8e39602ae03062a79a2acb8c25e634521f8b8..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/rs485/forte_sensor.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-// #include "Message.hpp"
-template <class T>
-class Forte_Sensor {
-  public:
-	virtual T read_data() = 0;
-	virtual void setup() = 0;
-	//virtual Message build_message() = 0;
-
-  private:
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/rs485/rs485.cpp b/code-snippets/client/main_client_station/lib/rs485/rs485.cpp
deleted file mode 100644
index ca675cbb4e9e823c7aa7942599e2ad62582b1bda..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/rs485/rs485.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "rs485.hpp"
-// RS485 control
-#define RXPin 0 // Serial Receive pin
-#define TXPin 1 // Serial Transmit pin
-
-//Configer sensors
-SoftwareSerial RS485Serial1(0, 1);
-SolarRadiationSensor solarSensor1(&RS485Serial1, 1);
-RainGaugeSensor rainGauge1 = RainGaugeSensor(&RS485Serial1, 2);               //Give 2 Sensor Adress 2
-SoilMoistureSensor soilSensor31 = SoilMoistureSensor(&RS485Serial1, 3);       //.....
-SoilMoistureSensor soilSensor41 = SoilMoistureSensor(&RS485Serial1, 4);
-SoilMoistureSensor soilSensor51 = SoilMoistureSensor(&RS485Serial1, 5);
-
-void Forte_RS485::setup(){
-     // configure the pins to be output only
-    pinMode(SERIAL_COMMUNICATION_CONTROL_PIN, OUTPUT);
-    gpio_set_direction(GPIO_NUM_3, GPIO_MODE_OUTPUT);
-     // Set data rates: Serial baud rate has to be WAY HIGHER than RS485Serial!
-    Serial.begin(115200);
-    RS485Serial1.begin(4800);   
-}
-
-out_data_rs485 Forte_RS485::read_data(){
-    data.solarRadiation=solarSensor1.getSolarRadiation();
-    data.moisture=soilSensor41.getMoisture();
-    data.moisture_temperature=soilSensor41.getMoistureTemp();
-    data.precipitation=rainGauge1.getInstantaneousPrecipitation();
-    return data;
-}
diff --git a/code-snippets/client/main_client_station/lib/rs485/rs485.hpp b/code-snippets/client/main_client_station/lib/rs485/rs485.hpp
deleted file mode 100644
index f4d64585dc7a08e8dc522876fdeab18eb912b92e..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/rs485/rs485.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _RS485
-#define _RS485
-
-#include "SPI.h"
-// RTC (I2C)
-#include "RTClib.h"
-#include "forte_sensor.hpp"
-#include "SentecSensors.h"
-
-#define SERIAL_COMMUNICATION_CONTROL_PIN 3
-
-// power control
-#define TransistorPin 10 // controls the transistor for power consumption (on/off)
-
-struct out_data_rs485{
-    word solarRadiation;
-    float moisture;
-    word moisture_temperature;
-    word precipitation;
-};
-
-
-class Forte_RS485 : public Forte_Sensor<out_data_rs485> {
-
-    public:
-	    void setup();
-	    out_data_rs485 read_data();
-    
-    private:
-     out_data_rs485 data;
-};
-
-#endif 
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/lib/time/src/Time.cpp b/code-snippets/client/main_client_station/lib/time/src/Time.cpp
deleted file mode 100644
index 8fdf4b4decd253a197cda680a6613529daa2b127..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/time/src/Time.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "Time.hpp"
-
-#include <utility>
-void Time::setTime(long epoch, int ms)
-{
-	this->rtc.setTime(epoch, ms);
-}
-tm Time::getTimeStruct()
-{
-	return this->rtc.getTimeStruct();
-}
-String Time::getDateTime(bool mode)
-{
-	return this->rtc.getDateTime(mode);
-}
-String Time::getTime(String format)
-{
-	return this->rtc.getTime(std::move(format));
-}
-long Time::getEpochSeconds()
-{
-	return this->rtc.getEpoch();
-}
-
-long Time::getMillis()
-{
-	return this->rtc.getMillis();
-}
diff --git a/code-snippets/client/main_client_station/lib/time/src/Time.hpp b/code-snippets/client/main_client_station/lib/time/src/Time.hpp
deleted file mode 100644
index d53adb159f8f5deb092bcffa3977f550f59fcd1d..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/lib/time/src/Time.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef ESPTIME
-#define ESPTIME
-
-#include <ESP32Time.h>
-
-class Time {
-  public:
-	static Time &getInstance()
-	{
-		static Time instance; // Guaranteed to be destroyed.
-		                      // Instantiated on first use.
-		return instance;
-	}
-
-	/*!
-	@brief  set the internal RTC time
-	@param  epoch
-	        epoch time in seconds
-	@param  ms
-	        microseconds (optional)
-	*/
-	void setTime(long epoch, int ms = 0);
-
-	/*!
-	@brief  get the internal RTC time as a tm struct
-	*/
-	tm getTimeStruct();
-
-	/*!
-	@brief  get the time and date as an Arduino String object
-	@param  mode
-	        true = Long date format
-	        false = Short date format
-	*/
-	String getDateTime(bool mode);
-
-	/*!
-	@brief  get the time as an Arduino String object with the specified format
-	@param	format
-	        time format
-	        http://www.cplusplus.com/reference/ctime/strftime/
-	*/
-	String getTime(String format = "%H:%M:%S");
-
-	/*!
-	@brief  get the current epoch seconds as long
-	*/
-	long getEpochSeconds();
-
-	/*!
-	@brief  get the current milliseconds as long
-	*/
-	long getMillis();
-
-  private:
-	Time() {} // Constructor? (the {} brackets) are needed here.
-
-	ESP32Time rtc = ESP32Time{};
-
-	// C++ 11
-	// =======
-	// We can use the better technique of deleting the methods
-	// we don't want.
-  public:
-	Time(Time const &) = delete;
-	void operator=(Time const &) = delete;
-
-	// Note: Scott Meyers mentions in his Effective Modern
-	//       C++ book, that deleted functions should generally
-	//       be public as it results in better error messages
-	//       due to the compilers behavior to check accessibility
-	//       before deleted status
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/main_client_station/platformio.ini b/code-snippets/client/main_client_station/platformio.ini
deleted file mode 100644
index e372635876a999ffe1f6f5fa720e6888020d1b13..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/platformio.ini
+++ /dev/null
@@ -1,23 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-;board = esp32dev
-framework = arduino
-lib_deps = 
-	plerup/EspSoftwareSerial@^6.16.1
-	4-20ma/ModbusMaster@^2.0.1
-	adafruit/RTClib@^2.1.1
-	sensirion/arduino-sht@^1.2.2
-	robtillaart/SHT85@^0.3.2
-	fbiego/ESP32Time@^2.0.0
-monitor_speed = 115200
diff --git a/code-snippets/client/main_client_station/src/main.cpp b/code-snippets/client/main_client_station/src/main.cpp
deleted file mode 100644
index 1b54f6cb59d64730a6e366509db2c849d7a28f35..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/src/main.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "Arduino.h"
-#include "rs485.hpp"
-#include "ESPNow.hpp"
-
-Forte_RS485 rs485;
-void setup(){
-    rs485.setup();
-    espnow_setup();
-}
-
-void loop()
-{
-  out_data_rs485 data_rs485= rs485.read_data();
-  Serial.println("***********************************************************");
-  Serial.print("Moisture: ");
-  Serial.println(data_rs485.moisture);
-  Serial.print("Moisture Temperature: ");
-  Serial.println(data_rs485.moisture_temperature);
-  Serial.print("Solar: ");
-  Serial.println(data_rs485.solarRadiation);
-  Serial.print("Rain mm: ");
-  Serial.println(data_rs485.precipitation);
-
-    //send the data
-    //moistere 1
-    //moisture_temperature 2
-    //solarRadiation 3
-    //precipitation 4
-
-   Message new_data = Message{};
-   new_data.add_data(data_rs485.moisture,1);
-   new_data.add_data(data_rs485.moisture_temperature, 2);
-   new_data.add_data(data_rs485.solarRadiation,3);
-   new_data.add_data(data_rs485.precipitation,4);
-   espnow_send_message(new_data);
-  
-
-  delay(5000);
-
-}
diff --git a/code-snippets/client/main_client_station/test/README b/code-snippets/client/main_client_station/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/main_client_station/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/sensor_station/client/.gitignore b/code-snippets/client/sensor_station/client/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/code-snippets/client/sensor_station/client/.gitkeep b/code-snippets/client/sensor_station/client/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/code-snippets/client/sensor_station/client/.vscode/extensions.json b/code-snippets/client/sensor_station/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/sensor_station/client/client.code-workspace b/code-snippets/client/sensor_station/client/client.code-workspace
deleted file mode 100644
index 0e020cb0ff76c75f78b35534236bff5c85f48d42..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/client.code-workspace
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-	"folders": [
-		{
-			"name": "client",
-			"path": "."
-		}
-	],
-	"settings": {}
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/include/README b/code-snippets/client/sensor_station/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/sensor_station/client/include/forte_sensor.hpp b/code-snippets/client/sensor_station/client/include/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/include/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/include/pinout.hpp b/code-snippets/client/sensor_station/client/include/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/include/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/README b/code-snippets/client/sensor_station/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/sensor_station/client/lib/drs26_digital/drs26.cpp b/code-snippets/client/sensor_station/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 6b987ff12d976e3cf8cef4c2c302e2d0efdbd6b0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <drs26.hpp>
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck 
-*/
-
-void Forte_DRS26 ::setup()
-{
-    drs26.begin(SDI_DATA);
-}
-
-out_data_drs26 *Forte_DRS26 ::read_data()
-{
-    String sdiResponse = "";
-    String measurement_command="1M!"; //The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is specified as 1M!=Sebsir measurement request at adress 1
-    String data_command="1D0!";       //and the followed data command 1D0! = Sensor data request at adress 1 
-
-    drs26.sendCommand(measurement_command);
-    delay(1000);
-    drs26.sendCommand(data_command);
-
-    while (drs26.available())
-    {
-        char next_character = drs26.read();
-        if ((next_character != '\n') && (next_character != '\r'))
-        {
-            sdiResponse += next_character;
-            delay(10); // 1 character ~ 7.5ms
-        }
-    }
-
-   // Serial.println(sdiResponse);
-
-    if (sdiResponse.length() > 1)
-    {
-        data.id = sdiResponse.substring(0, 8).toInt();
-        data.circumference = sdiResponse.substring(8, 16).toFloat();
-        data.temperatur = sdiResponse.substring(15, 22).toFloat();
-        return &data;
-    }
-
-    return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/drs26_digital/drs26.hpp b/code-snippets/client/sensor_station/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index 83d02ae0a5a5f88e556e1f4a811dc6510b122f98..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include <forte_sensor.hpp>
-#include <SDI12.h>
-#include <pinout.hpp>
-#include "Wire.h"
-
-     
-struct out_data_drs26 {
-        int id;
-        float circumference;
-        float temperatur;
-    };
-
-
-class Forte_DRS26 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_drs26* read_data();
- 
-    private:
-        SDI12 drs26;
-        out_data_drs26 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/drs26_digital/forte_sensor.hpp b/code-snippets/client/sensor_station/client/lib/drs26_digital/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/drs26_digital/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/drs26_digital/pinout.hpp b/code-snippets/client/sensor_station/client/lib/drs26_digital/pinout.hpp
deleted file mode 100644
index cf8f907ad9d9034a8179390e06db5d7aeba37815..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/drs26_digital/pinout.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for SDI12
-#define SDI_DATA 4
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/sensor_station/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/ina219/ina219.cpp b/code-snippets/client/sensor_station/client/lib/ina219/ina219.cpp
deleted file mode 100644
index 7f4beb3527965f301f0f9c50679189958275220c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "ina219.hpp"
-
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data_ina219* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        
-        return &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/ina219/ina219.hpp b/code-snippets/client/sensor_station/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 1fcb8d27558fb7e71a3a00b9a09eb578a364c705..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <INA219_WE.h>
-#include <Wire.h>
-
-//TwoWire I2Cone = TwoWire(0);
-//TwoWire I2Ctwo = TwoWire(1);
-     
-struct out_data_ina219 {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_ina219* read_data();
- 
-    private:
-        INA219_WE ina219;
-        out_data_ina219 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/ina219/pinout.hpp b/code-snippets/client/sensor_station/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 7c3d725bb7cfd202fdb1e762c0f47f539c91e2b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Protocol (for digital communication between ESP and the Sensor)
-#define I2C_SCL 7
-#define I2C_SDA 6
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/sensor_station/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/scd30/pinout.hpp b/code-snippets/client/sensor_station/client/lib/scd30/pinout.hpp
deleted file mode 100644
index b7ac5326271d1d1da68f3449942e87bd1c9013e0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Proctocol  (for digital communication between ESP and the Sensor)
-#define I2C_SCL 9
-#define I2C_SDA 8
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/scd30/scd30.cpp b/code-snippets/client/sensor_station/client/lib/scd30/scd30.cpp
deleted file mode 100644
index c7c2084754bfc94aef7b1ca25947ede9c4c03fc1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "scd30.hpp"
-
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-out_data_scd30* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data.C02= airSensor.getCO2();
-        data.Temperature = airSensor.getTemperature();
-        data.Humidity = airSensor.getHumidity();
-
-        return   &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/lib/scd30/scd30.hpp b/code-snippets/client/sensor_station/client/lib/scd30/scd30.hpp
deleted file mode 100644
index d630c0fa808fcdd7ad59dd13eac1e110c6346628..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <Wire.h>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-struct out_data_scd30
-{
-    float C02;
-    float Temperature;
-    float Humidity;
-};
-
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_scd30* read_data();
-
-    private:
-        SCD30 airSensor;
-        out_data_scd30 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station/client/platformio.ini b/code-snippets/client/sensor_station/client/platformio.ini
deleted file mode 100644
index 0094691b2838c1b195b11d15a62e2b1773267887..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/platformio.ini
+++ /dev/null
@@ -1,18 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-    Wire
-    wollewald/INA219_WE@^1.3.1
-    envirodiy/SDI-12@^2.1.4
diff --git a/code-snippets/client/sensor_station/client/src/main.cpp b/code-snippets/client/sensor_station/client/src/main.cpp
deleted file mode 100644
index 36d7eab2838c72c7dd95161d05919d8ea3772607..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/src/main.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include <Arduino.h>
-#include <scd30.hpp>
-#include <ina219.hpp>
-#include <drs26.hpp>
-
-Forte_SCD30 scd30;
-Forte_INA219 ina219;
-Forte_DRS26 drs26;
-
-
-void setup() {
-  Serial.begin(9600);
-  ina219.setup();
-  drs26.setup();
-  
-}
-
-void loop() {
-  
-//***********************************************************DATA for ins219**************************
-
-  out_data_ina219* data_ina219;
-  data_ina219 = ina219.read_data();
-  Serial.println("******************************INA219********************Power--Consumption**********************************");
-  if(data_ina219==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Shunt Voltage [mV]: "); Serial.println(data_ina219->shuntVoltage_mV);
-        Serial.print("Bus Voltage [V]: "); Serial.println(data_ina219->busVoltage_V);
-        Serial.print("Load Voltage [V]: "); Serial.println(data_ina219->loadVoltage_V);
-        Serial.print("Current[mA]: "); Serial.println(data_ina219->current_mA);
-        Serial.print("Bus Power [mW]: "); Serial.println(data_ina219->power_mW);
-        data_ina219->ina219_overflow== false ? Serial.println("Values OK - no overflow") : Serial.println("Overflow! Choose higher PGAIN");
-        Serial.println();
-    }
-  delay(1000);
-
-
-  out_data_drs26* data;
-  drs26.read_data();
-  
-  data = drs26.read_data();
-  Serial.println("******************************DRS26********************Tree-size**********************************");
-  if(data==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Sensor ID "); Serial.println(data->id);
-        Serial.print("Cicumfence "); Serial.println(data->circumference);
-        Serial.print("Temperature "); Serial.println(data->temperatur);
-        Serial.println();
-    }
-  delay(1000);
-
-}
-
diff --git a/code-snippets/client/sensor_station/client/test/README b/code-snippets/client/sensor_station/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/sensor_station_Analog/client/.gitignore b/code-snippets/client/sensor_station_Analog/client/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/code-snippets/client/sensor_station_Analog/client/.gitkeep b/code-snippets/client/sensor_station_Analog/client/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/code-snippets/client/sensor_station_Analog/client/.vscode/extensions.json b/code-snippets/client/sensor_station_Analog/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/.vscode/settings.json b/code-snippets/client/sensor_station_Analog/client/.vscode/settings.json
deleted file mode 100644
index 67863418a31be3d92fc16a4546f09287d55dd01a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/.vscode/settings.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-    "files.associations": {
-        "array": "cpp",
-        "atomic": "cpp",
-        "*.tcc": "cpp",
-        "cctype": "cpp",
-        "clocale": "cpp",
-        "cmath": "cpp",
-        "cstdarg": "cpp",
-        "cstddef": "cpp",
-        "cstdint": "cpp",
-        "cstdio": "cpp",
-        "cstdlib": "cpp",
-        "cstring": "cpp",
-        "ctime": "cpp",
-        "cwchar": "cpp",
-        "cwctype": "cpp",
-        "deque": "cpp",
-        "unordered_map": "cpp",
-        "unordered_set": "cpp",
-        "vector": "cpp",
-        "exception": "cpp",
-        "algorithm": "cpp",
-        "functional": "cpp",
-        "iterator": "cpp",
-        "map": "cpp",
-        "memory": "cpp",
-        "memory_resource": "cpp",
-        "numeric": "cpp",
-        "optional": "cpp",
-        "random": "cpp",
-        "string": "cpp",
-        "string_view": "cpp",
-        "system_error": "cpp",
-        "tuple": "cpp",
-        "type_traits": "cpp",
-        "utility": "cpp",
-        "fstream": "cpp",
-        "initializer_list": "cpp",
-        "iomanip": "cpp",
-        "iosfwd": "cpp",
-        "iostream": "cpp",
-        "istream": "cpp",
-        "limits": "cpp",
-        "new": "cpp",
-        "ostream": "cpp",
-        "sstream": "cpp",
-        "stdexcept": "cpp",
-        "streambuf": "cpp",
-        "cinttypes": "cpp",
-        "typeinfo": "cpp"
-    }
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/include/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.cpp b/code-snippets/client/sensor_station_Analog/client/include/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.cpp
deleted file mode 100644
index 4d78b4d7bd52142293bcd1fd95a73082c4f2fe05..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/include/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.cpp
+++ /dev/null
@@ -1,403 +0,0 @@
-/**************************************************************************/
-/*!
-    @file     Adafruit_ADS1X15.cpp
-    @author   K.Townsend (Adafruit Industries)
-
-    @mainpage Adafruit ADS1X15 ADC Breakout Driver
-
-    @section intro_sec Introduction
-
-    This is a library for the Adafruit ADS1X15 ADC breakout boards.
-
-    Adafruit invests time and resources providing this open source code,
-    please support Adafruit and open-source hardware by purchasing
-    products from Adafruit!
-
-    @section author Author
-
-    Written by Kevin "KTOWN" Townsend for Adafruit Industries.
-
-    @section  HISTORY
-
-    v1.0  - First release
-    v1.1  - Added ADS1115 support - W. Earl
-    v2.0  - Refactor - C. Nelson
-
-    @section license License
-
-    BSD license, all text here must be included in any redistribution
-*/
-/**************************************************************************/
-#include "Adafruit_ADS1X15_Forte.h"
-
-/**************************************************************************/
-/*!
-    @brief  Instantiates a new ADS1015 class w/appropriate properties
-*/
-/**************************************************************************/
-Adafruit_ADS1015::Adafruit_ADS1015() {
-  m_bitShift = 4;
-  m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
-  m_dataRate = RATE_ADS1015_1600SPS;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Instantiates a new ADS1115 class w/appropriate properties
-*/
-/**************************************************************************/
-Adafruit_ADS1115::Adafruit_ADS1115() {
-  m_bitShift = 0;
-  m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
-  m_dataRate = RATE_ADS1115_128SPS;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets up the HW (reads coefficients values, etc.)
-
-    @param i2c_addr I2C address of device
-    @param wire I2C bus
-
-    @return true if successful, otherwise false
-*/
-/**************************************************************************/
-bool Adafruit_ADS1X15::begin(uint8_t i2c_addr, TwoWire *wire) {
-  m_i2c_dev = new Adafruit_I2CDevice(i2c_addr, wire);
-  return m_i2c_dev->begin();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets the gain and input voltage range
-
-    @param gain gain setting to use
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::setGain(adsGain_t gain) { m_gain = gain; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets a gain and input voltage range
-
-    @return the gain setting
-*/
-/**************************************************************************/
-adsGain_t Adafruit_ADS1X15::getGain() { return m_gain; }
-
-/**************************************************************************/
-/*!
-    @brief  Sets the data rate
-
-    @param rate the data rate to use
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::setDataRate(uint16_t rate) { m_dataRate = rate; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets the current data rate
-
-    @return the data rate
-*/
-/**************************************************************************/
-uint16_t Adafruit_ADS1X15::getDataRate() { return m_dataRate; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets a single-ended ADC reading from the specified channel
-
-    @param channel ADC channel to read
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_SingleEnded(uint8_t channel) {
-  if (channel > 3) {
-    return 0;
-  }
-
-  startADCReading(MUX_BY_CHANNEL[channel], /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN0) and N (AIN1) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_0_1() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_1, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN0) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_0_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN1) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_1_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_1_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN2) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_2_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_2_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets up the comparator to operate in basic mode, causing the
-            ALERT/RDY pin to assert (go from high to low) when the ADC
-            value exceeds the specified threshold.
-
-            This will also set the ADC in continuous conversion mode.
-
-    @param channel ADC channel to use
-    @param threshold comparator threshold
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::startComparator_SingleEnded(uint8_t channel,
-                                                   int16_t threshold) {
-  // Start with default values
-  uint16_t config =
-      ADS1X15_REG_CONFIG_CQUE_1CONV |   // Comparator enabled and asserts on 1
-                                        // match
-      ADS1X15_REG_CONFIG_CLAT_LATCH |   // Latching mode
-      ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low   (default val)
-      ADS1X15_REG_CONFIG_CMODE_TRAD |   // Traditional comparator (default val)
-      ADS1X15_REG_CONFIG_MODE_CONTIN |  // Continuous conversion mode
-      ADS1X15_REG_CONFIG_MODE_CONTIN;   // Continuous conversion mode
-
-  // Set PGA/voltage range
-  config |= m_gain;
-
-  // Set data rate
-  config |= m_dataRate;
-
-  config |= MUX_BY_CHANNEL[channel];
-
-  // Set the high threshold register
-  // Shift 12-bit results left 4 bits for the ADS1015
-  writeRegister(ADS1X15_REG_POINTER_HITHRESH, threshold << m_bitShift);
-
-  // Write config register to the ADC
-  writeRegister(ADS1X15_REG_POINTER_CONFIG, config);
-}
-
-/**************************************************************************/
-/*!
-    @brief  In order to clear the comparator, we need to read the
-            conversion results.  This function reads the last conversion
-            results without changing the config value.
-
-    @return the last ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::getLastConversionResults() {
-  // Read the conversion results
-  uint16_t res = readRegister(ADS1X15_REG_POINTER_CONVERT) >> m_bitShift;
-  if (m_bitShift == 0) {
-    return (int16_t)res;
-  } else {
-    // Shift 12-bit results right 4 bits for the ADS1015,
-    // making sure we keep the sign bit intact
-    if (res > 0x07FF) {
-      // negative number - extend the sign to 16th bit
-      res |= 0xF000;
-    }
-    return (int16_t)res;
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Returns true if conversion is complete, false otherwise.
-
-    @param counts the ADC reading in raw counts
-
-    @return the ADC reading in volts
-*/
-/**************************************************************************/
-float Adafruit_ADS1X15::computeVolts(int16_t counts) {
-  // see data sheet Table 3
-  float fsRange;
-  switch (m_gain) {
-  case GAIN_TWOTHIRDS:
-    fsRange = 6.144f;
-    break;
-  case GAIN_ONE:
-    fsRange = 4.096f;
-    break;
-  case GAIN_TWO:
-    fsRange = 2.048f;
-    break;
-  case GAIN_FOUR:
-    fsRange = 1.024f;
-    break;
-  case GAIN_EIGHT:
-    fsRange = 0.512f;
-    break;
-  case GAIN_SIXTEEN:
-    fsRange = 0.256f;
-    break;
-  default:
-    fsRange = 0.0f;
-  }
-  return counts * (fsRange / (32768 >> m_bitShift));
-}
-
-/**************************************************************************/
-/*!
-    @brief  Non-blocking start conversion function
-
-    Call getLastConversionResults() once conversionComplete() returns true.
-    In continuous mode, getLastConversionResults() will always return the
-    latest result.
-    ALERT/RDY pin is set to RDY mode, and a 8us pulse is generated every
-    time new data is ready.
-
-    @param mux mux field value
-    @param continuous continuous if set, otherwise single shot
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::startADCReading(uint16_t mux, bool continuous) {
-  // Start with default values
-  uint16_t config =
-      ADS1X15_REG_CONFIG_CQUE_1CONV |   // Set CQUE to any value other than
-                                        // None so we can use it in RDY mode
-      ADS1X15_REG_CONFIG_CLAT_NONLAT |  // Non-latching (default val)
-      ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low   (default val)
-      ADS1X15_REG_CONFIG_CMODE_TRAD;    // Traditional comparator (default val)
-
-  if (continuous) {
-    config |= ADS1X15_REG_CONFIG_MODE_CONTIN;
-  } else {
-    config |= ADS1X15_REG_CONFIG_MODE_SINGLE;
-  }
-
-  // Set PGA/voltage range
-  config |= m_gain;
-
-  // Set data rate
-  config |= m_dataRate;
-
-  // Set channels
-  config |= mux;
-
-  // Set 'start single-conversion' bit
-  config |= ADS1X15_REG_CONFIG_OS_SINGLE;
-
-  // Write config register to the ADC
-  writeRegister(ADS1X15_REG_POINTER_CONFIG, config);
-
-  // Set ALERT/RDY to RDY mode.
-  writeRegister(ADS1X15_REG_POINTER_HITHRESH, 0x8000);
-  writeRegister(ADS1X15_REG_POINTER_LOWTHRESH, 0x0000);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Returns true if conversion is complete, false otherwise.
-
-    @return True if conversion is complete, false otherwise.
-*/
-/**************************************************************************/
-bool Adafruit_ADS1X15::conversionComplete() {
-  return (readRegister(ADS1X15_REG_POINTER_CONFIG) & 0x8000) != 0;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Writes 16-bits to the specified destination register
-
-    @param reg register address to write to
-    @param value value to write to register
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::writeRegister(uint8_t reg, uint16_t value) {
-  buffer[0] = reg;
-  buffer[1] = value >> 8;
-  buffer[2] = value & 0xFF;
-  m_i2c_dev->write(buffer, 3);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Read 16-bits from the specified destination register
-
-    @param reg register address to read from
-
-    @return 16 bit register value read
-*/
-/**************************************************************************/
-uint16_t Adafruit_ADS1X15::readRegister(uint8_t reg) {
-  buffer[0] = reg;
-  m_i2c_dev->write(buffer, 1);
-  m_i2c_dev->read(buffer, 2);
-  return ((buffer[0] << 8) | buffer[1]);
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/include/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.h b/code-snippets/client/sensor_station_Analog/client/include/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.h
deleted file mode 100644
index c1c1adf4f789653e7962ef07e3a6ab0685306737..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/include/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/**************************************************************************/
-/*!
-    @file     Adafruit_ADS1X15.h
-
-    This is a library for the Adafruit ADS1X15 ADC breakout boards.
-
-    Adafruit invests time and resources providing this open source code,
-    please support Adafruit and open-source hardware by purchasing
-    products from Adafruit!
-
-    Written by Kevin "KTOWN" Townsend for Adafruit Industries.
-
-    BSD license, all text here must be included in any redistribution
-*/
-/**************************************************************************/
-#ifndef __ADS1X15_Forte_H__
-#define __ADS1X15_Forte_H__
-
-#include <Adafruit_I2CDevice.h>
-#include <Arduino.h>
-#include <Wire.h>
-
-/*=========================================================================
-    I2C ADDRESS/BITS
-    -----------------------------------------------------------------------*/
-#define ADS1X15_ADDRESS (0x48) ///< 1001 000 (ADDR = GND)
-/*=========================================================================*/
-
-/*=========================================================================
-    POINTER REGISTER
-    -----------------------------------------------------------------------*/
-#define ADS1X15_REG_POINTER_MASK (0x03)      ///< Point mask
-#define ADS1X15_REG_POINTER_CONVERT (0x00)   ///< Conversion
-#define ADS1X15_REG_POINTER_CONFIG (0x01)    ///< Configuration
-#define ADS1X15_REG_POINTER_LOWTHRESH (0x02) ///< Low threshold
-#define ADS1X15_REG_POINTER_HITHRESH (0x03)  ///< High threshold
-/*=========================================================================*/
-
-/*=========================================================================
-    CONFIG REGISTER
-    -----------------------------------------------------------------------*/
-#define ADS1X15_REG_CONFIG_OS_MASK (0x8000) ///< OS Mask
-#define ADS1X15_REG_CONFIG_OS_SINGLE                                           \
-  (0x8000) ///< Write: Set to start a single-conversion
-#define ADS1X15_REG_CONFIG_OS_BUSY                                             \
-  (0x0000) ///< Read: Bit = 0 when conversion is in progress
-#define ADS1X15_REG_CONFIG_OS_NOTBUSY                                          \
-  (0x8000) ///< Read: Bit = 1 when device is not performing a conversion
-
-#define ADS1X15_REG_CONFIG_MUX_MASK (0x7000) ///< Mux Mask
-#define ADS1X15_REG_CONFIG_MUX_DIFF_0_1                                        \
-  (0x0000) ///< Differential P = AIN0, N = AIN1 (default)
-#define ADS1X15_REG_CONFIG_MUX_DIFF_0_3                                        \
-  (0x1000) ///< Differential P = AIN0, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_DIFF_1_3                                        \
-  (0x2000) ///< Differential P = AIN1, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_DIFF_2_3                                        \
-  (0x3000) ///< Differential P = AIN2, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_0 (0x4000) ///< Single-ended AIN0
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_1 (0x5000) ///< Single-ended AIN1
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_2 (0x6000) ///< Single-ended AIN2
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_3 (0x7000) ///< Single-ended AIN3
-
-constexpr uint16_t MUX_BY_CHANNEL[] = {
-    ADS1X15_REG_CONFIG_MUX_SINGLE_0, ///< Single-ended AIN0
-    ADS1X15_REG_CONFIG_MUX_SINGLE_1, ///< Single-ended AIN1
-    ADS1X15_REG_CONFIG_MUX_SINGLE_2, ///< Single-ended AIN2
-    ADS1X15_REG_CONFIG_MUX_SINGLE_3  ///< Single-ended AIN3
-};                                   ///< MUX config by channel
-
-#define ADS1X15_REG_CONFIG_PGA_MASK (0x0E00)   ///< PGA Mask
-#define ADS1X15_REG_CONFIG_PGA_6_144V (0x0000) ///< +/-6.144V range = Gain 2/3
-#define ADS1X15_REG_CONFIG_PGA_4_096V (0x0200) ///< +/-4.096V range = Gain 1
-#define ADS1X15_REG_CONFIG_PGA_2_048V                                          \
-  (0x0400) ///< +/-2.048V range = Gain 2 (default)
-#define ADS1X15_REG_CONFIG_PGA_1_024V (0x0600) ///< +/-1.024V range = Gain 4
-#define ADS1X15_REG_CONFIG_PGA_0_512V (0x0800) ///< +/-0.512V range = Gain 8
-#define ADS1X15_REG_CONFIG_PGA_0_256V (0x0A00) ///< +/-0.256V range = Gain 16
-
-#define ADS1X15_REG_CONFIG_MODE_MASK (0x0100)   ///< Mode Mask
-#define ADS1X15_REG_CONFIG_MODE_CONTIN (0x0000) ///< Continuous conversion mode
-#define ADS1X15_REG_CONFIG_MODE_SINGLE                                         \
-  (0x0100) ///< Power-down single-shot mode (default)
-
-#define ADS1X15_REG_CONFIG_RATE_MASK (0x00E0) ///< Data Rate Mask
-
-#define ADS1X15_REG_CONFIG_CMODE_MASK (0x0010) ///< CMode Mask
-#define ADS1X15_REG_CONFIG_CMODE_TRAD                                          \
-  (0x0000) ///< Traditional comparator with hysteresis (default)
-#define ADS1X15_REG_CONFIG_CMODE_WINDOW (0x0010) ///< Window comparator
-
-#define ADS1X15_REG_CONFIG_CPOL_MASK (0x0008) ///< CPol Mask
-#define ADS1X15_REG_CONFIG_CPOL_ACTVLOW                                        \
-  (0x0000) ///< ALERT/RDY pin is low when active (default)
-#define ADS1X15_REG_CONFIG_CPOL_ACTVHI                                         \
-  (0x0008) ///< ALERT/RDY pin is high when active
-
-#define ADS1X15_REG_CONFIG_CLAT_MASK                                           \
-  (0x0004) ///< Determines if ALERT/RDY pin latches once asserted
-#define ADS1X15_REG_CONFIG_CLAT_NONLAT                                         \
-  (0x0000) ///< Non-latching comparator (default)
-#define ADS1X15_REG_CONFIG_CLAT_LATCH (0x0004) ///< Latching comparator
-
-#define ADS1X15_REG_CONFIG_CQUE_MASK (0x0003) ///< CQue Mask
-#define ADS1X15_REG_CONFIG_CQUE_1CONV                                          \
-  (0x0000) ///< Assert ALERT/RDY after one conversions
-#define ADS1X15_REG_CONFIG_CQUE_2CONV                                          \
-  (0x0001) ///< Assert ALERT/RDY after two conversions
-#define ADS1X15_REG_CONFIG_CQUE_4CONV                                          \
-  (0x0002) ///< Assert ALERT/RDY after four conversions
-#define ADS1X15_REG_CONFIG_CQUE_NONE                                           \
-  (0x0003) ///< Disable the comparator and put ALERT/RDY in high state (default)
-/*=========================================================================*/
-
-/** Gain settings */
-typedef enum {
-  GAIN_TWOTHIRDS = ADS1X15_REG_CONFIG_PGA_6_144V,
-  GAIN_ONE = ADS1X15_REG_CONFIG_PGA_4_096V,
-  GAIN_TWO = ADS1X15_REG_CONFIG_PGA_2_048V,
-  GAIN_FOUR = ADS1X15_REG_CONFIG_PGA_1_024V,
-  GAIN_EIGHT = ADS1X15_REG_CONFIG_PGA_0_512V,
-  GAIN_SIXTEEN = ADS1X15_REG_CONFIG_PGA_0_256V
-} adsGain_t;
-
-/** Data rates */
-#define RATE_ADS1015_128SPS (0x0000)  ///< 128 samples per second
-#define RATE_ADS1015_250SPS (0x0020)  ///< 250 samples per second
-#define RATE_ADS1015_490SPS (0x0040)  ///< 490 samples per second
-#define RATE_ADS1015_920SPS (0x0060)  ///< 920 samples per second
-#define RATE_ADS1015_1600SPS (0x0080) ///< 1600 samples per second (default)
-#define RATE_ADS1015_2400SPS (0x00A0) ///< 2400 samples per second
-#define RATE_ADS1015_3300SPS (0x00C0) ///< 3300 samples per second
-
-#define RATE_ADS1115_8SPS (0x0000)   ///< 8 samples per second
-#define RATE_ADS1115_16SPS (0x0020)  ///< 16 samples per second
-#define RATE_ADS1115_32SPS (0x0040)  ///< 32 samples per second
-#define RATE_ADS1115_64SPS (0x0060)  ///< 64 samples per second
-#define RATE_ADS1115_128SPS (0x0080) ///< 128 samples per second (default)
-#define RATE_ADS1115_250SPS (0x00A0) ///< 250 samples per second
-#define RATE_ADS1115_475SPS (0x00C0) ///< 475 samples per second
-#define RATE_ADS1115_860SPS (0x00E0) ///< 860 samples per second
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1X15 ADC breakouts.
-*/
-/**************************************************************************/
-class Adafruit_ADS1X15 {
-protected:
-  // Instance-specific properties
-  Adafruit_I2CDevice *m_i2c_dev; ///< I2C bus device
-  uint8_t m_bitShift;            ///< bit shift amount
-  adsGain_t m_gain;              ///< ADC gain
-  uint16_t m_dataRate;           ///< Data rate
-
-public:
-  bool begin(uint8_t i2c_addr = ADS1X15_ADDRESS, TwoWire *wire = &Wire);
-  int16_t readADC_SingleEnded(uint8_t channel);
-  int16_t readADC_Differential_0_1();
-  int16_t readADC_Differential_0_3();
-  int16_t readADC_Differential_1_3();
-  int16_t readADC_Differential_2_3();
-  void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
-  int16_t getLastConversionResults();
-  float computeVolts(int16_t counts);
-  void setGain(adsGain_t gain);
-  adsGain_t getGain();
-  void setDataRate(uint16_t rate);
-  uint16_t getDataRate();
-
-  void startADCReading(uint16_t mux, bool continuous);
-
-  bool conversionComplete();
-
-private:
-  void writeRegister(uint8_t reg, uint16_t value);
-  uint16_t readRegister(uint8_t reg);
-  uint8_t buffer[3];
-};
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1015 ADC breakout.
-*/
-/**************************************************************************/
-class Adafruit_ADS1015 : public Adafruit_ADS1X15 {
-public:
-  Adafruit_ADS1015();
-};
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1115 ADC breakout.
-*/
-/**************************************************************************/
-class Adafruit_ADS1115 : public Adafruit_ADS1X15 {
-public:
-  Adafruit_ADS1115();
-};
-
-#endif
diff --git a/code-snippets/client/sensor_station_Analog/client/include/NoDataAvailableException.hpp b/code-snippets/client/sensor_station_Analog/client/include/NoDataAvailableException.hpp
deleted file mode 100644
index a5de09a1410326f7f6352f4e27a455b3f2b0061f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/include/NoDataAvailableException.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-
-#include <exception>
-#include <iostream>
-
-struct NoDataAvailableException : public std::exception {
-	const char *what() const throw() { return "Sensor could not read data"; }
-};
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/include/README b/code-snippets/client/sensor_station_Analog/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/sensor_station_Analog/client/include/forte_sensor.hpp b/code-snippets/client/sensor_station_Analog/client/include/forte_sensor.hpp
deleted file mode 100644
index 4ca8e39602ae03062a79a2acb8c25e634521f8b8..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/include/forte_sensor.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-// #include "Message.hpp"
-template <class T>
-class Forte_Sensor {
-  public:
-	virtual T read_data() = 0;
-	virtual void setup() = 0;
-	//virtual Message build_message() = 0;
-
-  private:
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/include/pinout.hpp b/code-snippets/client/sensor_station_Analog/client/include/pinout.hpp
deleted file mode 100644
index f59c23778660216a8d632661933da581c7de2a4a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/include/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 6
-#define I2C_SCL 7
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.cpp b/code-snippets/client/sensor_station_Analog/client/lib/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.cpp
deleted file mode 100644
index 53ff5d64b460c56dc986096dd818370909a7a825..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.cpp
+++ /dev/null
@@ -1,410 +0,0 @@
-/**************************************************************************/
-/*!
-    @file     Adafruit_ADS1X15.cpp
-    @author   K.Townsend (Adafruit Industries)
-
-    @mainpage Adafruit ADS1X15 ADC Breakout Driver
-
-    @section intro_sec Introduction
-
-    This is a library for the Adafruit ADS1X15 ADC breakout boards.
-
-    Adafruit invests time and resources providing this open source code,
-    please support Adafruit and open-source hardware by purchasing
-    products from Adafruit!
-
-    @section author Author
-
-    Written by Kevin "KTOWN" Townsend for Adafruit Industries.
-
-    @section  HISTORY
-
-    v1.0  - First release
-    v1.1  - Added ADS1115 support - W. Earl
-    v2.0  - Refactor - C. Nelson
-
-    @section license License
-
-    BSD license, all text here must be included in any redistribution
-*/
-/**************************************************************************/
-#include "Adafruit_ADS1X15_Forte.h"
-
-
-/**************************************************************************/
-/*!
-    @brief  Instantiates a new ADS1015 class w/appropriate properties
-*/
-/**************************************************************************/
-Adafruit_ADS1015::Adafruit_ADS1015() {
-  m_bitShift = 4;
-  m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
-  m_dataRate = RATE_ADS1015_1600SPS;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Instantiates a new ADS1115 class w/appropriate properties
-*/
-/**************************************************************************/
-Adafruit_ADS1115::Adafruit_ADS1115() {
-  m_bitShift = 0;
-  m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
-  m_dataRate = RATE_ADS1115_128SPS;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets up the HW (reads coefficients values, etc.)
-
-    @param i2c_addr I2C address of device
-    @param wire I2C bus
-
-    @return true if successful, otherwise false
-*/
-/**************************************************************************/
-bool Adafruit_ADS1X15::begin(uint8_t i2c_addr, TwoWire *wire) {
-  m_i2c_dev = new Adafruit_I2CDevice(i2c_addr, wire);
-  return m_i2c_dev->begin();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets the gain and input voltage range
-
-    @param gain gain setting to use
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::setGain(adsGain_t gain) { m_gain = gain; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets a gain and input voltage range
-
-    @return the gain setting
-*/
-/**************************************************************************/
-adsGain_t Adafruit_ADS1X15::getGain() { return m_gain; }
-
-/**************************************************************************/
-/*!
-    @brief  Sets the data rate
-
-    @param rate the data rate to use
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::setDataRate(uint16_t rate) { m_dataRate = rate; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets the current data rate
-
-    @return the data rate
-*/
-/**************************************************************************/
-uint16_t Adafruit_ADS1X15::getDataRate() { return m_dataRate; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets a single-ended ADC reading from the specified channel
-
-    @param channel ADC channel to read + @FORTEsecurity 
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_SingleEnded(uint8_t channel) {
-  if (channel > 3) {
-    return 0;
-  }
-
-  startADCReading(MUX_BY_CHANNEL[channel], /*continuous=*/false);
-
-  // Wait for the conversion to complete + @FORTEsecurity throw exeption if it takes to long
-  long i=0;
-  long max_wait=100;
-  while (!conversionComplete()&&i<max_wait){
-      ++i;
-      delay(10);
-  }
-  if(i==max_wait)
-    throw NoDataAvailableException();
-    
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN0) and N (AIN1) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_0_1() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_1, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN0) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_0_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN1) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_1_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_1_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN2) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_2_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_2_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets up the comparator to operate in basic mode, causing the
-            ALERT/RDY pin to assert (go from high to low) when the ADC
-            value exceeds the specified threshold.
-
-            This will also set the ADC in continuous conversion mode.
-
-    @param channel ADC channel to use
-    @param threshold comparator threshold
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::startComparator_SingleEnded(uint8_t channel,
-                                                   int16_t threshold) {
-  // Start with default values
-  uint16_t config =
-      ADS1X15_REG_CONFIG_CQUE_1CONV |   // Comparator enabled and asserts on 1
-                                        // match
-      ADS1X15_REG_CONFIG_CLAT_LATCH |   // Latching mode
-      ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low   (default val)
-      ADS1X15_REG_CONFIG_CMODE_TRAD |   // Traditional comparator (default val)
-      ADS1X15_REG_CONFIG_MODE_CONTIN |  // Continuous conversion mode
-      ADS1X15_REG_CONFIG_MODE_CONTIN;   // Continuous conversion mode
-
-  // Set PGA/voltage range
-  config |= m_gain;
-
-  // Set data rate
-  config |= m_dataRate;
-
-  config |= MUX_BY_CHANNEL[channel];
-
-  // Set the high threshold register
-  // Shift 12-bit results left 4 bits for the ADS1015
-  writeRegister(ADS1X15_REG_POINTER_HITHRESH, threshold << m_bitShift);
-
-  // Write config register to the ADC
-  writeRegister(ADS1X15_REG_POINTER_CONFIG, config);
-}
-
-/**************************************************************************/
-/*!
-    @brief  In order to clear the comparator, we need to read the
-            conversion results.  This function reads the last conversion
-            results without changing the config value.
-
-    @return the last ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::getLastConversionResults() {
-  // Read the conversion results
-  uint16_t res = readRegister(ADS1X15_REG_POINTER_CONVERT) >> m_bitShift;
-  if (m_bitShift == 0) {
-    return (int16_t)res;
-  } else {
-    // Shift 12-bit results right 4 bits for the ADS1015,
-    // making sure we keep the sign bit intact
-    if (res > 0x07FF) {
-      // negative number - extend the sign to 16th bit
-      res |= 0xF000;
-    }
-    return (int16_t)res;
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Returns true if conversion is complete, false otherwise.
-
-    @param counts the ADC reading in raw counts
-
-    @return the ADC reading in volts
-*/
-/**************************************************************************/
-float Adafruit_ADS1X15::computeVolts(int16_t counts) {
-  // see data sheet Table 3
-  float fsRange;
-  switch (m_gain) {
-  case GAIN_TWOTHIRDS:
-    fsRange = 6.144f;
-    break;
-  case GAIN_ONE:
-    fsRange = 4.096f;
-    break;
-  case GAIN_TWO:
-    fsRange = 2.048f;
-    break;
-  case GAIN_FOUR:
-    fsRange = 1.024f;
-    break;
-  case GAIN_EIGHT:
-    fsRange = 0.512f;
-    break;
-  case GAIN_SIXTEEN:
-    fsRange = 0.256f;
-    break;
-  default:
-    fsRange = 0.0f;
-  }
-  return counts * (fsRange / (32768 >> m_bitShift));
-}
-
-/**************************************************************************/
-/*!
-    @brief  Non-blocking start conversion function
-
-    Call getLastConversionResults() once conversionComplete() returns true.
-    In continuous mode, getLastConversionResults() will always return the
-    latest result.
-    ALERT/RDY pin is set to RDY mode, and a 8us pulse is generated every
-    time new data is ready.
-
-    @param mux mux field value
-    @param continuous continuous if set, otherwise single shot
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::startADCReading(uint16_t mux, bool continuous) {
-  // Start with default values
-  uint16_t config =
-      ADS1X15_REG_CONFIG_CQUE_1CONV |   // Set CQUE to any value other than
-                                        // None so we can use it in RDY mode
-      ADS1X15_REG_CONFIG_CLAT_NONLAT |  // Non-latching (default val)
-      ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low   (default val)
-      ADS1X15_REG_CONFIG_CMODE_TRAD;    // Traditional comparator (default val)
-
-  if (continuous) {
-    config |= ADS1X15_REG_CONFIG_MODE_CONTIN;
-  } else {
-    config |= ADS1X15_REG_CONFIG_MODE_SINGLE;
-  }
-
-  // Set PGA/voltage range
-  config |= m_gain;
-
-  // Set data rate
-  config |= m_dataRate;
-
-  // Set channels
-  config |= mux;
-
-  // Set 'start single-conversion' bit
-  config |= ADS1X15_REG_CONFIG_OS_SINGLE;
-
-  // Write config register to the ADC
-  writeRegister(ADS1X15_REG_POINTER_CONFIG, config);
-
-  // Set ALERT/RDY to RDY mode.
-  writeRegister(ADS1X15_REG_POINTER_HITHRESH, 0x8000);
-  writeRegister(ADS1X15_REG_POINTER_LOWTHRESH, 0x0000);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Returns true if conversion is complete, false otherwise.
-
-    @return True if conversion is complete, false otherwise.
-*/
-/**************************************************************************/
-bool Adafruit_ADS1X15::conversionComplete() {
-  return (readRegister(ADS1X15_REG_POINTER_CONFIG) & 0x8000) != 0;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Writes 16-bits to the specified destination register
-
-    @param reg register address to write to
-    @param value value to write to register
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::writeRegister(uint8_t reg, uint16_t value) {
-  buffer[0] = reg;
-  buffer[1] = value >> 8;
-  buffer[2] = value & 0xFF;
-  m_i2c_dev->write(buffer, 3);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Read 16-bits from the specified destination register
-
-    @param reg register address to read from
-
-    @return 16 bit register value read
-*/
-/**************************************************************************/
-uint16_t Adafruit_ADS1X15::readRegister(uint8_t reg) {
-  buffer[0] = reg;
-  m_i2c_dev->write(buffer, 1);
-  m_i2c_dev->read(buffer, 2);
-  return ((buffer[0] << 8) | buffer[1]);
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.h b/code-snippets/client/sensor_station_Analog/client/lib/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.h
deleted file mode 100644
index 694e3e2a91b6657968123ae39edd6bf638bbb35f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/Adafruit_ADS1X15_Forte/Adafruit_ADS1X15_Forte.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/**************************************************************************/
-/*!
-    @file     Adafruit_ADS1X15.h
-
-    This is a library for the Adafruit ADS1X15 ADC breakout boards.
-
-    Adafruit invests time and resources providing this open source code,
-    please support Adafruit and open-source hardware by purchasing
-    products from Adafruit!
-
-    Written by Kevin "KTOWN" Townsend for Adafruit Industries.
-
-    BSD license, all text here must be included in any redistribution
-*/
-/**************************************************************************/
-#ifndef __ADS1X15_Forte_H__
-#define __ADS1X15_Forte_H__
-
-#include <Adafruit_I2CDevice.h>
-#include <Arduino.h>
-#include <Wire.h>
-#include "NoDataAvailableException.hpp"
-/*=========================================================================
-    I2C ADDRESS/BITS
-    -----------------------------------------------------------------------*/
-#define ADS1X15_ADDRESS (0x48) ///< 1001 000 (ADDR = GND)
-/*=========================================================================*/
-
-/*=========================================================================
-    POINTER REGISTER
-    -----------------------------------------------------------------------*/
-#define ADS1X15_REG_POINTER_MASK (0x03)      ///< Point mask
-#define ADS1X15_REG_POINTER_CONVERT (0x00)   ///< Conversion
-#define ADS1X15_REG_POINTER_CONFIG (0x01)    ///< Configuration
-#define ADS1X15_REG_POINTER_LOWTHRESH (0x02) ///< Low threshold
-#define ADS1X15_REG_POINTER_HITHRESH (0x03)  ///< High threshold
-/*=========================================================================*/
-
-/*=========================================================================
-    CONFIG REGISTER
-    -----------------------------------------------------------------------*/
-#define ADS1X15_REG_CONFIG_OS_MASK (0x8000) ///< OS Mask
-#define ADS1X15_REG_CONFIG_OS_SINGLE                                           \
-  (0x8000) ///< Write: Set to start a single-conversion
-#define ADS1X15_REG_CONFIG_OS_BUSY                                             \
-  (0x0000) ///< Read: Bit = 0 when conversion is in progress
-#define ADS1X15_REG_CONFIG_OS_NOTBUSY                                          \
-  (0x8000) ///< Read: Bit = 1 when device is not performing a conversion
-
-#define ADS1X15_REG_CONFIG_MUX_MASK (0x7000) ///< Mux Mask
-#define ADS1X15_REG_CONFIG_MUX_DIFF_0_1                                        \
-  (0x0000) ///< Differential P = AIN0, N = AIN1 (default)
-#define ADS1X15_REG_CONFIG_MUX_DIFF_0_3                                        \
-  (0x1000) ///< Differential P = AIN0, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_DIFF_1_3                                        \
-  (0x2000) ///< Differential P = AIN1, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_DIFF_2_3                                        \
-  (0x3000) ///< Differential P = AIN2, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_0 (0x4000) ///< Single-ended AIN0
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_1 (0x5000) ///< Single-ended AIN1
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_2 (0x6000) ///< Single-ended AIN2
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_3 (0x7000) ///< Single-ended AIN3
-
-constexpr uint16_t MUX_BY_CHANNEL[] = {
-    ADS1X15_REG_CONFIG_MUX_SINGLE_0, ///< Single-ended AIN0
-    ADS1X15_REG_CONFIG_MUX_SINGLE_1, ///< Single-ended AIN1
-    ADS1X15_REG_CONFIG_MUX_SINGLE_2, ///< Single-ended AIN2
-    ADS1X15_REG_CONFIG_MUX_SINGLE_3  ///< Single-ended AIN3
-};                                   ///< MUX config by channel
-
-#define ADS1X15_REG_CONFIG_PGA_MASK (0x0E00)   ///< PGA Mask
-#define ADS1X15_REG_CONFIG_PGA_6_144V (0x0000) ///< +/-6.144V range = Gain 2/3
-#define ADS1X15_REG_CONFIG_PGA_4_096V (0x0200) ///< +/-4.096V range = Gain 1
-#define ADS1X15_REG_CONFIG_PGA_2_048V                                          \
-  (0x0400) ///< +/-2.048V range = Gain 2 (default)
-#define ADS1X15_REG_CONFIG_PGA_1_024V (0x0600) ///< +/-1.024V range = Gain 4
-#define ADS1X15_REG_CONFIG_PGA_0_512V (0x0800) ///< +/-0.512V range = Gain 8
-#define ADS1X15_REG_CONFIG_PGA_0_256V (0x0A00) ///< +/-0.256V range = Gain 16
-
-#define ADS1X15_REG_CONFIG_MODE_MASK (0x0100)   ///< Mode Mask
-#define ADS1X15_REG_CONFIG_MODE_CONTIN (0x0000) ///< Continuous conversion mode
-#define ADS1X15_REG_CONFIG_MODE_SINGLE                                         \
-  (0x0100) ///< Power-down single-shot mode (default)
-
-#define ADS1X15_REG_CONFIG_RATE_MASK (0x00E0) ///< Data Rate Mask
-
-#define ADS1X15_REG_CONFIG_CMODE_MASK (0x0010) ///< CMode Mask
-#define ADS1X15_REG_CONFIG_CMODE_TRAD                                          \
-  (0x0000) ///< Traditional comparator with hysteresis (default)
-#define ADS1X15_REG_CONFIG_CMODE_WINDOW (0x0010) ///< Window comparator
-
-#define ADS1X15_REG_CONFIG_CPOL_MASK (0x0008) ///< CPol Mask
-#define ADS1X15_REG_CONFIG_CPOL_ACTVLOW                                        \
-  (0x0000) ///< ALERT/RDY pin is low when active (default)
-#define ADS1X15_REG_CONFIG_CPOL_ACTVHI                                         \
-  (0x0008) ///< ALERT/RDY pin is high when active
-
-#define ADS1X15_REG_CONFIG_CLAT_MASK                                           \
-  (0x0004) ///< Determines if ALERT/RDY pin latches once asserted
-#define ADS1X15_REG_CONFIG_CLAT_NONLAT                                         \
-  (0x0000) ///< Non-latching comparator (default)
-#define ADS1X15_REG_CONFIG_CLAT_LATCH (0x0004) ///< Latching comparator
-
-#define ADS1X15_REG_CONFIG_CQUE_MASK (0x0003) ///< CQue Mask
-#define ADS1X15_REG_CONFIG_CQUE_1CONV                                          \
-  (0x0000) ///< Assert ALERT/RDY after one conversions
-#define ADS1X15_REG_CONFIG_CQUE_2CONV                                          \
-  (0x0001) ///< Assert ALERT/RDY after two conversions
-#define ADS1X15_REG_CONFIG_CQUE_4CONV                                          \
-  (0x0002) ///< Assert ALERT/RDY after four conversions
-#define ADS1X15_REG_CONFIG_CQUE_NONE                                           \
-  (0x0003) ///< Disable the comparator and put ALERT/RDY in high state (default)
-/*=========================================================================*/
-
-/** Gain settings */
-typedef enum {
-  GAIN_TWOTHIRDS = ADS1X15_REG_CONFIG_PGA_6_144V,
-  GAIN_ONE = ADS1X15_REG_CONFIG_PGA_4_096V,
-  GAIN_TWO = ADS1X15_REG_CONFIG_PGA_2_048V,
-  GAIN_FOUR = ADS1X15_REG_CONFIG_PGA_1_024V,
-  GAIN_EIGHT = ADS1X15_REG_CONFIG_PGA_0_512V,
-  GAIN_SIXTEEN = ADS1X15_REG_CONFIG_PGA_0_256V
-} adsGain_t;
-
-/** Data rates */
-#define RATE_ADS1015_128SPS (0x0000)  ///< 128 samples per second
-#define RATE_ADS1015_250SPS (0x0020)  ///< 250 samples per second
-#define RATE_ADS1015_490SPS (0x0040)  ///< 490 samples per second
-#define RATE_ADS1015_920SPS (0x0060)  ///< 920 samples per second
-#define RATE_ADS1015_1600SPS (0x0080) ///< 1600 samples per second (default)
-#define RATE_ADS1015_2400SPS (0x00A0) ///< 2400 samples per second
-#define RATE_ADS1015_3300SPS (0x00C0) ///< 3300 samples per second
-
-#define RATE_ADS1115_8SPS (0x0000)   ///< 8 samples per second
-#define RATE_ADS1115_16SPS (0x0020)  ///< 16 samples per second
-#define RATE_ADS1115_32SPS (0x0040)  ///< 32 samples per second
-#define RATE_ADS1115_64SPS (0x0060)  ///< 64 samples per second
-#define RATE_ADS1115_128SPS (0x0080) ///< 128 samples per second (default)
-#define RATE_ADS1115_250SPS (0x00A0) ///< 250 samples per second
-#define RATE_ADS1115_475SPS (0x00C0) ///< 475 samples per second
-#define RATE_ADS1115_860SPS (0x00E0) ///< 860 samples per second
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1X15 ADC breakouts.
-*/
-/**************************************************************************/
-class Adafruit_ADS1X15 {
-protected:
-  // Instance-specific properties
-  Adafruit_I2CDevice *m_i2c_dev; ///< I2C bus device
-  uint8_t m_bitShift;            ///< bit shift amount
-  adsGain_t m_gain;              ///< ADC gain
-  uint16_t m_dataRate;           ///< Data rate
-
-public:
-  bool begin(uint8_t i2c_addr = ADS1X15_ADDRESS, TwoWire *wire = &Wire);
-  int16_t readADC_SingleEnded(uint8_t channel);
-  int16_t readADC_Differential_0_1();
-  int16_t readADC_Differential_0_3();
-  int16_t readADC_Differential_1_3();
-  int16_t readADC_Differential_2_3();
-  void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
-  int16_t getLastConversionResults();
-  float computeVolts(int16_t counts);
-  void setGain(adsGain_t gain);
-  adsGain_t getGain();
-  void setDataRate(uint16_t rate);
-  uint16_t getDataRate();
-
-  void startADCReading(uint16_t mux, bool continuous);
-
-  bool conversionComplete();
-
-private:
-  void writeRegister(uint8_t reg, uint16_t value);
-  uint16_t readRegister(uint8_t reg);
-  uint8_t buffer[3];
-};
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1015 ADC breakout.
-*/
-/**************************************************************************/
-class Adafruit_ADS1015 : public Adafruit_ADS1X15 {
-public:
-  Adafruit_ADS1015();
-};
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1115 ADC breakout.
-*/
-/**************************************************************************/
-class Adafruit_ADS1115 : public Adafruit_ADS1X15 {
-public:
-  Adafruit_ADS1115();
-};
-
-#endif
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/Message/ClientDataPackage.hpp b/code-snippets/client/sensor_station_Analog/client/lib/Message/ClientDataPackage.hpp
deleted file mode 100644
index 52f2be6032a190e6346bef71457cb78c983b0038..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/Message/ClientDataPackage.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#define NUM_SENSORS 10
-// packing the struct without padding, makes reading it on the fipy easier
-#pragma pack(1)
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-struct ClientDataPackage {
-	int identifiers[NUM_SENSORS];
-	float values[NUM_SENSORS];
-	int amountData;
-	long timestamp; // maybe make this array
-};
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/Message/Message.cpp b/code-snippets/client/sensor_station_Analog/client/lib/Message/Message.cpp
deleted file mode 100644
index 6975ab6cd228ab218df9759abddc498a082c288c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/Message/Message.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "Message.hpp"
-
-void Message::add_data(float value, int identifier)
-{
-	if (data.amountData < NUM_SENSORS) {
-		data.values[data.amountData] = value;
-		data.identifiers[data.amountData] = identifier;
-		data.amountData++;
-	}
-}
-
-ClientDataPackage Message ::get_client_data_package() const
-{
-	return data;
-}
-
-Message ::Message()
-{
-	// check for existing host mac address, use broadcast otherwise
-
-	data.amountData = 0;
-	data.timestamp = Time::getInstance().getMillis(); // I am assuming we are not sending data from Unix Epoch
-}
-
-Message ::Message(ClientDataPackage old_data)
-{
-	data = old_data;
-	// memcpy(&data, &old_data, sizeof(data));
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/Message/Message.hpp b/code-snippets/client/sensor_station_Analog/client/lib/Message/Message.hpp
deleted file mode 100644
index 397ca6f707105be90fb76add8200b8edef93c8ed..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/Message/Message.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "ClientDataPackage.hpp"
-#include "Time.hpp"
-#include <Arduino.h>
-#include <ESP32Time.h>
-#include <esp_now.h>
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-class Message {
-  public:
-	Message();
-	Message(ClientDataPackage old_data);
-	void add_data(float value, int identifier);
-	ClientDataPackage get_client_data_package() const;
-
-  private:
-	ClientDataPackage data;
-};
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/README b/code-snippets/client/sensor_station_Analog/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/caching/src/ram_caching.cpp b/code-snippets/client/sensor_station_Analog/client/lib/caching/src/ram_caching.cpp
deleted file mode 100644
index 9325e7c7909473c998d2a113779d94480fa3589c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/caching/src/ram_caching.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "ram_caching.hpp"
-
-RTC_DATA_ATTR int cachedAmount = -1;
-RTC_DATA_ATTR ClientDataPackage backup[NUM_SENSORS];
-
-ClientDataPackage ram_cache_pop()
-{
-	return backup[cachedAmount--];
-}
-
-void ram_cache_push(ClientDataPackage data)
-{
-	backup[++cachedAmount] = data;
-}
-
-bool ram_cache_is_empty()
-{
-	return cachedAmount == -1;
-}
-
-bool ram_cache_is_full()
-{
-	return cachedAmount == 9;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/caching/src/ram_caching.hpp b/code-snippets/client/sensor_station_Analog/client/lib/caching/src/ram_caching.hpp
deleted file mode 100644
index 466668ba65578e0a9aa3f0af9bf20174889b0eb2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/caching/src/ram_caching.hpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef _RAM_CACHE
-#define _RAM_CACHE
-#include "ClientDataPackage.hpp"
-#include <ESP32Time.h>
-
-bool ram_cache_is_empty();
-bool ram_cache_is_full();
-void ram_cache_push(ClientDataPackage data);
-ClientDataPackage ram_cache_pop();
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/deep_sleep/f_deep_sleep.cpp b/code-snippets/client/sensor_station_Analog/client/lib/deep_sleep/f_deep_sleep.cpp
deleted file mode 100644
index 60d1ac0b44d850f809d44be2b2fd609536fb54a0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/deep_sleep/f_deep_sleep.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "f_deep_sleep.hpp"
-
-void print_wakeup_reason(){
-  esp_sleep_wakeup_cause_t wakeup_reason;
-
-  wakeup_reason = esp_sleep_get_wakeup_cause();
-
-  switch(wakeup_reason)
-  {
-    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
-    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
-    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
-    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
-    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
-    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
-  }
-}
-
-
-void deep_sleep(int time_in_sec){
-  esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
-  esp_deep_sleep_start();
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/deep_sleep/f_deep_sleep.hpp b/code-snippets/client/sensor_station_Analog/client/lib/deep_sleep/f_deep_sleep.hpp
deleted file mode 100644
index b0c91129d025c7cd48f0350a269a765c7c8e0f5b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/deep_sleep/f_deep_sleep.hpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef F_DEEP_SLEEP_H
-#define F_DEEP_SLEEP_H
-
-#include <Arduino.h>
-
-void deep_sleep(int time_to_sleep);
-void print_wakeup_reason();
-
-#endif
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/dr26_analogue/dr26.cpp b/code-snippets/client/sensor_station_Analog/client/lib/dr26_analogue/dr26.cpp
deleted file mode 100644
index 4507ec4e37c301791288e62a204c975fe0430887..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/dr26_analogue/dr26.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "dr26.hpp"
-
-Adafruit_ADS1115 ads;
-
-void Forte_DR26 ::setup()
-{
-   Wire.begin(6, 7);
-    ads.setGain(GAIN_ONE);
-    ads.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-    delay(100);
-}
-
-float Forte_DR26 ::read_data()
-{
-	float volts=0;
-    for(int i=0; i<10; i++){
-        int16_t adc = 0;
-        float volt = 0;
-        try
-        {
-            adc = ads.readADC_SingleEnded(0);
-            volt = ads.computeVolts(adc);
-        }
-        catch(NoDataAvailableException& e)
-        {
-	        throw NoDataAvailableException();  //propagate exception
-        }
-        volts += volt;
-    }
-
-    volts /= 10;
-    return volts;
-}
-
-// The following functions change the ADC input range: be careful
-// to never to exceed VDD +0.3V max, or to exceed the upper and
-// lower limits if you adjust the input range.
-// SETTING THE GAIN VALUE INCORRECTLY MAY DESTROY THE ADC!
-// The maximum output of the dendrometer is 2.5V, and so a gain of
-// one (max 4.096V) or two (max 2.048V) is optimal. Changing the gain
-// changes the accuracy of the sensor: higher gain gives a higher
-// precision but a smaller range.
-//
-// GAIN_TWOTHIRDS  // 2/3x gain +/- 6.144V  1 bit = 0.1875mV (default)
-// GAIN_ONE        // 1x gain   +/- 4.096V  1 bit = 0.125mV
-// GAIN_TWO        // 2x gain   +/- 2.048V  1 bit = 0.0625mV
-// GAIN_FOUR       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
-// GAIN_EIGHT      // 8x gain   +/- 0.512V  1 bit = 0.015625mV
-// GAIN_SIXTEEN    // 16x gain  +/- 0.256V  1 bit = 0.0078125mV
-void Forte_DR26 ::change_Gain(adsGain_t gain)
-{
-	ads.setGain(gain);
-}
-/*
-Message Forte_DR26::build_message()
-{
-	throw "Not implemented";
-}
-*/
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/dr26_analogue/dr26.hpp b/code-snippets/client/sensor_station_Analog/client/lib/dr26_analogue/dr26.hpp
deleted file mode 100644
index 0c4ee81bf650566361f52f931932750fd3e5e262..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/dr26_analogue/dr26.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef _DR26
-#define _DR26
-
-#include <Arduino.h>
-#include <Wire.h>
-#include "NoDataAvailableException.hpp" //modified <Adafruit_ADS1X15.h>
-#include <Adafruit_ADS1X15_Forte.h>
-#include <pinout.hpp>
-#include <forte_sensor.hpp>
-
-class Forte_DR26 : public Forte_Sensor<float> {
-  public:
-	void setup();
-	float read_data();
-	void change_Gain(adsGain_t gain);
-	//Message build_message();
-
-  private:
-  
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/drs26_digital/drs26.cpp b/code-snippets/client/sensor_station_Analog/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 45f038d6174fcee1be854ee302bff61ed08c7b14..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include <drs26.hpp>
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck
-*/
-
-void Forte_DRS26 ::setup()
-{
-	drs26.begin(4);
-}
-
-out_data_drs26 Forte_DRS26 ::read_data()
-{
-	String sdiResponse = "";
-	String measurement_command =
-	    "1M!"; // The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is
-	           // specified as 1M!=Sebsir measurement request at adress 1
-	String data_command = "1D0!"; // and the followed data command 1D0! = Sensor data request at adress 1
-
-	drs26.sendCommand(measurement_command);
-	delay(1000);
-	drs26.sendCommand(data_command);
-
-	data = {-1, -1, -1};
-
-	while (drs26.available()) {
-		char next_character = drs26.read();
-		if ((next_character != '\n') && (next_character != '\r')) {
-			sdiResponse += next_character;
-			delay(10); // 1 character ~ 7.5ms
-		}
-	}
-
-	if (sdiResponse.length() > 1) {
-		data.id = sdiResponse.substring(0, 8).toInt();
-		data.circumference = sdiResponse.substring(9, 15).toFloat();
-		data.temperatur = sdiResponse.substring(16, 22).toFloat();
-	}
-	return data;
-}
-
-Message Forte_DRS26 ::build_message()
-{
-	// auto message = Message();
-	// message.add_data(data.circumference, data.id);
-	throw "Not yet implemented";
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/drs26_digital/drs26.hpp b/code-snippets/client/sensor_station_Analog/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index 1c5116dc966403eafbe2b83a2c6ccf14093ee75b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include "Message.hpp"
-#include "Wire.h"
-#include "forte_sensor.hpp"
-#include "pinout.hpp"
-#include <SDI12.h>
-
-struct out_data_drs26 {
-	int id;
-	float circumference;
-	float temperatur;
-};
-
-class Forte_DRS26 : public Forte_Sensor<out_data_drs26> {
-  public:
-	void setup();
-	out_data_drs26 read_data();
-	Message build_message();
-
-  private:
-	SDI12 drs26;
-	out_data_drs26 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/espnow/README b/code-snippets/client/sensor_station_Analog/client/lib/espnow/README
deleted file mode 100644
index 55f89c0b2141283b3dd2d94c882cdaccbe2064fe..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/espnow/README
+++ /dev/null
@@ -1,11 +0,0 @@
-# basic usage
-
-To send data using espnow, create a new Message object,
-then use the add_data(value, identifier) method for every value
-to fill the message.
-when every value is added, use the send() method to send the data
-to the host (fipy). If the esp client has never recieved a config
-message from the host, it will instead broadcast the message.
-
----
-right now, it is not possible to add more than 10 values.
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ClientDataPackage.hpp b/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ClientDataPackage.hpp
deleted file mode 100644
index 52f2be6032a190e6346bef71457cb78c983b0038..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ClientDataPackage.hpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#define NUM_SENSORS 10
-// packing the struct without padding, makes reading it on the fipy easier
-#pragma pack(1)
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-struct ClientDataPackage {
-	int identifiers[NUM_SENSORS];
-	float values[NUM_SENSORS];
-	int amountData;
-	long timestamp; // maybe make this array
-};
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ESPNow.cpp b/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ESPNow.cpp
deleted file mode 100644
index 359b43c50b855b7f90d955995befe915a3846e3d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ESPNow.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "ESPNow.hpp"
-
-uint8_t BROADCAST_MAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-esp_now_peer_info_t hostInfo;
-Preferences preferences;
-
-void get_host_mac(uint8_t *destination)
-{
-	preferences.begin("config", true);
-	if (!preferences.isKey("host")) {
-		preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
-	} else {
-		memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-		Serial.println("backup mac used");
-	}
-	preferences.end();
-}
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status)
-{
-	// go to sleep
-}
-
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
-{
-	Serial.println("message recieved");
-	config new_config;
-	memcpy(&new_config, incomingData, sizeof(new_config)); // TODO: check for valid mac
-
-	// put the host address in flash mem
-	preferences.begin("config", false);
-	if (!preferences.isKey("host")) {
-		preferences.putBytes("host", new_config.host, sizeof(new_config.host));
-		Serial.println("host mac saved to flash");
-	} else{
-		Serial.println("host mac already exists");
-	}// host change shouldn't be an issue
-	preferences.end();
-	// sync time
-	Time::getInstance().setTime(
-	    new_config.time_millis); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
-	Serial.println("Saved Time: " + (String) new_config.time_millis);
-	Serial.flush();
-}
-
-esp_err_t espnow_setup()
-{
-	esp_err_t result;
-	WiFi.mode(WIFI_STA);
-	result = esp_now_init();
-	if (result != ESP_OK) {
-		// initialization failed
-		return result; // not sure about this
-	}
-
-	get_host_mac(hostInfo.peer_addr); // check if there is a host saved in flash mem, broadcast otherwise
-
-	hostInfo.channel = 0;
-	hostInfo.encrypt = 0;
-	esp_now_add_peer(&hostInfo);
-
-	esp_now_register_recv_cb(on_data_recv);
-	esp_now_register_send_cb(on_data_sent);
-
-	return ESP_OK;
-}
-
-esp_err_t espnow_send_message(const Message& message){
-	Serial.println("sending Message");
-	esp_err_t success;
-	ClientDataPackage dataP = message.get_client_data_package();
-	uint8_t recipient;
-	get_host_mac(&recipient);
-
-	success = esp_now_send(&recipient, (uint8_t *) &dataP, sizeof(ClientDataPackage));
-	// if(success != ESP_OK){
-	//     if(!ram_cache_is_full()){
-	//         ram_cache_push(*data);
-	//     }
-	// }
-
-	for (int i = 0; i < dataP.amountData; i++) {
-		Serial.println(dataP.values[i]);
-	}
-	
-	Serial.println((String) "time sent: " + dataP.timestamp);
-	Serial.println((String) "Send status: " + success);
-	Serial.println();
-	Serial.println("done");
-	Serial.flush();
-	return success;
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ESPNow.hpp b/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ESPNow.hpp
deleted file mode 100644
index e4ac43b351c4431e8a1bd1b15740ae5fe085e2fe..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/ESPNow.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef _ESPNOW
-#define _ESPNOW
-
-#include "Message.hpp"
-#include "Time.hpp"
-#include "ram_caching.hpp"
-#include <ClientDataPackage.hpp>
-#include <ESP32Time.h>
-#include <Preferences.h>
-#include <WiFi.h>
-#include <esp_now.h>
-
-typedef struct config {
-	uint8_t host[6];
-	long time_millis;
-} config;
-
-esp_err_t espnow_setup();
-esp_err_t espnow_send_message(const Message& message);
-bool is_host_defined();
-void get_host_mac(uint8_t *destination);
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status);
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len);
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/Message.cpp b/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/Message.cpp
deleted file mode 100644
index 6975ab6cd228ab218df9759abddc498a082c288c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/Message.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "Message.hpp"
-
-void Message::add_data(float value, int identifier)
-{
-	if (data.amountData < NUM_SENSORS) {
-		data.values[data.amountData] = value;
-		data.identifiers[data.amountData] = identifier;
-		data.amountData++;
-	}
-}
-
-ClientDataPackage Message ::get_client_data_package() const
-{
-	return data;
-}
-
-Message ::Message()
-{
-	// check for existing host mac address, use broadcast otherwise
-
-	data.amountData = 0;
-	data.timestamp = Time::getInstance().getMillis(); // I am assuming we are not sending data from Unix Epoch
-}
-
-Message ::Message(ClientDataPackage old_data)
-{
-	data = old_data;
-	// memcpy(&data, &old_data, sizeof(data));
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/Message.hpp b/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/Message.hpp
deleted file mode 100644
index 397ca6f707105be90fb76add8200b8edef93c8ed..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/espnow/src/Message.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "ClientDataPackage.hpp"
-#include "Time.hpp"
-#include <Arduino.h>
-#include <ESP32Time.h>
-#include <esp_now.h>
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-class Message {
-  public:
-	Message();
-	Message(ClientDataPackage old_data);
-	void add_data(float value, int identifier);
-	ClientDataPackage get_client_data_package() const;
-
-  private:
-	ClientDataPackage data;
-};
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/ina219/ina219.cpp b/code-snippets/client/sensor_station_Analog/client/lib/ina219/ina219.cpp
deleted file mode 100644
index 8b41197b0809f805c36c791e1fef1c317dff7b78..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#include "ina219.hpp"
-
-void Forte_INA219 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!ina219.begin()) {
-		// Sensor init went wrong
-		return;
-	}
-	// ina219.setMeasureMode(TRIGGERED);
-}
-
-out_data_ina219 Forte_INA219 ::read_data()
-{
-	ina219.getShuntVoltage_mV();
-	if(ina219.success())
-	{
-	data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-	data.busVoltage_V = ina219.getBusVoltage_V();
-	data.current_mA = ina219.getCurrent_mA();
-	data.power_mW = ina219.getPower_mW();
-	data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV / 1000);
-	return data;
-	}
-	else
-		throw NoDataAvailableException();
-}
-
-Message Forte_INA219::build_message()
-{
-	throw "Not yet implemented";
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/ina219/ina219.hpp b/code-snippets/client/sensor_station_Analog/client/lib/ina219/ina219.hpp
deleted file mode 100644
index dfa3efc65e4ad7d9091c2f99096185ffaf978d16..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include "Message.hpp"
-#include "Wire.h"
-#include "forte_sensor.hpp"
-#include "pinout.hpp"
-#include <Adafruit_INA219.h>
-#include <NoDataAvailableException.hpp>
-#include "NoDataAvailableException.hpp"
-
-struct out_data_ina219 {
-	float shuntVoltage_mV = 0.0;
-	float loadVoltage_V = 0.0;
-	float busVoltage_V = 0.0;
-	float current_mA = 0.0;
-	float power_mW = 0.0;
-	bool ina219_overflow = false;
-};
-
-class Forte_INA219 : public Forte_Sensor<out_data_ina219> {
-  public:
-	void setup();
-	out_data_ina219 read_data();
-	Message build_message();
-
-  private:
-	Adafruit_INA219 ina219;
-	out_data_ina219 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/scd30/scd30.cpp b/code-snippets/client/sensor_station_Analog/client/lib/scd30/scd30.cpp
deleted file mode 100644
index 222089c897d08933cbc3ed8afb3c1418f84a6e88..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "scd30.hpp"
-
-void Forte_SCD30 ::setup()
-{
-	Wire.begin(I2C_SDA, I2C_SCL);
-	if (!airSensor.begin()) {
-		// Sensor init went wrong
-		return;
-	}
-}
-
-out_data_scd30 Forte_SCD30 ::read_data()
-{
-	if (airSensor.dataAvailable()) {
-		data.C02 = airSensor.getCO2();
-		data.Temperature = airSensor.getTemperature();
-		data.Humidity = airSensor.getHumidity();
-
-		return data;
-	}
-	throw NoDataAvailableException();
-	// return out_data_scd30{-1, -1, -1};
-}
-
-Message Forte_SCD30::build_message()
-{
-	throw "Not yet implemented";
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/scd30/scd30.hpp b/code-snippets/client/sensor_station_Analog/client/lib/scd30/scd30.hpp
deleted file mode 100644
index c3bf69725f82ad61df06d2ba02643074ff105955..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include "Message.hpp"
-#include "NoDataAvailableException.hpp"
-#include "forte_sensor.hpp"
-#include "pinout.hpp"
-#include <SparkFun_SCD30_Arduino_Library.h>
-#include <Wire.h>
-
-struct out_data_scd30 {
-	float C02;
-	float Temperature;
-	float Humidity;
-};
-
-class Forte_SCD30 : public Forte_Sensor<out_data_scd30> {
-  public:
-	void setup();
-	out_data_scd30 read_data();
-	Message build_message();
-
-  private:
-	SCD30 airSensor;
-	out_data_scd30 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/time/src/Time.cpp b/code-snippets/client/sensor_station_Analog/client/lib/time/src/Time.cpp
deleted file mode 100644
index 8fdf4b4decd253a197cda680a6613529daa2b127..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/time/src/Time.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "Time.hpp"
-
-#include <utility>
-void Time::setTime(long epoch, int ms)
-{
-	this->rtc.setTime(epoch, ms);
-}
-tm Time::getTimeStruct()
-{
-	return this->rtc.getTimeStruct();
-}
-String Time::getDateTime(bool mode)
-{
-	return this->rtc.getDateTime(mode);
-}
-String Time::getTime(String format)
-{
-	return this->rtc.getTime(std::move(format));
-}
-long Time::getEpochSeconds()
-{
-	return this->rtc.getEpoch();
-}
-
-long Time::getMillis()
-{
-	return this->rtc.getMillis();
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/lib/time/src/Time.hpp b/code-snippets/client/sensor_station_Analog/client/lib/time/src/Time.hpp
deleted file mode 100644
index d53adb159f8f5deb092bcffa3977f550f59fcd1d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/lib/time/src/Time.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef ESPTIME
-#define ESPTIME
-
-#include <ESP32Time.h>
-
-class Time {
-  public:
-	static Time &getInstance()
-	{
-		static Time instance; // Guaranteed to be destroyed.
-		                      // Instantiated on first use.
-		return instance;
-	}
-
-	/*!
-	@brief  set the internal RTC time
-	@param  epoch
-	        epoch time in seconds
-	@param  ms
-	        microseconds (optional)
-	*/
-	void setTime(long epoch, int ms = 0);
-
-	/*!
-	@brief  get the internal RTC time as a tm struct
-	*/
-	tm getTimeStruct();
-
-	/*!
-	@brief  get the time and date as an Arduino String object
-	@param  mode
-	        true = Long date format
-	        false = Short date format
-	*/
-	String getDateTime(bool mode);
-
-	/*!
-	@brief  get the time as an Arduino String object with the specified format
-	@param	format
-	        time format
-	        http://www.cplusplus.com/reference/ctime/strftime/
-	*/
-	String getTime(String format = "%H:%M:%S");
-
-	/*!
-	@brief  get the current epoch seconds as long
-	*/
-	long getEpochSeconds();
-
-	/*!
-	@brief  get the current milliseconds as long
-	*/
-	long getMillis();
-
-  private:
-	Time() {} // Constructor? (the {} brackets) are needed here.
-
-	ESP32Time rtc = ESP32Time{};
-
-	// C++ 11
-	// =======
-	// We can use the better technique of deleting the methods
-	// we don't want.
-  public:
-	Time(Time const &) = delete;
-	void operator=(Time const &) = delete;
-
-	// Note: Scott Meyers mentions in his Effective Modern
-	//       C++ book, that deleted functions should generally
-	//       be public as it results in better error messages
-	//       due to the compilers behavior to check accessibility
-	//       before deleted status
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/platformio.ini b/code-snippets/client/sensor_station_Analog/client/platformio.ini
deleted file mode 100644
index d91781822e43930b87bdfd6cea9c76ef8529e360..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/platformio.ini
+++ /dev/null
@@ -1,27 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-monitor_speed = 9600
-build_flags = 
-	-I include
-lib_deps = 
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	Wire
-	adafruit/Adafruit BusIO@^1.13.2
-	Adafruit_I2CDevice
-	SPI
-	envirodiy/SDI-12@^2.1.4
-	fbiego/ESP32Time@^2.0.0
-	Wifi
-	adafruit/Adafruit INA219@^1.2.0
diff --git a/code-snippets/client/sensor_station_Analog/client/src/main.cpp b/code-snippets/client/sensor_station_Analog/client/src/main.cpp
deleted file mode 100644
index 9376c9906b479b213600b54ea1abecb42558b2ff..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/src/main.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-#include <Arduino.h>
-#include <Wire.h>
-#include <dr26.hpp>
-#include <ina219.hpp>
-#include "esp_debug_helpers.h"
-
-Adafruit_ADS1115 adss;
-
-Forte_DR26 dr26;
-Forte_INA219 ina219;
-
-void setup()
-{
-	Serial.begin(9600);
-   Wire.begin(6, 7);
-    adss.setGain(GAIN_ONE);
-    adss.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-    delay(100);
-	dr26.setup();
-	ina219.setup();
-	
-}
-int x =0;
-
-void loop()
-{
-   Serial.println("******************************DR26-Analog********************Tree-Size**********************************");
-   float data_drs26=-1;
-   try
-   {
-      data_drs26=dr26.read_data();
-      Serial.print("dr26: ");
-	   Serial.println(data_drs26);
-   }
-   catch(NoDataAvailableException& e){
-	Serial.println("No Sensor aviable");
-   }
-   
-	out_data_ina219 data_ina219;
-	Serial.println("******************************INA219********************Power--Consumption**********************************");
-   try{
-		   data_ina219=ina219.read_data();
-   		Serial.print("Shunt Voltage [mV]: "); Serial.println(data_ina219.shuntVoltage_mV);
-        Serial.print("Bus Voltage [V]: "); Serial.println(data_ina219.busVoltage_V);
-        Serial.print("Load Voltage [V]: "); Serial.println(data_ina219.loadVoltage_V);
-        Serial.print("Current[mA]: "); Serial.println(data_ina219.current_mA);
-        Serial.print("Bus Power [mW]: "); Serial.println(data_ina219.power_mW);
-        data_ina219.ina219_overflow== false ? Serial.println("Values OK - no overflow") : Serial.println("Overflow! Choose higher PGAIN");
-        Serial.println();
-   }
-
-   catch(NoDataAvailableException& e){
-	   Serial.println("No Sensor aviable");
-   }
- 
-  // Serial.println("Free Heap:"); Keep trach of the free stack -> momery leak can cause stack overflow 
-  // Serial.println(esp_get_free_heap_size());
-	delay(4000);
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/test/README b/code-snippets/client/sensor_station_Analog/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/sensor_station_Analog/client/test/TestESPNow.cpp b/code-snippets/client/sensor_station_Analog/client/test/TestESPNow.cpp
deleted file mode 100644
index 3a4c149bb8742e61c0a235691e7e0b8d9a3eda76..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/test/TestESPNow.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "TestESPNow.hpp"
-
-void test_on_data_recv_valid_config()
-{
-	uint8_t mac_addr[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-	int len = 0;
-	config conf = {host : {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA}, time_millis : 0};
-
-	// preferences / hostinfo would need to be global for this to work
-
-	TEST_FAIL();
-}
diff --git a/code-snippets/client/sensor_station_Analog/client/test/TestESPNow.hpp b/code-snippets/client/sensor_station_Analog/client/test/TestESPNow.hpp
deleted file mode 100644
index a2512b2ffd4ca48031415456d658302d4bae6b91..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/test/TestESPNow.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#pragma once
-#include <Arduino.h>
-#include <ESPNow.hpp>
-#include <unity.h>
-
-void test_on_data_recv_valid_config();
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/test/TestMessage.cpp b/code-snippets/client/sensor_station_Analog/client/test/TestMessage.cpp
deleted file mode 100644
index 56b7ccc83ab80707afba68c9c33fbe1f6ad6f0b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/test/TestMessage.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "TestMessage.hpp"
-
-void test_on_data_recv()
-{
-	Message message = Message{};
-
-	TEST_ASSERT_EQUAL(0, message.getData().amountData);
-}
-
-void test_new_message_filled()
-{
-	Message message = Message{};
-
-	message.add_data(1.1, 0);
-	message.add_data(1.2, 1);
-	message.add_data(1.3, 2);
-
-	float expectedValuesArray[] = {1.1, 1.2, 1.3};
-	int expectedIdentifiersArray[] = {0, 1, 2};
-
-	TEST_ASSERT_EQUAL(3, message.getData().amountData);
-	TEST_ASSERT_EQUAL_FLOAT_ARRAY(expectedValuesArray, message.getData().values, 3);
-	TEST_ASSERT_EQUAL_INT_ARRAY(expectedIdentifiersArray, message.getData().identifiers, 3);
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/test/TestMessage.hpp b/code-snippets/client/sensor_station_Analog/client/test/TestMessage.hpp
deleted file mode 100644
index 80d5be09d9d13954d96d1b6ef0b366783b414398..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/test/TestMessage.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#pragma once
-#include <Arduino.h>
-#include <ESPNow.hpp>
-#include <unity.h>
-
-void test_on_data_recv();
-
-void test_new_message_filled();
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_Analog/client/test/main.cpp b/code-snippets/client/sensor_station_Analog/client/test/main.cpp
deleted file mode 100644
index 82d68817015b01f036c346b18fa79601a5e842aa..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_Analog/client/test/main.cpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "TestESPNow.hpp"
-#include "TestMessage.hpp"
-#include <Arduino.h>
-#include <unity.h>
-
-void setup()
-{
-	delay(2000); // service delay
-
-	UNITY_BEGIN();
-	RUN_TEST(test_on_data_recv_valid_config);
-	RUN_TEST(test_on_data_recv);
-	RUN_TEST(test_new_message_filled);
-	UNITY_END();
-}
-
-void loop() {}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/ISSUE_TEMPLATE.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index f0e26146fa935ca718cdc141f83555bbd3e0c067..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/ISSUE_TEMPLATE.md	
+++ /dev/null
@@ -1,46 +0,0 @@
-Thank you for opening an issue on an Adafruit Arduino library repository.  To
-improve the speed of resolution please review the following guidelines and
-common troubleshooting steps below before creating the issue:
-
-- **Do not use GitHub issues for troubleshooting projects and issues.**  Instead use
-  the forums at http://forums.adafruit.com to ask questions and troubleshoot why
-  something isn't working as expected.  In many cases the problem is a common issue
-  that you will more quickly receive help from the forum community.  GitHub issues
-  are meant for known defects in the code.  If you don't know if there is a defect
-  in the code then start with troubleshooting on the forum first.
-
-- **If following a tutorial or guide be sure you didn't miss a step.** Carefully
-  check all of the steps and commands to run have been followed.  Consult the
-  forum if you're unsure or have questions about steps in a guide/tutorial.
-
-- **For Arduino projects check these very common issues to ensure they don't apply**:
-
-  - For uploading sketches or communicating with the board make sure you're using
-    a **USB data cable** and **not** a **USB charge-only cable**.  It is sometimes
-    very hard to tell the difference between a data and charge cable!  Try using the
-    cable with other devices or swapping to another cable to confirm it is not
-    the problem.
-
-  - **Be sure you are supplying adequate power to the board.**  Check the specs of
-    your board and plug in an external power supply.  In many cases just
-    plugging a board into your computer is not enough to power it and other
-    peripherals.
-
-  - **Double check all soldering joints and connections.**  Flakey connections
-    cause many mysterious problems.  See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints.
-
-  - **Ensure you are using an official Arduino or Adafruit board.** We can't
-    guarantee a clone board will have the same functionality and work as expected
-    with this code and don't support them.
-
-If you're sure this issue is a defect in the code and checked the steps above
-please fill in the following fields to provide enough troubleshooting information.
-You may delete the guideline and text above to just leave the following details:
-
-- Arduino board:  **INSERT ARDUINO BOARD NAME/TYPE HERE**
-
-- Arduino IDE version (found in Arduino -> About Arduino menu):  **INSERT ARDUINO
-  VERSION HERE**
-
-- List the steps to reproduce the problem below (if possible attach a sketch or
-  copy the sketch code in too): **LIST REPRO STEPS BELOW**
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/PULL_REQUEST_TEMPLATE.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 7b641eb862c05e126ef698221ffebe8f33ec1a5a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/PULL_REQUEST_TEMPLATE.md	
+++ /dev/null
@@ -1,26 +0,0 @@
-Thank you for creating a pull request to contribute to Adafruit's GitHub code!
-Before you open the request please review the following guidelines and tips to
-help it be more easily integrated:
-
-- **Describe the scope of your change--i.e. what the change does and what parts
-  of the code were modified.**  This will help us understand any risks of integrating
-  the code.
-
-- **Describe any known limitations with your change.**  For example if the change
-  doesn't apply to a supported platform of the library please mention it.
-
-- **Please run any tests or examples that can exercise your modified code.**  We
-  strive to not break users of the code and running tests/examples helps with this
-  process.
-
-Thank you again for contributing!  We will try to test and integrate the change
-as soon as we can, but be aware we have many GitHub repositories to manage and
-can't immediately respond to every request.  There is no need to bump or check in
-on a pull request (it will clutter the discussion of the request).
-
-Also don't be worried if the request is closed or not integrated--sometimes the
-priorities of Adafruit's GitHub code (education, ease of use) might not match the
-priorities of the pull request.  Don't fret, the open source community thrives on
-forks and GitHub makes it easy to keep your changes in a forked repo.
-
-After reviewing the guidelines above you can delete this text from the pull request.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/workflows/githubci.yml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/workflows/githubci.yml
deleted file mode 100644
index 9c6f7195065dad303f6a03a051ca37e6faa78f37..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.github/workflows/githubci.yml	
+++ /dev/null
@@ -1,32 +0,0 @@
-name: Arduino Library CI
-
-on: [pull_request, push, repository_dispatch]
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-
-    steps:
-    - uses: actions/setup-python@v1
-      with:
-        python-version: '3.x'
-    - uses: actions/checkout@v2
-    - uses: actions/checkout@v2
-      with:
-         repository: adafruit/ci-arduino
-         path: ci
-
-    - name: pre-install
-      run: bash ci/actions_install.sh
-
-    - name: test platforms
-      run: python3 ci/build_platform.py main_platforms
-
-    - name: clang
-      run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .
-
-    - name: doxygen
-      env:
-        GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
-        PRETTYNAME : "Adafruit ADS1X15 ADC Driver Library"
-      run: bash ci/doxy_gen_and_deploy.sh
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.piopm b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.piopm
deleted file mode 100644
index 751429db7f94550d732363f9ced8e2713e6918da..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/.piopm	
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "Adafruit ADS1X15", "version": "2.4.0", "spec": {"owner": "adafruit", "id": 342, "name": "Adafruit ADS1X15", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/Adafruit_ADS1X15.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/Adafruit_ADS1X15.cpp
deleted file mode 100644
index 80a89a35807958b048b93cb80c1d48f7320a6300..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/Adafruit_ADS1X15.cpp	
+++ /dev/null
@@ -1,403 +0,0 @@
-/**************************************************************************/
-/*!
-    @file     Adafruit_ADS1X15.cpp
-    @author   K.Townsend (Adafruit Industries)
-
-    @mainpage Adafruit ADS1X15 ADC Breakout Driver
-
-    @section intro_sec Introduction
-
-    This is a library for the Adafruit ADS1X15 ADC breakout boards.
-
-    Adafruit invests time and resources providing this open source code,
-    please support Adafruit and open-source hardware by purchasing
-    products from Adafruit!
-
-    @section author Author
-
-    Written by Kevin "KTOWN" Townsend for Adafruit Industries.
-
-    @section  HISTORY
-
-    v1.0  - First release
-    v1.1  - Added ADS1115 support - W. Earl
-    v2.0  - Refactor - C. Nelson
-
-    @section license License
-
-    BSD license, all text here must be included in any redistribution
-*/
-/**************************************************************************/
-#include "Adafruit_ADS1X15.h"
-
-/**************************************************************************/
-/*!
-    @brief  Instantiates a new ADS1015 class w/appropriate properties
-*/
-/**************************************************************************/
-Adafruit_ADS1015::Adafruit_ADS1015() {
-  m_bitShift = 4;
-  m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
-  m_dataRate = RATE_ADS1015_1600SPS;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Instantiates a new ADS1115 class w/appropriate properties
-*/
-/**************************************************************************/
-Adafruit_ADS1115::Adafruit_ADS1115() {
-  m_bitShift = 0;
-  m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
-  m_dataRate = RATE_ADS1115_128SPS;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets up the HW (reads coefficients values, etc.)
-
-    @param i2c_addr I2C address of device
-    @param wire I2C bus
-
-    @return true if successful, otherwise false
-*/
-/**************************************************************************/
-bool Adafruit_ADS1X15::begin(uint8_t i2c_addr, TwoWire *wire) {
-  m_i2c_dev = new Adafruit_I2CDevice(i2c_addr, wire);
-  return m_i2c_dev->begin();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets the gain and input voltage range
-
-    @param gain gain setting to use
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::setGain(adsGain_t gain) { m_gain = gain; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets a gain and input voltage range
-
-    @return the gain setting
-*/
-/**************************************************************************/
-adsGain_t Adafruit_ADS1X15::getGain() { return m_gain; }
-
-/**************************************************************************/
-/*!
-    @brief  Sets the data rate
-
-    @param rate the data rate to use
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::setDataRate(uint16_t rate) { m_dataRate = rate; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets the current data rate
-
-    @return the data rate
-*/
-/**************************************************************************/
-uint16_t Adafruit_ADS1X15::getDataRate() { return m_dataRate; }
-
-/**************************************************************************/
-/*!
-    @brief  Gets a single-ended ADC reading from the specified channel
-
-    @param channel ADC channel to read
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_SingleEnded(uint8_t channel) {
-  if (channel > 3) {
-    return 0;
-  }
-
-  startADCReading(MUX_BY_CHANNEL[channel], /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN0) and N (AIN1) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_0_1() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_1, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN0) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_0_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN1) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_1_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_1_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Reads the conversion results, measuring the voltage
-            difference between the P (AIN2) and N (AIN3) input.  Generates
-            a signed value since the difference can be either
-            positive or negative.
-
-    @return the ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::readADC_Differential_2_3() {
-  startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_2_3, /*continuous=*/false);
-
-  // Wait for the conversion to complete
-  while (!conversionComplete())
-    ;
-
-  // Read the conversion results
-  return getLastConversionResults();
-}
-
-/**************************************************************************/
-/*!
-    @brief  Sets up the comparator to operate in basic mode, causing the
-            ALERT/RDY pin to assert (go from high to low) when the ADC
-            value exceeds the specified threshold.
-
-            This will also set the ADC in continuous conversion mode.
-
-    @param channel ADC channel to use
-    @param threshold comparator threshold
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::startComparator_SingleEnded(uint8_t channel,
-                                                   int16_t threshold) {
-  // Start with default values
-  uint16_t config =
-      ADS1X15_REG_CONFIG_CQUE_1CONV |   // Comparator enabled and asserts on 1
-                                        // match
-      ADS1X15_REG_CONFIG_CLAT_LATCH |   // Latching mode
-      ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low   (default val)
-      ADS1X15_REG_CONFIG_CMODE_TRAD |   // Traditional comparator (default val)
-      ADS1X15_REG_CONFIG_MODE_CONTIN |  // Continuous conversion mode
-      ADS1X15_REG_CONFIG_MODE_CONTIN;   // Continuous conversion mode
-
-  // Set PGA/voltage range
-  config |= m_gain;
-
-  // Set data rate
-  config |= m_dataRate;
-
-  config |= MUX_BY_CHANNEL[channel];
-
-  // Set the high threshold register
-  // Shift 12-bit results left 4 bits for the ADS1015
-  writeRegister(ADS1X15_REG_POINTER_HITHRESH, threshold << m_bitShift);
-
-  // Write config register to the ADC
-  writeRegister(ADS1X15_REG_POINTER_CONFIG, config);
-}
-
-/**************************************************************************/
-/*!
-    @brief  In order to clear the comparator, we need to read the
-            conversion results.  This function reads the last conversion
-            results without changing the config value.
-
-    @return the last ADC reading
-*/
-/**************************************************************************/
-int16_t Adafruit_ADS1X15::getLastConversionResults() {
-  // Read the conversion results
-  uint16_t res = readRegister(ADS1X15_REG_POINTER_CONVERT) >> m_bitShift;
-  if (m_bitShift == 0) {
-    return (int16_t)res;
-  } else {
-    // Shift 12-bit results right 4 bits for the ADS1015,
-    // making sure we keep the sign bit intact
-    if (res > 0x07FF) {
-      // negative number - extend the sign to 16th bit
-      res |= 0xF000;
-    }
-    return (int16_t)res;
-  }
-}
-
-/**************************************************************************/
-/*!
-    @brief  Returns true if conversion is complete, false otherwise.
-
-    @param counts the ADC reading in raw counts
-
-    @return the ADC reading in volts
-*/
-/**************************************************************************/
-float Adafruit_ADS1X15::computeVolts(int16_t counts) {
-  // see data sheet Table 3
-  float fsRange;
-  switch (m_gain) {
-  case GAIN_TWOTHIRDS:
-    fsRange = 6.144f;
-    break;
-  case GAIN_ONE:
-    fsRange = 4.096f;
-    break;
-  case GAIN_TWO:
-    fsRange = 2.048f;
-    break;
-  case GAIN_FOUR:
-    fsRange = 1.024f;
-    break;
-  case GAIN_EIGHT:
-    fsRange = 0.512f;
-    break;
-  case GAIN_SIXTEEN:
-    fsRange = 0.256f;
-    break;
-  default:
-    fsRange = 0.0f;
-  }
-  return counts * (fsRange / (32768 >> m_bitShift));
-}
-
-/**************************************************************************/
-/*!
-    @brief  Non-blocking start conversion function
-
-    Call getLastConversionResults() once conversionComplete() returns true.
-    In continuous mode, getLastConversionResults() will always return the
-    latest result.
-    ALERT/RDY pin is set to RDY mode, and a 8us pulse is generated every
-    time new data is ready.
-
-    @param mux mux field value
-    @param continuous continuous if set, otherwise single shot
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::startADCReading(uint16_t mux, bool continuous) {
-  // Start with default values
-  uint16_t config =
-      ADS1X15_REG_CONFIG_CQUE_1CONV |   // Set CQUE to any value other than
-                                        // None so we can use it in RDY mode
-      ADS1X15_REG_CONFIG_CLAT_NONLAT |  // Non-latching (default val)
-      ADS1X15_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low   (default val)
-      ADS1X15_REG_CONFIG_CMODE_TRAD;    // Traditional comparator (default val)
-
-  if (continuous) {
-    config |= ADS1X15_REG_CONFIG_MODE_CONTIN;
-  } else {
-    config |= ADS1X15_REG_CONFIG_MODE_SINGLE;
-  }
-
-  // Set PGA/voltage range
-  config |= m_gain;
-
-  // Set data rate
-  config |= m_dataRate;
-
-  // Set channels
-  config |= mux;
-
-  // Set 'start single-conversion' bit
-  config |= ADS1X15_REG_CONFIG_OS_SINGLE;
-
-  // Write config register to the ADC
-  writeRegister(ADS1X15_REG_POINTER_CONFIG, config);
-
-  // Set ALERT/RDY to RDY mode.
-  writeRegister(ADS1X15_REG_POINTER_HITHRESH, 0x8000);
-  writeRegister(ADS1X15_REG_POINTER_LOWTHRESH, 0x0000);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Returns true if conversion is complete, false otherwise.
-
-    @return True if conversion is complete, false otherwise.
-*/
-/**************************************************************************/
-bool Adafruit_ADS1X15::conversionComplete() {
-  return (readRegister(ADS1X15_REG_POINTER_CONFIG) & 0x8000) != 0;
-}
-
-/**************************************************************************/
-/*!
-    @brief  Writes 16-bits to the specified destination register
-
-    @param reg register address to write to
-    @param value value to write to register
-*/
-/**************************************************************************/
-void Adafruit_ADS1X15::writeRegister(uint8_t reg, uint16_t value) {
-  buffer[0] = reg;
-  buffer[1] = value >> 8;
-  buffer[2] = value & 0xFF;
-  m_i2c_dev->write(buffer, 3);
-}
-
-/**************************************************************************/
-/*!
-    @brief  Read 16-bits from the specified destination register
-
-    @param reg register address to read from
-
-    @return 16 bit register value read
-*/
-/**************************************************************************/
-uint16_t Adafruit_ADS1X15::readRegister(uint8_t reg) {
-  buffer[0] = reg;
-  m_i2c_dev->write(buffer, 1);
-  m_i2c_dev->read(buffer, 2);
-  return ((buffer[0] << 8) | buffer[1]);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/Adafruit_ADS1X15.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/Adafruit_ADS1X15.h
deleted file mode 100644
index 26aa406c8b57a1c3e7bbd792a1b748de9302b8c5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/Adafruit_ADS1X15.h	
+++ /dev/null
@@ -1,201 +0,0 @@
-/**************************************************************************/
-/*!
-    @file     Adafruit_ADS1X15.h
-
-    This is a library for the Adafruit ADS1X15 ADC breakout boards.
-
-    Adafruit invests time and resources providing this open source code,
-    please support Adafruit and open-source hardware by purchasing
-    products from Adafruit!
-
-    Written by Kevin "KTOWN" Townsend for Adafruit Industries.
-
-    BSD license, all text here must be included in any redistribution
-*/
-/**************************************************************************/
-#ifndef __ADS1X15_H__
-#define __ADS1X15_H__
-
-#include <Adafruit_I2CDevice.h>
-#include <Arduino.h>
-#include <Wire.h>
-
-/*=========================================================================
-    I2C ADDRESS/BITS
-    -----------------------------------------------------------------------*/
-#define ADS1X15_ADDRESS (0x48) ///< 1001 000 (ADDR = GND)
-/*=========================================================================*/
-
-/*=========================================================================
-    POINTER REGISTER
-    -----------------------------------------------------------------------*/
-#define ADS1X15_REG_POINTER_MASK (0x03)      ///< Point mask
-#define ADS1X15_REG_POINTER_CONVERT (0x00)   ///< Conversion
-#define ADS1X15_REG_POINTER_CONFIG (0x01)    ///< Configuration
-#define ADS1X15_REG_POINTER_LOWTHRESH (0x02) ///< Low threshold
-#define ADS1X15_REG_POINTER_HITHRESH (0x03)  ///< High threshold
-/*=========================================================================*/
-
-/*=========================================================================
-    CONFIG REGISTER
-    -----------------------------------------------------------------------*/
-#define ADS1X15_REG_CONFIG_OS_MASK (0x8000) ///< OS Mask
-#define ADS1X15_REG_CONFIG_OS_SINGLE                                           \
-  (0x8000) ///< Write: Set to start a single-conversion
-#define ADS1X15_REG_CONFIG_OS_BUSY                                             \
-  (0x0000) ///< Read: Bit = 0 when conversion is in progress
-#define ADS1X15_REG_CONFIG_OS_NOTBUSY                                          \
-  (0x8000) ///< Read: Bit = 1 when device is not performing a conversion
-
-#define ADS1X15_REG_CONFIG_MUX_MASK (0x7000) ///< Mux Mask
-#define ADS1X15_REG_CONFIG_MUX_DIFF_0_1                                        \
-  (0x0000) ///< Differential P = AIN0, N = AIN1 (default)
-#define ADS1X15_REG_CONFIG_MUX_DIFF_0_3                                        \
-  (0x1000) ///< Differential P = AIN0, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_DIFF_1_3                                        \
-  (0x2000) ///< Differential P = AIN1, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_DIFF_2_3                                        \
-  (0x3000) ///< Differential P = AIN2, N = AIN3
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_0 (0x4000) ///< Single-ended AIN0
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_1 (0x5000) ///< Single-ended AIN1
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_2 (0x6000) ///< Single-ended AIN2
-#define ADS1X15_REG_CONFIG_MUX_SINGLE_3 (0x7000) ///< Single-ended AIN3
-
-constexpr uint16_t MUX_BY_CHANNEL[] = {
-    ADS1X15_REG_CONFIG_MUX_SINGLE_0, ///< Single-ended AIN0
-    ADS1X15_REG_CONFIG_MUX_SINGLE_1, ///< Single-ended AIN1
-    ADS1X15_REG_CONFIG_MUX_SINGLE_2, ///< Single-ended AIN2
-    ADS1X15_REG_CONFIG_MUX_SINGLE_3  ///< Single-ended AIN3
-};                                   ///< MUX config by channel
-
-#define ADS1X15_REG_CONFIG_PGA_MASK (0x0E00)   ///< PGA Mask
-#define ADS1X15_REG_CONFIG_PGA_6_144V (0x0000) ///< +/-6.144V range = Gain 2/3
-#define ADS1X15_REG_CONFIG_PGA_4_096V (0x0200) ///< +/-4.096V range = Gain 1
-#define ADS1X15_REG_CONFIG_PGA_2_048V                                          \
-  (0x0400) ///< +/-2.048V range = Gain 2 (default)
-#define ADS1X15_REG_CONFIG_PGA_1_024V (0x0600) ///< +/-1.024V range = Gain 4
-#define ADS1X15_REG_CONFIG_PGA_0_512V (0x0800) ///< +/-0.512V range = Gain 8
-#define ADS1X15_REG_CONFIG_PGA_0_256V (0x0A00) ///< +/-0.256V range = Gain 16
-
-#define ADS1X15_REG_CONFIG_MODE_MASK (0x0100)   ///< Mode Mask
-#define ADS1X15_REG_CONFIG_MODE_CONTIN (0x0000) ///< Continuous conversion mode
-#define ADS1X15_REG_CONFIG_MODE_SINGLE                                         \
-  (0x0100) ///< Power-down single-shot mode (default)
-
-#define ADS1X15_REG_CONFIG_RATE_MASK (0x00E0) ///< Data Rate Mask
-
-#define ADS1X15_REG_CONFIG_CMODE_MASK (0x0010) ///< CMode Mask
-#define ADS1X15_REG_CONFIG_CMODE_TRAD                                          \
-  (0x0000) ///< Traditional comparator with hysteresis (default)
-#define ADS1X15_REG_CONFIG_CMODE_WINDOW (0x0010) ///< Window comparator
-
-#define ADS1X15_REG_CONFIG_CPOL_MASK (0x0008) ///< CPol Mask
-#define ADS1X15_REG_CONFIG_CPOL_ACTVLOW                                        \
-  (0x0000) ///< ALERT/RDY pin is low when active (default)
-#define ADS1X15_REG_CONFIG_CPOL_ACTVHI                                         \
-  (0x0008) ///< ALERT/RDY pin is high when active
-
-#define ADS1X15_REG_CONFIG_CLAT_MASK                                           \
-  (0x0004) ///< Determines if ALERT/RDY pin latches once asserted
-#define ADS1X15_REG_CONFIG_CLAT_NONLAT                                         \
-  (0x0000) ///< Non-latching comparator (default)
-#define ADS1X15_REG_CONFIG_CLAT_LATCH (0x0004) ///< Latching comparator
-
-#define ADS1X15_REG_CONFIG_CQUE_MASK (0x0003) ///< CQue Mask
-#define ADS1X15_REG_CONFIG_CQUE_1CONV                                          \
-  (0x0000) ///< Assert ALERT/RDY after one conversions
-#define ADS1X15_REG_CONFIG_CQUE_2CONV                                          \
-  (0x0001) ///< Assert ALERT/RDY after two conversions
-#define ADS1X15_REG_CONFIG_CQUE_4CONV                                          \
-  (0x0002) ///< Assert ALERT/RDY after four conversions
-#define ADS1X15_REG_CONFIG_CQUE_NONE                                           \
-  (0x0003) ///< Disable the comparator and put ALERT/RDY in high state (default)
-/*=========================================================================*/
-
-/** Gain settings */
-typedef enum {
-  GAIN_TWOTHIRDS = ADS1X15_REG_CONFIG_PGA_6_144V,
-  GAIN_ONE = ADS1X15_REG_CONFIG_PGA_4_096V,
-  GAIN_TWO = ADS1X15_REG_CONFIG_PGA_2_048V,
-  GAIN_FOUR = ADS1X15_REG_CONFIG_PGA_1_024V,
-  GAIN_EIGHT = ADS1X15_REG_CONFIG_PGA_0_512V,
-  GAIN_SIXTEEN = ADS1X15_REG_CONFIG_PGA_0_256V
-} adsGain_t;
-
-/** Data rates */
-#define RATE_ADS1015_128SPS (0x0000)  ///< 128 samples per second
-#define RATE_ADS1015_250SPS (0x0020)  ///< 250 samples per second
-#define RATE_ADS1015_490SPS (0x0040)  ///< 490 samples per second
-#define RATE_ADS1015_920SPS (0x0060)  ///< 920 samples per second
-#define RATE_ADS1015_1600SPS (0x0080) ///< 1600 samples per second (default)
-#define RATE_ADS1015_2400SPS (0x00A0) ///< 2400 samples per second
-#define RATE_ADS1015_3300SPS (0x00C0) ///< 3300 samples per second
-
-#define RATE_ADS1115_8SPS (0x0000)   ///< 8 samples per second
-#define RATE_ADS1115_16SPS (0x0020)  ///< 16 samples per second
-#define RATE_ADS1115_32SPS (0x0040)  ///< 32 samples per second
-#define RATE_ADS1115_64SPS (0x0060)  ///< 64 samples per second
-#define RATE_ADS1115_128SPS (0x0080) ///< 128 samples per second (default)
-#define RATE_ADS1115_250SPS (0x00A0) ///< 250 samples per second
-#define RATE_ADS1115_475SPS (0x00C0) ///< 475 samples per second
-#define RATE_ADS1115_860SPS (0x00E0) ///< 860 samples per second
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1X15 ADC breakouts.
-*/
-/**************************************************************************/
-class Adafruit_ADS1X15 {
-protected:
-  // Instance-specific properties
-  Adafruit_I2CDevice *m_i2c_dev; ///< I2C bus device
-  uint8_t m_bitShift;            ///< bit shift amount
-  adsGain_t m_gain;              ///< ADC gain
-  uint16_t m_dataRate;           ///< Data rate
-
-public:
-  bool begin(uint8_t i2c_addr = ADS1X15_ADDRESS, TwoWire *wire = &Wire);
-  int16_t readADC_SingleEnded(uint8_t channel);
-  int16_t readADC_Differential_0_1();
-  int16_t readADC_Differential_0_3();
-  int16_t readADC_Differential_1_3();
-  int16_t readADC_Differential_2_3();
-  void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
-  int16_t getLastConversionResults();
-  float computeVolts(int16_t counts);
-  void setGain(adsGain_t gain);
-  adsGain_t getGain();
-  void setDataRate(uint16_t rate);
-  uint16_t getDataRate();
-
-  void startADCReading(uint16_t mux, bool continuous);
-
-  bool conversionComplete();
-
-private:
-  void writeRegister(uint8_t reg, uint16_t value);
-  uint16_t readRegister(uint8_t reg);
-  uint8_t buffer[3];
-};
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1015 ADC breakout.
-*/
-/**************************************************************************/
-class Adafruit_ADS1015 : public Adafruit_ADS1X15 {
-public:
-  Adafruit_ADS1015();
-};
-
-/**************************************************************************/
-/*!
-    @brief  Sensor driver for the Adafruit ADS1115 ADC breakout.
-*/
-/**************************************************************************/
-class Adafruit_ADS1115 : public Adafruit_ADS1X15 {
-public:
-  Adafruit_ADS1115();
-};
-
-#endif
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/README.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/README.md
deleted file mode 100644
index 9ec2c5c58c6faad9109a6092985f1e4fb8e0b609..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/README.md	
+++ /dev/null
@@ -1,23 +0,0 @@
-# Adafruit_ADS1015 ![Build Status](https://github.com/adafruit/Adafruit_ADS1X15/workflows/Arduino%20Library%20CI/badge.svg)[![Documentation](https://github.com/adafruit/ci-arduino/blob/master/assets/doxygen_badge.svg)](http://adafruit.github.io/Adafruit_ADS1X15/html/index.html)
-
-
-Driver for TI's ADS1X15: 12 and 16-bit Differential or Single-Ended ADC with PGA and Comparator
-
-## Info
-
-This family of ADCs provide 4 single-ended or 2 differential channels.
-Each has a programmable gain amplifier from 2/3 up to 16x. Available
-in 12 or 16 bit versions:
-
-* [ADS1015 12-bit ADC](https://www.adafruit.com/product/1083)
-* [ADS1115 16-bit ADC](https://www.adafruit.com/product/1085)
-
-The chip's fairly small so it comes on a breakout board with ferrites to keep the AVDD and AGND quiet. Interfacing is done via I2C. The address can be changed to one of four options (see the datasheet table 5) so you can have up to 4 ADS1x15's connected on a single 2-wire I2C bus for 16 single ended inputs.
-
-Adafruit invests time and resources providing this open source code, please
-support Adafruit and open-source hardware by purchasing products from
-[Adafruit](https://www.adafruit.com)!
-
-## License
-
- BSD license, all text above must be included in any redistribution.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/comparator/comparator.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/comparator/comparator.ino
deleted file mode 100644
index 33454f6d82fd03db5464dadd37f55663f0f3e043..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/comparator/comparator.ino	
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <Adafruit_ADS1X15.h>
-
-// Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
-Adafruit_ADS1015 ads;     /* Use this for the 12-bit version */
-
-void setup(void)
-{
-  Serial.begin(9600);
-  Serial.println("Hello!");
-
-  Serial.println("Single-ended readings from AIN0 with >3.0V comparator");
-  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
-  Serial.println("Comparator Threshold: 1000 (3.000V)");
-
-  // The ADC input range (or gain) can be changed via the following
-  // functions, but be careful never to exceed VDD +0.3V max, or to
-  // exceed the upper and lower limits if you adjust the input range!
-  // Setting these values incorrectly may destroy your ADC!
-  //                                                                ADS1015  ADS1115
-  //                                                                -------  -------
-  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
-  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
-  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
-  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
-  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
-  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
-
-  if (!ads.begin()) {
-    Serial.println("Failed to initialize ADS.");
-    while (1);
-  }
-  // Setup 3V comparator on channel 0
-  ads.startComparator_SingleEnded(0, 1000);
-}
-
-void loop(void)
-{
-  int16_t adc0;
-
-  // Comparator will only de-assert after a read
-  adc0 = ads.getLastConversionResults();
-  Serial.print("AIN0: "); Serial.println(adc0);
-
-  delay(100);
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/continuous/continuous.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/continuous/continuous.ino
deleted file mode 100644
index ee60140b710cb1344382f870b176bcc543dcc1a1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/continuous/continuous.ino	
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <Adafruit_ADS1X15.h>
-
-// Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
-Adafruit_ADS1015 ads;     /* Use this for the 12-bit version */
-
-// Pin connected to the ALERT/RDY signal for new sample notification.
-constexpr int READY_PIN = 3;
-
-// This is required on ESP32 to put the ISR in IRAM. Define as
-// empty for other platforms. Be careful - other platforms may have
-// other requirements.
-#ifndef IRAM_ATTR
-#define IRAM_ATTR
-#endif
-
-volatile bool new_data = false;
-void IRAM_ATTR NewDataReadyISR() {
-  new_data = true;
-}
-
-void setup(void)
-{
-  Serial.begin(9600);
-  Serial.println("Hello!");
-
-  Serial.println("Getting differential reading from AIN0 (P) and AIN1 (N)");
-  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
-
-  // The ADC input range (or gain) can be changed via the following
-  // functions, but be careful never to exceed VDD +0.3V max, or to
-  // exceed the upper and lower limits if you adjust the input range!
-  // Setting these values incorrectly may destroy your ADC!
-  //                                                                ADS1015  ADS1115
-  //                                                                -------  -------
-  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
-  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
-  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
-  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
-  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
-  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
-
-  if (!ads.begin()) {
-    Serial.println("Failed to initialize ADS.");
-    while (1);
-  }
-
-  pinMode(READY_PIN, INPUT);
-  // We get a falling edge every time a new sample is ready.
-  attachInterrupt(digitalPinToInterrupt(READY_PIN), NewDataReadyISR, FALLING);
-
-  // Start continuous conversions.
-  ads.startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_1, /*continuous=*/true);
-}
-
-void loop(void)
-{
-  // If we don't have new data, skip this iteration.
-  if (!new_data) {
-    return;
-  }
-
-  int16_t results = ads.getLastConversionResults();
-
-  Serial.print("Differential: "); Serial.print(results); Serial.print("("); Serial.print(ads.computeVolts(results)); Serial.println("mV)");
-
-  new_data = false;
-
-  // In a real application we probably don't want to do a delay here if we are doing interrupt-based sampling, but we have a delay
-  // in this example to avoid writing too much data to the serial port.
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/differential/differential.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/differential/differential.ino
deleted file mode 100644
index 1e3ce5b77e00e0fd73840d83a1013ea3eaa3ec63..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/differential/differential.ino	
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <Adafruit_ADS1X15.h>
-
-// Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
-Adafruit_ADS1015 ads;     /* Use this for the 12-bit version */
-
-void setup(void)
-{
-  Serial.begin(9600);
-  Serial.println("Hello!");
-
-  Serial.println("Getting differential reading from AIN0 (P) and AIN1 (N)");
-  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
-
-  // The ADC input range (or gain) can be changed via the following
-  // functions, but be careful never to exceed VDD +0.3V max, or to
-  // exceed the upper and lower limits if you adjust the input range!
-  // Setting these values incorrectly may destroy your ADC!
-  //                                                                ADS1015  ADS1115
-  //                                                                -------  -------
-  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
-  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
-  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
-  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
-  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
-  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
-
-  if (!ads.begin()) {
-    Serial.println("Failed to initialize ADS.");
-    while (1);
-  }}
-
-void loop(void)
-{
-  int16_t results;
-
-  /* Be sure to update this value based on the IC and the gain settings! */
-  float   multiplier = 3.0F;    /* ADS1015 @ +/- 6.144V gain (12-bit results) */
-  //float multiplier = 0.1875F; /* ADS1115  @ +/- 6.144V gain (16-bit results) */
-
-  results = ads.readADC_Differential_0_1();
-
-  Serial.print("Differential: "); Serial.print(results); Serial.print("("); Serial.print(results * multiplier); Serial.println("mV)");
-
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/nonblocking/nonblocking.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/nonblocking/nonblocking.ino
deleted file mode 100644
index 9d6416df6af34b4f0085c53efaf9f8c508319dff..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/nonblocking/nonblocking.ino	
+++ /dev/null
@@ -1,51 +0,0 @@
-#include <Adafruit_ADS1X15.h>
-
-// Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
-Adafruit_ADS1015 ads;     /* Use this for the 12-bit version */
-
-void setup(void)
-{
-  Serial.begin(9600);
-  Serial.println("Hello!");
-
-  Serial.println("Getting differential reading from AIN0 (P) and AIN1 (N)");
-  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
-
-  // The ADC input range (or gain) can be changed via the following
-  // functions, but be careful never to exceed VDD +0.3V max, or to
-  // exceed the upper and lower limits if you adjust the input range!
-  // Setting these values incorrectly may destroy your ADC!
-  //                                                                ADS1015  ADS1115
-  //                                                                -------  -------
-  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
-  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
-  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
-  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
-  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
-  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
-
-  if (!ads.begin()) {
-    Serial.println("Failed to initialize ADS.");
-    while (1);
-  }
-
-  // Start the first conversion.
-  ads.startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_1, /*continuous=*/false);
-}
-
-void loop(void)
-{
-  // If we don't have new data, skip this iteration.
-  if (!ads.conversionComplete()) {
-    return;
-  }
-
-  int16_t results = ads.getLastConversionResults();
-
-  Serial.print("Differential: "); Serial.print(results); Serial.print("("); Serial.print(ads.computeVolts(results)); Serial.println("mV)");
-
-  // Start another conversion.
-  ads.startADCReading(ADS1X15_REG_CONFIG_MUX_DIFF_0_1, /*continuous=*/false);
-
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/singleended/singleended.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/singleended/singleended.ino
deleted file mode 100644
index 296f4f699b405e5fc73a07a8cae2afcbedb24e33..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/examples/singleended/singleended.ino	
+++ /dev/null
@@ -1,55 +0,0 @@
-#include <Adafruit_ADS1X15.h>
-
-//Adafruit_ADS1115 ads;  /* Use this for the 16-bit version */
-Adafruit_ADS1015 ads;     /* Use this for the 12-bit version */
-
-void setup(void)
-{
-  Serial.begin(9600);
-  Serial.println("Hello!");
-
-  Serial.println("Getting single-ended readings from AIN0..3");
-  Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");
-
-  // The ADC input range (or gain) can be changed via the following
-  // functions, but be careful never to exceed VDD +0.3V max, or to
-  // exceed the upper and lower limits if you adjust the input range!
-  // Setting these values incorrectly may destroy your ADC!
-  //                                                                ADS1015  ADS1115
-  //                                                                -------  -------
-  // ads.setGain(GAIN_TWOTHIRDS);  // 2/3x gain +/- 6.144V  1 bit = 3mV      0.1875mV (default)
-  // ads.setGain(GAIN_ONE);        // 1x gain   +/- 4.096V  1 bit = 2mV      0.125mV
-  // ads.setGain(GAIN_TWO);        // 2x gain   +/- 2.048V  1 bit = 1mV      0.0625mV
-  // ads.setGain(GAIN_FOUR);       // 4x gain   +/- 1.024V  1 bit = 0.5mV    0.03125mV
-  // ads.setGain(GAIN_EIGHT);      // 8x gain   +/- 0.512V  1 bit = 0.25mV   0.015625mV
-  // ads.setGain(GAIN_SIXTEEN);    // 16x gain  +/- 0.256V  1 bit = 0.125mV  0.0078125mV
-
-  if (!ads.begin()) {
-    Serial.println("Failed to initialize ADS.");
-    while (1);
-  }
-}
-
-void loop(void)
-{
-  int16_t adc0, adc1, adc2, adc3;
-  float volts0, volts1, volts2, volts3;
-
-  adc0 = ads.readADC_SingleEnded(0);
-  adc1 = ads.readADC_SingleEnded(1);
-  adc2 = ads.readADC_SingleEnded(2);
-  adc3 = ads.readADC_SingleEnded(3);
-
-  volts0 = ads.computeVolts(adc0);
-  volts1 = ads.computeVolts(adc1);
-  volts2 = ads.computeVolts(adc2);
-  volts3 = ads.computeVolts(adc3);
-
-  Serial.println("-----------------------------------------------------------");
-  Serial.print("AIN0: "); Serial.print(adc0); Serial.print("  "); Serial.print(volts0); Serial.println("V");
-  Serial.print("AIN1: "); Serial.print(adc1); Serial.print("  "); Serial.print(volts1); Serial.println("V");
-  Serial.print("AIN2: "); Serial.print(adc2); Serial.print("  "); Serial.print(volts2); Serial.println("V");
-  Serial.print("AIN3: "); Serial.print(adc3); Serial.print("  "); Serial.print(volts3); Serial.println("V");
-
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/keywords.txt b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/keywords.txt
deleted file mode 100644
index dccaa45ddcaa98dbc8bdf61e61faf5f2a408eb79..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/keywords.txt	
+++ /dev/null
@@ -1,13 +0,0 @@
-Adafruit_ADS1015	KEYWORD1
-Adafruit_ADS1115	KEYWORD1
-begin	KEYWORD2
-readADC_SingleEnded	KEYWORD2
-readADC_Differential_0_1	KEYWORD2
-readADC_Differential_2_3	KEYWORD2
-startComparator_SingleEnded	KEYWORD2
-getLastConversionResults	KEYWORD2
-computeVolts	KEYWORD2
-setGain	KEYWORD2
-getGain	KEYWORD2
-setDataRate	KEYWORD2
-getDataRate	KEYWORD2
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/library.properties b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/library.properties
deleted file mode 100644
index c5432db83d43518c7d4d38f11a1c219430bf1d20..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/library.properties	
+++ /dev/null
@@ -1,10 +0,0 @@
-name=Adafruit ADS1X15
-version=2.4.0
-author=Adafruit
-maintainer=Adafruit <info@adafruit.com>
-sentence=Arduino library for ADS1015/1115 ADCs.
-paragraph=Arduino library for ADS1015/1115 12/16-bit Differential or Single-Ended ADCs with PGA and Comparator
-category=Signal Input/Output
-url=https://github.com/adafruit/Adafruit_ADS1X15
-architectures=*
-depends=Adafruit BusIO
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/license.txt b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/license.txt
deleted file mode 100644
index f6a0f22b826f7a04b50dc56a09b79f1aac6a4cbe..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15/license.txt	
+++ /dev/null
@@ -1,26 +0,0 @@
-Software License Agreement (BSD License)
-
-Copyright (c) 2012, Adafruit Industries
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-1. Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-3. Neither the name of the copyright holders nor the
-names of its contributors may be used to endorse or promote products
-derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
-EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/ISSUE_TEMPLATE.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/ISSUE_TEMPLATE.md
deleted file mode 100644
index f0e26146fa935ca718cdc141f83555bbd3e0c067..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/ISSUE_TEMPLATE.md	
+++ /dev/null
@@ -1,46 +0,0 @@
-Thank you for opening an issue on an Adafruit Arduino library repository.  To
-improve the speed of resolution please review the following guidelines and
-common troubleshooting steps below before creating the issue:
-
-- **Do not use GitHub issues for troubleshooting projects and issues.**  Instead use
-  the forums at http://forums.adafruit.com to ask questions and troubleshoot why
-  something isn't working as expected.  In many cases the problem is a common issue
-  that you will more quickly receive help from the forum community.  GitHub issues
-  are meant for known defects in the code.  If you don't know if there is a defect
-  in the code then start with troubleshooting on the forum first.
-
-- **If following a tutorial or guide be sure you didn't miss a step.** Carefully
-  check all of the steps and commands to run have been followed.  Consult the
-  forum if you're unsure or have questions about steps in a guide/tutorial.
-
-- **For Arduino projects check these very common issues to ensure they don't apply**:
-
-  - For uploading sketches or communicating with the board make sure you're using
-    a **USB data cable** and **not** a **USB charge-only cable**.  It is sometimes
-    very hard to tell the difference between a data and charge cable!  Try using the
-    cable with other devices or swapping to another cable to confirm it is not
-    the problem.
-
-  - **Be sure you are supplying adequate power to the board.**  Check the specs of
-    your board and plug in an external power supply.  In many cases just
-    plugging a board into your computer is not enough to power it and other
-    peripherals.
-
-  - **Double check all soldering joints and connections.**  Flakey connections
-    cause many mysterious problems.  See the [guide to excellent soldering](https://learn.adafruit.com/adafruit-guide-excellent-soldering/tools) for examples of good solder joints.
-
-  - **Ensure you are using an official Arduino or Adafruit board.** We can't
-    guarantee a clone board will have the same functionality and work as expected
-    with this code and don't support them.
-
-If you're sure this issue is a defect in the code and checked the steps above
-please fill in the following fields to provide enough troubleshooting information.
-You may delete the guideline and text above to just leave the following details:
-
-- Arduino board:  **INSERT ARDUINO BOARD NAME/TYPE HERE**
-
-- Arduino IDE version (found in Arduino -> About Arduino menu):  **INSERT ARDUINO
-  VERSION HERE**
-
-- List the steps to reproduce the problem below (if possible attach a sketch or
-  copy the sketch code in too): **LIST REPRO STEPS BELOW**
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/PULL_REQUEST_TEMPLATE.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 7b641eb862c05e126ef698221ffebe8f33ec1a5a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/PULL_REQUEST_TEMPLATE.md	
+++ /dev/null
@@ -1,26 +0,0 @@
-Thank you for creating a pull request to contribute to Adafruit's GitHub code!
-Before you open the request please review the following guidelines and tips to
-help it be more easily integrated:
-
-- **Describe the scope of your change--i.e. what the change does and what parts
-  of the code were modified.**  This will help us understand any risks of integrating
-  the code.
-
-- **Describe any known limitations with your change.**  For example if the change
-  doesn't apply to a supported platform of the library please mention it.
-
-- **Please run any tests or examples that can exercise your modified code.**  We
-  strive to not break users of the code and running tests/examples helps with this
-  process.
-
-Thank you again for contributing!  We will try to test and integrate the change
-as soon as we can, but be aware we have many GitHub repositories to manage and
-can't immediately respond to every request.  There is no need to bump or check in
-on a pull request (it will clutter the discussion of the request).
-
-Also don't be worried if the request is closed or not integrated--sometimes the
-priorities of Adafruit's GitHub code (education, ease of use) might not match the
-priorities of the pull request.  Don't fret, the open source community thrives on
-forks and GitHub makes it easy to keep your changes in a forked repo.
-
-After reviewing the guidelines above you can delete this text from the pull request.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/workflows/githubci.yml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/workflows/githubci.yml
deleted file mode 100644
index 7faea57652975ef5a0dcd9e7696aae0625533236..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.github/workflows/githubci.yml	
+++ /dev/null
@@ -1,33 +0,0 @@
-name: Arduino Library CI
-
-on: [pull_request, push, repository_dispatch]
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    
-    steps:
-    - uses: actions/setup-python@v1
-      with:
-        python-version: '3.x'
-    - uses: actions/checkout@v2
-    - uses: actions/checkout@v2
-      with:
-         repository: adafruit/ci-arduino
-         path: ci
-
-    - name: Install the prerequisites
-      run: bash ci/actions_install.sh
-
-    - name: Check for correct code formatting with clang-format
-      run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .
-
-    - name: Check for correct documentation with doxygen
-      env:
-        GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
-        PRETTYNAME : "Adafruit Bus IO Library"
-      run: bash ci/doxy_gen_and_deploy.sh
-
-    - name: Test the code on supported platforms
-      run: python3 ci/build_platform.py main_platforms zero feather32u4
-
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.piopm b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.piopm
deleted file mode 100644
index 9a154ec216701d2637270acb895c2bb0e1340c8b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/.piopm	
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "Adafruit BusIO", "version": "1.13.2", "spec": {"owner": "adafruit", "id": 6214, "name": "Adafruit BusIO", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_BusIO_Register.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_BusIO_Register.cpp
deleted file mode 100644
index a28193f9e98e391c81ad869fc25872882a5eaf70..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_BusIO_Register.cpp	
+++ /dev/null
@@ -1,365 +0,0 @@
-#include <Adafruit_BusIO_Register.h>
-
-#if !defined(SPI_INTERFACES_COUNT) ||                                          \
-    (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0))
-
-/*!
- *    @brief  Create a register we access over an I2C Device (which defines the
- * bus and address)
- *    @param  i2cdevice The I2CDevice to use for underlying I2C access
- *    @param  reg_addr The address pointer value for the I2C/SMBus register, can
- * be 8 or 16 bits
- *    @param  width    The width of the register data itself, defaults to 1 byte
- *    @param  byteorder The byte order of the register (used when width is > 1),
- * defaults to LSBFIRST
- *    @param  address_width The width of the register address itself, defaults
- * to 1 byte
- */
-Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice,
-                                                 uint16_t reg_addr,
-                                                 uint8_t width,
-                                                 uint8_t byteorder,
-                                                 uint8_t address_width) {
-  _i2cdevice = i2cdevice;
-  _spidevice = nullptr;
-  _addrwidth = address_width;
-  _address = reg_addr;
-  _byteorder = byteorder;
-  _width = width;
-}
-
-/*!
- *    @brief  Create a register we access over an SPI Device (which defines the
- * bus and CS pin)
- *    @param  spidevice The SPIDevice to use for underlying SPI access
- *    @param  reg_addr The address pointer value for the SPI register, can
- * be 8 or 16 bits
- *    @param  type     The method we use to read/write data to SPI (which is not
- * as well defined as I2C)
- *    @param  width    The width of the register data itself, defaults to 1 byte
- *    @param  byteorder The byte order of the register (used when width is > 1),
- * defaults to LSBFIRST
- *    @param  address_width The width of the register address itself, defaults
- * to 1 byte
- */
-Adafruit_BusIO_Register::Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice,
-                                                 uint16_t reg_addr,
-                                                 Adafruit_BusIO_SPIRegType type,
-                                                 uint8_t width,
-                                                 uint8_t byteorder,
-                                                 uint8_t address_width) {
-  _spidevice = spidevice;
-  _spiregtype = type;
-  _i2cdevice = nullptr;
-  _addrwidth = address_width;
-  _address = reg_addr;
-  _byteorder = byteorder;
-  _width = width;
-}
-
-/*!
- *    @brief  Create a register we access over an I2C or SPI Device. This is a
- * handy function because we can pass in nullptr for the unused interface,
- * allowing libraries to mass-define all the registers
- *    @param  i2cdevice The I2CDevice to use for underlying I2C access, if
- * nullptr we use SPI
- *    @param  spidevice The SPIDevice to use for underlying SPI access, if
- * nullptr we use I2C
- *    @param  reg_addr The address pointer value for the I2C/SMBus/SPI register,
- * can be 8 or 16 bits
- *    @param  type     The method we use to read/write data to SPI (which is not
- * as well defined as I2C)
- *    @param  width    The width of the register data itself, defaults to 1 byte
- *    @param  byteorder The byte order of the register (used when width is > 1),
- * defaults to LSBFIRST
- *    @param  address_width The width of the register address itself, defaults
- * to 1 byte
- */
-Adafruit_BusIO_Register::Adafruit_BusIO_Register(
-    Adafruit_I2CDevice *i2cdevice, Adafruit_SPIDevice *spidevice,
-    Adafruit_BusIO_SPIRegType type, uint16_t reg_addr, uint8_t width,
-    uint8_t byteorder, uint8_t address_width) {
-  _spidevice = spidevice;
-  _i2cdevice = i2cdevice;
-  _spiregtype = type;
-  _addrwidth = address_width;
-  _address = reg_addr;
-  _byteorder = byteorder;
-  _width = width;
-}
-
-/*!
- *    @brief  Write a buffer of data to the register location
- *    @param  buffer Pointer to data to write
- *    @param  len Number of bytes to write
- *    @return True on successful write (only really useful for I2C as SPI is
- * uncheckable)
- */
-bool Adafruit_BusIO_Register::write(uint8_t *buffer, uint8_t len) {
-
-  uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF),
-                           (uint8_t)(_address >> 8)};
-
-  if (_i2cdevice) {
-    return _i2cdevice->write(buffer, len, true, addrbuffer, _addrwidth);
-  }
-  if (_spidevice) {
-    if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) {
-      // very special case!
-
-      // pass the special opcode address which we set as the high byte of the
-      // regaddr
-      addrbuffer[0] =
-          (uint8_t)(_address >> 8) & ~0x01; // set bottom bit low to write
-      // the 'actual' reg addr is the second byte then
-      addrbuffer[1] = (uint8_t)(_address & 0xFF);
-      // the address appears to be a byte longer
-      return _spidevice->write(buffer, len, addrbuffer, _addrwidth + 1);
-    }
-
-    if (_spiregtype == ADDRBIT8_HIGH_TOREAD) {
-      addrbuffer[0] &= ~0x80;
-    }
-    if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) {
-      addrbuffer[0] |= 0x80;
-    }
-    if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) {
-      addrbuffer[0] &= ~0x80;
-      addrbuffer[0] |= 0x40;
-    }
-    return _spidevice->write(buffer, len, addrbuffer, _addrwidth);
-  }
-  return false;
-}
-
-/*!
- *    @brief  Write up to 4 bytes of data to the register location
- *    @param  value Data to write
- *    @param  numbytes How many bytes from 'value' to write
- *    @return True on successful write (only really useful for I2C as SPI is
- * uncheckable)
- */
-bool Adafruit_BusIO_Register::write(uint32_t value, uint8_t numbytes) {
-  if (numbytes == 0) {
-    numbytes = _width;
-  }
-  if (numbytes > 4) {
-    return false;
-  }
-
-  // store a copy
-  _cached = value;
-
-  for (int i = 0; i < numbytes; i++) {
-    if (_byteorder == LSBFIRST) {
-      _buffer[i] = value & 0xFF;
-    } else {
-      _buffer[numbytes - i - 1] = value & 0xFF;
-    }
-    value >>= 8;
-  }
-  return write(_buffer, numbytes);
-}
-
-/*!
- *    @brief  Read data from the register location. This does not do any error
- * checking!
- *    @return Returns 0xFFFFFFFF on failure, value otherwise
- */
-uint32_t Adafruit_BusIO_Register::read(void) {
-  if (!read(_buffer, _width)) {
-    return -1;
-  }
-
-  uint32_t value = 0;
-
-  for (int i = 0; i < _width; i++) {
-    value <<= 8;
-    if (_byteorder == LSBFIRST) {
-      value |= _buffer[_width - i - 1];
-    } else {
-      value |= _buffer[i];
-    }
-  }
-
-  return value;
-}
-
-/*!
- *    @brief  Read cached data from last time we wrote to this register
- *    @return Returns 0xFFFFFFFF on failure, value otherwise
- */
-uint32_t Adafruit_BusIO_Register::readCached(void) { return _cached; }
-
-/*!
- *    @brief  Read a buffer of data from the register location
- *    @param  buffer Pointer to data to read into
- *    @param  len Number of bytes to read
- *    @return True on successful write (only really useful for I2C as SPI is
- * uncheckable)
- */
-bool Adafruit_BusIO_Register::read(uint8_t *buffer, uint8_t len) {
-  uint8_t addrbuffer[2] = {(uint8_t)(_address & 0xFF),
-                           (uint8_t)(_address >> 8)};
-
-  if (_i2cdevice) {
-    return _i2cdevice->write_then_read(addrbuffer, _addrwidth, buffer, len);
-  }
-  if (_spidevice) {
-    if (_spiregtype == ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE) {
-      // very special case!
-
-      // pass the special opcode address which we set as the high byte of the
-      // regaddr
-      addrbuffer[0] =
-          (uint8_t)(_address >> 8) | 0x01; // set bottom bit high to read
-      // the 'actual' reg addr is the second byte then
-      addrbuffer[1] = (uint8_t)(_address & 0xFF);
-      // the address appears to be a byte longer
-      return _spidevice->write_then_read(addrbuffer, _addrwidth + 1, buffer,
-                                         len);
-    }
-    if (_spiregtype == ADDRBIT8_HIGH_TOREAD) {
-      addrbuffer[0] |= 0x80;
-    }
-    if (_spiregtype == ADDRBIT8_HIGH_TOWRITE) {
-      addrbuffer[0] &= ~0x80;
-    }
-    if (_spiregtype == AD8_HIGH_TOREAD_AD7_HIGH_TOINC) {
-      addrbuffer[0] |= 0x80 | 0x40;
-    }
-    return _spidevice->write_then_read(addrbuffer, _addrwidth, buffer, len);
-  }
-  return false;
-}
-
-/*!
- *    @brief  Read 2 bytes of data from the register location
- *    @param  value Pointer to uint16_t variable to read into
- *    @return True on successful write (only really useful for I2C as SPI is
- * uncheckable)
- */
-bool Adafruit_BusIO_Register::read(uint16_t *value) {
-  if (!read(_buffer, 2)) {
-    return false;
-  }
-
-  if (_byteorder == LSBFIRST) {
-    *value = _buffer[1];
-    *value <<= 8;
-    *value |= _buffer[0];
-  } else {
-    *value = _buffer[0];
-    *value <<= 8;
-    *value |= _buffer[1];
-  }
-  return true;
-}
-
-/*!
- *    @brief  Read 1 byte of data from the register location
- *    @param  value Pointer to uint8_t variable to read into
- *    @return True on successful write (only really useful for I2C as SPI is
- * uncheckable)
- */
-bool Adafruit_BusIO_Register::read(uint8_t *value) {
-  if (!read(_buffer, 1)) {
-    return false;
-  }
-
-  *value = _buffer[0];
-  return true;
-}
-
-/*!
- *    @brief  Pretty printer for this register
- *    @param  s The Stream to print to, defaults to &Serial
- */
-void Adafruit_BusIO_Register::print(Stream *s) {
-  uint32_t val = read();
-  s->print("0x");
-  s->print(val, HEX);
-}
-
-/*!
- *    @brief  Pretty printer for this register
- *    @param  s The Stream to print to, defaults to &Serial
- */
-void Adafruit_BusIO_Register::println(Stream *s) {
-  print(s);
-  s->println();
-}
-
-/*!
- *    @brief  Create a slice of the register that we can address without
- * touching other bits
- *    @param  reg The Adafruit_BusIO_Register which defines the bus/register
- *    @param  bits The number of bits wide we are slicing
- *    @param  shift The number of bits that our bit-slice is shifted from LSB
- */
-Adafruit_BusIO_RegisterBits::Adafruit_BusIO_RegisterBits(
-    Adafruit_BusIO_Register *reg, uint8_t bits, uint8_t shift) {
-  _register = reg;
-  _bits = bits;
-  _shift = shift;
-}
-
-/*!
- *    @brief  Read 4 bytes of data from the register
- *    @return  data The 4 bytes to read
- */
-uint32_t Adafruit_BusIO_RegisterBits::read(void) {
-  uint32_t val = _register->read();
-  val >>= _shift;
-  return val & ((1 << (_bits)) - 1);
-}
-
-/*!
- *    @brief  Write 4 bytes of data to the register
- *    @param  data The 4 bytes to write
- *    @return True on successful write (only really useful for I2C as SPI is
- * uncheckable)
- */
-bool Adafruit_BusIO_RegisterBits::write(uint32_t data) {
-  uint32_t val = _register->read();
-
-  // mask off the data before writing
-  uint32_t mask = (1 << (_bits)) - 1;
-  data &= mask;
-
-  mask <<= _shift;
-  val &= ~mask;          // remove the current data at that spot
-  val |= data << _shift; // and add in the new data
-
-  return _register->write(val, _register->width());
-}
-
-/*!
- *    @brief  The width of the register data, helpful for doing calculations
- *    @returns The data width used when initializing the register
- */
-uint8_t Adafruit_BusIO_Register::width(void) { return _width; }
-
-/*!
- *    @brief  Set the default width of data
- *    @param width the default width of data read from register
- */
-void Adafruit_BusIO_Register::setWidth(uint8_t width) { _width = width; }
-
-/*!
- *    @brief  Set register address
- *    @param address the address from register
- */
-void Adafruit_BusIO_Register::setAddress(uint16_t address) {
-  _address = address;
-}
-
-/*!
- *    @brief  Set the width of register address
- *    @param address_width the width for register address
- */
-void Adafruit_BusIO_Register::setAddressWidth(uint16_t address_width) {
-  _addrwidth = address_width;
-}
-
-#endif // SPI exists
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_BusIO_Register.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_BusIO_Register.h
deleted file mode 100644
index c6d58de604ff140b13d308799e3b1d4aa6e41e59..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_BusIO_Register.h	
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef Adafruit_BusIO_Register_h
-#define Adafruit_BusIO_Register_h
-
-#include <Arduino.h>
-
-#if !defined(SPI_INTERFACES_COUNT) ||                                          \
-    (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0))
-
-#include <Adafruit_I2CDevice.h>
-#include <Adafruit_SPIDevice.h>
-
-typedef enum _Adafruit_BusIO_SPIRegType {
-  ADDRBIT8_HIGH_TOREAD = 0,
-  /*!<
-   * ADDRBIT8_HIGH_TOREAD
-   * When reading a register you must actually send the value 0x80 + register
-   * address to the device. e.g. To read the register 0x0B the register value
-   * 0x8B is sent and to write 0x0B is sent.
-   */
-  AD8_HIGH_TOREAD_AD7_HIGH_TOINC = 1,
-
-  /*!<
-   * ADDRBIT8_HIGH_TOWRITE
-   * When writing to a register you must actually send the value 0x80 +
-   * the register address to the device. e.g. To write to the register 0x19 the
-   * register value 0x99 is sent and to read 0x19 is sent.
-   */
-  ADDRBIT8_HIGH_TOWRITE = 2,
-
-  /*!<
-   * ADDRESSED_OPCODE_LOWBIT_TO_WRITE
-   * Used by the MCP23S series, we send 0x40 |'rd with the opcode
-   * Then set the lowest bit to write
-   */
-  ADDRESSED_OPCODE_BIT0_LOW_TO_WRITE = 3,
-
-} Adafruit_BusIO_SPIRegType;
-
-/*!
- * @brief The class which defines a device register (a location to read/write
- * data from)
- */
-class Adafruit_BusIO_Register {
-public:
-  Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice, uint16_t reg_addr,
-                          uint8_t width = 1, uint8_t byteorder = LSBFIRST,
-                          uint8_t address_width = 1);
-
-  Adafruit_BusIO_Register(Adafruit_SPIDevice *spidevice, uint16_t reg_addr,
-                          Adafruit_BusIO_SPIRegType type, uint8_t width = 1,
-                          uint8_t byteorder = LSBFIRST,
-                          uint8_t address_width = 1);
-
-  Adafruit_BusIO_Register(Adafruit_I2CDevice *i2cdevice,
-                          Adafruit_SPIDevice *spidevice,
-                          Adafruit_BusIO_SPIRegType type, uint16_t reg_addr,
-                          uint8_t width = 1, uint8_t byteorder = LSBFIRST,
-                          uint8_t address_width = 1);
-
-  bool read(uint8_t *buffer, uint8_t len);
-  bool read(uint8_t *value);
-  bool read(uint16_t *value);
-  uint32_t read(void);
-  uint32_t readCached(void);
-  bool write(uint8_t *buffer, uint8_t len);
-  bool write(uint32_t value, uint8_t numbytes = 0);
-
-  uint8_t width(void);
-
-  void setWidth(uint8_t width);
-  void setAddress(uint16_t address);
-  void setAddressWidth(uint16_t address_width);
-
-  void print(Stream *s = &Serial);
-  void println(Stream *s = &Serial);
-
-private:
-  Adafruit_I2CDevice *_i2cdevice;
-  Adafruit_SPIDevice *_spidevice;
-  Adafruit_BusIO_SPIRegType _spiregtype;
-  uint16_t _address;
-  uint8_t _width, _addrwidth, _byteorder;
-  uint8_t _buffer[4]; // we won't support anything larger than uint32 for
-                      // non-buffered read
-  uint32_t _cached = 0;
-};
-
-/*!
- * @brief The class which defines a slice of bits from within a device register
- * (a location to read/write data from)
- */
-class Adafruit_BusIO_RegisterBits {
-public:
-  Adafruit_BusIO_RegisterBits(Adafruit_BusIO_Register *reg, uint8_t bits,
-                              uint8_t shift);
-  bool write(uint32_t value);
-  uint32_t read(void);
-
-private:
-  Adafruit_BusIO_Register *_register;
-  uint8_t _bits, _shift;
-};
-
-#endif // SPI exists
-#endif // BusIO_Register_h
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CDevice.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CDevice.cpp
deleted file mode 100644
index 9b518b48212c5a86ccafc273f1cd61cfc7781d5b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CDevice.cpp	
+++ /dev/null
@@ -1,313 +0,0 @@
-#include "Adafruit_I2CDevice.h"
-
-//#define DEBUG_SERIAL Serial
-
-/*!
- *    @brief  Create an I2C device at a given address
- *    @param  addr The 7-bit I2C address for the device
- *    @param  theWire The I2C bus to use, defaults to &Wire
- */
-Adafruit_I2CDevice::Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire) {
-  _addr = addr;
-  _wire = theWire;
-  _begun = false;
-#ifdef ARDUINO_ARCH_SAMD
-  _maxBufferSize = 250; // as defined in Wire.h's RingBuffer
-#elif defined(ESP32)
-  _maxBufferSize = I2C_BUFFER_LENGTH;
-#else
-  _maxBufferSize = 32;
-#endif
-}
-
-/*!
- *    @brief  Initializes and does basic address detection
- *    @param  addr_detect Whether we should attempt to detect the I2C address
- * with a scan. 99% of sensors/devices don't mind but once in a while, they spaz
- * on a scan!
- *    @return True if I2C initialized and a device with the addr found
- */
-bool Adafruit_I2CDevice::begin(bool addr_detect) {
-  _wire->begin();
-  _begun = true;
-
-  if (addr_detect) {
-    return detected();
-  }
-  return true;
-}
-
-/*!
- *    @brief  De-initialize device, turn off the Wire interface
- */
-void Adafruit_I2CDevice::end(void) {
-  // Not all port implement Wire::end(), such as
-  // - ESP8266
-  // - AVR core without WIRE_HAS_END
-  // - ESP32: end() is implemented since 2.0.1 which is latest at the moment.
-  // Temporarily disable for now to give time for user to update.
-#if !(defined(ESP8266) ||                                                      \
-      (defined(ARDUINO_ARCH_AVR) && !defined(WIRE_HAS_END)) ||                 \
-      defined(ARDUINO_ARCH_ESP32))
-  _wire->end();
-  _begun = false;
-#endif
-}
-
-/*!
- *    @brief  Scans I2C for the address - note will give a false-positive
- *    if there's no pullups on I2C
- *    @return True if I2C initialized and a device with the addr found
- */
-bool Adafruit_I2CDevice::detected(void) {
-  // Init I2C if not done yet
-  if (!_begun && !begin()) {
-    return false;
-  }
-
-  // A basic scanner, see if it ACK's
-  _wire->beginTransmission(_addr);
-  if (_wire->endTransmission() == 0) {
-#ifdef DEBUG_SERIAL
-    DEBUG_SERIAL.println(F("Detected"));
-#endif
-    return true;
-  }
-#ifdef DEBUG_SERIAL
-  DEBUG_SERIAL.println(F("Not detected"));
-#endif
-  return false;
-}
-
-/*!
- *    @brief  Write a buffer or two to the I2C device. Cannot be more than
- * maxBufferSize() bytes.
- *    @param  buffer Pointer to buffer of data to write. This is const to
- *            ensure the content of this buffer doesn't change.
- *    @param  len Number of bytes from buffer to write
- *    @param  prefix_buffer Pointer to optional array of data to write before
- * buffer. Cannot be more than maxBufferSize() bytes. This is const to
- *            ensure the content of this buffer doesn't change.
- *    @param  prefix_len Number of bytes from prefix buffer to write
- *    @param  stop Whether to send an I2C STOP signal on write
- *    @return True if write was successful, otherwise false.
- */
-bool Adafruit_I2CDevice::write(const uint8_t *buffer, size_t len, bool stop,
-                               const uint8_t *prefix_buffer,
-                               size_t prefix_len) {
-  if ((len + prefix_len) > maxBufferSize()) {
-    // currently not guaranteed to work if more than 32 bytes!
-    // we will need to find out if some platforms have larger
-    // I2C buffer sizes :/
-#ifdef DEBUG_SERIAL
-    DEBUG_SERIAL.println(F("\tI2CDevice could not write such a large buffer"));
-#endif
-    return false;
-  }
-
-  _wire->beginTransmission(_addr);
-
-  // Write the prefix data (usually an address)
-  if ((prefix_len != 0) && (prefix_buffer != nullptr)) {
-    if (_wire->write(prefix_buffer, prefix_len) != prefix_len) {
-#ifdef DEBUG_SERIAL
-      DEBUG_SERIAL.println(F("\tI2CDevice failed to write"));
-#endif
-      return false;
-    }
-  }
-
-  // Write the data itself
-  if (_wire->write(buffer, len) != len) {
-#ifdef DEBUG_SERIAL
-    DEBUG_SERIAL.println(F("\tI2CDevice failed to write"));
-#endif
-    return false;
-  }
-
-#ifdef DEBUG_SERIAL
-
-  DEBUG_SERIAL.print(F("\tI2CWRITE @ 0x"));
-  DEBUG_SERIAL.print(_addr, HEX);
-  DEBUG_SERIAL.print(F(" :: "));
-  if ((prefix_len != 0) && (prefix_buffer != nullptr)) {
-    for (uint16_t i = 0; i < prefix_len; i++) {
-      DEBUG_SERIAL.print(F("0x"));
-      DEBUG_SERIAL.print(prefix_buffer[i], HEX);
-      DEBUG_SERIAL.print(F(", "));
-    }
-  }
-  for (uint16_t i = 0; i < len; i++) {
-    DEBUG_SERIAL.print(F("0x"));
-    DEBUG_SERIAL.print(buffer[i], HEX);
-    DEBUG_SERIAL.print(F(", "));
-    if (i % 32 == 31) {
-      DEBUG_SERIAL.println();
-    }
-  }
-
-  if (stop) {
-    DEBUG_SERIAL.print("\tSTOP");
-  }
-#endif
-
-  if (_wire->endTransmission(stop) == 0) {
-#ifdef DEBUG_SERIAL
-    DEBUG_SERIAL.println();
-    // DEBUG_SERIAL.println("Sent!");
-#endif
-    return true;
-  } else {
-#ifdef DEBUG_SERIAL
-    DEBUG_SERIAL.println("\tFailed to send!");
-#endif
-    return false;
-  }
-}
-
-/*!
- *    @brief  Read from I2C into a buffer from the I2C device.
- *    Cannot be more than maxBufferSize() bytes.
- *    @param  buffer Pointer to buffer of data to read into
- *    @param  len Number of bytes from buffer to read.
- *    @param  stop Whether to send an I2C STOP signal on read
- *    @return True if read was successful, otherwise false.
- */
-bool Adafruit_I2CDevice::read(uint8_t *buffer, size_t len, bool stop) {
-  size_t pos = 0;
-  while (pos < len) {
-    size_t read_len =
-        ((len - pos) > maxBufferSize()) ? maxBufferSize() : (len - pos);
-    bool read_stop = (pos < (len - read_len)) ? false : stop;
-    if (!_read(buffer + pos, read_len, read_stop))
-      return false;
-    pos += read_len;
-  }
-  return true;
-}
-
-bool Adafruit_I2CDevice::_read(uint8_t *buffer, size_t len, bool stop) {
-#if defined(TinyWireM_h)
-  size_t recv = _wire->requestFrom((uint8_t)_addr, (uint8_t)len);
-#elif defined(ARDUINO_ARCH_MEGAAVR)
-  size_t recv = _wire->requestFrom(_addr, len, stop);
-#else
-  size_t recv = _wire->requestFrom((uint8_t)_addr, (uint8_t)len, (uint8_t)stop);
-#endif
-
-  if (recv != len) {
-    // Not enough data available to fulfill our obligation!
-#ifdef DEBUG_SERIAL
-    DEBUG_SERIAL.print(F("\tI2CDevice did not receive enough data: "));
-    DEBUG_SERIAL.println(recv);
-#endif
-    return false;
-  }
-
-  for (uint16_t i = 0; i < len; i++) {
-    buffer[i] = _wire->read();
-  }
-
-#ifdef DEBUG_SERIAL
-  DEBUG_SERIAL.print(F("\tI2CREAD  @ 0x"));
-  DEBUG_SERIAL.print(_addr, HEX);
-  DEBUG_SERIAL.print(F(" :: "));
-  for (uint16_t i = 0; i < len; i++) {
-    DEBUG_SERIAL.print(F("0x"));
-    DEBUG_SERIAL.print(buffer[i], HEX);
-    DEBUG_SERIAL.print(F(", "));
-    if (len % 32 == 31) {
-      DEBUG_SERIAL.println();
-    }
-  }
-  DEBUG_SERIAL.println();
-#endif
-
-  return true;
-}
-
-/*!
- *    @brief  Write some data, then read some data from I2C into another buffer.
- *    Cannot be more than maxBufferSize() bytes. The buffers can point to
- *    same/overlapping locations.
- *    @param  write_buffer Pointer to buffer of data to write from
- *    @param  write_len Number of bytes from buffer to write.
- *    @param  read_buffer Pointer to buffer of data to read into.
- *    @param  read_len Number of bytes from buffer to read.
- *    @param  stop Whether to send an I2C STOP signal between the write and read
- *    @return True if write & read was successful, otherwise false.
- */
-bool Adafruit_I2CDevice::write_then_read(const uint8_t *write_buffer,
-                                         size_t write_len, uint8_t *read_buffer,
-                                         size_t read_len, bool stop) {
-  if (!write(write_buffer, write_len, stop)) {
-    return false;
-  }
-
-  return read(read_buffer, read_len);
-}
-
-/*!
- *    @brief  Returns the 7-bit address of this device
- *    @return The 7-bit address of this device
- */
-uint8_t Adafruit_I2CDevice::address(void) { return _addr; }
-
-/*!
- *    @brief  Change the I2C clock speed to desired (relies on
- *    underlying Wire support!
- *    @param desiredclk The desired I2C SCL frequency
- *    @return True if this platform supports changing I2C speed.
- *    Not necessarily that the speed was achieved!
- */
-bool Adafruit_I2CDevice::setSpeed(uint32_t desiredclk) {
-#if defined(__AVR_ATmega328__) ||                                              \
-    defined(__AVR_ATmega328P__) // fix arduino core set clock
-  // calculate TWBR correctly
-
-  if ((F_CPU / 18) < desiredclk) {
-#ifdef DEBUG_SERIAL
-    Serial.println(F("I2C.setSpeed too high."));
-#endif
-    return false;
-  }
-  uint32_t atwbr = ((F_CPU / desiredclk) - 16) / 2;
-  if (atwbr > 16320) {
-#ifdef DEBUG_SERIAL
-    Serial.println(F("I2C.setSpeed too low."));
-#endif
-    return false;
-  }
-
-  if (atwbr <= 255) {
-    atwbr /= 1;
-    TWSR = 0x0;
-  } else if (atwbr <= 1020) {
-    atwbr /= 4;
-    TWSR = 0x1;
-  } else if (atwbr <= 4080) {
-    atwbr /= 16;
-    TWSR = 0x2;
-  } else { //  if (atwbr <= 16320)
-    atwbr /= 64;
-    TWSR = 0x3;
-  }
-  TWBR = atwbr;
-
-#ifdef DEBUG_SERIAL
-  Serial.print(F("TWSR prescaler = "));
-  Serial.println(pow(4, TWSR));
-  Serial.print(F("TWBR = "));
-  Serial.println(atwbr);
-#endif
-  return true;
-#elif (ARDUINO >= 157) && !defined(ARDUINO_STM32_FEATHER) &&                   \
-    !defined(TinyWireM_h)
-  _wire->setClock(desiredclk);
-  return true;
-
-#else
-  (void)desiredclk;
-  return false;
-#endif
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CDevice.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CDevice.h
deleted file mode 100644
index 6bda7bae205beb76eb8238a9e52c194c94ba1ed3..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CDevice.h	
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef Adafruit_I2CDevice_h
-#define Adafruit_I2CDevice_h
-
-#include <Arduino.h>
-#include <Wire.h>
-
-///< The class which defines how we will talk to this device over I2C
-class Adafruit_I2CDevice {
-public:
-  Adafruit_I2CDevice(uint8_t addr, TwoWire *theWire = &Wire);
-  uint8_t address(void);
-  bool begin(bool addr_detect = true);
-  void end(void);
-  bool detected(void);
-
-  bool read(uint8_t *buffer, size_t len, bool stop = true);
-  bool write(const uint8_t *buffer, size_t len, bool stop = true,
-             const uint8_t *prefix_buffer = nullptr, size_t prefix_len = 0);
-  bool write_then_read(const uint8_t *write_buffer, size_t write_len,
-                       uint8_t *read_buffer, size_t read_len,
-                       bool stop = false);
-  bool setSpeed(uint32_t desiredclk);
-
-  /*!   @brief  How many bytes we can read in a transaction
-   *    @return The size of the Wire receive/transmit buffer */
-  size_t maxBufferSize() { return _maxBufferSize; }
-
-private:
-  uint8_t _addr;
-  TwoWire *_wire;
-  bool _begun;
-  size_t _maxBufferSize;
-  bool _read(uint8_t *buffer, size_t len, bool stop);
-};
-
-#endif // Adafruit_I2CDevice_h
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CRegister.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CRegister.h
deleted file mode 100644
index 186850fa6b9deacfb7e0da1ddae45e138c4f5ca8..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_I2CRegister.h	
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _ADAFRUIT_I2C_REGISTER_H_
-#define _ADAFRUIT_I2C_REGISTER_H_
-
-#include <Adafruit_BusIO_Register.h>
-#include <Arduino.h>
-
-typedef Adafruit_BusIO_Register Adafruit_I2CRegister;
-typedef Adafruit_BusIO_RegisterBits Adafruit_I2CRegisterBits;
-
-#endif
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_SPIDevice.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_SPIDevice.cpp
deleted file mode 100644
index 44a8f55f059f1d3a10e556fb9af087c559c37eef..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_SPIDevice.cpp	
+++ /dev/null
@@ -1,493 +0,0 @@
-#include "Adafruit_SPIDevice.h"
-
-#if !defined(SPI_INTERFACES_COUNT) ||                                          \
-    (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0))
-
-//#define DEBUG_SERIAL Serial
-
-/*!
- *    @brief  Create an SPI device with the given CS pin and settings
- *    @param  cspin The arduino pin number to use for chip select
- *    @param  freq The SPI clock frequency to use, defaults to 1MHz
- *    @param  dataOrder The SPI data order to use for bits within each byte,
- * defaults to SPI_BITORDER_MSBFIRST
- *    @param  dataMode The SPI mode to use, defaults to SPI_MODE0
- *    @param  theSPI The SPI bus to use, defaults to &theSPI
- */
-Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, uint32_t freq,
-                                       BusIOBitOrder dataOrder,
-                                       uint8_t dataMode, SPIClass *theSPI) {
-  _cs = cspin;
-  _sck = _mosi = _miso = -1;
-  _spi = theSPI;
-  _begun = false;
-  _spiSetting = new SPISettings(freq, dataOrder, dataMode);
-  _freq = freq;
-  _dataOrder = dataOrder;
-  _dataMode = dataMode;
-}
-
-/*!
- *    @brief  Create an SPI device with the given CS pin and settings
- *    @param  cspin The arduino pin number to use for chip select
- *    @param  sckpin The arduino pin number to use for SCK
- *    @param  misopin The arduino pin number to use for MISO, set to -1 if not
- * used
- *    @param  mosipin The arduino pin number to use for MOSI, set to -1 if not
- * used
- *    @param  freq The SPI clock frequency to use, defaults to 1MHz
- *    @param  dataOrder The SPI data order to use for bits within each byte,
- * defaults to SPI_BITORDER_MSBFIRST
- *    @param  dataMode The SPI mode to use, defaults to SPI_MODE0
- */
-Adafruit_SPIDevice::Adafruit_SPIDevice(int8_t cspin, int8_t sckpin,
-                                       int8_t misopin, int8_t mosipin,
-                                       uint32_t freq, BusIOBitOrder dataOrder,
-                                       uint8_t dataMode) {
-  _cs = cspin;
-  _sck = sckpin;
-  _miso = misopin;
-  _mosi = mosipin;
-
-#ifdef BUSIO_USE_FAST_PINIO
-  csPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(cspin));
-  csPinMask = digitalPinToBitMask(cspin);
-  if (mosipin != -1) {
-    mosiPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(mosipin));
-    mosiPinMask = digitalPinToBitMask(mosipin);
-  }
-  if (misopin != -1) {
-    misoPort = (BusIO_PortReg *)portInputRegister(digitalPinToPort(misopin));
-    misoPinMask = digitalPinToBitMask(misopin);
-  }
-  clkPort = (BusIO_PortReg *)portOutputRegister(digitalPinToPort(sckpin));
-  clkPinMask = digitalPinToBitMask(sckpin);
-#endif
-
-  _freq = freq;
-  _dataOrder = dataOrder;
-  _dataMode = dataMode;
-  _begun = false;
-  _spiSetting = new SPISettings(freq, dataOrder, dataMode);
-  _spi = nullptr;
-}
-
-/*!
- *    @brief  Release memory allocated in constructors
- */
-Adafruit_SPIDevice::~Adafruit_SPIDevice() { delete _spiSetting; }
-
-/*!
- *    @brief  Initializes SPI bus and sets CS pin high
- *    @return Always returns true because there's no way to test success of SPI
- * init
- */
-bool Adafruit_SPIDevice::begin(void) {
-  if (_cs != -1) {
-    pinMode(_cs, OUTPUT);
-    digitalWrite(_cs, HIGH);
-  }
-
-  if (_spi) { // hardware SPI
-    _spi->begin();
-  } else {
-    pinMode(_sck, OUTPUT);
-
-    if ((_dataMode == SPI_MODE0) || (_dataMode == SPI_MODE1)) {
-      // idle low on mode 0 and 1
-      digitalWrite(_sck, LOW);
-    } else {
-      // idle high on mode 2 or 3
-      digitalWrite(_sck, HIGH);
-    }
-    if (_mosi != -1) {
-      pinMode(_mosi, OUTPUT);
-      digitalWrite(_mosi, HIGH);
-    }
-    if (_miso != -1) {
-      pinMode(_miso, INPUT);
-    }
-  }
-
-  _begun = true;
-  return true;
-}
-
-/*!
- *    @brief  Transfer (send/receive) a buffer over hard/soft SPI, without
- * transaction management
- *    @param  buffer The buffer to send and receive at the same time
- *    @param  len    The number of bytes to transfer
- */
-void Adafruit_SPIDevice::transfer(uint8_t *buffer, size_t len) {
-  if (_spi) {
-    // hardware SPI is easy
-
-#if defined(SPARK)
-    _spi->transfer(buffer, buffer, len, nullptr);
-#elif defined(STM32)
-    for (size_t i = 0; i < len; i++) {
-      _spi->transfer(buffer[i]);
-    }
-#else
-    _spi->transfer(buffer, len);
-#endif
-    return;
-  }
-
-  uint8_t startbit;
-  if (_dataOrder == SPI_BITORDER_LSBFIRST) {
-    startbit = 0x1;
-  } else {
-    startbit = 0x80;
-  }
-
-  bool towrite, lastmosi = !(buffer[0] & startbit);
-  uint8_t bitdelay_us = (1000000 / _freq) / 2;
-
-  // for softSPI we'll do it by hand
-  for (size_t i = 0; i < len; i++) {
-    // software SPI
-    uint8_t reply = 0;
-    uint8_t send = buffer[i];
-
-    /*
-    Serial.print("\tSending software SPI byte 0x");
-    Serial.print(send, HEX);
-    Serial.print(" -> 0x");
-    */
-
-    // Serial.print(send, HEX);
-    for (uint8_t b = startbit; b != 0;
-         b = (_dataOrder == SPI_BITORDER_LSBFIRST) ? b << 1 : b >> 1) {
-
-      if (bitdelay_us) {
-        delayMicroseconds(bitdelay_us);
-      }
-
-      if (_dataMode == SPI_MODE0 || _dataMode == SPI_MODE2) {
-        towrite = send & b;
-        if ((_mosi != -1) && (lastmosi != towrite)) {
-#ifdef BUSIO_USE_FAST_PINIO
-          if (towrite)
-            *mosiPort |= mosiPinMask;
-          else
-            *mosiPort &= ~mosiPinMask;
-#else
-          digitalWrite(_mosi, towrite);
-#endif
-          lastmosi = towrite;
-        }
-
-#ifdef BUSIO_USE_FAST_PINIO
-        *clkPort |= clkPinMask; // Clock high
-#else
-        digitalWrite(_sck, HIGH);
-#endif
-
-        if (bitdelay_us) {
-          delayMicroseconds(bitdelay_us);
-        }
-
-        if (_miso != -1) {
-#ifdef BUSIO_USE_FAST_PINIO
-          if (*misoPort & misoPinMask) {
-#else
-          if (digitalRead(_miso)) {
-#endif
-            reply |= b;
-          }
-        }
-
-#ifdef BUSIO_USE_FAST_PINIO
-        *clkPort &= ~clkPinMask; // Clock low
-#else
-        digitalWrite(_sck, LOW);
-#endif
-      } else { // if (_dataMode == SPI_MODE1 || _dataMode == SPI_MODE3)
-
-#ifdef BUSIO_USE_FAST_PINIO
-        *clkPort |= clkPinMask; // Clock high
-#else
-        digitalWrite(_sck, HIGH);
-#endif
-
-        if (bitdelay_us) {
-          delayMicroseconds(bitdelay_us);
-        }
-
-        if (_mosi != -1) {
-#ifdef BUSIO_USE_FAST_PINIO
-          if (send & b)
-            *mosiPort |= mosiPinMask;
-          else
-            *mosiPort &= ~mosiPinMask;
-#else
-          digitalWrite(_mosi, send & b);
-#endif
-        }
-
-#ifdef BUSIO_USE_FAST_PINIO
-        *clkPort &= ~clkPinMask; // Clock low
-#else
-        digitalWrite(_sck, LOW);
-#endif
-
-        if (_miso != -1) {
-#ifdef BUSIO_USE_FAST_PINIO
-          if (*misoPort & misoPinMask) {
-#else
-          if (digitalRead(_miso)) {
-#endif
-            reply |= b;
-          }
-        }
-      }
-      if (_miso != -1) {
-        buffer[i] = reply;
-      }
-    }
-  }
-  return;
-}
-
-/*!
- *    @brief  Transfer (send/receive) one byte over hard/soft SPI, without
- * transaction management
- *    @param  send The byte to send
- *    @return The byte received while transmitting
- */
-uint8_t Adafruit_SPIDevice::transfer(uint8_t send) {
-  uint8_t data = send;
-  transfer(&data, 1);
-  return data;
-}
-
-/*!
- *    @brief  Manually begin a transaction (calls beginTransaction if hardware
- * SPI)
- */
-void Adafruit_SPIDevice::beginTransaction(void) {
-  if (_spi) {
-    _spi->beginTransaction(*_spiSetting);
-  }
-}
-
-/*!
- *    @brief  Manually end a transaction (calls endTransaction if hardware SPI)
- */
-void Adafruit_SPIDevice::endTransaction(void) {
-  if (_spi) {
-    _spi->endTransaction();
-  }
-}
-
-/*!
- *    @brief  Assert/Deassert the CS pin if it is defined
- *    @param  value The state the CS is set to
- */
-void Adafruit_SPIDevice::setChipSelect(int value) {
-  if (_cs != -1) {
-    digitalWrite(_cs, value);
-  }
-}
-
-/*!
- *    @brief  Write a buffer or two to the SPI device, with transaction
- * management.
- *    @brief  Manually begin a transaction (calls beginTransaction if hardware
- *            SPI) with asserting the CS pin
- */
-void Adafruit_SPIDevice::beginTransactionWithAssertingCS() {
-  beginTransaction();
-  setChipSelect(LOW);
-}
-
-/*!
- *    @brief  Manually end a transaction (calls endTransaction if hardware SPI)
- *            with deasserting the CS pin
- */
-void Adafruit_SPIDevice::endTransactionWithDeassertingCS() {
-  setChipSelect(HIGH);
-  endTransaction();
-}
-
-/*!
- *    @brief  Write a buffer or two to the SPI device, with transaction
- * management.
- *    @param  buffer Pointer to buffer of data to write
- *    @param  len Number of bytes from buffer to write
- *    @param  prefix_buffer Pointer to optional array of data to write before
- * buffer.
- *    @param  prefix_len Number of bytes from prefix buffer to write
- *    @return Always returns true because there's no way to test success of SPI
- * writes
- */
-bool Adafruit_SPIDevice::write(const uint8_t *buffer, size_t len,
-                               const uint8_t *prefix_buffer,
-                               size_t prefix_len) {
-  beginTransactionWithAssertingCS();
-
-  // do the writing
-#if defined(ARDUINO_ARCH_ESP32)
-  if (_spi) {
-    if (prefix_len > 0) {
-      _spi->transferBytes(prefix_buffer, nullptr, prefix_len);
-    }
-    if (len > 0) {
-      _spi->transferBytes(buffer, nullptr, len);
-    }
-  } else
-#endif
-  {
-    for (size_t i = 0; i < prefix_len; i++) {
-      transfer(prefix_buffer[i]);
-    }
-    for (size_t i = 0; i < len; i++) {
-      transfer(buffer[i]);
-    }
-  }
-  endTransactionWithDeassertingCS();
-
-#ifdef DEBUG_SERIAL
-  DEBUG_SERIAL.print(F("\tSPIDevice Wrote: "));
-  if ((prefix_len != 0) && (prefix_buffer != nullptr)) {
-    for (uint16_t i = 0; i < prefix_len; i++) {
-      DEBUG_SERIAL.print(F("0x"));
-      DEBUG_SERIAL.print(prefix_buffer[i], HEX);
-      DEBUG_SERIAL.print(F(", "));
-    }
-  }
-  for (uint16_t i = 0; i < len; i++) {
-    DEBUG_SERIAL.print(F("0x"));
-    DEBUG_SERIAL.print(buffer[i], HEX);
-    DEBUG_SERIAL.print(F(", "));
-    if (i % 32 == 31) {
-      DEBUG_SERIAL.println();
-    }
-  }
-  DEBUG_SERIAL.println();
-#endif
-
-  return true;
-}
-
-/*!
- *    @brief  Read from SPI into a buffer from the SPI device, with transaction
- * management.
- *    @param  buffer Pointer to buffer of data to read into
- *    @param  len Number of bytes from buffer to read.
- *    @param  sendvalue The 8-bits of data to write when doing the data read,
- * defaults to 0xFF
- *    @return Always returns true because there's no way to test success of SPI
- * writes
- */
-bool Adafruit_SPIDevice::read(uint8_t *buffer, size_t len, uint8_t sendvalue) {
-  memset(buffer, sendvalue, len); // clear out existing buffer
-
-  beginTransactionWithAssertingCS();
-  transfer(buffer, len);
-  endTransactionWithDeassertingCS();
-
-#ifdef DEBUG_SERIAL
-  DEBUG_SERIAL.print(F("\tSPIDevice Read: "));
-  for (uint16_t i = 0; i < len; i++) {
-    DEBUG_SERIAL.print(F("0x"));
-    DEBUG_SERIAL.print(buffer[i], HEX);
-    DEBUG_SERIAL.print(F(", "));
-    if (len % 32 == 31) {
-      DEBUG_SERIAL.println();
-    }
-  }
-  DEBUG_SERIAL.println();
-#endif
-
-  return true;
-}
-
-/*!
- *    @brief  Write some data, then read some data from SPI into another buffer,
- * with transaction management. The buffers can point to same/overlapping
- * locations. This does not transmit-receive at the same time!
- *    @param  write_buffer Pointer to buffer of data to write from
- *    @param  write_len Number of bytes from buffer to write.
- *    @param  read_buffer Pointer to buffer of data to read into.
- *    @param  read_len Number of bytes from buffer to read.
- *    @param  sendvalue The 8-bits of data to write when doing the data read,
- * defaults to 0xFF
- *    @return Always returns true because there's no way to test success of SPI
- * writes
- */
-bool Adafruit_SPIDevice::write_then_read(const uint8_t *write_buffer,
-                                         size_t write_len, uint8_t *read_buffer,
-                                         size_t read_len, uint8_t sendvalue) {
-  beginTransactionWithAssertingCS();
-  // do the writing
-#if defined(ARDUINO_ARCH_ESP32)
-  if (_spi) {
-    if (write_len > 0) {
-      _spi->transferBytes(write_buffer, nullptr, write_len);
-    }
-  } else
-#endif
-  {
-    for (size_t i = 0; i < write_len; i++) {
-      transfer(write_buffer[i]);
-    }
-  }
-
-#ifdef DEBUG_SERIAL
-  DEBUG_SERIAL.print(F("\tSPIDevice Wrote: "));
-  for (uint16_t i = 0; i < write_len; i++) {
-    DEBUG_SERIAL.print(F("0x"));
-    DEBUG_SERIAL.print(write_buffer[i], HEX);
-    DEBUG_SERIAL.print(F(", "));
-    if (write_len % 32 == 31) {
-      DEBUG_SERIAL.println();
-    }
-  }
-  DEBUG_SERIAL.println();
-#endif
-
-  // do the reading
-  for (size_t i = 0; i < read_len; i++) {
-    read_buffer[i] = transfer(sendvalue);
-  }
-
-#ifdef DEBUG_SERIAL
-  DEBUG_SERIAL.print(F("\tSPIDevice Read: "));
-  for (uint16_t i = 0; i < read_len; i++) {
-    DEBUG_SERIAL.print(F("0x"));
-    DEBUG_SERIAL.print(read_buffer[i], HEX);
-    DEBUG_SERIAL.print(F(", "));
-    if (read_len % 32 == 31) {
-      DEBUG_SERIAL.println();
-    }
-  }
-  DEBUG_SERIAL.println();
-#endif
-
-  endTransactionWithDeassertingCS();
-
-  return true;
-}
-
-/*!
- *    @brief  Write some data and read some data at the same time from SPI
- * into the same buffer, with transaction management. This is basicaly a wrapper
- * for transfer() with CS-pin and transaction management. This /does/
- * transmit-receive at the same time!
- *    @param  buffer Pointer to buffer of data to write/read to/from
- *    @param  len Number of bytes from buffer to write/read.
- *    @return Always returns true because there's no way to test success of SPI
- * writes
- */
-bool Adafruit_SPIDevice::write_and_read(uint8_t *buffer, size_t len) {
-  beginTransactionWithAssertingCS();
-  transfer(buffer, len);
-  endTransactionWithDeassertingCS();
-
-  return true;
-}
-
-#endif // SPI exists
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_SPIDevice.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_SPIDevice.h
deleted file mode 100644
index 3a792c73d4868d423595e16fa83ceb1943b55687..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/Adafruit_SPIDevice.h	
+++ /dev/null
@@ -1,123 +0,0 @@
-#ifndef Adafruit_SPIDevice_h
-#define Adafruit_SPIDevice_h
-
-#include <Arduino.h>
-
-#if !defined(SPI_INTERFACES_COUNT) ||                                          \
-    (defined(SPI_INTERFACES_COUNT) && (SPI_INTERFACES_COUNT > 0))
-
-#include <SPI.h>
-
-// some modern SPI definitions don't have BitOrder enum
-#if (defined(__AVR__) && !defined(ARDUINO_ARCH_MEGAAVR)) ||                    \
-    defined(ESP8266) || defined(TEENSYDUINO) || defined(SPARK) ||              \
-    defined(ARDUINO_ARCH_SPRESENSE) || defined(MEGATINYCORE) ||                \
-    defined(DXCORE) || defined(ARDUINO_AVR_ATmega4809) ||                      \
-    defined(ARDUINO_AVR_ATmega4808) || defined(ARDUINO_AVR_ATmega3209) ||      \
-    defined(ARDUINO_AVR_ATmega3208) || defined(ARDUINO_AVR_ATmega1609) ||      \
-    defined(ARDUINO_AVR_ATmega1608) || defined(ARDUINO_AVR_ATmega809) ||       \
-    defined(ARDUINO_AVR_ATmega808) || defined(ARDUINO_ARCH_ARC32)
-
-typedef enum _BitOrder {
-  SPI_BITORDER_MSBFIRST = MSBFIRST,
-  SPI_BITORDER_LSBFIRST = LSBFIRST,
-} BusIOBitOrder;
-
-#elif defined(ESP32) || defined(__ASR6501__) || defined(__ASR6502__)
-
-// some modern SPI definitions don't have BitOrder enum and have different SPI
-// mode defines
-typedef enum _BitOrder {
-  SPI_BITORDER_MSBFIRST = SPI_MSBFIRST,
-  SPI_BITORDER_LSBFIRST = SPI_LSBFIRST,
-} BusIOBitOrder;
-
-#else
-// Some platforms have a BitOrder enum but its named MSBFIRST/LSBFIRST
-#define SPI_BITORDER_MSBFIRST MSBFIRST
-#define SPI_BITORDER_LSBFIRST LSBFIRST
-typedef BitOrder BusIOBitOrder;
-#endif
-
-#if defined(__IMXRT1062__) // Teensy 4.x
-// *Warning* I disabled the usage of FAST_PINIO as the set/clear operations
-// used in the cpp file are not atomic and can effect multiple IO pins
-// and if an interrupt happens in between the time the code reads the register
-//  and writes out the updated value, that changes one or more other IO pins
-// on that same IO port, those change will be clobbered when the updated
-// values are written back.  A fast version can be implemented that uses the
-// ports set and clear registers which are atomic.
-// typedef volatile uint32_t BusIO_PortReg;
-// typedef uint32_t BusIO_PortMask;
-//#define BUSIO_USE_FAST_PINIO
-
-#elif defined(__AVR__) || defined(TEENSYDUINO)
-typedef volatile uint8_t BusIO_PortReg;
-typedef uint8_t BusIO_PortMask;
-#define BUSIO_USE_FAST_PINIO
-
-#elif defined(ESP8266) || defined(ESP32) || defined(__SAM3X8E__) ||            \
-    defined(ARDUINO_ARCH_SAMD)
-typedef volatile uint32_t BusIO_PortReg;
-typedef uint32_t BusIO_PortMask;
-#define BUSIO_USE_FAST_PINIO
-
-#elif (defined(__arm__) || defined(ARDUINO_FEATHER52)) &&                      \
-    !defined(ARDUINO_ARCH_MBED) && !defined(ARDUINO_ARCH_RP2040)
-typedef volatile uint32_t BusIO_PortReg;
-typedef uint32_t BusIO_PortMask;
-#if !defined(__ASR6501__) && !defined(__ASR6502__)
-#define BUSIO_USE_FAST_PINIO
-#endif
-
-#else
-#undef BUSIO_USE_FAST_PINIO
-#endif
-
-/**! The class which defines how we will talk to this device over SPI **/
-class Adafruit_SPIDevice {
-public:
-  Adafruit_SPIDevice(int8_t cspin, uint32_t freq = 1000000,
-                     BusIOBitOrder dataOrder = SPI_BITORDER_MSBFIRST,
-                     uint8_t dataMode = SPI_MODE0, SPIClass *theSPI = &SPI);
-
-  Adafruit_SPIDevice(int8_t cspin, int8_t sck, int8_t miso, int8_t mosi,
-                     uint32_t freq = 1000000,
-                     BusIOBitOrder dataOrder = SPI_BITORDER_MSBFIRST,
-                     uint8_t dataMode = SPI_MODE0);
-  ~Adafruit_SPIDevice();
-
-  bool begin(void);
-  bool read(uint8_t *buffer, size_t len, uint8_t sendvalue = 0xFF);
-  bool write(const uint8_t *buffer, size_t len,
-             const uint8_t *prefix_buffer = nullptr, size_t prefix_len = 0);
-  bool write_then_read(const uint8_t *write_buffer, size_t write_len,
-                       uint8_t *read_buffer, size_t read_len,
-                       uint8_t sendvalue = 0xFF);
-  bool write_and_read(uint8_t *buffer, size_t len);
-
-  uint8_t transfer(uint8_t send);
-  void transfer(uint8_t *buffer, size_t len);
-  void beginTransaction(void);
-  void endTransaction(void);
-  void beginTransactionWithAssertingCS();
-  void endTransactionWithDeassertingCS();
-
-private:
-  SPIClass *_spi;
-  SPISettings *_spiSetting;
-  uint32_t _freq;
-  BusIOBitOrder _dataOrder;
-  uint8_t _dataMode;
-  void setChipSelect(int value);
-
-  int8_t _cs, _sck, _mosi, _miso;
-#ifdef BUSIO_USE_FAST_PINIO
-  BusIO_PortReg *mosiPort, *clkPort, *misoPort, *csPort;
-  BusIO_PortMask mosiPinMask, misoPinMask, clkPinMask, csPinMask;
-#endif
-  bool _begun;
-};
-
-#endif // has SPI defined
-#endif // Adafruit_SPIDevice_h
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/CMakeLists.txt b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/CMakeLists.txt
deleted file mode 100644
index 880b1aa998a2f39655cec1859aae13f854917257..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/CMakeLists.txt	
+++ /dev/null
@@ -1,11 +0,0 @@
-# Adafruit Bus IO Library
-# https://github.com/adafruit/Adafruit_BusIO
-# MIT License
-
-cmake_minimum_required(VERSION 3.5)
-
-idf_component_register(SRCS "Adafruit_I2CDevice.cpp" "Adafruit_BusIO_Register.cpp" "Adafruit_SPIDevice.cpp" 
-                       INCLUDE_DIRS "."
-                       REQUIRES arduino)
-
-project(Adafruit_BusIO)
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/LICENSE b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/LICENSE
deleted file mode 100644
index 860e3e28540ab79351cb14665f2078379596a094..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/LICENSE	
+++ /dev/null
@@ -1,21 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2017 Adafruit Industries
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/README.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/README.md
deleted file mode 100644
index 1cc06a1565d8e2eca8947261ca640cb10aa64dd4..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/README.md	
+++ /dev/null
@@ -1,8 +0,0 @@
-# Adafruit Bus IO Library [![Build Status](https://github.com/adafruit/Adafruit_BusIO/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_BusIO/actions)
-
-
-This is a helper library to abstract away I2C & SPI transactions and registers
-
-Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit!
-
-MIT license, all text above must be included in any redistribution
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/component.mk b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/component.mk
deleted file mode 100644
index 049f190ee76624ce8a82031110de179f8bca4e6b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/component.mk	
+++ /dev/null
@@ -1 +0,0 @@
-COMPONENT_ADD_INCLUDEDIRS = .
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_address_detect/i2c_address_detect.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_address_detect/i2c_address_detect.ino
deleted file mode 100644
index b1505254e867dbcd62000d17967b9ef12ca517cf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_address_detect/i2c_address_detect.ino	
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <Adafruit_I2CDevice.h>
-
-Adafruit_I2CDevice i2c_dev = Adafruit_I2CDevice(0x10);
-
-void setup() {
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("I2C address detection test");
-
-  if (!i2c_dev.begin()) {
-    Serial.print("Did not find device at 0x");
-    Serial.println(i2c_dev.address(), HEX);
-    while (1);
-  }
-  Serial.print("Device found on address 0x");
-  Serial.println(i2c_dev.address(), HEX);
-}
-
-void loop() {
-  
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_readwrite/i2c_readwrite.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_readwrite/i2c_readwrite.ino
deleted file mode 100644
index 909cf311898fef882e5e119c7da3586d05bd105b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_readwrite/i2c_readwrite.ino	
+++ /dev/null
@@ -1,41 +0,0 @@
-#include <Adafruit_I2CDevice.h>
-
-#define I2C_ADDRESS 0x60
-Adafruit_I2CDevice i2c_dev = Adafruit_I2CDevice(I2C_ADDRESS);
-
-
-void setup() {
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("I2C device read and write test");
-
-  if (!i2c_dev.begin()) {
-    Serial.print("Did not find device at 0x");
-    Serial.println(i2c_dev.address(), HEX);
-    while (1);
-  }
-  Serial.print("Device found on address 0x");
-  Serial.println(i2c_dev.address(), HEX);
-
-  uint8_t buffer[32];
-  // Try to read 32 bytes
-  i2c_dev.read(buffer, 32);
-  Serial.print("Read: ");
-  for (uint8_t i=0; i<32; i++) {
-    Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", ");
-  }
-  Serial.println();
-
-  // read a register by writing first, then reading
-  buffer[0] = 0x0C;  // we'll reuse the same buffer
-  i2c_dev.write_then_read(buffer, 1, buffer, 2, false);
-  Serial.print("Write then Read: ");
-  for (uint8_t i=0; i<2; i++) {
-    Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", ");
-  }
-  Serial.println();
-}
-
-void loop() {
-  
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_registers/i2c_registers.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_registers/i2c_registers.ino
deleted file mode 100644
index 41a30436e9f3b5087760e09edfcdcbbc83928230..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2c_registers/i2c_registers.ino	
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <Adafruit_I2CDevice.h>
-#include <Adafruit_BusIO_Register.h>
-
-#define I2C_ADDRESS 0x60
-Adafruit_I2CDevice i2c_dev = Adafruit_I2CDevice(I2C_ADDRESS);
-
-
-void setup() {
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("I2C device register test");
-
-  if (!i2c_dev.begin()) {
-    Serial.print("Did not find device at 0x");
-    Serial.println(i2c_dev.address(), HEX);
-    while (1);
-  }
-  Serial.print("Device found on address 0x");
-  Serial.println(i2c_dev.address(), HEX);
-
-  Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(&i2c_dev, 0x0C, 2, LSBFIRST);
-  uint16_t id;
-  id_reg.read(&id);
-  Serial.print("ID register = 0x"); Serial.println(id, HEX);
-
-  Adafruit_BusIO_Register thresh_reg = Adafruit_BusIO_Register(&i2c_dev, 0x01, 2, LSBFIRST);
-  uint16_t thresh;
-  thresh_reg.read(&thresh);
-  Serial.print("Initial threshold register = 0x"); Serial.println(thresh, HEX);
-
-  thresh_reg.write(~thresh);
-
-  Serial.print("Post threshold register = 0x"); Serial.println(thresh_reg.read(), HEX);
-}
-
-void loop() {
-  
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2corspi_register/i2corspi_register.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2corspi_register/i2corspi_register.ino
deleted file mode 100644
index 992a2e0046673a74b6cc15ec0ca50db58b2a3093..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/i2corspi_register/i2corspi_register.ino	
+++ /dev/null
@@ -1,38 +0,0 @@
-#include <Adafruit_BusIO_Register.h>
-
-// Define which interface to use by setting the unused interface to NULL!
-
-#define SPIDEVICE_CS 10
-Adafruit_SPIDevice *spi_dev = NULL; // new Adafruit_SPIDevice(SPIDEVICE_CS);
-
-#define I2C_ADDRESS 0x5D
-Adafruit_I2CDevice *i2c_dev = new Adafruit_I2CDevice(I2C_ADDRESS);
-
-void setup() {
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("I2C or SPI device register test");
-
-  if (spi_dev && !spi_dev->begin()) {
-    Serial.println("Could not initialize SPI device");
-  }
-
-  if (i2c_dev) {
-    if (i2c_dev->begin()) {
-      Serial.print("Device found on I2C address 0x");
-      Serial.println(i2c_dev->address(), HEX);
-    } else {
-      Serial.print("Did not find I2C device at 0x");
-      Serial.println(i2c_dev->address(), HEX);
-    }
-  }
-
-  Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(i2c_dev, spi_dev, ADDRBIT8_HIGH_TOREAD, 0x0F);
-  uint8_t id=0;
-  id_reg.read(&id);
-  Serial.print("ID register = 0x"); Serial.println(id, HEX);
-}
-
-void loop() {
-  
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_modetest/spi_modetest.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_modetest/spi_modetest.ino
deleted file mode 100644
index 10168c5ff00f22ee0c7e9e8e9f53437f6c384941..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_modetest/spi_modetest.ino	
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <Adafruit_SPIDevice.h>
-
-#define SPIDEVICE_CS 10
-Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS, 100000, SPI_BITORDER_MSBFIRST, SPI_MODE1);
-//Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS, 13, 12, 11, 100000, SPI_BITORDER_MSBFIRST, SPI_MODE1);
-
-
-void setup() {
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("SPI device mode test");
-
-  if (!spi_dev.begin()) {
-    Serial.println("Could not initialize SPI device");
-    while (1);
-  }
-}
-
-void loop() {
-  Serial.println("\n\nTransfer test");
-  for (uint16_t x=0; x<=0xFF; x++) {
-    uint8_t i = x;   
-    Serial.print("0x"); Serial.print(i, HEX); 
-    spi_dev.read(&i, 1, i);
-    Serial.print("/"); Serial.print(i, HEX);
-    Serial.print(", ");
-    delay(25);
-  }
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_readwrite/spi_readwrite.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_readwrite/spi_readwrite.ino
deleted file mode 100644
index 6f2c063f08fcfcddc9c8b4e26fe5fde9a52f920c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_readwrite/spi_readwrite.ino	
+++ /dev/null
@@ -1,39 +0,0 @@
-#include <Adafruit_SPIDevice.h>
-
-#define SPIDEVICE_CS 10
-Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS);
-
-
-void setup() {
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("SPI device read and write test");
-
-  if (!spi_dev.begin()) {
-    Serial.println("Could not initialize SPI device");
-    while (1);
-  }
-
-  uint8_t buffer[32];
-
-  // Try to read 32 bytes
-  spi_dev.read(buffer, 32);
-  Serial.print("Read: ");
-  for (uint8_t i=0; i<32; i++) {
-    Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", ");
-  }
-  Serial.println();
-
-  // read a register by writing first, then reading
-  buffer[0] = 0x8F;  // we'll reuse the same buffer
-  spi_dev.write_then_read(buffer, 1, buffer, 2, false);
-  Serial.print("Write then Read: ");
-  for (uint8_t i=0; i<2; i++) {
-    Serial.print("0x"); Serial.print(buffer[i], HEX); Serial.print(", ");
-  }
-  Serial.println();
-}
-
-void loop() {
-  
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_register_bits/spi_register_bits.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_register_bits/spi_register_bits.ino
deleted file mode 100644
index e70a17b35f1bb30deb41119846b9a7c7013ab44d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_register_bits/spi_register_bits.ino	
+++ /dev/null
@@ -1,192 +0,0 @@
-/*************************************************** 
-
-  This is an example for how to use Adafruit_BusIO_RegisterBits from Adafruit_BusIO library.
-
-  Designed specifically to work with the Adafruit RTD Sensor
-  ----> https://www.adafruit.com/products/3328
-  uisng a MAX31865 RTD-to-Digital Converter
-  ----> https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf
-
-  This sensor uses SPI to communicate, 4 pins are required to  
-  interface.
-  A fifth pin helps to detect when a new conversion is ready.
-
-  Adafruit invests time and resources providing this open source code, 
-  please support Adafruit and open-source hardware by purchasing 
-  products from Adafruit!
-
-  Example written (2020/3) by Andreas Hardtung/AnHard.  
-  BSD license, all text above must be included in any redistribution
- ****************************************************/
-
-#include <Adafruit_BusIO_Register.h>
-#include <Adafruit_SPIDevice.h>
-
-#define MAX31865_SPI_SPEED    (5000000)
-#define MAX31865_SPI_BITORDER (SPI_BITORDER_MSBFIRST)
-#define MAX31865_SPI_MODE     (SPI_MODE1)
-
-#define MAX31865_SPI_CS       (10)
-#define MAX31865_READY_PIN    (2)
-
-
-Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice( MAX31865_SPI_CS, MAX31865_SPI_SPEED, MAX31865_SPI_BITORDER, MAX31865_SPI_MODE, &SPI); // Hardware SPI
-// Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice( MAX31865_SPI_CS, 13, 12, 11, MAX31865_SPI_SPEED, MAX31865_SPI_BITORDER, MAX31865_SPI_MODE); // Software SPI
-
-// MAX31865 chip related *********************************************************************************************
-Adafruit_BusIO_Register     config_reg  = Adafruit_BusIO_Register(&spi_dev, 0x00, ADDRBIT8_HIGH_TOWRITE, 1, MSBFIRST);
-Adafruit_BusIO_RegisterBits   bias_bit  = Adafruit_BusIO_RegisterBits(&config_reg, 1, 7);
-Adafruit_BusIO_RegisterBits   auto_bit  = Adafruit_BusIO_RegisterBits(&config_reg, 1, 6);
-Adafruit_BusIO_RegisterBits   oneS_bit  = Adafruit_BusIO_RegisterBits(&config_reg, 1, 5);
-Adafruit_BusIO_RegisterBits   wire_bit  = Adafruit_BusIO_RegisterBits(&config_reg, 1, 4);
-Adafruit_BusIO_RegisterBits faultT_bits = Adafruit_BusIO_RegisterBits(&config_reg, 2, 2);
-Adafruit_BusIO_RegisterBits faultR_bit  = Adafruit_BusIO_RegisterBits(&config_reg, 1, 1);
-Adafruit_BusIO_RegisterBits fi50hz_bit  = Adafruit_BusIO_RegisterBits(&config_reg, 1, 0);
-
-Adafruit_BusIO_Register     rRatio_reg  = Adafruit_BusIO_Register(&spi_dev, 0x01, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST);
-Adafruit_BusIO_RegisterBits rRatio_bits = Adafruit_BusIO_RegisterBits(&rRatio_reg, 15, 1);
-Adafruit_BusIO_RegisterBits  fault_bit  = Adafruit_BusIO_RegisterBits(&rRatio_reg,  1, 0);
-
-Adafruit_BusIO_Register      maxRratio_reg = Adafruit_BusIO_Register(&spi_dev, 0x03, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST);
-Adafruit_BusIO_RegisterBits maxRratio_bits = Adafruit_BusIO_RegisterBits(&maxRratio_reg, 15, 1);
-
-Adafruit_BusIO_Register      minRratio_reg = Adafruit_BusIO_Register(&spi_dev, 0x05, ADDRBIT8_HIGH_TOWRITE, 2, MSBFIRST);
-Adafruit_BusIO_RegisterBits minRratio_bits = Adafruit_BusIO_RegisterBits(&minRratio_reg, 15, 1);
-
-Adafruit_BusIO_Register                fault_reg = Adafruit_BusIO_Register(&spi_dev, 0x07, ADDRBIT8_HIGH_TOWRITE, 1, MSBFIRST);
-Adafruit_BusIO_RegisterBits range_high_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 7);
-Adafruit_BusIO_RegisterBits  range_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 6);
-Adafruit_BusIO_RegisterBits refin_high_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 5);
-Adafruit_BusIO_RegisterBits  refin_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 4);
-Adafruit_BusIO_RegisterBits  rtdin_low_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 3);
-Adafruit_BusIO_RegisterBits    voltage_fault_bit = Adafruit_BusIO_RegisterBits(&fault_reg, 1, 2);
-
-// Print the details of the configuration register.
-void printConfig( void ) {
-  Serial.print("BIAS: ");         if (bias_bit.read() )   Serial.print("ON");   else Serial.print("OFF");
-  Serial.print(", AUTO: ");       if (auto_bit.read() )   Serial.print("ON");   else Serial.print("OFF");
-  Serial.print(", ONES: ");       if (oneS_bit.read() )   Serial.print("ON");   else Serial.print("OFF");
-  Serial.print(", WIRE: ");       if (wire_bit.read() )   Serial.print("3");    else Serial.print("2/4");
-  Serial.print(", FAULTCLEAR: "); if (faultR_bit.read() ) Serial.print("ON");   else Serial.print("OFF");
-  Serial.print(", ");             if (fi50hz_bit.read() ) Serial.print("50HZ"); else Serial.print("60HZ");
-  Serial.println();
-}
-
-// Check and print faults. Then clear them.
-void checkFaults( void ) {
-  if (fault_bit.read()) {
-    Serial.print("MAX: "); Serial.println(maxRratio_bits.read());
-    Serial.print("VAL: "); Serial.println(   rRatio_bits.read());
-    Serial.print("MIN: "); Serial.println(minRratio_bits.read());
-
-    if (range_high_fault_bit.read() ) Serial.println("Range high fault");
-    if ( range_low_fault_bit.read() ) Serial.println("Range low fault");
-    if (refin_high_fault_bit.read() ) Serial.println("REFIN high fault");
-    if ( refin_low_fault_bit.read() ) Serial.println("REFIN low fault");
-    if ( rtdin_low_fault_bit.read() ) Serial.println("RTDIN low fault");
-    if (   voltage_fault_bit.read() ) Serial.println("Voltage fault");
-
-    faultR_bit.write(1); // clear fault
-  }
-}
-
-void setup() {
-  #if (MAX31865_1_READY_PIN != -1)
-    pinMode(MAX31865_READY_PIN ,INPUT_PULLUP);
-  #endif
-
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("SPI Adafruit_BusIO_RegisterBits test on MAX31865");
-
-  if (!spi_dev.begin()) {
-    Serial.println("Could not initialize SPI device");
-    while (1);
-  }
-
-  // Set up for automode 50Hz. We don't care about selfheating. We want the highest possible sampling rate.
-  auto_bit.write(0);   // Don't switch filtermode while auto_mode is on.
-  fi50hz_bit.write(1); // Set filter to 50Hz mode.
-  faultR_bit.write(1); // Clear faults.
-  bias_bit.write(1);   // In automode we want to have the bias current always on.
-  delay(5);            // Wait until bias current settles down.
-                       // 10.5 time constants of the input RC network is required.
-                       // 10ms worst case for 10kω reference resistor and a 0.1µF capacitor across the RTD inputs.
-                       // Adafruit Module has 0.1µF and only 430/4300ω So here 0.43/4.3ms
-  auto_bit.write(1);   // Now we can set automode. Automatically starting first conversion.
-
-  // Test the READY_PIN
-  #if (defined( MAX31865_READY_PIN ) && (MAX31865_READY_PIN != -1))
-    int i = 0;
-    while (digitalRead(MAX31865_READY_PIN) && i++ <= 100) { delay(1); }
-    if (i >= 100) {
-      Serial.print("ERROR: Max31865 Pin detection does not work. PIN:");
-      Serial.println(MAX31865_READY_PIN);
-    }
-  #else
-    delay(100);
-  #endif
-
-  // Set ratio range.
-  // Setting the temperatures would need some more calculation - not related to Adafruit_BusIO_RegisterBits.
-  uint16_t ratio = rRatio_bits.read();
-  maxRratio_bits.write( (ratio < 0x8fffu-1000u) ? ratio + 1000u : 0x8fffu ); 
-  minRratio_bits.write( (ratio >         1000u) ? ratio - 1000u : 0u      );
-
-  printConfig();
-  checkFaults();
-}
-
-void loop() {
-  #if (defined( MAX31865_READY_PIN ) && (MAX31865_1_READY_PIN != -1))
-    // Is conversion ready?
-    if (!digitalRead(MAX31865_READY_PIN))
-  #else
-    // Warant conversion is ready.
-    delay(21); // 21ms for 50Hz-mode. 19ms in 60Hz-mode.
-  #endif
-    {
-      // Read ratio, calculate temperature, scale, filter and print.
-      Serial.println( rRatio2C( rRatio_bits.read() ) * 100.0f, 0); // Temperature scaled by 100
-      // Check, print, clear faults.
-      checkFaults();
-    }
-
-  // Do something else.
-  //delay(15000);
-}
-
-
-// Module/Sensor related. Here Adafruit PT100 module with a 2_Wire PT100 Class C *****************************
-float rRatio2C(uint16_t ratio) {
-  // A simple linear conversion.
-  const float R0 = 100.0f;
-  const float Rref = 430.0f;
-  const float alphaPT = 0.003850f;
-  const float ADCmax = (1u << 15) - 1.0f;
-  const float rscale = Rref / ADCmax;
-  // Measured temperature in boiling water 101.08°C with factor a = 1 and b = 0. Rref and MAX at about 22±2°C.
-  // Measured temperature in ice/water bath 0.76°C with factor a = 1 and b = 0. Rref and MAX at about 22±2°C.
-  //const float a = 1.0f / (alphaPT * R0);
-  const float a = (100.0f/101.08f) / (alphaPT * R0);
-  //const float b = 0.0f;  // 101.08
-  const float b = -0.76f;  // 100.32 > 101.08
-
-  return filterRing( ((ratio * rscale) - R0) * a + b );
-}
-
-// General purpose *********************************************************************************************
-#define RINGLENGTH 250
-float filterRing( float newVal ) {
-  static float ring[RINGLENGTH] = { 0.0 };
-  static uint8_t ringIndex = 0;
-  static bool ringFull = false;
-
-  if ( ringIndex == RINGLENGTH ) { ringFull = true; ringIndex = 0; }
-  ring[ringIndex] = newVal;
-  uint8_t loopEnd = (ringFull) ? RINGLENGTH : ringIndex + 1;
-  float ringSum = 0.0f;
-  for (uint8_t i = 0;  i < loopEnd; i++) ringSum += ring[i];
-  ringIndex++;
-  return ringSum / loopEnd;
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_registers/spi_registers.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_registers/spi_registers.ino
deleted file mode 100644
index 091a35315babe7cd28b36fe3488ccf4fbec47dd9..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/examples/spi_registers/spi_registers.ino	
+++ /dev/null
@@ -1,34 +0,0 @@
-#include <Adafruit_BusIO_Register.h>
-#include <Adafruit_SPIDevice.h>
-
-#define SPIDEVICE_CS 10
-Adafruit_SPIDevice spi_dev = Adafruit_SPIDevice(SPIDEVICE_CS);
-
-void setup() {
-  while (!Serial) { delay(10); }
-  Serial.begin(115200);
-  Serial.println("SPI device register test");
-
-  if (!spi_dev.begin()) {
-    Serial.println("Could not initialize SPI device");
-    while (1);
-  }
-
-  Adafruit_BusIO_Register id_reg = Adafruit_BusIO_Register(&spi_dev, 0x0F, ADDRBIT8_HIGH_TOREAD);
-  uint8_t id = 0;
-  id_reg.read(&id);
-  Serial.print("ID register = 0x"); Serial.println(id, HEX);
-
-  Adafruit_BusIO_Register thresh_reg = Adafruit_BusIO_Register(&spi_dev, 0x0C, ADDRBIT8_HIGH_TOREAD, 2, LSBFIRST);
-  uint16_t thresh = 0;
-  thresh_reg.read(&thresh);
-  Serial.print("Initial threshold register = 0x"); Serial.println(thresh, HEX);
-
-  thresh_reg.write(~thresh);
-
-  Serial.print("Post threshold register = 0x"); Serial.println(thresh_reg.read(), HEX);
-}
-
-void loop() {
-  
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/library.properties b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/library.properties
deleted file mode 100644
index e2962c0a7e27242638b0bff1d33dd1e5d67c8aba..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO/library.properties	
+++ /dev/null
@@ -1,9 +0,0 @@
-name=Adafruit BusIO
-version=1.13.2
-author=Adafruit
-maintainer=Adafruit <info@adafruit.com>
-sentence=This is a library for abstracting away UART, I2C and SPI interfacing
-paragraph=This is a library for abstracting away UART, I2C and SPI interfacing
-category=Signal Input/Output
-url=https://github.com/adafruit/Adafruit_BusIO
-architectures=*
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/.piopm b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/.piopm
deleted file mode 100644
index 9b85dcedabd1e7fc2f87b13f16ec528b1be28058..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/.piopm
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "INA219_WE", "version": "1.3.1", "spec": {"owner": "wollewald", "id": 7435, "name": "INA219_WE", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/LICENSE b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/LICENSE
deleted file mode 100644
index 3adeb788925bac372c54f94423c424e8c63da16b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 Wolfgang (Wolle) Ewald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/README.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/README.md
deleted file mode 100644
index e41018d5997c320516a12699a91ea823771a92b5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# INA219_WE
-An Arduino library for the INA219 current and power sensor module.
-
-It allows to set various ADC modes, gains and bus voltage ranges. Continuous mode, triggered mode, power down and ADC off mode are supported. Default shunt size is 0.1 ohms, but you can change it. 
-
-You can run the library on an ATtiny, I tested it on the ATtiny85. To do so, you need to also install the TinyWireM library from Adafruit. An example sketch is included. 
-
-I attached a list of public functions and a fritzing scheme for the example sketches.
-
-You find further details here: 
-
-https://wolles-elektronikkiste.de/ina219  (German)
-
-https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous/Continuous.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous/Continuous.ino
deleted file mode 100644
index 5a20f66b6daeac81f26f47bb14105d36526a754c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous/Continuous.ino
+++ /dev/null
@@ -1,114 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module in continuous mode. 
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  Serial.println("INA219 Current Sensor Example Sketch - Continuous");
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous_ATTINY/Continuous_ATTINY.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous_ATTINY/Continuous_ATTINY.ino
deleted file mode 100644
index a74df95aab7f8a51156adcfaa707424707b22e92..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous_ATTINY/Continuous_ATTINY.ino
+++ /dev/null
@@ -1,142 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module with the TinyWireM library:
-* https://github.com/adafruit/TinyWireM
-* This allows you to run the INA219_WE library on an ATtiny85, for example.
-* 
-* For this specific sketch you also need library Tiny4KOLED to display the 
-* measured values on a SSD1306 OLED display:
-* https://github.com/datacute/Tiny4kOLED
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-
-/* !!!! IN ORDER TO USE TinyWireM YOU NEED TO UNCOMMENT #define USE_TINY_WIRE_M_ !!!!
- * !!!! IN ina219_config.h WHICH YOU FIND IN THE INA219_WE/src FOLDER            !!!!                                                       !!!!
- */
-
-#include <TinyWireM.h>
-#include <Tiny4kOLED.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-uint8_t width = 128;
-uint8_t height = 64;
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> define I2C_ADDRESS
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  TinyWireM.begin();
-  oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br);
-  oled.setFont(FONT6X8);
-  oled.clear();
-  oled.on();
-  
-  oled.setCursor(0, 0);
-  if(!ina219.init()){
-     oled.print("INA219 not connected!");
-     while(1){}
-  }
-  else{
-    oled.print("INA219 connected");
-    delay(1000);
-    oled.clear();
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  //loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  //ina219_overflow = ina219.getOverflow();
-
-  oled.setCursor(0,0);
-  oled.print("Current [mA]: ");
-  oled.print(current_mA);
-  oled.clearToEOL();
-  
-  oled.setCursor(0,2); //10
-  oled.print("Power [mW]:   ");
-  oled.print(power_mW);
-  oled.clearToEOL();
-  
-  oled.setCursor(0,4); 
-  oled.print("Bus [V]:      ");
-  oled.print(busVoltage_V);
-  oled.clearToEOL();
-  
-  oled.setCursor(0,6); 
-  oled.print("Shunt [mV]:   ");
-  oled.print(shuntVoltage_mV);
-  oled.clearToEOL();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/PowerDown/PowerDown.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/PowerDown/PowerDown.ino
deleted file mode 100644
index 460c8d2f2c9aa639892e2ca99525b054efed1faf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/PowerDown/PowerDown.ino
+++ /dev/null
@@ -1,81 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 Power Down mode. 
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  // default parameters are set - for change check the other examples
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-  Serial.println("INA219 Current Sensor Example Sketch - PowerDown");
-  Serial.println("Continuous Sampling starts");
-  Serial.println();
-}
-
-void loop() {
-  for(int i=0; i<5; i++){
-    continuousSampling();
-    delay(3000);
-  }
-  
-  Serial.println("Power down for 10s");
-  ina219.powerDown();
-  for(int i=0; i<10; i++){
-    Serial.print(".");
-    delay(1000);
-  }
-  
-  Serial.println("Power up!");
-  Serial.println("");
-  ina219.powerUp();
-}
-
-void continuousSampling(){
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/SetShuntSize/SetShuntSize.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/SetShuntSize/SetShuntSize.ino
deleted file mode 100644
index d50eb558b156d3ea64fdef35a6eaa445b50cecdc..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/SetShuntSize/SetShuntSize.ino
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module with a shunt different than 
-* 0.1 ohms (R100) in continuous mode. 
-* 
-#* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  *   * Mode *          * Res / Samples *     * Conversion Time *
-    BIT_MODE_9        9 Bit Resolution             84 µs
-    BIT_MODE_10       10 Bit Resolution            148 µs  
-    BIT_MODE_11       11 Bit Resolution            276 µs
-    BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-    SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-    SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-    SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-    SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-    SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-    SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-    SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-    POWER_DOWN  - INA219 switched off
-    TRIGGERED   - measurement on demand
-    ADC_OFF     - Analog/Digital Converter switched off
-    CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
- /* Set PGain
-  * Gain *  * Shunt Voltage Range *         * Max Current *
-    PG_40          40 mV               0.4 A * 0.1 / shuntSizeInOhms 
-    PG_80          80 mV               0.8 A * 0.1 / shuntSizeInOhms 
-    PG_160        160 mV               1.6 A * 0.1 / shuntSizeInOhms 
-    PG_320        320 mV               3.2 A * 0.1 / shuntSizeInOhms (DEFAULT)
-  */
- //ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-    BRNG_16   -> 16 V
-    BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current
-
-  /* Set shunt size
-     If you don't use a module with a shunt of 0.1 ohms (R100) you can change set the shunt size 
-     here. 
-  */
-  ina219.setShuntSizeInOhms(0.0333); // Insert your shunt size in ohms
-  
-  Serial.println("INA219 Set Shunt Size"); 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Triggered/Triggered.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Triggered/Triggered.ino
deleted file mode 100644
index 464c9be717b5c786614e1186f0418f045a3dfec8..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Triggered/Triggered.ino
+++ /dev/null
@@ -1,117 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module in triggered mode. 
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-}
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  // ina219.setADCMode(BIT_MODE_12); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  ina219.setMeasureMode(TRIGGERED); // Triggered measurements for this example
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.0); // insert the shunt voltage (millivolts) you detect at zero current
-  
-  Serial.println("INA219 Current Sensor Example Sketch - Triggered Mode");
-
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  ina219.startSingleMeasurement(); // triggers single-shot measurement and waits until completed
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-} 
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/keywords.txt b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/keywords.txt
deleted file mode 100644
index 8501907a73a4af87ecdd72744e4e6cf2cc3e6197..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/keywords.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-#######################################
-# Syntax Coloring Map For INA219_WE
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-INA219_WE	KEYWORD1
-
-# ENUM TYPES
-INA219_ADC_MODE	KEYWORD1
-INA219_MEASURE_MODE	KEYWORD1
-INA219_PGAIN	KEYWORD1
-INA219_BUS_RANGE	KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-reset_INA219	KEYWORD2
-init	KEYWORD2
-setCorrectionFactor	KEYWORD2
-setADCMode	KEYWORD2
-setMeasureMode	KEYWORD2
-setPGain	KEYWORD2
-setBusRange	KEYWORD2
-setShuntSizeInOhms	KEYWORD2
-setShuntVoltOffset_mV	KEYWORD2
-getShuntVoltage_mV	KEYWORD2
-getBusVoltage	KEYWORD2
-getCurrent_mA	KEYWORD2
-getBusPower	KEYWORD2
-getOverflow	KEYWORD2
-startSingleMeasurement	KEYWORD2
-powerDown	KEYWORD2
-powerUp	KEYWORD2
-
-
-#######################################
-# Constants (LITERAL1)
-#######################################
-
-# ENUM VALUES
-BIT_MODE_9	LITERAL1
-BIT_MODE_10	LITERAL1
-BIT_MODE_11	LITERAL1
-BIT_MODE_12	LITERAL1
-SAMPLE_MODE_2	LITERAL1
-SAMPLE_MODE_4	LITERAL1
-SAMPLE_MODE_8	LITERAL1
-SAMPLE_MODE_16	LITERAL1
-SAMPLE_MODE_32	LITERAL1
-SAMPLE_MODE_64	LITERAL1
-SAMPLE_MODE_128	LITERAL1
-POWER_DOWN	LITERAL1
-TRIGGERED	LITERAL1
-ADC_OFF	LITERAL1
-CONTINUOUS	LITERAL1
-CONTINOUS	LITERAL1
-PG_40	LITERAL1
-PG_80	LITERAL1
-PG_160	LITERAL1
-PG_320	LITERAL1
-BRNG_16	LITERAL1
-BRNG_32	LITERAL1
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/library.properties b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/library.properties
deleted file mode 100644
index 2a85da11030afc4fb23a58dc2d0b6f1ee2c34dbb..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/library.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-name=INA219_WE
-version=1.3.1
-author=Wolfgang Ewald <wolfgang.ewald@wolles-elektronikkiste.de>
-maintainer=Wolfgang Ewald <wolfgang.ewald@wolles-elektronikkiste.de>
-sentence=A library for the INA219 current sensor module 
-paragraph=It allows to set various ADC modes, gains and bus voltage ranges. Continous mode, triggered mode, power down and ADC off mode are supported. 
-category=Sensors
-url=https://github.com/wollewald/INA219_WE
-architectures=*
-includes=INA219_WE.h
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.cpp
deleted file mode 100644
index c0f41c0338ef7f15c2a73e4c649a6e6e90ed267e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/*****************************************
-* This is a library for the INA219 Current Sensor Module
-*
-* You'll find an example which should enable you to use the library. 
-*
-* You are free to use it, change it or build on it. In case you like 
-* it, it would be cool if you give it a star.
-* 
-* If you find bugs, please inform me!
-* 
-* Written by Wolfgang (Wolle) Ewald
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* https://wolles-elektronikkiste.de/ina219 (German)
-*
-*******************************************/
-
-#include "INA219_WE.h"
-
-INA219_WE::INA219_WE(int addr){
-#ifndef USE_TINY_WIRE_M_
-    _wire = &Wire;
-#endif
-    i2cAddress = addr;   
-}
-
-INA219_WE::INA219_WE(){
-#ifndef USE_TINY_WIRE_M_
-    _wire = &Wire;
-#endif
-    i2cAddress = 0x40;   
-}
-
-#ifndef USE_TINY_WIRE_M_
-INA219_WE::INA219_WE(TwoWire *w, int addr){
-    _wire = w;
-    i2cAddress = addr; 
-}
-
-INA219_WE::INA219_WE(TwoWire *w){
-    _wire = w;
-    i2cAddress = 0x40;
-}
-#endif
-    
-bool INA219_WE::init(){ 
-    if( !reset_INA219() )
-    {
-        return false;
-    }
-    setADCMode(BIT_MODE_12);
-    setMeasureMode(CONTINUOUS);
-    setPGain(PG_320);
-    setBusRange(BRNG_32);
-    shuntFactor = 1.0;
-    overflow = false;
-    shuntVoltageOffset = 0.0;
-    offsetIsSet = false;
-    
-    return true;
-}
-
-bool INA219_WE::reset_INA219(){
-    byte ack = writeRegister(INA219_CONF_REG, INA219_RST); 
-    return ack == 0;
-}
-
-void INA219_WE::setCorrectionFactor(float corr){
-    calValCorrected = calVal * corr;
-    writeRegister(INA219_CAL_REG, calValCorrected);
-}
-
-void INA219_WE::setShuntVoltOffset_mV(float offs){
-    shuntVoltageOffset = offs;
-    offsetIsSet = true; 
-}
-
-void INA219_WE::setADCMode(INA219_ADC_MODE mode){
-    deviceADCMode = mode;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x0780);  
-    currentConfReg &= ~(0x0078);
-    uint16_t adcMask = mode<<3;
-    currentConfReg |= adcMask;
-    adcMask = mode<<7;
-    currentConfReg |= adcMask;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-}
-
-void INA219_WE::setMeasureMode(INA219_MEASURE_MODE mode){
-    deviceMeasureMode = mode;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x0007);
-    currentConfReg |= deviceMeasureMode;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-}
-
-void INA219_WE::setPGain(INA219_PGAIN gain){
-    devicePGain = gain;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x1800);
-    currentConfReg |= devicePGain;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-    
-    switch(devicePGain){
-        case PG_40:
-            calVal = 20480;
-            currentDivider_mA = 50.0;
-            pwrMultiplier_mW = 0.4;
-            shuntOverflowLimit = 4000;
-            break;
-        case PG_80:
-            calVal = 10240;
-            currentDivider_mA = 25.0;
-            pwrMultiplier_mW = 0.8;
-            shuntOverflowLimit = 8000;
-            break;
-        case PG_160:
-            calVal = 8192;
-            currentDivider_mA = 20.0;
-            pwrMultiplier_mW = 1.0;
-            shuntOverflowLimit = 16000;
-            break;
-        case PG_320:
-            calVal = 4096;
-            currentDivider_mA = 10.0;
-            pwrMultiplier_mW = 2.0;
-            shuntOverflowLimit = 32000;
-            break;
-    }
-    
-    writeRegister(INA219_CAL_REG, calVal);
-            
-}
-
-void INA219_WE::setBusRange(INA219_BUS_RANGE range){
-    deviceBusRange = range;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x2000);
-    currentConfReg |= deviceBusRange;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-}
-
-void INA219_WE::setShuntSizeInOhms(float shuntSize){
-    shuntFactor = shuntSize / 0.1;
-}
-
-float INA219_WE::getShuntVoltage_mV(){
-    int16_t val;
-    val = (int16_t) readRegister(INA219_SHUNT_REG);
-    if((abs(val))== shuntOverflowLimit){
-        overflow = true;
-    }
-    else{
-        overflow = false;
-    }
-    return (val * 0.01);
-}
-
-
-float INA219_WE::getBusVoltage_V(){
-    uint16_t val;
-    val = readRegister(INA219_BUS_REG);
-    val = ((val>>3) * 4);
-    return (val * 0.001);
-}
-
-
-float INA219_WE::getCurrent_mA(){
-    int16_t val;
-    int16_t offsetCurrent = 0;
-    val = (int16_t)readRegister(INA219_CURRENT_REG);
-    if(offsetIsSet){
-        offsetCurrent = (int16_t)(shuntVoltageOffset * 100.0 * calVal / 4096.0);
-    }
-    return ((val - offsetCurrent) / (currentDivider_mA * shuntFactor));
-}
-
-float INA219_WE::getBusPower(){
-    uint16_t val;
-    float busPwr = 0.0;
-    if(offsetIsSet){
-        float current = getCurrent_mA();
-        float busVolt = getBusVoltage_V();
-        busPwr = current * busVolt;   
-    }
-    else{
-        val = readRegister(INA219_PWR_REG);
-        busPwr = val * pwrMultiplier_mW / shuntFactor;
-    }
-    return busPwr;
-}
-
-bool INA219_WE::getOverflow(){
-    uint16_t val;
-    val = readRegister(INA219_BUS_REG);
-    if(val & 1){ 
-        overflow = true;
-    }
-    return overflow;
-}
-
-void INA219_WE::startSingleMeasurement(){
-    uint16_t val = readRegister(INA219_BUS_REG); // clears CNVR (Conversion Ready) Flag
-    val = readRegister(INA219_CONF_REG);
-    writeRegister(INA219_CONF_REG, val);
-    uint16_t convReady = 0x0000;
-    while(!convReady){
-        convReady = ((readRegister(INA219_BUS_REG)) & 0x0002); // checks if sampling is completed
-    }
-}
-
-
-bool INA219_WE::startSingleMeasurement(unsigned long timeout_us){
-    uint16_t val = readRegister(INA219_BUS_REG); // clears CNVR (Conversion Ready) Flag
-    val = readRegister(INA219_CONF_REG);
-    writeRegister(INA219_CONF_REG, val);
-    uint16_t convReady = 0x0000;
-    unsigned long convStart = micros();
-    while(!convReady && (micros() - convStart < timeout_us)){
-        convReady = ((readRegister(INA219_BUS_REG)) & 0x0002); // checks if sampling is completed
-    }
-    if(convReady) {
-        return true;
-    } else {
-        return false;
-    }
-}
-
-void INA219_WE::powerDown(){
-    confRegCopy = readRegister(INA219_CONF_REG);
-    setMeasureMode(POWER_DOWN);
-}
-
-void INA219_WE::powerUp(){
-    writeRegister(INA219_CONF_REG, confRegCopy);
-    delayMicroseconds(40);  
-}   
-
-#ifndef USE_TINY_WIRE_M_
-uint8_t INA219_WE::writeRegister(uint8_t reg, uint16_t val){
-  _wire->beginTransmission(i2cAddress);
-  uint8_t lVal = val & 255;
-  uint8_t hVal = val >> 8;
-  _wire->write(reg);
-  _wire->write(hVal);
-  _wire->write(lVal);
-  return _wire->endTransmission();
-}
-  
-uint16_t INA219_WE::readRegister(uint8_t reg){
-  uint8_t MSByte = 0, LSByte = 0;
-  uint16_t regValue = 0;
-  _wire->beginTransmission(i2cAddress);
-  _wire->write(reg);
-  _wire->endTransmission(false);
-  _wire->requestFrom(i2cAddress,2);
-  if(_wire->available()){
-    MSByte = _wire->read();
-    LSByte = _wire->read();
-  }
-  regValue = (MSByte<<8) + LSByte;
-  return regValue;
-}
-#else
-uint8_t INA219_WE::writeRegister(uint8_t reg, uint16_t val){
-  TinyWireM.beginTransmission(i2cAddress);
-  uint8_t lVal = val & 255;
-  uint8_t hVal = val >> 8;
-  TinyWireM.send(reg);
-  TinyWireM.send(hVal);
-  TinyWireM.send(lVal);
-  return TinyWireM.endTransmission();
-}
-  
-uint16_t INA219_WE::readRegister(uint8_t reg){
-  uint8_t MSByte = 0, LSByte = 0;
-  uint16_t regValue = 0;
-  TinyWireM.beginTransmission(i2cAddress);
-  TinyWireM.send(reg);
-  TinyWireM.endTransmission();
-  TinyWireM.requestFrom(i2cAddress,2);
-  MSByte = TinyWireM.receive();
-  LSByte = TinyWireM.receive();
-  regValue = (MSByte<<8) + LSByte;
-  return regValue;
-}
-#endif
-
-
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.h
deleted file mode 100644
index b4f500a1e3516d71730a140dd376d29a5c044a4a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/******************************************************************************
- *
- * This is a library for the INA219 Current Sensor Module
- *
- * You'll find several example sketches which should enable you to use the library. 
- *
- * You are free to use it, change it or build on it. In case you like it, it would
- * be cool if you give it a star.
- *
- * If you find bugs, please inform me!
- * 
- * Written by Wolfgang (Wolle) Ewald
- * https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
- * https://wolles-elektronikkiste.de/ina219 (German)
- *
- * 
- ******************************************************************************/
-
-#ifndef INA219_WE_H_
-#define INA219_WE_H_
-
-#if (ARDUINO >= 100)
- #include "Arduino.h"
-#else
- #include "WProgram.h"
-#endif
-#include "ina219_config.h"
-
-#ifdef USE_TINY_WIRE_M_
- #include <TinyWireM.h>
-#endif
-#ifndef USE_TINY_WIRE_M_
- #include <Wire.h>
-#endif
-
-/* registers */
-#define INA219_ADDRESS      0x40
-#define INA219_CONF_REG     0x00 //Configuration Register
-#define INA219_SHUNT_REG    0x01 //Shunt Voltage Register
-#define INA219_BUS_REG      0x02 //Bus Voltage Register
-#define INA219_PWR_REG      0x03 //Power Register 
-#define INA219_CURRENT_REG  0x04 //Current flowing through Shunt
-#define INA219_CAL_REG      0x05 //Calibration Register 
-
-/* parameters */
-#define INA219_RST             0x8000
-
-typedef enum INA219_ADC_MODE{
-    BIT_MODE_9      = 0b00000000,   
-    BIT_MODE_10     = 0b00000001,
-    BIT_MODE_11     = 0b00000010,
-    BIT_MODE_12     = 0b00000011,
-    SAMPLE_MODE_2   = 0b00001001,
-    SAMPLE_MODE_4   = 0b00001010,
-    SAMPLE_MODE_8   = 0b00001011,
-    SAMPLE_MODE_16  = 0b00001100,
-    SAMPLE_MODE_32  = 0b00001101,
-    SAMPLE_MODE_64  = 0b00001110,
-    SAMPLE_MODE_128 = 0b00001111
-} ina219AdcMode;
-
-typedef enum INA219_MEASURE_MODE{
-    POWER_DOWN      = 0b00000000,
-    TRIGGERED       = 0b00000011,
-    ADC_OFF         = 0b00000100,
-    CONTINUOUS      = 0b00000111,
-    CONTINOUS       = 0b00000111  // keeping misspelled enum for backwards compatibility.
-} ina219MeasureMode;
-
-typedef enum INA219_PGAIN{
-    PG_40       = 0x0000,
-    PG_80       = 0x0800,
-    PG_160      = 0x1000,
-    PG_320      = 0x1800
-} ina219PGain;
-
-typedef enum INA219_BUS_RANGE{
-    BRNG_16         = 0x0000,
-    BRNG_32         = 0x2000,
-} ina219BusRange;
-
-
-class INA219_WE
-{
-public: 
-    // Constructors: if not passed 0x40 / Wire will be set as address / wire object
-    INA219_WE(int addr);
-    INA219_WE();
-#ifndef USE_TINY_WIRE_M_   
-    INA219_WE(TwoWire *w, int addr);
-    INA219_WE(TwoWire *w);
-#endif
-  
-    bool init();
-    bool reset_INA219();
-    void setCorrectionFactor(float corr);
-    void setShuntVoltOffset_mV(float offs);
-    void setADCMode(INA219_ADC_MODE mode);
-    void setMeasureMode(INA219_MEASURE_MODE mode);
-    void setPGain(INA219_PGAIN gain);
-    void setBusRange(INA219_BUS_RANGE range);
-    void setShuntSizeInOhms(float shuntSize);
-    float getShuntVoltage_mV();
-    float getBusVoltage_V();
-    float getCurrent_mA();
-    float getBusPower();
-    bool getOverflow();
-    void startSingleMeasurement();
-    bool startSingleMeasurement(unsigned long timeout_us);
-    void powerDown();
-    void powerUp(); 
-    uint8_t writeRegister(uint8_t reg, uint16_t val);
-    uint16_t readRegister(uint8_t reg);
-    
-private:
-    INA219_ADC_MODE deviceADCMode;
-    INA219_MEASURE_MODE deviceMeasureMode;
-    INA219_PGAIN devicePGain;
-    INA219_BUS_RANGE deviceBusRange;
-#ifndef USE_TINY_WIRE_M_    
-    TwoWire *_wire;
-#endif
-    int i2cAddress;
-    uint16_t calVal;
-    uint16_t calValCorrected;
-    uint16_t confRegCopy;
-    float shuntVoltageOffset;
-    float shuntFactor; 
-    float currentDivider_mA;
-    float pwrMultiplier_mW;
-    bool overflow;
-    bool offsetIsSet;
-    uint16_t shuntOverflowLimit;
-};
-
-#endif
-
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/ina219_config.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/ina219_config.h
deleted file mode 100644
index edd60ffd7e38b58873fd598ad0839b3efee3d9ef..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/ina219_config.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef INA219_CONFIG_H_
-#define INA219_CONFIG_H_
-/* Uncomment the following line to use TinyWireM instead of Wire */
-//#define USE_TINY_WIRE_M_
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.clang-format b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.clang-format
deleted file mode 100644
index 4984ef2f2726e0597a40f3a14eb37a1eca8d61e9..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.clang-format
+++ /dev/null
@@ -1,109 +0,0 @@
----
-Language: Cpp
-# BasedOnStyle:  Google
-AccessModifierOffset: -1
-AlignAfterOpenBracket: Align
-AlignConsecutiveMacros: false
-AlignConsecutiveAssignments: true
-AlignConsecutiveDeclarations: true
-AlignEscapedNewlines: Left
-AlignOperands: false
-AlignTrailingComments: true
-AllowAllArgumentsOnNextLine: true
-AllowAllConstructorInitializersOnNextLine: true
-AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: true
-AllowShortCaseLabelsOnASingleLine: true
-AllowShortFunctionsOnASingleLine: Empty
-AllowShortLambdasOnASingleLine: All
-AllowShortIfStatementsOnASingleLine: WithoutElse
-AllowShortLoopsOnASingleLine: true
-AlwaysBreakAfterDefinitionReturnType: None
-AlwaysBreakAfterReturnType: None
-AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: Yes
-BinPackArguments: true
-BinPackParameters: true
-BreakBeforeBinaryOperators: None
-BreakBeforeBraces: Attach
-BreakBeforeInheritanceComma: false
-BreakInheritanceList: BeforeColon
-BreakBeforeTernaryOperators: true
-BreakConstructorInitializersBeforeComma: false
-BreakConstructorInitializers: BeforeColon
-BreakAfterJavaFieldAnnotations: false
-BreakStringLiterals: true
-ColumnLimit: 88
-CommentPragmas: "^ IWYU pragma:"
-CompactNamespaces: false
-ConstructorInitializerAllOnOneLineOrOnePerLine: false
-ConstructorInitializerIndentWidth: 2
-ContinuationIndentWidth: 2
-Cpp11BracedListStyle: true
-DerivePointerAlignment: false
-DisableFormat: false
-ExperimentalAutoDetectBinPacking: false
-FixNamespaceComments: true
-ForEachMacros:
-  - foreach
-  - Q_FOREACH
-  - BOOST_FOREACH
-IncludeBlocks: Preserve
-IncludeCategories:
-  - Regex: "TinyGsmClient.h"
-    Priority: -1
-  - Regex: "VariableBase.h"
-    Priority: -1
-  - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
-    Priority: 2
-  - Regex: '^(<|"(gtest|gmock|isl|json)/)'
-    Priority: 3
-  - Regex: ".*"
-    Priority: 1
-IncludeIsMainRegex: "([-_](test|unittest))?$"
-IndentCaseLabels: true
-IndentPPDirectives: None
-IndentWidth: 2
-IndentWrappedFunctionNames: false
-JavaScriptQuotes: Leave
-JavaScriptWrapImports: true
-KeepEmptyLinesAtTheStartOfBlocks: false
-MacroBlockBegin: ""
-MacroBlockEnd: ""
-MaxEmptyLinesToKeep: 2
-NamespaceIndentation: None
-# ObjCBinPackProtocolList: Auto
-ObjCBlockIndentWidth: 2
-ObjCSpaceAfterProperty: false
-ObjCSpaceBeforeProtocolList: true
-PenaltyBreakAssignment: 25
-PenaltyBreakBeforeFirstCallParameter: 19
-PenaltyBreakComment: 300
-PenaltyBreakFirstLessLess: 120
-PenaltyBreakString: 1000
-PenaltyBreakTemplateDeclaration: 10
-PenaltyExcessCharacter: 600
-PenaltyReturnTypeOnItsOwnLine: 50
-PointerAlignment: Left
-PointerBindsToType: true
-ReflowComments: true
-SortIncludes: false
-SortUsingDeclarations: true
-SpaceAfterCStyleCast: false
-SpaceAfterLogicalNot: false
-SpaceAfterTemplateKeyword: true
-SpaceBeforeAssignmentOperators: true
-SpaceBeforeCpp11BracedList: false
-SpaceBeforeCtorInitializerColon: true
-SpaceBeforeInheritanceColon: true
-SpaceBeforeParens: ControlStatements
-SpaceBeforeRangeBasedForLoopColon: true
-SpaceInEmptyParentheses: false
-SpacesBeforeTrailingComments: 2
-SpacesInCStyleCastParentheses: false
-SpacesInParentheses: false
-SpacesInSquareBrackets: false
-Standard: Cpp11
-TabWidth: 2
-UseTab: Never
----
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/FUNDING.yml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/FUNDING.yml
deleted file mode 100644
index 104526e6210848ed2d896918e2e8a472dfcf09e4..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-# These are supported funding model platforms
-custom: ['https://stroudcenter.org/donate/']
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_documentation.yaml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_documentation.yaml
deleted file mode 100644
index 8d7dda9b18d2811c81caee2753d6fae9c2ebb965..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_documentation.yaml
+++ /dev/null
@@ -1,109 +0,0 @@
-name: Build and Publish Documentation
-
-on:
-  # Trigger the workflow on push or pull request,
-  # but only for the main branch
-  push:
-    branches:
-      - master
-  # Also trigger on page_build, as well as release created events
-  page_build:
-  release:
-    types: # This configuration does not affect the page_build event above
-      - created
-
-env:
-  DOXYGEN_VERSION: Release_1_9_1
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    if: "!contains(github.event.head_commit.message, 'ci skip')"
-
-    steps:
-      # check out the Arduino-SDI-12 repo
-      - uses: actions/checkout@v2
-        with:
-          path: code_docs/Arduino-SDI-12
-
-      - name: Restore or Cache pip
-        uses: actions/cache@v2.1.4
-        id: cache_pip
-        with:
-          path: ~/.cache/pip
-          # if requirements.txt hasn't changed, then it will be a "cache hit" and pip will be restored
-          # if requirements.txt HAS changed, it will be a "cache miss" and a new cache of pip will be created if the job completes successfully
-          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
-          restore-keys: ${{ runner.os }}-pip-
-
-      - name: Restore or Cache PlatformIO and Libraries
-        uses: actions/cache@v2.1.4
-        id: cache_pio
-        with:
-          path: ~/.platformio
-          # if nothing in the lock files has changed, then it will be a "cache hit"
-          key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
-
-      - name: Set up Python
-        uses: actions/setup-python@v2
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install PlatformIO
-        run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade platformio
-
-      # Install *all* the dependencies!
-      # We're including the dependencies just so the includes can follow in the doxygen pre-processor
-      - name: Install the dependencies at global level
-        run: |
-          echo "::debug::Installing greygnome/EnableInterrupt"
-          pio lib -g install greygnome/EnableInterrupt
-
-      - name: Update Libraries from Cache
-        run: pio lib -g update
-
-      - name: Install GraphViz (dot)
-        run: sudo apt-get -y install graphviz
-
-      - name: Restore or Cache Doxygen
-        id: cache_doxygen
-        uses: actions/cache@v2.1.4
-        with:
-          path: doxygen-src
-          key: ${{ runner.os }}-doxygen-${{ env.DOXYGEN_VERSION }}
-
-      - name: Clone and build doxygen
-        if: steps.cache_doxygen.outputs.cache-hit != 'true'
-        env:
-          TRAVIS_BUILD_DIR: ${{ github.workspace }}
-        run: |
-          cd ${{ github.workspace }}/code_docs/Arduino-SDI-12/
-          chmod +x continuous_integration/build-install-doxygen.sh
-          sh continuous_integration/build-install-doxygen.sh
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install Pygments and other m.css requirements
-        run: pip3 install jinja2 Pygments beautifulsoup4
-
-      # check out my fork of m.css, for processing Doxygen output
-      - name: Checkout m.css
-        uses: actions/checkout@v2
-        with:
-          # Repository name with owner. For example, actions/checkout
-          repository: SRGDamia1/m.css
-          path: code_docs/m.css
-
-      - name: Generate all the documentation
-        env:
-          TRAVIS_BUILD_DIR: ${{ github.workspace }}
-        run: |
-          cd ${{ github.workspace }}/code_docs/Arduino-SDI-12/
-          chmod +x continuous_integration/generate-documentation.sh
-          sh continuous_integration/generate-documentation.sh
-
-      - name: Deploy to github pages
-        uses: peaceiris/actions-gh-pages@v3
-        with:
-          github_token: ${{ secrets.GITHUB_TOKEN }}
-          publish_dir: ${{ github.workspace }}/code_docs/Arduino-SDI-12Doxygen/m.css
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_examples.yaml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_examples.yaml
deleted file mode 100644
index 870f6a2c0d13af5f3318cd69159105b38a72610f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_examples.yaml
+++ /dev/null
@@ -1,88 +0,0 @@
-name: Build Examples
-
-# Triggers the workflow on push or pull request events
-on: [push, pull_request]
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    if: "!contains(github.event.head_commit.message, 'ci skip')"
-
-    strategy:
-      matrix:
-        example:
-          [
-            examples/a_wild_card/,
-            examples/b_address_change/,
-            examples/c_check_all_addresses/,
-            examples/d_simple_logger/,
-            examples/e_continuous_measurement/,
-            examples/f_basic_data_request/,
-            examples/g_terminal_window/,
-            examples/h_SDI-12_slave_implementation/,
-            examples/i_SDI-12_interface/,
-            examples/j_external_pcint_library/,
-            examples/k_concurrent_logger/,
-          ]
-
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Set variables
-        run: |
-          if [[ -z "${GITHUB_HEAD_REF}" ]]; then
-            echo "::debug::Push to commit ${GITHUB_SHA}"
-            echo "LIBRARY_INSTALL_SOURCE=https://github.com/${GITHUB_REPOSITORY}.git#${GITHUB_SHA}" >> $GITHUB_ENV
-          else
-            echo "::debug::Pull Request from the ${GITHUB_HEAD_REF} branch"
-            echo "LIBRARY_INSTALL_SOURCE=https://github.com/${GITHUB_REPOSITORY}.git#${GITHUB_HEAD_REF}" >> $GITHUB_ENV
-          fi
-
-      - name: Restore or Cache pip
-        uses: actions/cache@v2.1.4
-        with:
-          path: ~/.cache/pip
-          # if requirements.txt hasn't changed, then it will be a "cache hit" and pip will be restored
-          # if requirements.txt HAS changed, it will be a "cache miss" and a new cache of pip will be created if the job completes successfully
-          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
-          restore-keys: ${{ runner.os }}-pip-
-
-      - name: Restore or Cache PlatformIO and Libraries
-        uses: actions/cache@v2.1.4
-        with:
-          path: ~/.platformio
-          # if nothing in the lock files has changed, then it will be a "cache hit" and pip will be restored
-          # otherwise, it will be a "cache miss" and a new cache of libraries will be created if the job completes successfully
-          key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
-
-      - name: Set up Python
-        uses: actions/setup-python@v2
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install PlatformIO
-        run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade platformio
-
-      - name: Run PlatformIO
-        if:  matrix.example != 'examples/j_external_pcint_library/'
-        env:
-          PLATFORMIO_CI_SRC: ${{ matrix.example }}
-        run: |
-          echo "${{ env.LIBRARY_INSTALL_SOURCE }}"
-          pio lib --global install ${{ env.LIBRARY_INSTALL_SOURCE }}
-          pio lib --global install EnableInterrupt
-          platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560 --board=huzzah --board=featheresp32
-          pio lib --global uninstall SDI-12
-
-      - name: Run PlatformIO
-        if: matrix.example == 'examples/j_external_pcint_library/'
-        env:
-          PLATFORMIO_CI_SRC: ${{ matrix.example }}
-          PLATFORMIO_BUILD_FLAGS: -DSDI12_EXTERNAL_PCINT
-        run: |
-          echo "${{ env.LIBRARY_INSTALL_SOURCE }}"
-          pio lib --global install ${{ env.LIBRARY_INSTALL_SOURCE }}
-          pio lib --global install EnableInterrupt
-          platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560
-          pio lib --global uninstall SDI-12
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/changelog_reminder.yaml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/changelog_reminder.yaml
deleted file mode 100644
index 172868bd8cd4b5e5a7d6c7b4f19e6559ab18955e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/changelog_reminder.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-on: pull_request
-name: Changelog Reminder
-jobs:
-  remind:
-    name: Changelog Reminder
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@master
-        with:
-          persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal token
-
-      - name: Changelog Reminder
-        uses: peterjgrainger/action-changelog-reminder@v1.3.0
-        with:
-          changelog_regex: '/ChangeLog\/.*\/*.md'
-          customPrMessage: 'Please add your changes to the change log!'
-        env:
-          GITHUB_TOKEN: ${{ secrets.SARA_PUSH_TOKEN }}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/prepare_release.yaml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/prepare_release.yaml
deleted file mode 100644
index d000dab0a2694a4a9e549efbd422a0bb7ae26b8a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/prepare_release.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-on:
-  push:
-    branches:
-      - master
-    # Sequence of patterns matched against refs/tags
-    paths:
-      - 'VERSION' # Push events when the VERSION file changes
-  workflow_dispatch:
-
-name: Prepare a new release
-
-env:
-  PLATFORMIO_AUTH_TOKEN: ${{ secrets.PLATFORMIO_AUTH_TOKEN }}
-
-jobs:
-  release:
-    name: Prepare a new release
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v2
-
-      - name: Set variables
-        run: |
-          echo "::debug::Get the current version number"
-          VER=$(cat VERSION)
-          echo "VERSION=$VER" >> $GITHUB_ENV
-
-      - name: Restore or Cache pip
-        uses: actions/cache@v2.1.4
-        with:
-          path: ~/.cache/pip
-          # if requirements.txt hasn't changed, then it will be a "cache hit" and pip will be restored
-          # if requirements.txt HAS changed, it will be a "cache miss" and a new cache of pip will be created if the job completes successfully
-          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
-          restore-keys: ${{ runner.os }}-pip-
-
-      - name: Set up Python
-        uses: actions/setup-python@v2
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install PlatformIO
-        run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade platformio
-
-      - name: Get notes
-        id: generate_notes
-        uses: anmarkoulis/commitizen-changelog-reader@master
-        with:
-          # NOTE:  Need to add the refs/tags to work with the generate notes action
-          tag_name: ${{ format('refs/tags/{0}', env.VERSION) }}
-          changelog: ChangeLog.md
-
-      # Create a new release
-      - name: Create Release
-        id: create_release
-        uses: actions/create-release@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          tag_name: ${{ env.VERSION }}
-          release_name: ${{ env.VERSION }}
-          draft: false
-          prerelease: false
-          body: ${{join(fromJson(steps.generate_notes.outputs.notes).notes, '')}}
-
-      # Publish the new release to the pio package manager
-      - name: Publish release to PIO
-        id: publish-pio
-        run: pio package publish
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/verify_library_json.yaml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/verify_library_json.yaml
deleted file mode 100644
index 31fd049702b41d7ca309e137ca3dacecd0fd8131..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/verify_library_json.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: Verify JSON structure for library manifest
-
-# Triggers the workflow on push or pull request events
-on: [push, pull_request]
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    if: "!contains(github.event.head_commit.message, 'ci skip')"
-
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Setup Node.js
-        uses: actions/setup-node@v1.4.4
-
-      - name: Cache Node.js modules
-        uses: actions/cache@v2.1.4
-        with:
-          # npm cache files are stored in `~/.npm` on Linux/macOS
-          path: ~/.npm
-          key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }}
-          restore-keys: |
-            ${{ runner.OS }}-node-
-            ${{ runner.OS }}-
-
-      - name: install jsonlint
-        run: npm install -g jsonlint
-
-      - name: run jsonlint
-        run: jsonlint -q library.json
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.piopm b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.piopm
deleted file mode 100644
index b194a45cd2d4aa3fd4b69146e3ecbff402ccb562..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.piopm
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "SDI-12", "version": "2.1.4", "spec": {"owner": "envirodiy", "id": 1486, "name": "SDI-12", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/ChangeLog.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/ChangeLog.md
deleted file mode 100644
index 272937451a2e18989e757b44b19dd977ffb4ddff..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/ChangeLog.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Changelog
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-****
-
-## v2.1.4 (2021-05-05) [Revert wake delay to 0ms](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.4)
-
-### Possibly breaking changes
-- Reverted the default wake delay to 0ms.
-  - In 92055d377b26fa862c43d1429de1ccbef054af01 this was bumped up to 10ms, which caused problems for several people.
-  - The delay can now also be set using the build flag `-D SDI12_WAKE_DELAY=#`
-
-## v2.1.3 (2021-03-24) [Migrate to GitHub Actions](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.3)
-
-### Improvements
-- Migrate from Travis to GitHub actions
-
-## v2.1.1 (2020-08-20) [Patches for ATTiny](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.1)
-
-### Bug Fixes
-- fixes for the timer and pre-scaler for the ATTiny, courtesy of @gabbas1
-
-## v2.1.0 (2020-07-10) [Library Rename and ESP support](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.0)
-
-[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3939731.svg)](https://doi.org/10.5281/zenodo.3939731)
-
-**To comply with requirements for inclusion in the Arduino IDE, the word Arduino has been removed from the name of this library!**  The repository name is unchanged.
-
-### New Features
-- Adds support for Espressif ESP8266 and ESP32
-- Add option of adding a delay before sending a command to allow the sensor to wake.  Take advantage of this by calling the function ```sendCommand(command, extraWakeTime)```. This may resolve issues with some Campbell sensors that would not previous communicate with this library.  See https://www.envirodiy.org/topic/campbell-scientific-cs-215-sdi-12-communication-issues-w-mayfly/#post-14103
-- Adds Doxygen (Javadoc) style comments to **ALL** members of the library.  The generated documentation is available at https://envirodiy.github.io/Arduino-SDI-12/.
-
-## v1.3.6 (2019-08-29) [Fixed extra compiler warnings](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.6)
-
-### Bug Fixes
-- A very minor update to fix compiler warnings found when using -Wextra in addition to -Wall.
-
-## v1.3.5 (2019-07-01) [Removed SAMD Tone Conflict](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.5)
-
-### Improvements
-- SAMD boards will no longer have a conflict with the Tone functions in the Arduino core. AVR boards will still conflict. If you need to use Tone and SDI-12 together for some reason on an AVR boards, you must use the "delayBase" branch.
-- Examples were also updated and given platformio.ini files.
-
-## v1.3.4 (2019-10-29) [Timer class](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.4)
-
-### Improvements
-- Made the timer changes into a compiled class.
-
-Maintaining interrupt control for SAMD processors as there are no interrupt vectors to be in conflict. Because the pin mode changes from input to output and back, allowing another library to control interrupts doesn't work.
-
-## v1.3.3 (2018-05-11) [Unset prescalers](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.3)
-
-### Improvements
-- Now unsetting timer prescalers and setting the isActive pointer to NULL in both the end and the destructor functions.
-- Also some clean-up of the examples.
-
-## v1.3.1 (2018-04-06) [Added processor timer for greater stability](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.1)
-
-### New Features
-- Changed the incoming data ISR to use a processor timer, this makes the reception more stable, especially when the ISR is controlled by an external library. This also creates some conflicts with other libraries that use Timer2.
-
-### Improvements
-- Made changes to the write functions to use the timer to reduce the amount of time that all system interrupts are off.
-- Forcing all SDI-12 objects to use the same buffer to reduce ram usage.
-
-## v1.1.0 (2018-03-15) [Better integration inside other libraries](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.1.0)
-
-### Improvements
-- Added notes and an empty constructor/populated begin method to allow this library to be more easily called inside of other libraries.
-
-## v1.0.6 (2018-03-09) [Fixed timeout values](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.0.6)
-
-### Bug Fixes
-- Fixes the time-out values for the ParseInt and ParseFloat to be -9999. This was the intended behavior all along, but at some point those functions changed in the stream library and the identically named functions within SDI-12 intended to "hide" the stream functions ceased to be called.
-
-## v1.0.1 (2017-05-16) [Initial Release](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.0.1)
-
-The first "official" release of this interrupt-based SDI-12 library for AVR and SAMD Arduino boards.
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/LICENSE.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/LICENSE.md
deleted file mode 100644
index 6a0ce2abe394e344179ae257a6b7709ecc14fd42..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/LICENSE.md
+++ /dev/null
@@ -1,16 +0,0 @@
-BSD 3-Clause License
-
-Copyright (c) 2013, Stroud Water Research Center (SWRC) and the EnviroDIY Development Team.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/README.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/README.md
deleted file mode 100644
index 724aba55ff2d944c2f371048499900f531b6b17d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/README.md
+++ /dev/null
@@ -1,188 +0,0 @@
-
-[//]: # ( @mainpage SDI-12 for Arduino)
-# SDI-12 for Arduino
-
-[//]: # ( @section mainpage_intro Introduction )
-## Introduction
-
-This is an Arduino library for SDI-12 communication with a wide variety of environmental sensors.
-It provides a general software solution, without requiring any additional hardware, to implement the SDI-12 communication protocol between an Arduino-based data logger and SDI-12-enabled sensors.
-
-[SDI-12](http://www.sdi-12.org/) is an asynchronous, ASCII, serial communications protocol that was developed for intelligent sensory instruments that typically monitor environmental data.
-[Advantages of SDI-12](http://en.wikipedia.org/wiki/SDI-12) include the ability to use a single available data channel for many sensors.
-
-This work is motivated by the [EnviroDIY community](http://envirodiy.org/) vision to create an open source hardware and software stack to deliver near real time environmental data from wireless sensor networks, such as the Arduino-compatible [EnviroDIYâ„¢ Mayfly Data Logger](http://envirodiy.org/mayfly/).
-
-[//]: # ( Start GitHub Only )
-## Documentation
-
-Extensive documentation on the SDI-12 functions and classes is available here:  https://envirodiy.github.io/Arduino-SDI-12/index.html
-
-[//]: # ( End GitHub Only )
-
-[//]: # ( @subsection mainpage_rename Renaming Notice )
-### Renaming Notice
-**As of version 2.0.0 this library was renamed from "Arduino-SDI-12" to simply "SDI-12" to comply with requirements for inclusion in the Arduino.cc's IDE and Library Manager.**
-
-[//]: # ( @tableofcontents )
-
-[//]: # ( Start GitHub Only )
-- [SDI-12 for Arduino](#sdi-12-for-arduino)
-  - [Introduction](#introduction)
-  - [Documentation](#documentation)
-    - [Renaming Notice](#renaming-notice)
-  - [Getting Started](#getting-started)
-  - [Origins and Inherited Limitations](#origins-and-inherited-limitations)
-  - [Compatibility Considerations](#compatibility-considerations)
-  - [Variants and Branches](#variants-and-branches)
-      - [EnviroDIY_SDI12](#envirodiy_sdi12)
-      - [EnviroDIY_SDI12_PCINT3](#envirodiy_sdi12_pcint3)
-      - [EnviroDIY_SDI12_ExtInts](#envirodiy_sdi12_extints)
-  - [Contribute](#contribute)
-  - [License](#license)
-  - [Credits](#credits)
-
-[//]: # ( End GitHub Only )
-
-[//]: # ( @section mainpage_getting_started Getting Started )
-## Getting Started
-
-Learn more, below, about this library's:
-* [Origins and Inherited Limitations](https://github.com/EnviroDIY/Arduino-SDI-12#origins-and-inherited-limitations);
-* [Compatibility Considerations](https://github.com/EnviroDIY/Arduino-SDI-12#compatibility-considerations);
-* [Variants and Branches](https://github.com/EnviroDIY/Arduino-SDI-12#variants-and-branches) we created to overcome some limitations.
-
-Try running our [Example sketches](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples) with your Arduino board and SDI-12 sensor.
-
-Full details on the library functionality can be found on github pages: https://envirodiy.github.io/Arduino-SDI-12/
-
-
-[//]: # ( @section mainpage_origins Origins and Inherited Limitations )
-## Origins and Inherited Limitations
-
-This library was developed from the [SoftwareSerial](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/libraries/SoftwareSerial) library that is a built-in [standard Arduino library](https://www.arduino.cc/en/Reference/Libraries).
-It was further modified to use a timer to improve read stability and decrease the amount of time universal interrupts are disabled using logic from [NeoSWSerial](https://github.com/SlashDevin/NeoSWSerial).
-
-The most obvious "limitation" is that this library will conflict with all other libraries that make use of pin change interrupts.
-You will be unable to compile them together.
-Some other libraries using pin change interrupts include [SoftwareSerial](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/libraries/SoftwareSerial), [NeoSWSerial](https://github.com/SlashDevin/NeoSWSerial), [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt/), [PinChangeInt](https://playground.arduino.cc/Main/PinChangeInt), [Servo](https://www.arduino.cc/en/Reference/Servo), and quite a number of other libraries.
-See the notes under [Variants and Branches](https://github.com/EnviroDIY/Arduino-SDI-12#variants-and-branches) below for advice in using this library in combination with such libraries.
-
-Another non-trivial, but hidden limitation is that _all_ interrupts are disabled during most of the transmission of each character, which can interfere with other processes.
-That includes other pin-change interrupts, clock/timer interrupts, external interrupts, and every other type of processor interrupt.
-This is particularly problematic for SDI-12, because SDI-12 operates at a very slow baud rate (only 1200 baud).
-This translates to ~8.3 mS of "radio silence" from the processor for each character that goes out via SDI-12, which adds up to ~380-810ms per command!  Interrupts are enabled for the majority of the time while the processor is listening for responses.
-
-For most AVR boards, this library will also conflict with the [tone](https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/) function because of its utilization of timer 2.
-There will be no obvious compile error, but because SDI-12 and the tone library may use different clock-prescaler functions, the results for both might be rather unexpected.
-All 8MHz AVR boards will also have unresolvable prescaler conflicts with [NeoSWSerial](https://github.com/SlashDevin/NeoSWSerial).
-The pre-scaler values needed for the SDI-12 functionality are set in the begin() function and reset to their original values in the end() function.
-
-[//]: # ( @section mainpage_compatibility Compatibility Considerations )
-## Compatibility Considerations
-
-This library has been tested with an Arduino Uno (AtMega328p), EnviroDIY Mayfly (AtMega1284p), Adafruit Feather 32u4 (AtMega32u4, identical to Arduino Leonardo), an Adafruit Feather M0 (SAMD21G18, identical to Arduino Zero), the ESP8266, and the ESP32.
-It should also work on an Arduino Mega (AtMega2560), Gemma/AtTiny board, and most other AVR processors  running on the Arduino framework.
-
-The Arduino Due, Arduino 101, and Teensy boards are not supported at this time.
-If you are interested in adding support for those boards, please send pull requests.
-
-Due to the use of pin change interrupts, not all data pins are available for use with this SDI-12 library.
-Pin availability depends on the micro-controller.
-These pins will work on those processors:
-
-This library requires the use of pin change interrupts (PCINT).
-
-Not all Arduino boards have the same pin capabilities.
-The known compatibile pins for common variants are shown below:
-
-**AtMega328p / Arduino Uno:**
-- Any pin
-
-**AtMega1284p / EnviroDIY Mayfly**
-- Any pin
-
-**ATmega2560 / Arduino Mega or Mega 2560:**
-- 0, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69)
-
-**AtMega32u4 / Arduino Leonardo or Adafruit Feather:**
-- 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI)
-
-**SAMD21G18 / Arduino Zero:**
-- Any pin (except 4 on the zero)
-
-**ESP8266:**
-- Any GPIO, except GPIO16
-
-**ESP32:**
-- Any GPIO
-
-Note that not all of these pins are available with our [Variants and Branches](https://github.com/EnviroDIY/Arduino-SDI-12#variants-and-branches), below.
-
-
-[//]: # ( @section mainpage_variants Variants and Branches )
-## Variants and Branches
-As we've described, the default "master" branch of this library will conflict with SoftwareSerial and any other library that monopolizes all pin change interrupt vectors for all AVR boards.
-To allow simultaneous use of SDI-12 and SoftwareSerial, we have created additional variants of these libraries that we maintain as separate branches of this repository.
-For background information, my be helpful to read our [Overview of Interrupts](https://github.com/EnviroDIY/Arduino-SDI-12/wiki/2b.-Overview-of-Interrupts) wiki page or this [Arduino Pin Change Interrupts article](https://thewanderingengineer.com/2014/08/11/arduino-pin-change-interrupts/).
-
-[//]: # ( @subsection mainpage_master EnviroDIY_SDI12 )
-#### EnviroDIY_SDI12
-EnviroDIY_SDI12 is the default master branch of this repository.
-It controls and monopolizes all pin change interrupt vectors, and can therefore have conflicts with any variant of SoftwareSerial and other libraries that use interrupts.
-
-[//]: # ( @subsection mainpage_pcint3 EnviroDIY_SDI12_PCINT3 )
-#### EnviroDIY_SDI12_PCINT3
-EnviroDIY_SDI12_PCINT3 is in the Mayfly branch of this repository, and was historically was called "SDI12_mod".
-It's been cropped to only control interrupt vector 3, or PCINT3 (D), which on the Mayfly (or Sodaq Mbili) corresponds to Pins D0-D7.
-It is designed to be compatible with [EnviroDIY_SoftwareSerial_PCINT12](https://github.com/EnviroDIY/SoftwareSerial_PCINT12) library (which controls interrupt vectors PCINT1 (B) & PCINT2 (C) / Mayfly pins D08-D15 & D16-D23) and [EnviroDIY PcInt PCINT0](https://github.com/EnviroDIY/PcInt_PCINT0) (which controls interrupt vectors PCINT0 (A) / Mayfly pins D24-D31/A0-A7).
-Note that different AtMega1284p boards have a different mapping from the physical PIN numbers to the listed digital PIN numbers that are printed on the board.
-One of the most helpful lists of pins and interrupts vectors is in the the [Pin/Port Bestiary wiki page for the Enable Interrupt library](https://github.com/GreyGnome/EnableInterrupt/wiki/Usage#PIN__PORT_BESTIARY).
-
-[//]: # ( @subsection mainpage_extints EnviroDIY_SDI12_ExtInts )
-#### EnviroDIY_SDI12_ExtInts
-EnviroDIY_SDI12_ExtInts is the ExtInt branch of this repository.
-It doesn't control any of the interrupts, but instead relies on an external interrupt management library (like [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt)) to assign the SDI-12 receive data function to the right pin.
-This is the least stable because there's some extra delay because the external library is involved, but the use of timers in the SDI-12 library greatly increases it's stability.
-It's also the easiest to get working in combination with any other pin change interrupt based library.
-It can be paired with the [EnviroDIY_SoftwareSerial_ExtInts](https://github.com/EnviroDIY/SoftwareSerial_ExternalInts) libraries (which is, by the way, extremely unstable).
-
-If you would like to use a different pin change interrupt library, uncomment the line ```#define SDI12_EXTERNAL_PCINT``` in SDI12.h and recompile the library.
-Then, in your own code call `SDI12::handleInterrupt()` as the interrupt for the SDI12 pin using the other interrupt library.
-Example j shows doing this in GreyGnome's [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt) library.
-
-
-[//]: # ( @section mainpage_contribute Contribute )
-## Contribute
-Open an [issue](https://github.com/EnviroDIY/Arduino-SDI-12/issues) to suggest and discuss potential changes/additions.
-
-For power contributors:
-
-1. Fork it!
-2. Create your feature branch: `git checkout -b my-new-feature`
-3. Commit your changes: `git commit -am 'Add some feature'`
-4. Push to the branch: `git push origin my-new-feature`
-5. Submit a pull request :D
-
-
-[//]: # ( @section mainpage_license License )
-## License
-The SDI12 library code is released under the GNU Lesser Public License (LGPL 2.1) -- See [LICENSE-examples.md](https://github.com/EnviroDIY/Arduino-SDI-12/blob/master/LICENSE) file for details.
-
-Example Arduino sketches are released under the BSD 3-Clause License -- See [LICENSE-examples.md](https://github.com/EnviroDIY/Arduino-SDI-12/blob/master/LICENSE.md) file for details.
-
-Documentation is licensed as [Creative Commons Attribution-ShareAlike 4.0](https://creativecommons.org/licenses/by-sa/4.0/) (CC-BY-SA) copyright.
-
-[//]: # ( @section mainpage_credits Credits )
-## Credits
-[EnviroDIY](http://envirodiy.org/)â„¢ is presented by the Stroud Water Research Center, with contributions from a community of enthusiasts sharing do-it-yourself ideas for environmental science and monitoring.
-
-[Kevin M. Smith](https://github.com/Kevin-M-Smith) was the primary developer of the SDI-12 library, with input from [S. Hicks](https://github.com/s-hicks2) and [Anthony Aufdenkampe](https://github.com/aufdenkampe).
-
-[Sara Damiano](https://github.com/SRGDamia1) is now the primary maintainer, with input from many [other contributors](https://github.com/EnviroDIY/Arduino-SDI-12/graphs/contributors).
-
-This project has benefited from the support from the following funders:
-
-* National Science Foundation, awards [EAR-0724971](http://www.nsf.gov/awardsearch/showAward?AWD_ID=0724971), [EAR-1331856](http://www.nsf.gov/awardsearch/showAward?AWD_ID=1331856), [ACI-1339834](http://www.nsf.gov/awardsearch/showAward?AWD_ID=1339834)
-* William Penn Foundation, grant 158-15
-* Stroud Water Research Center endowment
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/VERSION b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/VERSION
deleted file mode 100644
index 0f84bed4d4e7455dee513c0a4a7a00708183e9f5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-v2.1.4
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/continuous_integration/.travis.yml_archive b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/continuous_integration/.travis.yml_archive
deleted file mode 100644
index f84a321c4809ef0c97013ac5755403da3ecb05d4..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/continuous_integration/.travis.yml_archive
+++ /dev/null
@@ -1,160 +0,0 @@
-before_install:
-  - git config --global user.email "sdamiano@stroudcenter.org"
-  - git config --global user.name "SRGDamia1"
-
-sudo: false
-git:
-  depth: 1
-branches:
-  except:
-    - gh-pages
-
-cache:
-  pip: true
-  directories:
-    - "~/.platformio"
-    - $TRAVIS_BUILD_DIR/doxygen-src
-
-language: python
-python:
-  - "2.7"
-
-install:
-  # Remove the cloned repo to emulate a user library installation
-  - git rm library.json
-  # - git rm library.properties
-  # - git rm -r pioScripts
-  # - git rm -r src
-  # Install PlatformIO (this should be cached!)
-  - pip install -U platformio
-  - pio upgrade
-  # Uninstall any old version of the current library from the Travis cache
-  - if pio lib --global uninstall EnviroDIY_Arduino-SDI-12; then
-    echo "Uninstalled cached version of Arduino-SDI-12";
-    fi
-  - if pio lib --global uninstall EnviroDIY_SDI-12; then
-    echo "Uninstalled cached version of SDI-12";
-    fi
-  # Install this library from the branch we're working on
-  # echo "Installing SDI-12 from https://github.com/$TRAVIS_REPO_SLUG.git#$TRAVIS_BRANCH";
-  # echo "Installing SDI-12 from https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_BRANCH";
-  - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
-    echo "Installing SDI-12 from https://github.com/$TRAVIS_REPO_SLUG.git#$TRAVIS_COMMIT";
-    else
-    echo "Installing SDI-12 from https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_SHA";
-    fi
-  # pio lib --global install https://github.com/$TRAVIS_REPO_SLUG.git#$BRANCH;
-  # pio lib --global install https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_BRANCH;
-  - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
-    pio lib --global install https://github.com/$TRAVIS_REPO_SLUG.git#$TRAVIS_COMMIT;
-    else
-    pio lib --global install https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_SHA;
-    fi
-  - pio update
-
-script:
-  - platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560 --board=huzzah --board=featheresp32
-
-jobs:
-  include:
-    - name: "Verify library JSON format"
-      language: node_js
-      install: npm install -g jsonlint
-      script: jsonlint -q library.json
-      after_success: |
-        echo "TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST"
-        if [[ ($TRAVIS_BRANCH == master) &&
-              ($TRAVIS_PULL_REQUEST == false) ]] ; then
-            curl -LO --retry 3 https://raw.github.com/mernst/plume-lib/master/bin/trigger-travis.sh
-            sh trigger-travis.sh EnviroDIY Libraries $TRAVIS_ACCESS_TOKEN
-        fi
-
-    - name: "Build Doxygen Documentation"
-      if: branch = master AND type != pull_request
-      language: python
-      python:
-        - "3.7"
-      before_install:
-        - git config --global user.email "sdamiano@stroudcenter.org"
-        - git config --global user.name "SRGDamia1"
-        - git config --global push.default simple
-        - sudo apt-get update
-        - sudo apt-get -y install build-essential
-        - sudo apt-get -y install graphviz
-        - sudo apt-get -y install flex
-        - sudo apt-get -y install bison
-        - sudo apt-get -y install texlive-base
-        - sudo apt-get -y install texlive-latex-extra
-        - sudo apt-get -y install texlive-fonts-extra
-        - sudo apt-get -y install texlive-fonts-recommended
-        - pip3 install jinja2 Pygments
-      install:
-        - cd $TRAVIS_BUILD_DIR
-        - chmod +x travis/copy-doc-sources.sh
-        - sh travis/copy-doc-sources.sh
-        - cd $TRAVIS_BUILD_DIR
-        - chmod +x travis/build-install-doxygen.sh
-        - sh travis/build-install-doxygen.sh
-      script:
-        - cd $TRAVIS_BUILD_DIR
-        - chmod +x travis/generate-documentation.sh
-        - sh travis/generate-documentation.sh
-      # after_success:
-      #   - cd $TRAVIS_BUILD_DIR
-      #   - chmod +x travis/deploy-documentation.sh
-      #   - sh travis/deploy-documentation.sh
-      deploy:
-        provider: pages:git
-        token: $GH_REPO_TOKEN
-        edge: true # opt in to dpl v2
-        keep_history: false
-        local_dir: $TRAVIS_BUILD_DIR/code_docs/Arduino-SDI-12Doxygen/m.css
-        project_name: Arduino-SDI-12
-
-    - name: "a_wild_card"
-      env:
-        - PLATFORMIO_CI_SRC=examples/a_wild_card/a_wild_card.ino
-
-    - name: "b_address_change"
-      env:
-        - PLATFORMIO_CI_SRC=examples/b_address_change/b_address_change.ino
-
-    - name: "c_check_all_addresses"
-      env:
-        - PLATFORMIO_CI_SRC=examples/c_check_all_addresses/c_check_all_addresses.ino
-
-    - name: "d_simple_logger"
-      env:
-        - PLATFORMIO_CI_SRC=examples/d_simple_logger/d_simple_logger.ino
-
-    - name: "e_simple_parsing"
-      env:
-        - PLATFORMIO_CI_SRC=examples/e_simple_parsing/e_simple_parsing.ino
-
-    - name: "f_basic_data_request"
-      env:
-        - PLATFORMIO_CI_SRC=examples/f_basic_data_request/f_basic_data_request.ino
-
-    - name: "g_terminal_window"
-      env:
-        - PLATFORMIO_CI_SRC=examples/g_terminal_window/g_terminal_window.ino
-
-    - name: "h_SDI-12_slave_implementation"
-      env:
-        - PLATFORMIO_CI_SRC=examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino
-
-    - name: "i_SDI-12_interface"
-      env:
-        - PLATFORMIO_CI_SRC=examples/i_SDI-12_interface/i_SDI-12_interface.ino
-
-    - name: "j_external_pcint_library"
-      env:
-        - PLATFORMIO_CI_SRC=examples/j_external_pcint_library/j_external_pcint_library.ino
-        - PLATFORMIO_BUILD_FLAGS=-DSDI12_EXTERNAL_PCINT
-      script:
-        - pio lib --global install EnableInterrupt
-        - platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560
-
-    - name: "k_concurrent_logger"
-      env:
-        - PLATFORMIO_CI_SRC=examples/k_concurrent_logger/k_concurrent_logger.ino
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/.prettierignore b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/.prettierignore
deleted file mode 100644
index f52eb881b9746bc56322f701d8752cfbc3fbe93b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/.prettierignore
+++ /dev/null
@@ -1 +0,0 @@
-doxygen/header.html
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/CreatingACharacter.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/CreatingACharacter.md
deleted file mode 100644
index 8eeb6cbaf33429af6fed40e20e6bfaf97f214871..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/CreatingACharacter.md
+++ /dev/null
@@ -1,291 +0,0 @@
-[//]: # ( @page rx_page Creating a Character - Stepping through the Rx ISR )
-# Creating a Character - Stepping through the Rx ISR
-
-[//]: # ( @tableofcontents )
-
-[//]: # ( Start GitHub Only )
-- [Creating a Character - Stepping through the Rx ISR](#creating-a-character---stepping-through-the-rx-isr)
-  - [How a Character Looks in SDI-12](#how-a-character-looks-in-sdi-12)
-  - [Static Variables we Need](#static-variables-we-need)
-  - [Following the Mask](#following-the-mask)
-    - [Waiting for a Start Bit](#waiting-for-a-start-bit)
-    - [The Start of a Character](#the-start-of-a-character)
-    - [The Interrupt Fires!](#the-interrupt-fires)
-    - [Bit by Bit](#bit-by-bit)
-      - [A LOW/1 Bit](#a-low1-bit)
-      - [A HIGH/0 Bit](#a-high0-bit)
-      - [Shifting Up](#shifting-up)
-    - [A Finished Character](#a-finished-character)
-  - [The Full Interrupt Function](#the-full-interrupt-function)
-
-[//]: # ( End GitHub Only )
-
-Here we'll walk step-by-step through how the SDI-12 library (and NeoSWSerial) create a character from the ISR.
-Unlike SoftwareSerial which listens for a start bit and then halts all program and other ISR execution until the end of the character, this library grabs the time of the interrupt, does some quick math, and lets the processor move on.
-The logic of creating a character this way is harder for a person to follow, but it pays off because we're not tieing up the processor in an ISR that lasts for 8.33ms for each character.
-[10 bits @ 1200 bits/s]
-For a person, that 8.33ms is trivial, but for even a "slow" 8MHz processor, that's over 60,000 ticks sitting idle per character.
-
-So, let's look at what's happening.
-
-[//]: # ( @section rx_specs How a Character Looks in SDI-12 )
-## How a Character Looks in SDI-12
-
-First we need to keep in mind the specifications of SDI-12:
-- We use *inverse logic* that means a "1" bit is at LOW level and a "0" bit is HIGH level.
-- characters are sent as 10 bits
-  - 1 start bit, which is always a 0/HIGH
-  - 7 data bits
-  - 1 parity bit
-  - 1 stop bit, which is always 1/LOW
-
-[//]: # ( @section rx_vars Static Variables we Need )
-## Static Variables we Need
-
-And lets remind ourselves of the static variables we're using to store states:
-- `prevBitTCNT` stores the time of the previous RX transition in micros
-- `rxState` tracks how many bits are accounted for on an incoming character.
-  - if 0: indicates that we got a start bit
-  - if >0: indicates the number of bits received
-- `WAITING-FOR-START-BIT` is a mask for the rxState while waiting for a start bit, it's set to 0b11111111
-- `rxMask` is a bit mask for building a received character
-  - The mask has a single bit set, in the place of the active bit based on the rxState
-- `rxValue` is the value of the character being built
-
-[//]: # ( @section rx_mask Following the Mask )
-## Following the Mask
-
-[//]: # ( @subsection rx_mask_wait Waiting for a Start Bit )
-### Waiting for a Start Bit
-
-The `rxState`, `rxMask`, and `rxValue` all work together to form a character.
-When we're waiting for a start bit `rxValue` is empty, `rxMask` has only the bottom bit set, and `rxState` is set to WAITING-FOR-START-BIT:
-
-```
-    rxValue: |     0   0   0   0   0   0   0   0
--------------|-----------------------------------
-     rxMask: |     0   0   0   0   0   0   0   1
-    rxState: |     1   1   1   1   1   1   1   1
-```
-
-
-[//]: # ( @subsection rx_mask_start The Start of a Character )
-### The Start of a Character
-
-After we get a start bit, the `startChar()` function creates a blank slate for the new character, so our values are:
-
-```
-    rxValue: |     0   0   0   0   0   0   0   0
--------------|-----------------------------------
-     rxMask: |     0   0   0   0   0   0   0   1
-    rxState: |     0   0   0   0   0   0   0   0
-```
-
-
-[//]: # ( @subsection rx_mask_fire The Interrupt Fires! )
-### The Interrupt Fires!
-
-When an interrupts is received, we use capture the time if the interrupt in `thisBitTCNT`.
-Then we subtract `prevBitTCNT` from `thisBitTCNT` and use the `bitTimes()` function to calculate how many bit-times have passed between this interrupt and the previous one.
-(There's also a fudge factor in this calculation we call the [rxWindowWidth](https://github.com/SlashDevin/NeoSWSerial/pull/13#issuecomment-315463522).)
-
-
-[//]: # ( @subsection rx_mask_bit Bit by Bit )
-### Bit by Bit
-
-For **each bit time that passed**, we apply the `rxMask` to the `rxValue`.
-- Keep in mind multiple bit times can pass between interrupts - this happens any time there are two (or more) high or low bits in a row.
-- We also leave time for the (high) start and (low) stop bit, but do anything with the `rxState`, `rxMask`, or `rxValue` for those bits.
-
-
-[//]: # ( @subsubsection rx_mask_low A LOW/1 Bit )
-#### A LOW/1 Bit
-
-- if the data bit received is LOW (1) we do an `|=` (bitwise OR) between the `rxMask` and the `rxValue`
-
-```
-    rxValue: |     0   0   0   0   0   0   0   1
--------------|---------------------------------^- bit-wise or puts the one
-     rxMask: |     0   0   0   0   0   0   0   1      from the rxMask into
-    rxState: |     0   0   0   0   0   0   0   0      the rxValue
-```
-
-
-[//]: # ( @subsubsection rx_mask_high A HIGH/0 Bit )
-#### A HIGH/0 Bit
-
-- if the data bit received is HIGH (0) we do nothing
-
-```
-    rxValue: |     0   0   0   0   0   0   0   0
--------------|---------------------------------x- nothing happens
-     rxMask: |     0   0   0   0   0   0   0   1
-    rxState: |     0   0   0   0   0   0   0   0
-```
-
-
-[//]: # ( @subsubsection rx_mask_shift Shifting Up )
-#### Shifting Up
-
-- *After* applying the mask, we push everything over one bit to the left.
-The top bit falls off.
-  - we always add a 1 on the `rxState`, to indicate the bit arrived
-  - we always add a 0 on the `rxMask` and the `rxValue`
-  - the values of the second bit of the `rxValue` (?) depends on what we did in the step above
-
-```
-    rxValue: |     0        <--- | 0   0   0   0   0   0   ?   0 <--- add a zero
--------------|-------------------|---------------------------|---
-     rxMask: |     0        <--- | 0   0   0   0   0   0   1   0 <--- add a zero
-    rxState: |     0        <--- | 0   0   0   0   0   0   0   1 <--- add a one
--------------|-------------------|---------------------------|---
-             | falls off the top |                           | added to the bottom
-```
-
-
-[//]: # ( @subsection rx_mask_fin A Finished Character )
-### A Finished Character
-
-After 8 bit times have passed, we should have a fully formed character with 8 bits of data (7 of the character + 1 parity).
-The `rxMask`  will have the one in the top bit.
-And the rxState will be filled - which just happens to be the value of `WAITING-FOR-START-BIT` for the next character.
-
-```
-    rxValue: |     ?   ?   ?   ?   ?   ?   ?   ?
--------------|-----------------------------------
-     rxMask: |     1   0   0   0   0   0   0   0
-    rxState: |     1   1   1   1   1   1   1   1
-```
-
-
-[//]: # ( @section rx_fxn The Full Interrupt Function )
-## The Full Interrupt Function
-
-Understanding how the masking creates the character, you should now be able to follow the full interrupt function below.
-
-```cpp
-// Creates a blank slate of bits for an incoming character
-void SDI12::startChar() {
-  rxState = 0x00;  // 0b00000000, got a start bit
-  rxMask  = 0x01;  // 0b00000001, bit mask, lsb first
-  rxValue = 0x00;  // 0b00000000, RX character to be, a blank slate
-}  // startChar
-
-// The actual interrupt service routine
-void SDI12::receiveISR() {
-  // time of this data transition (plus ISR latency)
-  sdi12timer-t thisBitTCNT = READTIME;
-
-  uint8-t pinLevel = digitalRead(-dataPin);  // current RX data level
-
-  // Check if we're ready for a start bit, and if this could possibly be it.
-  if (rxState == WAITING-FOR-START-BIT) {
-    // If we are waiting for a start bit and the pin is low it's not a start bit, exit
-    // Inverse logic start bit = HIGH
-    if (pinLevel == LOW) { return; }
-    // If the pin is HIGH, this should be a start bit.
-    // Thus startChar(), which sets the rxState to 0, create an empty character, and a
-    // new mask with a 1 in the lowest place
-    startChar();
-  } else {
-    // If we're not waiting for a start bit, it's because we're in the middle of an
-    // incomplete character and therefore this change in the pin state must be from a
-    // data, parity, or stop bit.
-
-    // Check how many bit times have passed since the last change
-    uint16-t rxBits = bitTimes((uint8-t)(thisBitTCNT - prevBitTCNT));
-    // Calculate how many *data+parity* bits should be left in the current character
-    //      - Each character has a total of 10 bits, 1 start bit, 7 data bits, 1 parity
-    // bit, and 1 stop bit
-    //      - The #rxState holds record of how many of the data + parity bits we've
-    // gotten (up to 8)
-    //      - We have to treat the parity bit as a data bit because we don't know its
-    // state
-    //      - Since we're mid character, we know the start bit is past which knocks us
-    // down to 9
-    //      - There will always be one left over for the stop bit, which will be LOW/1
-    uint8-t bitsLeft = 9 - rxState;
-    // If the number of bits passed since the last transition is more than then number
-    // of bits left on the character we were working on, a new character must have
-    // started.
-    // This will happen if the parity bit is 1 or the last bit(s) of the character and
-    // the parity bit are all 1's.
-    bool nextCharStarted = (rxBits > bitsLeft);
-
-    // Check how many data+parity bits have been sent in this frame.  This will be
-    // different from the rxBits if a new character has started because of the start
-    // and stop bits.
-    //      - If the total number of bits in this frame is more than the number of
-    // data+parity bits remaining in the character, then the number of data+parity bits
-    // is equal to the number of bits remaining for the character and partiy.
-    //      - If the total number of bits in this frame is less than the number of data
-    // bits left for the character and parity, then the number of data+parity bits
-    // received in this frame is equal to the total number of bits received in this
-    // frame.
-    // translation:
-    //    if nextCharStarted then bitsThisFrame = bitsLeft
-    //                       else bitsThisFrame = rxBits
-    uint8-t bitsThisFrame = nextCharStarted ? bitsLeft : rxBits;
-    // Tick up the rxState by the number of data+parity bits received in the frame
-    rxState += bitsThisFrame;
-
-    // Set all the bits received between the last change and this change
-    if (pinLevel == HIGH) {
-      // If the current state is HIGH (and it just became so), then all bits between
-      // the last change and now must have been LOW.
-      // back fill previous bits with 1's (inverse logic - LOW = 1)
-      while (bitsThisFrame-- > 0) {
-        // for each of the bits that happened in this frame
-
-        rxValue |= rxMask;     // Add a 1 to the LSB/right-most place of our character
-                               // value from the mask
-        rxMask = rxMask << 1;  // Shift the 1 in the mask up by one position
-      }
-      // And shift the 1 in the mask up by one more position for the current bit.
-      // It's HIGH/0 now, so we don't use `|=` with the mask for this last one.
-      rxMask = rxMask << 1;
-    } else {
-      // If the current state is LOW (and it just became so), then this bit is LOW
-      // but all bits between the last change and now must have been HIGH
-
-      // pinLevel==LOW
-      // previous bits were 0's so only this bit is a 1 (inverse logic - LOW = 1)
-      rxMask = rxMask << (bitsThisFrame -
-                          1);  // Shift the 1 in the mask up by the number of bits past
-      rxValue |= rxMask;  //  And add that shifted one to the character being created
-    }
-
-    // If this was the 8th or more bit then the character and parity are complete.
-    if (rxState > 7) {
-      rxValue &= 0x7F;        // Throw away the parity bit (and with 0b01111111)
-      charToBuffer(rxValue);  // Put the finished character into the buffer
-
-
-      // if this is LOW, or we haven't exceeded the number of bits in a
-      // character (but have gotten all the data bits) then this should be a
-      // stop bit and we can start looking for a new start bit.
-      if ((pinLevel == LOW) || !nextCharStarted) {
-        rxState = WAITING-FOR-START-BIT;  // DISABLE STOP BIT TIMER
-      } else {
-        // If we just switched to HIGH, or we've exceeded the total number of
-        // bits in a character, then the character must have ended with 1's/LOW,
-        // and this new 0/HIGH is actually the start bit of the next character.
-        startChar();
-      }
-    }
-  }
-  prevBitTCNT = thisBitTCNT;  // finally remember time stamp of this change!
-}
-
-// Put a new character in the buffer
-void SDI12::charToBuffer(uint8-t c) {
-  // Check for a buffer overflow. If not, proceed.
-  if ((-rxBufferTail + 1) % SDI12-BUFFER-SIZE == -rxBufferHead) {
-    -bufferOverflow = true;
-  } else {
-    // Save the character, advance buffer tail.
-    -rxBuffer[-rxBufferTail] = c;
-    -rxBufferTail            = (-rxBufferTail + 1) % SDI12-BUFFER-SIZE;
-  }
-}
-```
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/Doxyfile b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/Doxyfile
deleted file mode 100644
index 7caadfccd0d2086c57264f7bf0c1d1e8a9ec1780..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/Doxyfile
+++ /dev/null
@@ -1,2617 +0,0 @@
-# Doxyfile 1.8.19
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the configuration
-# file that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME           = "SDI-12 for Arduino"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER         = 2.1.4
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          = "An Arduino library for SDI-12 communication without requiring any additional hardware."
-
-# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
-# in the documentation. The maximum height of the logo should not exceed 55
-# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
-# the logo to the output directory.
-
-PROJECT_LOGO           = SDI-12Text.png
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = ../../Arduino-SDI-12Doxygen
-
-# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS         = NO
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES    = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-# Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE        = English
-
-# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all generated output in the proper direction.
-# Possible values are: None, LTR, RTL and Context.
-# The default value is: None.
-
-OUTPUT_TEXT_DIRECTION  = None
-
-# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF       = "The $name class" \
-                         "The $name widget" \
-                         "The $name file" \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES        = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH        = ../src
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
-# such as
-# /***************
-# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
-# Javadoc-style will behave just like regular comments and it will not be
-# interpreted by doxygen.
-# The default value is: NO.
-
-JAVADOC_BANNER         = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
-# page for each member. If set to NO, the documentation of a member will be part
-# of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines (in the resulting output). You can put ^^ in the value part of an
-# alias to insert a newline as if a physical newline was in the original file.
-# When you need a literal { or } or , in the value part of an alias you have to
-# escape them by means of a backslash (\), this can lead to conflicts with the
-# commands \{ and \} for these it is advised to use the version @{ and @} or use
-# a double escape (\\{ and \\})
-
-ALIASES                = "license=@par License:\n" \
-                         "environment=@par Development Environment:\n" \
-                         "platform=@par Hardware Platform:\n" \
-                         "m_div{1}=@xmlonly<mcss:div xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-                         "m_enddiv=@xmlonly</mcss:div>@endxmlonly" \
-                         "m_span{1}=@xmlonly<mcss:span xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-                         "m_endspan=@xmlonly</mcss:span>@endxmlonly" \
-                         "m_class{1}=@xmlonly<mcss:class xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\" />@endxmlonly" \
-                         "m_footernavigation=@xmlonly<mcss:footernavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" />@endxmlonly" \
-                         "m_examplenavigation{2}=@xmlonly<mcss:examplenavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:page=\"\1\" mcss:prefix=\"\2\" />@endxmlonly" \
-                         "m_keywords{1}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keywords=\"\1\" />@endxmlonly" \
-                         "m_keyword{3}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keyword=\"\1\" mcss:title=\"\2\" mcss:suffix-length=\"\3\" />@endxmlonly" \
-                         "m_enum_values_as_keywords=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:enum-values-as-keywords=\"true\" />@endxmlonly" \
-                         "m_since{2}=@since @m_class{m-label m-success m-flat} @ref changelog-\1-\2 \"since v\1.\2\"" \
-                         "m_deprecated_since{2}=@since deprecated in v\1.\2 @deprecated"
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
-# sources only. Doxygen will then generate output that is more tailored for that
-# language. For instance, namespaces will be presented as modules, types will be
-# separated into more groups, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_SLICE  = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
-# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,
-# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
-# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
-# tries to guess whether the code is fixed or free formatted code, this is the
-# default for Fortran type files). For instance to make doxygen treat .inc files
-# as Fortran files (default is PHP), and .f files as C (default is Fortran),
-# use: inc=Fortran f=C.
-#
-# Note: For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen.
-
-EXTENSION_MAPPING      = ino=C++
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See https://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT       = YES
-
-# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
-# to that level are automatically included in the table of contents, even if
-# they do not have an id attribute.
-# Note: This feature currently applies only to Markdown headings.
-# Minimum value: 0, maximum value: 99, default value: 5.
-# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
-
-TOC_INCLUDE_HEADINGS   = 10
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by putting a % sign in front of the word or
-# globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT       = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC   = YES
-
-# If one adds a struct or class to a group and this option is enabled, then also
-# any nested class or struct is added to the same group. By default this option
-# is disabled and one has to add nested compounds explicitly via \ingroup.
-# The default value is: NO.
-
-GROUP_NESTED_COMPOUNDS = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE      = 0
-
-# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
-# during processing. When set to 0 doxygen will based this on the number of
-# cores available in the system. You can set it explicitly to a value larger
-# than 0 to get more control over the balance between CPU load and processing
-# speed. At this moment only the input processing can be done using multiple
-# threads. Since this is still an experimental feature the default is set to 1,
-# which efficively disables parallel processing. Please report any issues you
-# encounter. Generating dot graphs in parallel is controlled by the
-# DOT_NUM_THREADS setting.
-# Minimum value: 0, maximum value: 32, default value: 1.
-
-NUM_PROC_THREADS       = 1
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE        = YES
-
-# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
-# methods of a class will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIV_VIRTUAL   = YES
-
-# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO,
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. If set to YES, local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO, only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO, these classes will be included in the various overviews. This option
-# has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# declarations. If set to NO, these declarations will be included in the
-# documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO, these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES, upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# (including Cygwin) and Mac users are advised to set this option to NO.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES, the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC  = YES
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS       = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
-# list. This list is created by putting \todo commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
-# list. This list is created by putting \test commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES, the
-# list will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES        = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE            = DoxygenLayout.xml
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS               = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO, doxygen will only warn about wrong or incomplete
-# parameter documentation, but not about the absence of documentation. If
-# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC       = YES
-
-# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
-# a warning is encountered.
-# The default value is: NO.
-
-WARN_AS_ERROR          = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE           = doxygenOutput.log
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
-# Note: If this tag is empty the current directory is searched.
-
-INPUT                  = ../README.md \
-                         ../src \
-                         ../docs
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
-# possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# read by doxygen.
-#
-# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
-# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
-# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
-# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
-# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen
-# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
-# *.vhdl, *.ucf, *.qsf and *.ice.
-
-FILE_PATTERNS          = *.c \
-                         *.cc \
-                         *.cxx \
-                         *.cpp \
-                         *.c++ \
-                         *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++ \
-                         *.inc \
-                         *.m \
-                         *.markdown \
-                         *.md \
-                         *.mm \
-                         *.dox \
-                         *.doc \
-                         *.txt \
-                         *.tpp
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                = ../src/ReadMe.md
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH           = ../examples
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS       = * \
-                         *.ino \
-                         *.md \
-                         *.markdown \
-                         *.dox \
-                         *.doc \
-                         *.ini
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE      = YES
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-FILTER_PATTERNS        = "*.md=python markdown_prefilter.py"
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE = README.md
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER         = YES
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS    = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# entity all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS        = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see https://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS       = YES
-
-# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
-# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
-# cost of reduced performance. This can be particularly helpful with template
-# rich C++ code for which doxygen's built-in parser lacks the necessary type
-# information.
-# Note: The availability of this option depends on whether or not doxygen was
-# generated with the -Duse_libclang=ON option for CMake.
-# The default value is: NO.
-
-CLANG_ASSISTED_PARSING = NO
-
-# If clang assisted parsing is enabled you can provide the compiler with command
-# line options that you would normally use when invoking the compiler. Note that
-# the include paths will already be set by doxygen for the files and directories
-# specified with INPUT and INCLUDE_PATH.
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-
-CLANG_OPTIONS          =
-
-# If clang assisted parsing is enabled you can provide the clang parser with the
-# path to the directory containing a file called compile_commands.json. This
-# file is the compilation database (see:
-# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
-# options used when the source files were built. This is equivalent to
-# specifying the "-p" option to a clang tool, such as clang-check. These options
-# will then be passed to the parser. Any options specified with CLANG_OPTIONS
-# will be added as well.
-# Note: The availability of this option depends on whether or not doxygen was
-# generated with the -Duse_libclang=ON option for CMake.
-
-CLANG_DATABASE_PATH    =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX     = NO
-
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list). For an example see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET  =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the style sheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE    = 198
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT    = 83
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA  = 88
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = YES
-
-# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
-# documentation will contain a main index with vertical navigation menus that
-# are dynamically created via JavaScript. If disabled, the navigation index will
-# consists of multiple levels of tabs that are statically embedded in every HTML
-# page. Disable this option to support browsers that do not have JavaScript,
-# like the Qt help browser.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_MENUS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS  = YES
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 500
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see: https://developer.apple.com/xcode/), introduced with OSX
-# 10.5 (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the docset in
-# that directory and running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
-# genXcode/_index.html for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET        = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-# Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP      = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE               =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler (hhc.exe). If non-empty,
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION           =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated
-# (YES) or that it should be included in the main .chm file (NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI           = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING     =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated
-# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
-# folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# The QHG_LOCATION tag can be used to specify the location of Qt's
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-# generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX          = NO
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW      = YES
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH         = 200
-
-# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
-# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
-# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
-# the HTML output. These images will generally look nicer at scaled resolutions.
-# Possible values are: png (the default) and svg (looks nicer but requires the
-# pdf2svg or inkscape tool).
-# The default value is: png.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FORMULA_FORMAT    = png
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
-# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
-# to create new LaTeX commands to be used in formulas as building blocks. See
-# the section "Including formulas" for details.
-
-FORMULA_MACROFILE      =
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# https://www.mathjax.org) which uses client side JavaScript for the rendering
-# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT         = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from https://www.mathjax.org before deployment.
-# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH        = https://cdn.jsdelivr.net/npm/mathjax@2
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS     =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE       =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using JavaScript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: https://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: https://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when not enabling USE_PDFLATEX the default is latex when enabling
-# USE_PDFLATEX the default is pdflatex and when in the later case latex is
-# chosen this is overwritten by pdflatex. For specific output languages the
-# default can have been set differently, this depends on the implementation of
-# the output language.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         =
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# Note: This tag is used in the Makefile / make.bat.
-# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
-# (.tex).
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
-# generate index for LaTeX. In case there is no backslash (\) as first character
-# it will be automatically added in the LaTeX code.
-# Note: This tag is used in the generated output file (.tex).
-# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
-# The default value is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_MAKEINDEX_CMD    = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. The package can be specified just
-# by its name or with the correct syntax as to be used with the LaTeX
-# \usepackage command. To get the times font for instance you can specify :
-# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
-# To use the option intlimits with the amsmath package you can specify:
-# EXTRA_PACKAGES=[intlimits]{amsmath}
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
-# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
-# files. Set this option to YES, to get a higher quality PDF documentation.
-#
-# See also section LATEX_CMD_NAME for selecting the engine.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP        = NO
-
-# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
-# path from which the emoji images will be read. If a relative path is entered,
-# it will be relative to the LATEX_OUTPUT directory. If left blank the
-# LATEX_OUTPUT directory will be used.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EMOJI_DIRECTORY  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# configuration file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's configuration file. A template extensions file can be
-# generated using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = YES
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = NO
-
-# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
-# namespace members in file scope as well, matching the HTML output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_NS_MEMB_FILE_SCOPE = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
-# the structure of the code including all documentation. Note that this feature
-# is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to Sqlite3 output
-#---------------------------------------------------------------------------
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  = *.c \
-                         *.cc \
-                         *.cxx \
-                         *.cpp \
-                         *.c++ \
-                         *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++ \
-                         *.md \
-                         *.markdown
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __attribute__((__progmem__))= \
-                         PLATFORMIO=40304 \
-                         ARDUINO_AVR_ENVIRODIY_MAYFLY \
-                         F_CPU=8000000L \
-                         ARDUINO_ARCH_AVR \
-                         ARDUINO=10808 \
-                         __AVR_ATmega1284P__ \
-                         SDI12_EXTERNAL_PCINT \
-                         ESP32
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = YES
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = YES
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = YES
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = YES
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command. Disabling a call graph can be
-# accomplished by means of the command \hidecallgraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command. Disabling a caller graph can be
-# accomplished by means of the command \hidecallergraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. For an explanation of the image formats see the section
-# output formats in the documentation of the dot tool (Graphviz (see:
-# http://www.graphviz.org/)).
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
-# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
-# png:gdiplus:gdiplus.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = YES
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
-# configuration file for plantuml.
-
-PLANTUML_CFG_FILE      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 500
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/DoxygenLayout.xml b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/DoxygenLayout.xml
deleted file mode 100644
index 6de61a2d578ee77132503c32bf0d8319ca5235c7..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/DoxygenLayout.xml
+++ /dev/null
@@ -1,266 +0,0 @@
-<doxygenlayout version="1.0">
-  <!-- Generated by doxygen 1.8.18 -->
-  <!-- Navigation index tabs for HTML output -->
-  <navindex>
-    <tab type="mainpage" visible="yes" title="About">
-        <tab type="user" url="@ref specifications" title="The SDI-12 Specification"/>
-    </tab>
-
-    <tab type="pages" visible="no" title="" intro=""/>
-
-    <tab type="modules" visible="no" title="" intro=""/>
-
-    <tab type="usergroup" visible="yes" title="Functions" url="@ref SDI12">
-        <tab type="user" url="@ref ctor" title="Constructor, Destructor, Begins, and Setters"/>
-        <tab type="user" url="@ref communication" title="Waking Up and Talking To Sensors"/>
-        <tab type="user" url="@ref reading_buffer" title="Reading from the SDI-12 Buffer"/>
-        <tab type="user" url="@ref line_states" title="Data Line States"/>
-        <tab type="user" url="@ref multiple_objects" title="Using more than one SDI-12 Object"/>
-        <tab type="user" url="@ref interrupt_fxns" title="Interrupt Service Routine"/>
-    </tab>
-
-    <tab type="examples" visible="no" title="Examples" intro="Examples using the SDI-12 Library"/>
-
-    <tab type="usergroup" visible="yes" title="Examples" url="@ref examples_page">
-        <tab type="user" url="@ref example_a_page" title="Example A: Getting Sensor Information"/>
-        <tab type="user" url="@ref example_b_page" title="Example B: Address Change"/>
-        <tab type="user" url="@ref example_c_page" title="Example C: Checking all Addresses"/>
-        <tab type="user" url="@ref example_d_page" title="Example D: Logging Data"/>
-        <tab type="user" url="@ref example_e_page" title="Example E: Parsing Data"/>
-        <tab type="user" url="@ref example_f_page" title="Example F: Simple Data Request"/>
-        <tab type="user" url="@ref example_g_page" title="Example G: Terminal Emulator 1"/>
-        <tab type="user" url="@ref example_h_page" title="Example H: Slave Implementation"/>
-        <tab type="user" url="@ref example_i_page" title="Example I: Terminal Emulator 2"/>
-        <tab type="user" url="@ref example_j_page" title="Example J: External Interrupts"/>
-        <tab type="user" url="@ref example_k_page" title="Example K: Concurrent Measurements"/>
-    </tab>
-
-    <tab type="namespaces" visible="yes" title="">
-      <tab type="namespacelist" visible="yes" title="" intro=""/>
-      <tab type="namespacemembers" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="interfaces" visible="yes" title="">
-      <tab type="interfacelist" visible="yes" title="" intro=""/>
-      <tab type="interfaceindex" visible="$ALPHABETICAL_INDEX" title=""/>
-      <tab type="interfacehierarchy" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="classes" visible="yes" title="">
-      <tab type="classlist" visible="yes" title="" intro=""/>
-      <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
-      <tab type="hierarchy" visible="no" title="" intro=""/>
-      <tab type="classmembers" visible="no" title="" intro=""/>
-    </tab>
-
-    <tab type="structs" visible="yes" title="">
-      <tab type="structlist" visible="yes" title="" intro=""/>
-      <tab type="structindex" visible="$ALPHABETICAL_INDEX" title=""/>
-    </tab>
-
-    <tab type="exceptions" visible="yes" title="">
-      <tab type="exceptionlist" visible="yes" title="" intro=""/>
-      <tab type="exceptionindex" visible="$ALPHABETICAL_INDEX" title=""/>
-      <tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="files" visible="yes" title="">
-      <tab type="filelist" visible="yes" title="" intro=""/>
-      <tab type="globals" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="usergroup" visible="yes" title="Other Reading">
-        <tab type="user" url="@ref interrupts_page" title="Overview of Pin Change Interrupts"/>
-        <tab type="user" url="@ref rx_page" title="Stepping through the Rx ISR"/>
-    </tab>
-
-  </navindex>
-
-  <!-- Layout definition for a class page -->
-  <class>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <inheritancegraph visible="$CLASS_GRAPH"/>
-    <collaborationgraph visible="$COLLABORATION_GRAPH"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestedclasses visible="yes" title=""/>
-      <publictypes title=""/>
-      <services title=""/>
-      <interfaces title=""/>
-      <publicslots title=""/>
-      <signals title=""/>
-      <publicmethods title=""/>
-      <publicstaticmethods title=""/>
-      <publicattributes title=""/>
-      <publicstaticattributes title=""/>
-      <protectedtypes title=""/>
-      <protectedslots title=""/>
-      <protectedmethods title=""/>
-      <protectedstaticmethods title=""/>
-      <protectedattributes title=""/>
-      <protectedstaticattributes title=""/>
-      <packagetypes title=""/>
-      <packagemethods title=""/>
-      <packagestaticmethods title=""/>
-      <packageattributes title=""/>
-      <packagestaticattributes title=""/>
-      <properties title=""/>
-      <events title=""/>
-      <privatetypes title=""/>
-      <privateslots title=""/>
-      <privatemethods title=""/>
-      <privatestaticmethods title=""/>
-      <privateattributes title=""/>
-      <privatestaticattributes title=""/>
-      <friends title=""/>
-      <related title="" subtitle=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <services title=""/>
-      <interfaces title=""/>
-      <constructors title=""/>
-      <functions title=""/>
-      <related title=""/>
-      <variables title=""/>
-      <properties title=""/>
-      <events title=""/>
-    </memberdef>
-    <allmemberslink visible="yes"/>
-    <usedfiles visible="$SHOW_USED_FILES"/>
-    <authorsection visible="yes"/>
-  </class>
-
-  <!-- Layout definition for a namespace page -->
-  <namespace>
-    <briefdescription visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestednamespaces visible="yes" title=""/>
-      <constantgroups visible="yes" title=""/>
-      <interfaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <structs visible="yes" title=""/>
-      <exceptions visible="yes" title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </namespace>
-
-  <!-- Layout definition for a file page -->
-  <file>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <includegraph visible="$INCLUDE_GRAPH"/>
-    <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
-    <sourcelink visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <interfaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <structs visible="yes" title=""/>
-      <exceptions visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <constantgroups visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection/>
-  </file>
-
-  <!-- Layout definition for a group page -->
-  <group>
-    <briefdescription visible="yes"/>
-    <groupgraph visible="$GROUP_GRAPHS"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestedgroups visible="yes" title=""/>
-      <dirs visible="yes" title=""/>
-      <files visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <pagedocs/>
-      <inlineclasses title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </group>
-
-  <!-- Layout definition for a directory page -->
-  <directory>
-    <briefdescription visible="yes"/>
-    <directorygraph visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <dirs visible="yes"/>
-      <files visible="yes"/>
-    </memberdecl>
-  </directory>
-</doxygenlayout>
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/OverviewOfInterrupts.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/OverviewOfInterrupts.md
deleted file mode 100644
index c6c3edb40958dff5cabc4300728ac4421bdcc95f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/OverviewOfInterrupts.md
+++ /dev/null
@@ -1,186 +0,0 @@
-[//]: # ( @page interrupts_page Overview of Interrupts )
-# Overview of Interrupts
-
-[//]: # ( @tableofcontents )
-
-[//]: # ( Start GitHub Only )
-- [Overview of Interrupts](#overview-of-interrupts)
-  - [What is an Interrupt?](#what-is-an-interrupt)
-  - [Directly Controlling Interrupts on an AVR Board](#directly-controlling-interrupts-on-an-avr-board)
-    - [Some Vocabulary:](#some-vocabulary)
-    - [Enabling an Interrupt](#enabling-an-interrupt)
-    - [Disabling an Interrupt](#disabling-an-interrupt)
-
-[//]: # ( End GitHub Only )
-
-[//]: # ( @section interrupts_what What is an Interrupt? )
-## What is an Interrupt?
-An interrupt is a signal that causes the microcontroller to halt execution of the program, and perform a subroutine known as an interrupt handler or Interrupt Service Routine (ISR).
-After the ISR, program execution continues where it left off.
-This allows the microcontroller to efficiently handle a time-sensitive function such as receiving a burst of data on one of its pins, by not forcing the microcontroller to wait for the data.
-It can perform other tasks until the interrupt is called.
-
-All processors running some sort of Arduino core can support multiple type of interrupts.
-This library specifically makes us of pin change interrupts - interrupts that trigger an ISR on any change of state detected for a specified pin.
-
-Obviously, we don't want the processor to be halting operation every time any pin changes voltage, so we can disable or enable interrupts on a pin-by-pin basis.
-For Atmel SAMD or Espressif processors the processor has dedicated control registers for each pin and the Arduino core provides us with a handy "attachInterrupt" function to use to tie our ISR to that pin.
-For AVR processors, like the Arduino Uno or the EnviroDIY Mayfly, we have to use a get a bit fancier to control the interrupts.
-
-[//]: # ( @section interrupts_avr Directly Controlling Interrupts on an AVR Board )
-## Directly Controlling Interrupts on an AVR Board
-
-[//]: # ( @subsection interrupts_vocab Some Vocabulary )
-### Some Vocabulary:
-
-**Registers**: small 1-byte (8-bit) stores of memory directly accessible by processor
-PCMSK0, PCMSK1, PCMSK2, PCMSK3
-
-**PCICRx**: a register where the three least significant bits enable or disable pin change interrupts on a range of pins
-- i.e. {0,0,0,0,0,PCIE2,PCIE1,PCIE0}, where PCIE2 maps to PCMSK2, PCIE1 maps to PCMSK1, and PCIE0 maps to PCMSK0.
-
-**PCMSKx**: a register that stores the state (enabled/disabled) of pin change interrupts on a single pin
-- Each bit stores a 1 (enabled) or 0 (disabled).
-
-On an Arduino Uno:
-- There is on PCICR register controlling three ranges of pins
-- There are three mask registers (PCMSK0, PCMSK1, and PCMSK2) controlling individual pins.
-- Looking at one mask register, PCMSK0:
-    - the 8 bits represent: PCMSK0 {PCINT7, PCINT6, PCINT5, PCINT4, PCINT3, PCINT2, PCINT1, PCINT0}
-    - these map to:         PCMSK0 {XTAL2,  XTAL1,  Pin 13, Pin 12, Pin 11, Pin 10, Pin 9,  Pin 8}
-
-**noInterrupts()**: a function to globally disable interrupts (of all types)
-
-**interrupts()**: a function to globally enable interrupts (of all types)
-- interrupts will only occur if the requisite registers are set (e.g. PCMSK and PCICR).
-
-[//]: # ( @subsection interrupts_enable Enabling an Interrupt )
-### Enabling an Interrupt
-
-Initially, no interrupts are enabled, so PCMSK0 looks like: `{00000000}`.
-If we were to use pin 9 as the data pin, we would set the bit in the pin 9 position to 1, like so: `{00000010}`.
-
-To accomplish this, we can make use of some predefined macros.
-
-One macro `digitalPinToPCMSK` is defined in "pins_arduino.h" which allows us to quickly get the proper register (PCMSK0, PCMSK1, or PCMSK2) given the number of the Arduino pin.
-So when we write: `digitalPinToPCMSK(9)`, the address of PCMSK0 is returned.
-We can use the dereferencing operator '\*' to get the value of the address.
-
-That is, `*digitalPinToPCMSK(9)` returns: `{00000000}`.
-
-Another macro , `digitalPinToPCMSKbit` is also defined in "pins_arduino.h" and returns the position of the bit of interest within the PCMSK of interest.
-
-So when we write: `digitalPinToPCMSKbit(9)`, the value returned is 1, because pin 9 is represented by the "1st bit" within PCMSK0, which has a zero-based index.
-That is: PCMSK { 7th bit, 6th bit, 5th bit, 4th bit, 3rd bit, 2nd bit, 1st bit, 0th bit }
-
-The leftward bit shift operator `<<` can then used to create a "mask".
-Masks are data that are used during bitwise operations to manipulate (enable / disable) one or more individual bits simultaneously.
-
-The syntax for the operator is (variable << number_of_bits).
-Some examples:
-
-```cpp
-byte a = 5;       // binary: a =  00000101
-
-byte b = a << 4;  // binary: b =  01010000
-```
-
-So when we write: `(1<<digitalPinToPCMSKbit(9))`, we get: `{00000010}`.
-
-Or equivalently:  `(1<<1)`, we get: `{00000010}`.
-
-To use the mask to set the bit of interest we use the bitwise or operator `|`.
-We will use the compact `|=` notation which does the operation and then stores the result back into the left hand side.
-
-
-So the operation:
-
-```cpp
-*digitalPinToPCMSK(_dataPin) |= (1<<digitalPinToPCMSKbit(9));
-```
-Accomplishes:
-
-```
-    (1<<digitalPinToPCMSKbit(9))              {00000010}
-
-    PCMSK0                               |    {00000000}
-
-                                             -------------
-
-                                              {00000010}
-```
-
-
-We must also enable the global control for the interrupt. This is done in a similar fashion:
-
-`*digitalPinToPCICR(_dataPin) |= (1<<digitalPinToPCICRbit(_dataPin));`
-
-
-Now let's assume that part of your Arduino sketch outside of SDI-12 had set a pin change interrupt on pin 13.
-Pin 9 and pin 13 are on the same PCMSK in the case of the Arduino Uno.
-
-This time before we set the bit for pin nine,
-
-`*digitalPinToPCMSK(9)` returns: `{00100000}`.
-
-So now:
-
-```
-    (1<<digitalPinToPCMSKbit(9))              {00000010}
-
-    PCMSK0                               |    {00100000}
-
-                                            -------------
-
-                                              {00100010}
-```
-
-By using a bitmask and bitwise operation, we have successfully enabled pin 9 without effecting the state of pin 13.
-
-
-[//]: # ( @subsection interrupts_disable Disabling an Interrupt )
-### Disabling an Interrupt
-
-When the we would like to put the SDI-12 object in the DISABLED state, (e.g. the destructor is called), we need to make sure the bit corresponding to the data pin is unset.
-
-Let us consider again the case of where an interrupt has been enabled on pin 13: {00100010}.
-We want to be sure not to disturb this interrupt when disabling the interrupt on pin 9.
-
-We will make use of similar macros, but this time we will use an inverted bit mask and the AND operation.
-The `&=` operator is equivalent to a bitwise AND operation between the PCMSK register of interest and the previous result, which is then stored back into the PCMSK of interest.
-The `*` is the dereferencing operator, which is equivalently translated to "value pointed by", and allows us to store the result back into the proper PCMSK.
-
-Again `1<<digitalPinToPCMSKbit(9)` returns `{00000010}`
-
-The inversion symbol `~` modifies the result to `{11111101}`
-
-So to finish our example:
-
-```
-    ~(1<<digitalPinToPCMSKbit(9))             {11111101}
-
-    PCMSK0                               &    {00100010}
-
-                                            -------------
-
-                                              {00100000}
-```
-
-So only the interrupt on pin 13 remains set.
-As a matter of book keeping, if we unset the last bit in the PCMSK, we ought to also unset the respective bit in the PCICR.
-
-    `!(*digitalPinToPCMSK(9)`
-
-        will evaluate TRUE if PCMSK {00000000}
-
-        will evaluate FALSE if PCMSK != {00000000}
-
-In this case, pin 13 is set, so the expression would be FALSE.
-If we go back to the original case without pin 13, the expression after disabling pin 9 would evaluate to TRUE.
-
-Therefore if we evaluate to TRUE, we should tidy up:
-```cpp
-if(!*digitalPinToPCMSK(_dataPin)){
-      *digitalPinToPCICR(_dataPin) &= ~(1<<digitalPinToPCICRbit(_dataPin));
-  }
-```
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text-Cropped.png b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text-Cropped.png
deleted file mode 100644
index e89852bf99eed5d298497996e90a4c7eaf1b5c5d..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text-Cropped.png and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text.png b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text.png
deleted file mode 100644
index 2ebe081ab7904214b34a17d742e74d7e704557fd..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text.png and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version-1_4-Dec-1-2017.pdf b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version-1_4-Dec-1-2017.pdf
deleted file mode 100644
index 162fd79fa22aacf5bc3c3a787afc9dbad1ec7516..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version-1_4-Dec-1-2017.pdf and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version1_3 January 28, 2016.pdf b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version1_3 January 28, 2016.pdf
deleted file mode 100644
index 7e945a86a961cdb723211e78ffeb1837212972ed..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version1_3 January 28, 2016.pdf and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/css/m-EnviroDIY+documentation.compiled.css b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/css/m-EnviroDIY+documentation.compiled.css
deleted file mode 100644
index 100852273f7c1c0e0be8fddcf7082b4bb0f1c217..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/css/m-EnviroDIY+documentation.compiled.css
+++ /dev/null
@@ -1,4316 +0,0 @@
-/* Generated using `./postprocess.py m-EnviroDIY.css m-documentation.css -o m-EnviroDIY+documentation.compiled.css`. Do not edit. */
-
-/*
-    This file is part of m.css.
-
-    Copyright © 2017, 2018, 2019, 2020 Vladimír Vondruš <mosra@centrum.cz>
-
-    Permission is hereby granted, free of charge, to any person obtaining a
-    copy of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation
-    the rights to use, copy, modify, merge, publish, distribute, sublicense,
-    and/or sell copies of the Software, and to permit persons to whom the
-    Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-    DEALINGS IN THE SOFTWARE.
-*/
-
-*, ::before, ::after { box-sizing: border-box; }
-body { margin: 0; }
-.m-container {
-  width: 100%;
-  margin: auto;
-  padding-left: 1rem;
-  padding-right: 1rem;
-}
-.m-row {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-.m-row:after {
-  content: ' ';
-  clear: both;
-  display: table;
-}
-.m-row > [class*='m-col-'] {
-  position: relative;
-  padding: 1rem;
-}
-[class*='m-clearfix-']::after {
-  display: block;
-  content: ' ';
-  clear: both;
-}
-[class*='m-show-'] {
-  display: none;
-}
-.m-container-inflate, :not(.m-row) > [class*='m-col-'] {
-  margin-bottom: 1rem;
-}
-.m-container-inflate:last-child, :not(.m-row) > [class*='m-col-']:last-child {
-  margin-bottom: 0;
-}
-.m-container.m-nopad, [class*='m-col-'].m-nopad,
-.m-container.m-nopadx, [class*='m-col-'].m-nopadx,
-.m-container.m-nopadl, [class*='m-col-'].m-nopadl {
-  padding-left: 0;
-}
-.m-container.m-nopad, [class*='m-col-'].m-nopad,
-.m-container.m-nopadx, [class*='m-col-'].m-nopadx,
-.m-container.m-nopadr, [class*='m-col-'].m-nopadr {
-  padding-right: 0;
-}
-[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadt {
-  padding-top: 0;
-}
-[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadb,
-.m-container-inflate.m-nopadb {
-  padding-bottom: 0;
-}
-[class*='m-col-t-'] { float: left; }
-.m-left-t {
-  padding-right: 1rem;
-  float: left;
-}
-.m-right-t, [class*='m-col-t-'].m-right-t {
-  padding-left: 1rem;
-  float: right;
-}
-.m-center-t, [class*='m-col-t-'].m-center-t {
-  float: none;
-}
-.m-center-t, [class*='m-col-t-'].m-center-t {
-  margin-left: auto;
-  margin-right: auto;
-  float: none;
-}
-.m-col-t-1  { width: calc(1  * 100% / 12); }
-.m-col-t-2  { width: calc(2  * 100% / 12); }
-.m-col-t-3  { width: calc(3  * 100% / 12); }
-.m-col-t-4  { width: calc(4  * 100% / 12); }
-.m-col-t-5  { width: calc(5  * 100% / 12); }
-.m-col-t-6  { width: calc(6  * 100% / 12); }
-.m-col-t-7  { width: calc(7  * 100% / 12); }
-.m-col-t-8  { width: calc(8  * 100% / 12); }
-.m-col-t-9  { width: calc(9  * 100% / 12); }
-.m-col-t-10 { width: calc(10 * 100% / 12); }
-.m-col-t-11 { width: calc(11 * 100% / 12); }
-.m-col-t-12 { width: calc(12 * 100% / 12); }
-.m-push-t-1  { left: calc(1  * 100% / 12); }
-.m-push-t-2  { left: calc(2  * 100% / 12); }
-.m-push-t-3  { left: calc(3  * 100% / 12); }
-.m-push-t-4  { left: calc(4  * 100% / 12); }
-.m-push-t-5  { left: calc(5  * 100% / 12); }
-.m-push-t-6  { left: calc(6  * 100% / 12); }
-.m-push-t-7  { left: calc(7  * 100% / 12); }
-.m-push-t-8  { left: calc(8  * 100% / 12); }
-.m-push-t-9  { left: calc(9  * 100% / 12); }
-.m-push-t-10 { left: calc(10 * 100% / 12); }
-.m-push-t-11 { left: calc(11 * 100% / 12); }
-.m-pull-t-1  { right: calc(1  * 100% / 12); }
-.m-pull-t-2  { right: calc(2  * 100% / 12); }
-.m-pull-t-3  { right: calc(3  * 100% / 12); }
-.m-pull-t-4  { right: calc(4  * 100% / 12); }
-.m-pull-t-5  { right: calc(5  * 100% / 12); }
-.m-pull-t-6  { right: calc(6  * 100% / 12); }
-.m-pull-t-7  { right: calc(7  * 100% / 12); }
-.m-pull-t-8  { right: calc(8  * 100% / 12); }
-.m-pull-t-9  { right: calc(9  * 100% / 12); }
-.m-pull-t-10 { right: calc(10 * 100% / 12); }
-.m-pull-t-11 { right: calc(11 * 100% / 12); }
-@media screen and (min-width: 576px) {
-  .m-container { width: 560px; }
-  .m-container-inflatable .m-col-s-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-  .m-container-inflatable .m-col-s-10 .m-container-inflate.m-left-s {
-    margin-left: -10%;
-  }
-  .m-container-inflatable .m-col-s-10 .m-container-inflate.m-right-s {
-    margin-right: -10%;
-  }
-  [class*='m-col-s-'] { float: left; }
-  .m-left-s {
-    padding-right: 1rem;
-    float: left;
-  }
-  .m-right-s, [class*='m-col-s-'].m-right-s {
-    padding-left: 1rem;
-    float: right;
-  }
-  .m-center-s, [class*='m-col-s-'].m-center-s {
-    margin-left: auto;
-    margin-right: auto;
-    float: none;
-  }
-  .m-col-s-1  { width: calc(1  * 100% / 12); }
-  .m-col-s-2  { width: calc(2  * 100% / 12); }
-  .m-col-s-3  { width: calc(3  * 100% / 12); }
-  .m-col-s-4  { width: calc(4  * 100% / 12); }
-  .m-col-s-5  { width: calc(5  * 100% / 12); }
-  .m-col-s-6  { width: calc(6  * 100% / 12); }
-  .m-col-s-7  { width: calc(7  * 100% / 12); }
-  .m-col-s-8  { width: calc(8  * 100% / 12); }
-  .m-col-s-9  { width: calc(9  * 100% / 12); }
-  .m-col-s-10 { width: calc(10 * 100% / 12); }
-  .m-col-s-11 { width: calc(11 * 100% / 12); }
-  .m-col-s-12 { width: calc(12 * 100% / 12); }
-  .m-push-s-0  { left: calc(0  * 100% / 12); }
-  .m-push-s-1  { left: calc(1  * 100% / 12); }
-  .m-push-s-2  { left: calc(2  * 100% / 12); }
-  .m-push-s-3  { left: calc(3  * 100% / 12); }
-  .m-push-s-4  { left: calc(4  * 100% / 12); }
-  .m-push-s-5  { left: calc(5  * 100% / 12); }
-  .m-push-s-6  { left: calc(6  * 100% / 12); }
-  .m-push-s-7  { left: calc(7  * 100% / 12); }
-  .m-push-s-8  { left: calc(8  * 100% / 12); }
-  .m-push-s-9  { left: calc(9  * 100% / 12); }
-  .m-push-s-10 { left: calc(10 * 100% / 12); }
-  .m-push-s-11 { left: calc(11 * 100% / 12); }
-  .m-pull-s-0  { right: calc(0  * 100% / 12); }
-  .m-pull-s-1  { right: calc(1  * 100% / 12); }
-  .m-pull-s-2  { right: calc(2  * 100% / 12); }
-  .m-pull-s-3  { right: calc(3  * 100% / 12); }
-  .m-pull-s-4  { right: calc(4  * 100% / 12); }
-  .m-pull-s-5  { right: calc(5  * 100% / 12); }
-  .m-pull-s-6  { right: calc(6  * 100% / 12); }
-  .m-pull-s-7  { right: calc(7  * 100% / 12); }
-  .m-pull-s-8  { right: calc(8  * 100% / 12); }
-  .m-pull-s-9  { right: calc(9  * 100% / 12); }
-  .m-pull-s-10 { right: calc(10 * 100% / 12); }
-  .m-pull-s-11 { right: calc(11 * 100% / 12); }
-  .m-clearfix-t::after { display: none; }
-  .m-hide-s { display: none; }
-  .m-show-s { display: block; }
-  .m-col-s-none {
-    width: auto;
-    float: none;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container { width: 750px; }
-  .m-container-inflatable .m-col-m-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-  .m-container-inflatable .m-col-m-10 .m-container-inflate.m-left-m {
-    margin-left: -10%;
-  }
-  .m-container-inflatable .m-col-m-10 .m-container-inflate.m-right-m {
-    margin-right: -10%;
-  }
-  [class*='m-col-m-'] { float: left; }
-  .m-left-m {
-    padding-right: 1rem;
-    float: left;
-  }
-  .m-right-m, [class*='m-col-m-'].m-right-m {
-    padding-left: 1rem;
-    float: right;
-  }
-  .m-center-m, [class*='m-col-m-'].m-center-m {
-    margin-left: auto;
-    margin-right: auto;
-    float: none;
-  }
-  .m-col-m-1  { width: calc(1  * 100% / 12); }
-  .m-col-m-2  { width: calc(2  * 100% / 12); }
-  .m-col-m-3  { width: calc(3  * 100% / 12); }
-  .m-col-m-4  { width: calc(4  * 100% / 12); }
-  .m-col-m-5  { width: calc(5  * 100% / 12); }
-  .m-col-m-6  { width: calc(6  * 100% / 12); }
-  .m-col-m-7  { width: calc(7  * 100% / 12); }
-  .m-col-m-8  { width: calc(8  * 100% / 12); }
-  .m-col-m-9  { width: calc(9  * 100% / 12); }
-  .m-col-m-10 { width: calc(10 * 100% / 12); }
-  .m-col-m-11 { width: calc(11 * 100% / 12); }
-  .m-col-m-12 { width: calc(12 * 100% / 12); }
-  .m-push-m-0  { left: calc(0  * 100% / 12); }
-  .m-push-m-1  { left: calc(1  * 100% / 12); }
-  .m-push-m-2  { left: calc(2  * 100% / 12); }
-  .m-push-m-3  { left: calc(3  * 100% / 12); }
-  .m-push-m-4  { left: calc(4  * 100% / 12); }
-  .m-push-m-5  { left: calc(5  * 100% / 12); }
-  .m-push-m-6  { left: calc(6  * 100% / 12); }
-  .m-push-m-7  { left: calc(7  * 100% / 12); }
-  .m-push-m-8  { left: calc(8  * 100% / 12); }
-  .m-push-m-9  { left: calc(9  * 100% / 12); }
-  .m-push-m-10 { left: calc(10 * 100% / 12); }
-  .m-push-m-11 { left: calc(11 * 100% / 12); }
-  .m-pull-m-0  { right: calc(0  * 100% / 12); }
-  .m-pull-m-1  { right: calc(1  * 100% / 12); }
-  .m-pull-m-2  { right: calc(2  * 100% / 12); }
-  .m-pull-m-3  { right: calc(3  * 100% / 12); }
-  .m-pull-m-4  { right: calc(4  * 100% / 12); }
-  .m-pull-m-5  { right: calc(5  * 100% / 12); }
-  .m-pull-m-6  { right: calc(6  * 100% / 12); }
-  .m-pull-m-7  { right: calc(7  * 100% / 12); }
-  .m-pull-m-8  { right: calc(8  * 100% / 12); }
-  .m-pull-m-9  { right: calc(9  * 100% / 12); }
-  .m-pull-m-10 { right: calc(10 * 100% / 12); }
-  .m-pull-m-11 { right: calc(11 * 100% / 12); }
-  .m-clearfix-s::after { display: none; }
-  .m-hide-m { display: none; }
-  .m-show-m { display: block; }
-  .m-col-m-none {
-    width: auto;
-    float: none;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container { width: 960px; }
-  .m-container-inflatable .m-col-l-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-  .m-container-inflatable .m-col-l-10 .m-container-inflate.m-left-l {
-    margin-left: -10%;
-  }
-  .m-container-inflatable .m-col-l-10 .m-container-inflate.m-right-l {
-    margin-right: -10%;
-  }
-  [class*='m-col-l-'] { float: left; }
-  .m-left-l {
-    padding-right: 1rem;
-    float: left;
-  }
-  .m-right-l, [class*='m-col-l-'].m-right-l {
-    padding-left: 1rem;
-    float: right;
-  }
-  .m-center-l, [class*='m-col-l-'].m-center-l {
-    margin-left: auto;
-    margin-right: auto;
-    float: none;
-  }
-  .m-col-l-1  { width: calc(1  * 100% / 12); }
-  .m-col-l-2  { width: calc(2  * 100% / 12); }
-  .m-col-l-3  { width: calc(3  * 100% / 12); }
-  .m-col-l-4  { width: calc(4  * 100% / 12); }
-  .m-col-l-5  { width: calc(5  * 100% / 12); }
-  .m-col-l-6  { width: calc(6  * 100% / 12); }
-  .m-col-l-7  { width: calc(7  * 100% / 12); }
-  .m-col-l-8  { width: calc(8  * 100% / 12); }
-  .m-col-l-9  { width: calc(9  * 100% / 12); }
-  .m-col-l-10 { width: calc(10 * 100% / 12); }
-  .m-col-l-11 { width: calc(11 * 100% / 12); }
-  .m-col-l-12 { width: calc(12 * 100% / 12); }
-  .m-push-l-0  { left: calc(0  * 100% / 12); }
-  .m-push-l-1  { left: calc(1  * 100% / 12); }
-  .m-push-l-2  { left: calc(2  * 100% / 12); }
-  .m-push-l-3  { left: calc(3  * 100% / 12); }
-  .m-push-l-4  { left: calc(4  * 100% / 12); }
-  .m-push-l-5  { left: calc(5  * 100% / 12); }
-  .m-push-l-6  { left: calc(6  * 100% / 12); }
-  .m-push-l-7  { left: calc(7  * 100% / 12); }
-  .m-push-l-8  { left: calc(8  * 100% / 12); }
-  .m-push-l-9  { left: calc(9  * 100% / 12); }
-  .m-push-l-10 { left: calc(10 * 100% / 12); }
-  .m-push-l-11 { left: calc(11 * 100% / 12); }
-  .m-pull-l-0  { right: calc(0  * 100% / 12); }
-  .m-pull-l-1  { right: calc(1  * 100% / 12); }
-  .m-pull-l-2  { right: calc(2  * 100% / 12); }
-  .m-pull-l-3  { right: calc(3  * 100% / 12); }
-  .m-pull-l-4  { right: calc(4  * 100% / 12); }
-  .m-pull-l-5  { right: calc(5  * 100% / 12); }
-  .m-pull-l-6  { right: calc(6  * 100% / 12); }
-  .m-pull-l-7  { right: calc(7  * 100% / 12); }
-  .m-pull-l-8  { right: calc(8  * 100% / 12); }
-  .m-pull-l-9  { right: calc(9  * 100% / 12); }
-  .m-pull-l-10 { right: calc(10 * 100% / 12); }
-  .m-pull-l-11 { right: calc(11 * 100% / 12); }
-  .m-clearfix-m::after { display: none; }
-  .m-hide-l { display: none; }
-  .m-show-l { display: block; }
-  .m-col-l-none {
-    width: auto;
-    float: none;
-  }
-}
-
-html {
-  font-size: 14px;
-  background-color: #e8e8e8;
-}
-body {
-  font-family: 'Roboto', sans-serif;
-  font-size: 14px;
-  line-height: normal;
-  color: #000000;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin-top: 0;
-  font-weight: 300;
-}
-h1 {
-  margin-bottom: 1rem;
-}
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin-bottom: 0.5rem;
-}
-p,
-ul,
-ol,
-dl {
-  margin-top: 0;
-}
-ul,
-ol {
-  padding-left: 2rem;
-}
-ul ol,
-ul ul,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-main p {
-  text-indent: 1.5rem;
-  text-align: justify;
-}
-main p.m-noindent,
-li > p,
-dd > p,
-table.m-table td > p {
-  text-indent: 0;
-  text-align: left;
-}
-blockquote {
-  margin-top: 0;
-  margin-left: 1rem;
-  margin-right: 1rem;
-  padding: 1rem;
-  border-left-style: solid;
-  border-left-width: 0.25rem;
-}
-hr {
-  width: 75%;
-  border-width: 0.0625rem;
-  border-style: solid;
-}
-blockquote,
-hr {
-  border-color: #92d050;
-}
-strong,
-.m-text.m-strong {
-  font-weight: bold;
-}
-em,
-.m-text.m-em {
-  font-style: italic;
-}
-s,
-.m-text.m-s {
-  text-decoration: line-through;
-}
-sub,
-sup,
-.m-text.m-sub,
-.m-text.m-sup {
-  font-size: 0.75rem;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-sup,
-.m-text.m-sup {
-  top: -0.35rem;
-}
-sub,
-.m-text.m-sub {
-  bottom: -0.2rem;
-}
-abbr {
-  cursor: help;
-  text-decoration: underline dotted;
-}
-a {
-  color: #26a9e0;
-}
-a.m-flat {
-  text-decoration: none;
-}
-a:hover,
-a:focus,
-a:active {
-  color: #26a9e0;
-}
-a img {
-  border: 0;
-}
-svg a {
-  cursor: pointer;
-}
-mark {
-  padding: 0.0625rem;
-  background-color: #e6e69c;
-  color: #4c93d3;
-}
-.m-link-wrap {
-  word-break: break-all;
-}
-pre,
-code {
-  font-family: 'Monaco', monospace, monospace, monospace;
-  font-size: 1em;
-  color: #000000;
-  background-color: #f7f7f7;
-}
-pre.m-console,
-code.m-console {
-  color: #000000;
-  background-color: #f7f7f7;
-}
-pre {
-  padding: 0.5rem 1rem;
-  border-radius: 0px;
-  overflow-x: auto;
-  margin-top: 0;
-}
-pre.m-console-wrap {
-  white-space: pre-wrap;
-  word-break: break-all;
-}
-code {
-  padding: 0.125rem;
-}
-*:focus {
-  outline-color: #ffffff;
-}
-div.m-scroll {
-  max-width: 100%;
-  overflow-x: auto;
-}
-.m-fullwidth {
-  width: 100%;
-}
-.m-spacing-150 {
-  line-height: 1.5rem;
-}
-.m-text-center,
-.m-text-center.m-noindent,
-table.m-table th.m-text-center,
-.m-text-center p {
-  text-align: center;
-}
-.m-text-left,
-.m-text-left.m-noindent,
-table.m-table th.m-text-left,
-.m-text-right p {
-  text-align: left;
-}
-.m-text-right,
-.m-text-right.m-noindent,
-table.m-table th.m-text-right,
-.m-text-right p {
-  text-align: right;
-}
-.m-text-top,
-table.m-table th.m-text-top,
-table.m-table td.m-text-top {
-  vertical-align: top;
-}
-.m-text-middle,
-table.m-table th.m-text-middle,
-table.m-table td.m-text-middle {
-  vertical-align: middle;
-}
-.m-text-bottom,
-table.m-table th.m-text-bottom,
-table.m-table td.m-text-bottom {
-  vertical-align: bottom;
-}
-.m-text.m-tiny {
-  font-size: 50%;
-}
-.m-text.m-small {
-  font-size: 85.4%;
-}
-.m-text.m-big {
-  font-size: 117%;
-}
-h1 .m-thin,
-h2 .m-thin,
-h3 .m-thin,
-h4 .m-thin,
-h5 .m-thin,
-h6 .m-thin {
-  font-weight: normal;
-  font-size: 75%;
-  color: #bdbdbd;
-}
-ul.m-unstyled,
-ol.m-unstyled {
-  list-style-type: none;
-  padding-left: 0;
-}
-ul[class*="m-block-"],
-ol[class*="m-block-"] {
-  padding-left: 0;
-}
-ul[class*="m-block-"] li,
-ol[class*="m-block-"] li {
-  display: inline;
-}
-ul[class*="m-block-bar-"] li:not(:last-child)::after,
-ol[class*="m-block-bar-"] li:not(:last-child)::after {
-  content: " | ";
-}
-ul[class*="m-block-dot-"] li:not(:last-child)::after,
-ol[class*="m-block-dot-"] li:not(:last-child)::after {
-  content: " • ";
-}
-@media screen and (min-width: 576px) {
-  ul.m-block-bar-s,
-  ol.m-block-bar-s,
-  ul.m-block-dot-s,
-  ol.m-block-dot-s {
-    padding-left: 2rem;
-  }
-  ul.m-block-bar-s li,
-  ol.m-block-bar-s li,
-  ul.m-block-dot-s li,
-  ol.m-block-dot-s li {
-    display: list-item;
-  }
-  ul.m-block-bar-s li:not(:last-child)::after,
-  ol.m-block-bar-s li:not(:last-child)::after,
-  ul.m-block-dot-s li:not(:last-child)::after,
-  ol.m-block-dot-s li:not(:last-child)::after {
-    content: "";
-  }
-}
-@media screen and (min-width: 768px) {
-  ul.m-block-bar-m,
-  ol.m-block-bar-m,
-  ul.m-block-dot-m,
-  ol.m-block-dot-m {
-    padding-left: 2rem;
-  }
-  ul.m-block-bar-m li,
-  ol.m-block-bar-m li,
-  ul.m-block-dot-m li,
-  ol.m-block-dot-m li {
-    display: list-item;
-  }
-  ul.m-block-bar-m li:not(:last-child)::after,
-  ol.m-block-bar-m li:not(:last-child)::after,
-  ul.m-block-dot-m li:not(:last-child)::after,
-  ol.m-block-dot-m li:not(:last-child)::after {
-    content: "";
-  }
-}
-@media screen and (min-width: 992px) {
-  ul.m-block-bar-l,
-  ol.m-block-bar-l,
-  ul.m-block-dot-l,
-  ol.m-block-dot-l {
-    padding-left: 2rem;
-  }
-  ul.m-block-bar-l li,
-  ol.m-block-bar-l li,
-  ul.m-block-dot-l li,
-  ol.m-block-dot-l li {
-    display: list-item;
-  }
-  ul.m-block-bar-l li:not(:last-child)::after,
-  ol.m-block-bar-l li:not(:last-child)::after,
-  ul.m-block-dot-l li:not(:last-child)::after,
-  ol.m-block-dot-l li:not(:last-child)::after {
-    content: "";
-  }
-}
-p.m-poem {
-  text-indent: 0;
-  text-align: left;
-  margin-left: 1.5rem;
-}
-p.m-transition {
-  color: #ddd;
-  text-indent: 0;
-  text-align: center;
-  font-size: 2rem;
-}
-dl.m-diary {
-  margin-bottom: 1.25rem;
-}
-dl.m-diary:last-child {
-  margin-bottom: 0.25rem;
-}
-dl.m-diary dt {
-  font-weight: bold;
-  width: 6rem;
-  float: left;
-  clear: both;
-  padding-top: 0.25rem;
-}
-dl.m-diary dd {
-  padding-top: 0.25rem;
-  padding-left: 6rem;
-  margin-left: 0;
-}
-a.m-footnote,
-dl.m-footnote dd span.m-footnote {
-  top: -0.35rem;
-  font-size: 0.75rem;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-a.m-footnote,
-dl.m-footnote dd span.m-footnote a {
-  text-decoration: none;
-}
-a.m-footnote::before {
-  content: "[";
-}
-a.m-footnote::after {
-  content: "]";
-}
-dl.m-footnote dt {
-  width: 1.5rem;
-  float: left;
-  clear: both;
-}
-dl.m-footnote dd {
-  margin-left: 1.5rem;
-}
-dl.m-footnote {
-  font-size: 85.4%;
-}
-dl.m-footnote dd span.m-footnote a {
-  font-weight: bold;
-  font-style: italic;
-}
-.m-container-inflatable {
-  background-color: #ffffff;
-}
-.m-note {
-  border-radius: 0px;
-  padding: 1rem;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-frame {
-  background-color: #e8e8e8;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-  border-color: #ddd;
-  padding: 0.875rem;
-}
-.m-block {
-  border-style: solid;
-  border-width: 0.0625rem;
-  border-left-width: 0.25rem;
-  border-radius: 0px;
-  border-color: #ddd;
-  padding: 0.9375rem 0.9375rem 0.9375rem 0.75rem;
-}
-.m-block.hr {
-  width: 75%;
-  border-width: 0.0625rem;
-  border-style: solid;
-  border-color: #92d050;
-}
-.m-block.m-row.hr {
-  width: 75%;
-  border-width: 0.0625rem;
-  border-style: solid;
-  border-color: #92d050;
-}
-.m-block.m-badge::after {
-  content: " ";
-  display: block;
-  clear: both;
-}
-.m-block.m-badge h3 {
-  margin-left: 5rem;
-}
-.m-block.m-badge p {
-  margin-left: 5rem;
-  text-indent: 0;
-}
-.m-block.m-badge img {
-  width: 4rem;
-  height: 4rem;
-  border-radius: 0.5rem;
-  float: left;
-}
-div.m-button {
-  text-align: center;
-}
-div.m-button a {
-  display: inline-block;
-  border-radius: 0.5rem;
-  padding-top: 0.75rem;
-  padding-bottom: 0.75rem;
-  padding-left: 1.5rem;
-  padding-right: 1.5rem;
-  text-decoration: none;
-  font-size: 1.17rem;
-}
-div.m-button.m-fullwidth a {
-  display: block;
-  padding-left: 0.5rem;
-  padding-right: 0.5rem;
-}
-div.m-button a .m-big:first-child {
-  font-size: 1.37rem;
-  font-weight: bold;
-}
-div.m-button a .m-small:last-child {
-  font-size: 0.854rem;
-}
-.m-label {
-  border-radius: 0.5rem;
-  font-size: 75%;
-  font-weight: normal;
-  padding: 0.125rem 0.25rem;
-  vertical-align: 7.5%;
-}
-.m-label.m-flat {
-  border-width: 0.0625rem;
-  border-style: solid;
-  border-color: #bdbdbd;
-  padding: 0.0625rem 0.1875rem;
-}
-table.m-table {
-  border-collapse: collapse;
-  margin-left: auto;
-  margin-right: auto;
-}
-table.m-table.m-big {
-  margin-top: 1.75rem;
-}
-div.m-scroll > table.m-table:last-child {
-  margin-bottom: 0.0625rem;
-}
-table.m-table:not(.m-flat) tbody tr:hover {
-  background-color: #ddd;
-}
-table.m-table tr,
-table.m-table th,
-table.m-table td {
-  vertical-align: top;
-  border-style: solid;
-  border-top-width: 0.0625rem;
-  border-left-width: 0;
-  border-right-width: 0;
-  border-bottom-width: 0;
-  border-color: #ddd;
-}
-table.m-table tr:first-child th,
-table.m-table tr:first-child td {
-  vertical-align: top;
-  border-style: solid;
-  border-top-width: 0.0625rem;
-  border-left-width: 0;
-  border-right-width: 0;
-  border-bottom-width: 0;
-  border-color: #ddd;
-}
-table.m-table tr:last-child th,
-table.m-table tr:last-child td {
-  vertical-align: top;
-  border-style: solid;
-  border-top-width: 0.0625rem;
-  border-bottom-width: 0.0625rem;
-  border-left-width: 0;
-  border-right-width: 0;
-  border-color: #ddd;
-}
-table.m-table caption {
-  padding-bottom: 0.5rem;
-}
-table.m-table thead tr:first-child th,
-table.m-table thead tr:first-child td {
-  border-top-width: 0.125rem;
-  border-left-width: 0;
-  border-right-width: 0;
-}
-table.m-table thead th,
-table.m-table thead td {
-  border-bottom-width: 0.125rem;
-  vertical-align: bottom;
-  border-left-width: 0;
-  border-right-width: 0;
-}
-table.m-table tfoot th,
-table.m-table tfoot td {
-  border-top-width: 0.125rem;
-}
-table.m-table th,
-table.m-table td {
-  padding: 0.5rem;
-}
-table.m-table.m-big th,
-table.m-table.m-big td {
-  padding: 0.75rem 1rem;
-}
-table.m-table th {
-  text-align: left;
-}
-table.m-table th.m-thin {
-  font-weight: normal;
-}
-table.m-table td.m-default,
-table.m-table th.m-default,
-table.m-table td.m-primary,
-table.m-table th.m-primary,
-table.m-table td.m-success,
-table.m-table th.m-success,
-table.m-table td.m-warning,
-table.m-table th.m-warning,
-table.m-table td.m-danger,
-table.m-table th.m-danger,
-table.m-table td.m-info,
-table.m-table th.m-info,
-table.m-table td.m-dim,
-table.m-table th.m-dim,
-table.m-table td.m-type,
-table.m-table th.m-type {
-  padding-left: 0.4375rem;
-  padding-right: 0.4375rem;
-  border-left-width: 0.0625rem;
-}
-table.m-table.m-big td.m-default,
-table.m-table.m-big th.m-default,
-table.m-table.m-big td.m-primary,
-table.m-table.m-big th.m-primary,
-table.m-table.m-big td.m-success,
-table.m-table.m-big th.m-success,
-table.m-table.m-big td.m-warning,
-table.m-table.m-big th.m-warning,
-table.m-table.m-big td.m-danger,
-table.m-table.m-big th.m-danger,
-table.m-table.m-big td.m-info,
-table.m-table.m-big th.m-info,
-table.m-table.m-big td.m-dim,
-table.m-table.m-big th.m-dim,
-table.m-table.m-big td.m-type,
-table.m-table.m-big th.m-type {
-  padding-left: 0.9375rem;
-  padding-right: 0.9375rem;
-  border-left-width: 0.0625rem;
-}
-table.m-table tr.m-default td,
-table.m-table td.m-default,
-table.m-table tr.m-default th,
-table.m-table th.m-default,
-table.m-table tr.m-primary td,
-table.m-table td.m-primary,
-table.m-table tr.m-primary th,
-table.m-table th.m-primary,
-table.m-table tr.m-success td,
-table.m-table td.m-success,
-table.m-table tr.m-success th,
-table.m-table th.m-success,
-table.m-table tr.m-warning td,
-table.m-table td.m-warning,
-table.m-table tr.m-warning th,
-table.m-table th.m-warning,
-table.m-table tr.m-danger td,
-table.m-table td.m-danger,
-table.m-table tr.m-danger th,
-table.m-table th.m-danger,
-table.m-table tr.m-info td,
-table.m-table td.m-info,
-table.m-table tr.m-info th,
-table.m-table th.m-info,
-table.m-table tr.m-dim td,
-table.m-table td.m-dim,
-table.m-table tr.m-dim th,
-table.m-table th.m-dim,
-table.m-table tr.m-type td,
-table.m-table td.m-type,
-table.m-table tr.m-type th,
-table.m-table th.m-type {
-  border-color: #e8e8e8;
-}
-.m-note pre,
-.m-note code,
-table.m-table tr.m-default pre,
-table.m-table tr.m-default code,
-table.m-table td.m-default pre,
-table.m-table td.m-default code,
-table.m-table th.m-default pre,
-table.m-table th.m-default code,
-table.m-table tr.m-primary pre,
-table.m-table tr.m-primary code,
-table.m-table td.m-primary pre,
-table.m-table td.m-primary code,
-table.m-table th.m-primary pre,
-table.m-table th.m-primary code,
-table.m-table tr.m-success pre,
-table.m-table tr.m-success code,
-table.m-table td.m-success pre,
-table.m-table td.m-success code,
-table.m-table th.m-success pre,
-table.m-table th.m-success code,
-table.m-table tr.m-warning pre,
-table.m-table tr.m-warning code,
-table.m-table td.m-warning pre,
-table.m-table td.m-warning code,
-table.m-table th.m-warning pre,
-table.m-table th.m-warning code,
-table.m-table tr.m-danger pre,
-table.m-table tr.m-danger code,
-table.m-table td.m-danger pre,
-table.m-table td.m-danger code,
-table.m-table th.m-danger pre,
-table.m-table th.m-danger code,
-table.m-table tr.m-info pre,
-table.m-table tr.m-info code,
-table.m-table td.m-info pre,
-table.m-table td.m-info code,
-table.m-table th.m-info pre,
-table.m-table th.m-info code,
-table.m-table tr.m-dim pre,
-table.m-table tr.m-dim code,
-table.m-table td.m-dim pre,
-table.m-table td.m-dim code,
-table.m-table th.m-dim pre,
-table.m-table th.m-dim code,
-table.m-table tr.m-type pre,
-table.m-table tr.m-type code,
-table.m-table td.m-type pre,
-table.m-table td.m-type code,
-table.m-table th.m-type pre,
-table.m-table th.m-type code {
-  background-color: rgba(251, 240, 236, 0.5);
-}
-img.m-image,
-svg.m-image {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-div.m-image {
-  text-align: center;
-}
-img.m-image,
-svg.m-image,
-div.m-image img,
-div.m-image svg {
-  max-width: 100%;
-  border-radius: 0px;
-}
-div.m-image.m-fullwidth img,
-div.m-image.m-fullwidth svg {
-  width: 100%;
-}
-img.m-image.m-badge,
-div.m-image.m-badge img {
-  border-radius: 50%;
-}
-figure.m-figure {
-  max-width: 100%;
-  margin-top: 0;
-  margin-left: auto;
-  margin-right: auto;
-  position: relative;
-  display: table;
-}
-figure.m-figure:before {
-  position: absolute;
-  content: " ";
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  z-index: -1;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-  border-color: #ddd;
-}
-figure.m-figure.m-flat:before {
-  border-color: transparent;
-}
-figure.m-figure > * {
-  margin-left: 1rem;
-  margin-right: 1rem;
-  display: table-caption;
-  caption-side: bottom;
-}
-figure.m-figure > *:first-child {
-  display: inline;
-}
-figure.m-figure > *:last-child {
-  margin-bottom: 1rem !important;
-}
-figure.m-figure img,
-figure.m-figure svg {
-  position: relative;
-  margin-left: 0;
-  margin-right: 0;
-  margin-bottom: 0;
-  border-top-left-radius: 0px;
-  border-top-right-radius: 0px;
-  max-width: 100%;
-}
-figure.m-figure.m-flat img,
-figure.m-figure.m-flat svg {
-  border-bottom-left-radius: 0px;
-  border-bottom-right-radius: 0px;
-}
-figure.m-figure a img,
-figure.m-figure a svg {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-figure.m-figure.m-fullwidth,
-figure.m-figure.m-fullwidth > * {
-  display: block;
-}
-figure.m-figure.m-fullwidth > *:first-child {
-  display: inline;
-}
-figure.m-figure.m-fullwidth img,
-figure.m-figure.m-fullwidth svg {
-  width: 100%;
-}
-figure.m-figure.m-fullwidth:after {
-  content: " ";
-  display: block;
-  margin-top: 1rem;
-  height: 1px;
-}
-.m-code-figure,
-.m-console-figure {
-  margin-top: 0;
-  margin-left: 0;
-  margin-right: 0;
-  position: relative;
-  padding: 1rem;
-}
-.m-code-figure:before,
-.m-console-figure:before {
-  position: absolute;
-  content: " ";
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  z-index: -1;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-}
-.m-code-figure:before {
-  border-color: #f7f7f7;
-}
-.m-console-figure:before {
-  border-color: #f7f7f7;
-}
-.m-code-figure.m-flat:before,
-.m-console-figure.m-flat:before {
-  border-color: transparent;
-}
-.m-code-figure > pre:first-child,
-.m-console-figure > pre:first-child {
-  position: relative;
-  margin: -1rem -1rem 1rem -1rem;
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.m-code-figure > pre.m-nopad,
-.m-console-figure > pre.m-nopad {
-  margin-left: -0.875rem;
-  margin-right: -0.875rem;
-  margin-top: -1rem;
-  margin-bottom: -0.875rem;
-  padding-left: 0.875rem;
-}
-figure.m-figure figcaption,
-.m-code-figure figcaption,
-.m-console-figure figcaption {
-  margin-top: 0.5rem;
-  margin-bottom: 0.5rem;
-  font-weight: 300;
-  font-size: 1.17rem;
-}
-.m-imagegrid > div {
-  background-color: var(
-    --background-color
-  );
-}
-.m-imagegrid > div > figure {
-  display: block;
-  float: left;
-  position: relative;
-  margin: 0;
-}
-.m-imagegrid > div > figure > div,
-.m-imagegrid > div > figure > figcaption,
-.m-imagegrid > div > figure > a > div,
-.m-imagegrid > div > figure > a > figcaption {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  border-color: #e8e8e8;
-  border-style: solid;
-  border-width: 0.25rem;
-  padding: 0.5rem;
-}
-.m-imagegrid > div > figure:first-child > div,
-.m-imagegrid > div > figure:first-child > figcaption,
-.m-imagegrid > div > figure:first-child > a > div,
-.m-imagegrid > div > figure:first-child > a > figcaption {
-  border-left-width: 0;
-}
-.m-imagegrid > div > figure:last-child > div,
-.m-imagegrid > div > figure:last-child > figcaption,
-.m-imagegrid > div > figure:last-child > a > div,
-.m-imagegrid > div > figure:last-child > a > figcaption {
-  border-right-width: 0;
-}
-.m-imagegrid > div > figure > figcaption,
-.m-imagegrid > div > figure > a > figcaption {
-  color: transparent;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  font-size: 0.75rem;
-}
-.m-imagegrid > div > figure > div::before,
-.m-imagegrid > div > figure > figcaption::before,
-.m-imagegrid > div > figure > a > div::before,
-.m-imagegrid > div > figure > a > figcaption::before {
-  content: "";
-  display: inline-block;
-  height: 100%;
-  vertical-align: bottom;
-  width: 0;
-}
-.m-imagegrid > div > figure:hover > figcaption,
-.m-imagegrid > div > figure:hover > a > figcaption {
-  background: linear-gradient(
-    transparent 0%,
-    transparent 75%,
-    rgba(0, 0, 0, 0.85) 100%
-  );
-  color: #ffffff;
-}
-.m-imagegrid > div > figure > img,
-.m-imagegrid > div > figure > a > img {
-  width: 100%;
-  height: 100%;
-}
-.m-imagegrid > div::after {
-  display: block;
-  content: " ";
-  clear: both;
-}
-@media screen and (max-width: 767px) {
-  .m-imagegrid > div > figure {
-    float: none;
-    width: 100% !important;
-  }
-  .m-imagegrid > div > figure > div,
-  .m-imagegrid > div > figure > figcaption,
-  .m-imagegrid > div > figure > a > div,
-  .m-imagegrid > div > figure > a > figcaption {
-    border-left-width: 0;
-    border-right-width: 0;
-  }
-}
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-note,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-frame,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-block,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-imagegrid,
-.m-container-inflatable > .m-row > [class*="m-col-"] > pre,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-code-figure,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-console-figure,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-note,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-frame,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-block,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-imagegrid,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > pre,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-code-figure,
-.m-container-inflatable
-  > .m-row
-  > [class*="m-col-"]
-  section
-  > .m-console-figure,
-.m-container-inflatable [class*="m-center-"] > .m-note,
-.m-container-inflatable [class*="m-center-"] > .m-frame,
-.m-container-inflatable [class*="m-center-"] > .m-block,
-.m-container-inflatable [class*="m-center-"] > .m-imagegrid,
-.m-container-inflatable [class*="m-center-"] > pre,
-.m-container-inflatable [class*="m-center-"] > .m-code-figure,
-.m-container-inflatable [class*="m-center-"] > .m-console-figure,
-.m-container-inflatable [class*="m-left-"] > .m-note,
-.m-container-inflatable [class*="m-left-"] > .m-frame,
-.m-container-inflatable [class*="m-left-"] > .m-block,
-.m-container-inflatable [class*="m-left-"] > .m-imagegrid,
-.m-container-inflatable [class*="m-left-"] > pre,
-.m-container-inflatable [class*="m-left-"] > .m-code-figure,
-.m-container-inflatable [class*="m-left-"] > .m-console-figure,
-.m-container-inflatable [class*="m-right-"] > .m-note,
-.m-container-inflatable [class*="m-right-"] > .m-frame,
-.m-container-inflatable [class*="m-right-"] > .m-block,
-.m-container-inflatable [class*="m-right-"] > .m-imagegrid,
-.m-container-inflatable [class*="m-right-"] > pre,
-.m-container-inflatable [class*="m-right-"] > .m-code-figure,
-.m-container-inflatable [class*="m-right-"] > .m-console-figure,
-.m-container-inflatable .m-container-inflate > .m-note,
-.m-container-inflatable .m-container-inflate > .m-frame,
-.m-container-inflatable .m-container-inflate > .m-block,
-.m-container-inflatable .m-container-inflate > .m-imagegrid,
-.m-container-inflatable .m-container-inflate > pre,
-.m-container-inflatable .m-container-inflate > .m-code-figure,
-.m-container-inflatable .m-container-inflate > .m-console-figure {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-@media screen and (min-width: 576px) {
-  .m-container-inflatable .m-center-s > .m-note,
-  .m-container-inflatable .m-center-s > .m-frame,
-  .m-container-inflatable .m-center-s > .m-block,
-  .m-container-inflatable .m-center-s > .m-imagegrid,
-  .m-container-inflatable .m-center-s > pre,
-  .m-container-inflatable .m-center-s > .m-code-figure,
-  .m-container-inflatable .m-center-s > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable .m-left-s > .m-note,
-  .m-container-inflatable .m-left-s > .m-frame,
-  .m-container-inflatable .m-left-s > .m-block,
-  .m-container-inflatable .m-left-s > .m-imagegrid,
-  .m-container-inflatable .m-left-s > pre,
-  .m-container-inflatable .m-left-s > .m-code-figure,
-  .m-container-inflatable .m-left-s > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: 0;
-  }
-  .m-container-inflatable .m-right-s > .m-note,
-  .m-container-inflatable .m-right-s > .m-frame,
-  .m-container-inflatable .m-right-s > .m-block,
-  .m-container-inflatable .m-right-s > .m-imagegrid,
-  .m-container-inflatable .m-right-s > pre,
-  .m-container-inflatable .m-right-s > .m-code-figure,
-  .m-container-inflatable .m-right-s > .m-console-figure {
-    margin-left: 0;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable
-    > .m-row
-    > .m-col-s-10
-    > .m-imagegrid.m-container-inflate,
-  .m-container-inflatable
-    > .m-row
-    > .m-col-s-10
-    section
-    > .m-imagegrid.m-container-inflate {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container-inflatable .m-center-m > .m-note,
-  .m-container-inflatable .m-center-m > .m-frame,
-  .m-container-inflatable .m-center-m > .m-block,
-  .m-container-inflatable .m-center-m > .m-imagegrid,
-  .m-container-inflatable .m-center-m > pre,
-  .m-container-inflatable .m-center-m > .m-code-figure,
-  .m-container-inflatable .m-center-m > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable .m-left-m > .m-note,
-  .m-container-inflatable .m-left-m > .m-frame,
-  .m-container-inflatable .m-left-m > .m-block,
-  .m-container-inflatable .m-left-m > .m-imagegrid,
-  .m-container-inflatable .m-left-m > pre,
-  .m-container-inflatable .m-left-m > .m-code-figure,
-  .m-container-inflatable .m-left-m > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: 0;
-  }
-  .m-container-inflatable .m-right-m > .m-note,
-  .m-container-inflatable .m-right-m > .m-frame,
-  .m-container-inflatable .m-right-m > .m-block,
-  .m-container-inflatable .m-right-m > .m-imagegrid,
-  .m-container-inflatable .m-right-m > pre,
-  .m-container-inflatable .m-right-m > .m-code-figure,
-  .m-container-inflatable .m-right-m > .m-console-figure {
-    margin-left: 0;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable
-    > .m-row
-    > .m-col-m-10
-    > .m-imagegrid.m-container-inflate,
-  .m-container-inflatable
-    > .m-row
-    > .m-col-m-10
-    section
-    > .m-imagegrid.m-container-inflate {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container-inflatable .m-center-l > .m-note,
-  .m-container-inflatable .m-center-l > .m-frame,
-  .m-container-inflatable .m-center-l > .m-block,
-  .m-container-inflatable .m-center-l > .m-imagegrid,
-  .m-container-inflatable .m-center-l > pre,
-  .m-container-inflatable .m-center-l > .m-code-figure,
-  .m-container-inflatable .m-center-l > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable .m-left-l > .m-note,
-  .m-container-inflatable .m-left-l > .m-frame,
-  .m-container-inflatable .m-left-l > .m-block,
-  .m-container-inflatable .m-left-l > .m-imagegrid,
-  .m-container-inflatable .m-left-l > pre,
-  .m-container-inflatable .m-left-l > .m-code-figure,
-  .m-container-inflatable .m-left-l > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: 0;
-  }
-  .m-container-inflatable .m-right-l > .m-note,
-  .m-container-inflatable .m-right-l > .m-frame,
-  .m-container-inflatable .m-right-l > .m-block,
-  .m-container-inflatable .m-right-l > .m-imagegrid,
-  .m-container-inflatable .m-right-l > pre,
-  .m-container-inflatable .m-right-l > .m-code-figure,
-  .m-container-inflatable .m-right-l > .m-console-figure {
-    margin-left: 0;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable
-    > .m-row
-    > .m-col-l-10
-    > .m-imagegrid.m-container-inflate,
-  .m-container-inflatable
-    > .m-row
-    > .m-col-l-10
-    section
-    > .m-imagegrid.m-container-inflate {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-}
-pre.m-code span.hll {
-  margin-left: -1rem;
-  margin-right: -1rem;
-  padding-left: 1rem;
-}
-.m-code.m-inverted > span,
-.m-console.m-inverted > span {
-  opacity: 0.3333;
-}
-.m-code.m-inverted > span.hll,
-.m-console.m-inverted > span.hll {
-  opacity: 1;
-  background-color: transparent;
-  border-color: transparent;
-}
-.m-code.m-inverted {
-  color: rgba(91, 91, 91, 0.33);
-}
-.m-console.m-inverted {
-  color: rgba(91, 91, 91, 0.33);
-}
-.m-code.m-inverted > span.hll {
-  color: #000000;
-}
-.m-cosole.m-inverted > span.hll {
-  color: #000000;
-}
-.m-code-color {
-  display: inline-block;
-  width: 0.75rem;
-  height: 0.75rem;
-  vertical-align: -0.05rem;
-  margin-left: 0.2rem;
-  margin-right: 0.1rem;
-  border-radius: 0px;
-}
-div.m-math {
-  overflow-x: auto;
-  overflow-y: hidden;
-}
-div.m-math svg {
-  margin-left: auto;
-  margin-right: auto;
-  display: block;
-}
-div.m-button a svg.m-math {
-  fill: #ffffff;
-}
-div.m-button.m-flat a svg.m-math {
-  fill: #000000;
-}
-div.m-button.m-flat a:hover svg.m-math,
-div.m-button.m-default a:focus svg.m-math,
-div.m-button.m-default a:active svg.m-math {
-  fill: #26a9e0;
-}
-.m-graph {
-  font-size: 14px;
-}
-div.m-plot svg,
-div.m-graph svg {
-  max-width: 100%;
-  margin-left: auto;
-  margin-right: auto;
-  display: block;
-}
-div.m-plot .m-background {
-  fill: #fbf0ec;
-}
-div.m-plot svg .m-label {
-  font-size: 11px;
-}
-div.m-plot svg .m-title {
-  font-size: 13px;
-}
-div.m-plot svg .m-label,
-div.m-plot svg .m-title {
-  fill: #000000;
-}
-div.m-plot svg .m-line {
-  stroke: #000000;
-  stroke-width: 0.8;
-}
-div.m-plot svg .m-error {
-  stroke: #000000;
-  stroke-width: 1.5;
-}
-div.m-plot svg .m-label.m-dim {
-  fill: #bdbdbd;
-}
-.m-graph g.m-edge path,
-.m-graph g.m-node.m-flat ellipse,
-.m-graph g.m-node.m-flat polygon {
-  fill: none;
-}
-.m-graph g.m-node:not(.m-flat) text {
-  fill: #ffffff;
-}
-figure.m-figure > svg.m-math:first-child,
-figure.m-figure > svg.m-graph:first-child {
-  padding: 1rem;
-  box-sizing: content-box;
-}
-figure.m-figure:not(.m-flat) > svg.m-math:first-child,
-figure.m-figure:not(.m-flat) > svg.m-graph:first-child {
-  background-color: #ddd;
-}
-.m-block.m-default {
-  border-left-color: #ddd;
-}
-.m-block.m-default h3,
-.m-block.m-default h4,
-.m-block.m-default h5,
-.m-block.m-default h6,
-.m-text.m-default,
-.m-label.m-flat.m-default {
-  color: #000000;
-}
-.m-block.m-default h3 a,
-.m-block.m-default h4 a,
-.m-block.m-default h5 a,
-.m-block.m-default h6 a {
-  color: #26a9e0;
-}
-.m-block.m-primary {
-  border-left-color: #31708f;
-}
-.m-block.m-primary h3,
-.m-block.m-primary h4,
-.m-block.m-primary h5,
-.m-block.m-primary h6,
-.m-block.m-primary h3 a,
-.m-block.m-primary h4 a,
-.m-block.m-primary h5 a,
-.m-block.m-primary h6 a,
-.m-text.m-primary,
-.m-label.m-flat.m-primary {
-  color: #31708f;
-}
-.m-block.m-success {
-  border-left-color: #9ad36a;
-}
-.m-block.m-success h3,
-.m-block.m-success h4,
-.m-block.m-success h5,
-.m-block.m-success h6,
-.m-block.m-success h3 a,
-.m-block.m-success h4 a,
-.m-block.m-success h5 a,
-.m-block.m-success h6 a,
-.m-text.m-success,
-.m-label.m-flat.m-success {
-  color: #9ad36a;
-}
-.m-block.m-warning {
-  border-left-color: #f9cf79;
-}
-.m-block.m-warning h3,
-.m-block.m-warning h4,
-.m-block.m-warning h5,
-.m-block.m-warning h6,
-.m-block.m-warning h3 a,
-.m-block.m-warning h4 a,
-.m-block.m-warning h5 a,
-.m-block.m-warning h6 a,
-.m-text.m-warning,
-.m-label.m-flat.m-warning {
-  color: #f9cf79;
-}
-.m-block.m-danger {
-  border-left-color: #f60000;
-}
-.m-block.m-danger h3,
-.m-block.m-danger h4,
-.m-block.m-danger h5,
-.m-block.m-danger h6,
-.m-block.m-danger h3 a,
-.m-block.m-danger h4 a,
-.m-block.m-danger h5 a,
-.m-block.m-danger h6 a,
-.m-text.m-danger,
-.m-label.m-flat.m-danger {
-  color: #f60000;
-}
-.m-block.m-info {
-  border-left-color: #31708f;
-}
-.m-block.m-info h3,
-.m-block.m-info h4,
-.m-block.m-info h5,
-.m-block.m-info h6,
-.m-block.m-info h3 a,
-.m-block.m-info h4 a,
-.m-block.m-info h5 a,
-.m-block.m-info h6 a,
-.m-text.m-info,
-.m-label.m-flat.m-info {
-  color: #31708f;
-}
-.m-block.m-type h3,
-.m-block.m-type h4,
-.m-block.m-type h5,
-.m-block.m-type h6,
-.m-block.m-type h3 a,
-.m-block.m-type h4 a,
-.m-block.m-type h5 a,
-.m-block.m-type h6 a,
-.m-text.m-type,
-.m-label.m-flat.m-type {
-  color: #9ad36a;
-}
-.m-block.m-dim {
-  border-left-color: #bdbdbd;
-}
-span.m-default {
-  color: #000000;
-  background-color: transparent;
-}
-span.m-default a {
-  color: var(--default-link-color);
-  background-color: transparent;
-}
-span.m-default a:hover,
-span.m-default a:focus,
-span.m-default a:active {
-  color: #26a9e0;
-  background-color: transparent;
-}
-span.m-primary {
-  color: #31708f;
-  background-color: transparent;
-}
-span.m-primary a {
-  color: var(--primary-link-color);
-  background-color: transparent;
-}
-span.m-primary a:hover,
-span.m-primary a:focus,
-span.m-primary a:active {
-  color: #31708f;
-  background-color: transparent;
-}
-span.m-success {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-success a {
-  color: var(--success-link-color);
-  background-color: transparent;
-}
-span.m-success a:hover,
-span.m-success a:focus,
-span.m-success a:active {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-warning {
-  color: #f9cf79;
-  background-color: transparent;
-}
-span.m-warning a {
-  color: var(--warning-link-color);
-  background-color: transparent;
-}
-span.m-warning a:hover,
-span.m-warning a:focus,
-span.m-warning a:active {
-  color: #f9cf79;
-  background-color: transparent;
-}
-span.m-danger {
-  color: #f60000;
-  background-color: transparent;
-}
-span.m-danger a {
-  color: var(--danger-link-color);
-  background-color: transparent;
-}
-span.m-danger a:hover,
-span.m-danger a:focus,
-span.m-danger a:active {
-  color: #f60000;
-  background-color: transparent;
-}
-span.m-info {
-  color: #31708f;
-  background-color: transparent;
-}
-span.m-info a {
-  color: var(--info-link-color);
-  background-color: transparent;
-}
-span.m-info a:hover,
-span.m-info a:focus,
-span.m-info a:active {
-  color: #67cce0;
-  background-color: transparent;
-}
-span.m-type {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-type a {
-  color: var(--type-link-color);
-  background-color: transparent;
-}
-span.m-type a:hover,
-span.m-type a:focus,
-span.m-type a:active {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-dim {
-  color: #bdbdbd;
-  background-color: transparent;
-}
-span.m-dim a {
-  color: #c0c0c0;
-  background-color: transparent;
-}
-span.m-dim a:hover,
-span.m-dim a:focus,
-span.m-dim a:active {
-  color: #949494;
-  background-color: transparent;
-}
-.m-block.m-dim,
-.m-text.m-dim,
-.m-label.m-flat.m-dim {
-  color: #bdbdbd;
-}
-.m-block.m-dim a,
-.m-text.m-dim a {
-  color: #c0c0c0;
-}
-.m-block.m-dim a:hover,
-.m-block.m-dim a:focus,
-.m-block.m-dim a:active,
-.m-text.m-dim a:hover,
-.m-text.m-dim a:focus,
-.m-text.m-dim a:active {
-  color: #949494;
-}
-.m-block.m-type {
-  border-left-color: #9ad36a;
-}
-.m-block.m-type h3,
-.m-block.m-type h4,
-.m-block.m-type h5,
-.m-block.m-type h6,
-.m-block.m-type h3 a,
-.m-block.m-type h4 a,
-.m-block.m-type h5 a,
-.m-block.m-type h6 a,
-.m-text.m-type,
-.m-label.m-flat.m-type {
-  color: #9ad36a;
-}
-.m-block.m-flat {
-  border-color: transparent;
-}
-.m-block.m-flat h3,
-.m-block.m-flat h4,
-.m-block.m-flat h5,
-.m-block.m-flat h6 {
-  color: #000000;
-}
-.m-block.m-default h3 a:hover,
-.m-block.m-default h3 a:focus,
-.m-block.m-default h3 a:active,
-.m-block.m-default h4 a:hover,
-.m-block.m-default h4 a:focus,
-.m-block.m-default h4 a:active,
-.m-block.m-default h5 a:hover,
-.m-block.m-default h5 a:focus,
-.m-block.m-default h5 a:active,
-.m-block.m-default h6 a:hover,
-.m-block.m-default h6 a:focus,
-.m-block.m-default h6 a:active {
-  color: #26a9e0;
-}
-.m-block.m-primary h3 a:hover,
-.m-block.m-primary h3 a:focus,
-.m-block.m-primary h3 a:active,
-.m-block.m-primary h4 a:hover,
-.m-block.m-primary h4 a:focus,
-.m-block.m-primary h4 a:active,
-.m-block.m-primary h5 a:hover,
-.m-block.m-primary h5 a:focus,
-.m-block.m-primary h5 a:active,
-.m-block.m-primary h6 a:hover,
-.m-block.m-primary h6 a:focus,
-.m-block.m-primary h6 a:active {
-  color: #31708f;
-}
-.m-block.m-success h3 a:hover,
-.m-block.m-success h3 a:focus,
-.m-block.m-success h3 a:active,
-.m-block.m-success h4 a:hover,
-.m-block.m-success h4 a:focus,
-.m-block.m-success h4 a:active,
-.m-block.m-success h5 a:hover,
-.m-block.m-success h5 a:focus,
-.m-block.m-success h5 a:active,
-.m-block.m-success h6 a:hover,
-.m-block.m-success h6 a:focus,
-.m-block.m-success h6 a:active {
-  color: #9ad36a;
-}
-.m-block.m-warning h3 a:hover,
-.m-block.m-warning h3 a:focus,
-.m-block.m-warning h3 a:active,
-.m-block.m-warning h4 a:hover,
-.m-block.m-warning h4 a:focus,
-.m-block.m-warning h4 a:active,
-.m-block.m-warning h5 a:hover,
-.m-block.m-warning h5 a:focus,
-.m-block.m-warning h5 a:active,
-.m-block.m-warning h6 a:hover,
-.m-block.m-warning h6 a:focus,
-.m-block.m-warning h6 a:active {
-  color: #f9cf79;
-}
-.m-block.m-danger h3 a:hover,
-.m-block.m-danger h3 a:focus,
-.m-block.m-danger h3 a:active,
-.m-block.m-danger h4 a:hover,
-.m-block.m-danger h4 a:focus,
-.m-block.m-danger h4 a:active,
-.m-block.m-danger h5 a:hover,
-.m-block.m-danger h5 a:focus,
-.m-block.m-danger h5 a:active,
-.m-block.m-danger h6 a:hover,
-.m-block.m-danger h6 a:focus,
-.m-block.m-danger h6 a:active {
-  color: #f60000;
-}
-.m-block.m-info h3 a:hover,
-.m-block.m-info h3 a:focus,
-.m-block.m-info h3 a:active,
-.m-block.m-info h4 a:hover,
-.m-block.m-info h4 a:focus,
-.m-block.m-info h4 a:active,
-.m-block.m-info h5 a:hover,
-.m-block.m-info h5 a:focus,
-.m-block.m-info h5 a:active,
-.m-block.m-info h6 a:hover,
-.m-block.m-info h6 a:focus,
-.m-block.m-info h6 a:active {
-  color: #67cce0;
-}
-.m-block.m-type h3 a:hover,
-.m-block.m-type h3 a:focus,
-.m-block.m-type h3 a:active,
-.m-block.m-type h4 a:hover,
-.m-block.m-type h4 a:focus,
-.m-block.m-type h4 a:active,
-.m-block.m-type h5 a:hover,
-.m-block.m-type h5 a:focus,
-.m-block.m-type h5 a:active,
-.m-block.m-type h6 a:hover,
-.m-block.m-type h6 a:focus,
-.m-block.m-type h6 a:active {
-  color: #9ad36a;
-}
-div.m-button a,
-.m-label {
-  color: #ffffff;
-}
-div.m-button.m-flat a {
-  color: #000000;
-}
-div.m-button.m-flat a:hover,
-div.m-button.m-default a:focus,
-div.m-button.m-default a:active {
-  color: #26a9e0;
-}
-div.m-button.m-default a,
-.m-label:not(.m-flat).m-default {
-  background-color: #000000;
-  color: #000000;
-}
-div.m-button.m-primary a,
-.m-label:not(.m-flat).m-primary {
-  background-color: #31708f;
-  color: #67cce0;
-}
-div.m-button.m-success a,
-.m-label:not(.m-flat).m-success {
-  background-color: #9ad36a;
-  color: #3c763d;
-}
-div.m-button.m-warning a,
-.m-label:not(.m-flat).m-warning {
-  background-color: #f9cf79;
-  color: #8a6d3b;
-}
-div.m-button.m-danger a,
-.m-label:not(.m-flat).m-danger {
-  background-color: #f60000;
-  color: #920000;
-}
-div.m-button.m-info a,
-.m-label:not(.m-flat).m-info {
-  background-color: #31708f;
-  color: #81bcda;
-}
-div.m-button.m-dim a,
-.m-label:not(.m-flat).m-dim {
-  background-color: #bdbdbd;
-  color: #7c7c7c;
-}
-div.m-button.m-type a,
-.m-label:not(.m-flat).m-type {
-  background-color: #9ad36a;
-  color: #3c763d;
-}
-div.m-button.m-default a:hover,
-div.m-button.m-default a:focus,
-div.m-button.m-default a:active {
-  background-color: #26a9e0;
-}
-div.m-button.m-primary a:hover,
-div.m-button.m-primary a:focus,
-div.m-button.m-primary a:active {
-  background-color: #31708f;
-}
-div.m-button.m-success a:hover,
-div.m-button.m-success a:focus,
-div.m-button.m-success a:active {
-  background-color: #9ad36a;
-}
-div.m-button.m-warning a:hover,
-div.m-button.m-warning a:focus,
-div.m-button.m-warning a:active {
-  background-color: #f9cf79;
-}
-div.m-button.m-danger a:hover,
-div.m-button.m-danger a:focus,
-div.m-button.m-danger a:active {
-  background-color: #f60000;
-}
-div.m-button.m-info a:hover,
-div.m-button.m-info a:focus,
-div.m-button.m-info a:active {
-  background-color: #67cce0;
-}
-div.m-button.m-dim a:hover,
-div.m-button.m-dim a:focus,
-div.m-button.m-dim a:active {
-  background-color: #c0c0c0;
-}
-div.m-button.m-type a:hover,
-div.m-button.m-type a:focus,
-div.m-button.m-type a:active {
-  background-color: #9ad36a;
-}
-.m-note.m-default {
-  background-color: transparent;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-default,
-table.m-table tr.m-default td,
-table.m-table td.m-default,
-table.m-table tr.m-default th,
-table.m-table th.m-default,
-table.m-table tr.m-default strong,
-table.m-table strong.m-default,
-table.m-table tr.m-default em,
-table.m-table em.m-default {
-  color: #000000;
-}
-.m-note.m-default a:hover,
-table.m-table tr.m-default td a:hover,
-table.m-table td.m-default a:hover,
-table.m-table tr.m-default th a:hover,
-table.m-table th.m-default a:hover,
-.m-note.m-default a:focus,
-table.m-table tr.m-default td a:focus,
-table.m-table td.m-default a:focus,
-table.m-table tr.m-default th a:focus,
-table.m-table th.m-default a:focus,
-.m-note.m-default a:active,
-table.m-table tr.m-default td a:active,
-table.m-table td.m-default a:active,
-table.m-table tr.m-default th a:active,
-table.m-table th.m-default a:active {
-  color: #26a9e0;
-}
-.m-note.m-primary {
-  border-color: #31708f;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-primary a,
-table.m-table tr.m-primary td a,
-table.m-table td.m-primary a,
-table.m-table tr.m-primary th a,
-table.m-table th.m-primary a {
-  color: #26a9e0;
-}
-.m-note.m-primary,
-table.m-table tr.m-primary td,
-table.m-table td.m-primary,
-table.m-table tr.m-primary th,
-table.m-table th.m-primary,
-table.m-table tr.m-primary strong,
-table.m-table strong.m-primary,
-table.m-table tr.m-primary em,
-table.m-table em.m-primary {
-  background-color: transparent;
-  color: #67cce0;
-}
-.m-note.m-primary a,
-table.m-table tr.m-primary td a,
-table.m-table td.m-primary a,
-table.m-table tr.m-primary th a,
-table.m-table th.m-primary a {
-  color: #31708f;
-}
-.m-note.m-primary a:hover,
-table.m-table tr.m-primary td a:hover,
-table.m-table td.m-primary a:hover,
-table.m-table tr.m-primary th a:hover,
-table.m-table th.m-primary a:hover,
-.m-note.m-primary a:focus,
-table.m-table tr.m-primary td a:focus,
-table.m-table td.m-primary a:focus,
-table.m-table tr.m-primary th a:focus,
-table.m-table th.m-primary a:focus,
-.m-note.m-primary a:active,
-table.m-table tr.m-primary td a:active,
-table.m-table td.m-primary a:active,
-table.m-table tr.m-primary th a:active,
-table.m-table th.m-primary a:active {
-  color: #31708f;
-}
-.m-note.m-success {
-  border-color: #9ad36a;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-success,
-table.m-table tr.m-success td,
-table.m-table td.m-success,
-table.m-table tr.m-success th,
-table.m-table th.m-success,
-table.m-table tr.m-success strong,
-table.m-table strong.m-success,
-table.m-table tr.m-success em,
-table.m-table em.m-success {
-  background-color: transparent;
-  color: #3c763d;
-}
-.m-note.m-success a,
-table.m-table tr.m-success td a,
-table.m-table td.m-success a,
-table.m-table tr.m-success th a,
-table.m-table th.m-success a {
-  color: #9ad36a;
-}
-.m-note.m-success a:hover,
-table.m-table tr.m-success td a:hover,
-table.m-table td.m-success a:hover,
-table.m-table tr.m-success th a:hover,
-table.m-table th.m-success a:hover,
-.m-note.m-success a:focus,
-table.m-table tr.m-success td a:focus,
-table.m-table td.m-success a:focus,
-table.m-table tr.m-success th a:focus,
-table.m-table th.m-success a:focus,
-.m-note.m-success a:active,
-table.m-table tr.m-success td a:active,
-table.m-table td.m-success a:active,
-table.m-table tr.m-success th a:active,
-table.m-table th.m-success a:active {
-  color: #9ad36a;
-}
-.m-note.m-warning {
-  border-color: #f9cf79;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-warning,
-table.m-table tr.m-warning td,
-table.m-table td.m-warning,
-table.m-table tr.m-warning th,
-table.m-table th.m-warning,
-table.m-table tr.m-warning strong,
-table.m-table strong.m-warning,
-table.m-table tr.m-warning em,
-table.m-table em.m-warning {
-  background-color: transparent;
-  color: #8a6d3b;
-}
-.m-note.m-warning a,
-table.m-table tr.m-warning td a,
-table.m-table td.m-warning a,
-table.m-table tr.m-warning th a,
-table.m-table th.m-warning a {
-  color: #f9cf79;
-}
-.m-note.m-warning a:hover,
-table.m-table tr.m-warning td a:hover,
-table.m-table td.m-warning a:hover,
-table.m-table tr.m-warning th a:hover,
-table.m-table th.m-warning a:hover,
-.m-note.m-warning a:focus,
-table.m-table tr.m-warning td a:focus,
-table.m-table td.m-warning a:focus,
-table.m-table tr.m-warning th a:focus,
-table.m-table th.m-warning a:focus,
-.m-note.m-warning a:active,
-table.m-table tr.m-warning td a:active,
-table.m-table td.m-warning a:active,
-table.m-table tr.m-warning th a:active,
-table.m-table th.m-warning a:active {
-  color: #f9cf79;
-}
-.m-note.m-danger {
-  border-color: #f60000;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-danger,
-table.m-table tr.m-danger td,
-table.m-table td.m-danger,
-table.m-table tr.m-danger th,
-table.m-table th.m-danger,
-table.m-table tr.m-danger strong,
-table.m-table strong.m-danger,
-table.m-table tr.m-danger em,
-table.m-table em.m-danger {
-  background-color: transparent;
-  color: #920000;
-}
-.m-note.m-danger a,
-table.m-table tr.m-danger td a,
-table.m-table td.m-danger a,
-table.m-table tr.m-danger th a,
-table.m-table th.m-danger a {
-  color: #f60000;
-}
-.m-note.m-danger a:hover,
-table.m-table tr.m-danger td a:hover,
-table.m-table td.m-danger a:hover,
-table.m-table tr.m-danger th a:hover,
-table.m-table th.m-danger a:hover,
-.m-note.m-danger a:focus,
-table.m-table tr.m-danger td a:focus,
-table.m-table td.m-danger a:focus,
-table.m-table tr.m-danger th a:focus,
-table.m-table th.m-danger a:focus,
-.m-note.m-danger a:active,
-table.m-table tr.m-danger td a:active,
-table.m-table td.m-danger a:active,
-table.m-table tr.m-danger th a:active,
-table.m-table th.m-danger a:active {
-  color: #f60000;
-}
-.m-note.m-info {
-  border-color: #31708f;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-info,
-table.m-table tr.m-info td,
-table.m-table td.m-info,
-table.m-table tr.m-info th,
-table.m-table th.m-info,
-table.m-table tr.m-info strong,
-table.m-table strong.m-info,
-table.m-table tr.m-info em,
-table.m-table em.m-info {
-  background-color: transparent;
-  color: #81bcda;
-}
-.m-note.m-info a,
-table.m-table tr.m-info td a,
-table.m-table td.m-info a,
-table.m-table tr.m-info th a,
-table.m-table th.m-info a {
-  color: #67cce0;
-}
-.m-note.m-info a:hover,
-table.m-table tr.m-info td a:hover,
-table.m-table td.m-info a:hover,
-table.m-table tr.m-info th a:hover,
-table.m-table th.m-info a:hover,
-.m-note.m-info a:focus,
-table.m-table tr.m-info td a:focus,
-table.m-table td.m-info a:focus,
-table.m-table tr.m-info th a:focus,
-table.m-table th.m-info a:focus,
-.m-note.m-info a:active,
-table.m-table tr.m-info td a:active,
-table.m-table td.m-info a:active,
-table.m-table tr.m-info th a:active,
-table.m-table th.m-info a:active {
-  color: #67cce0;
-}
-.m-note.m-dim {
-  border-color: #bdbdbd;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-dim,
-table.m-table tr.m-dim td,
-table.m-table td.m-dim,
-table.m-table tr.m-dim th,
-table.m-table th.m-dim,
-table.m-table tr.m-dim strong,
-table.m-table strong.m-dim,
-table.m-table tr.m-dim em,
-table.m-table em.m-dim {
-  background-color: transparent;
-  color: #7c7c7c;
-}
-.m-note.m-dim a,
-table.m-table tr.m-dim td a,
-table.m-table td.m-dim a,
-table.m-table tr.m-dim th a,
-table.m-table th.m-dim a {
-  color: #c0c0c0;
-}
-.m-note.m-dim a:hover,
-table.m-table tr.m-dim td a:hover,
-table.m-table td.m-dim a:hover,
-table.m-table tr.m-dim th a:hover,
-table.m-table th.m-dim a:hover,
-.m-note.m-dim a:focus,
-table.m-table tr.m-dim td a:focus,
-table.m-table td.m-dim a:focus,
-table.m-table tr.m-dim th a:focus,
-table.m-table th.m-dim a:focus,
-.m-note.m-dim a:active,
-table.m-table tr.m-dim td a:active,
-table.m-table td.m-dim a:active,
-table.m-table tr.m-dim th a:active,
-table.m-table th.m-dim a:active {
-  color: #949494;
-}
-.m-note.m-type {
-  border-color: #9ad36a;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-type,
-table.m-table tr.m-type td,
-table.m-table td.m-type,
-table.m-table tr.m-type th,
-table.m-table th.m-type,
-table.m-table tr.m-type strong,
-table.m-table strong.m-type,
-table.m-table tr.m-type em,
-table.m-table em.m-type {
-  background-color: transparent;
-  color: #3c763d;
-}
-.m-note.m-type a,
-table.m-table tr.m-type td a,
-table.m-table td.m-type a,
-table.m-table tr.m-type th a,
-table.m-table th.m-type a {
-  color: #9ad36a;
-}
-.m-note.m-type a:hover,
-table.m-table tr.m-type td a:hover,
-table.m-table td.m-type a:hover,
-table.m-table tr.m-type th a:hover,
-table.m-table th.m-type a:hover,
-.m-note.m-type a:focus,
-table.m-table tr.m-type td a:focus,
-table.m-table td.m-type a:focus,
-table.m-table tr.m-type th a:focus,
-table.m-table th.m-type a:focus,
-.m-note.m-type a:active,
-table.m-table tr.m-type td a:active,
-table.m-table td.m-type a:active,
-table.m-table tr.m-type th a:active,
-table.m-table th.m-type a:active {
-  color: #9ad36a;
-}
-figure.m-figure.m-default:before {
-  border-color: transparent;
-}
-figure.m-figure.m-default figcaption {
-  color: #000000;
-}
-figure.m-figure.m-primary:before {
-  border-color: transparent;
-}
-figure.m-figure.m-primary figcaption {
-  color: #31708f;
-}
-figure.m-figure.m-success:before {
-  border-color: transparent;
-}
-figure.m-figure.m-success figcaption {
-  color: #9ad36a;
-}
-figure.m-figure.m-warning:before {
-  border-color: transparent;
-}
-figure.m-figure.m-warning figcaption {
-  color: #f9cf79;
-}
-figure.m-figure.m-danger:before {
-  border-color: transparent;
-}
-figure.m-figure.m-danger figcaption {
-  color: #f60000;
-}
-figure.m-figure.m-info:before {
-  border-color: transparent;
-}
-figure.m-figure.m-info figcaption {
-  color: #31708f;
-}
-figure.m-figure.m-type:before {
-  border-color: transparent;
-}
-figure.m-figure.m-type figcaption {
-  color: #9ad36a;
-}
-figure.m-figure.m-dim:before {
-  border-color: transparent;
-}
-figure.m-figure.m-dim {
-  color: #bdbdbd;
-}
-figure.m-figure.m-dim a {
-  color: #c0c0c0;
-}
-figure.m-figure.m-dim a:hover,
-figure.m-figure.m-dim a:focus,
-figure.m-figure.m-dim a:active {
-  color: #949494;
-}
-.m-math {
-  fill: #000000;
-}
-.m-math.m-default,
-.m-math g.m-default,
-.m-math rect.m-default,
-div.m-plot svg .m-bar.m-default,
-.m-graph g.m-edge polygon,
-.m-graph g.m-node:not(.m-flat) ellipse,
-.m-graph g.m-node:not(.m-flat) polygon,
-.m-graph g.m-edge text,
-.m-graph g.m-node.m-flat text,
-.m-graph.m-default g.m-edge polygon,
-.m-graph.m-default g.m-node:not(.m-flat) ellipse,
-.m-graph.m-default g.m-node:not(.m-flat) polygon,
-.m-graph.m-default g.m-edge text,
-.m-graph.m-default g.m-node.m-flat text {
-  fill: #000000;
-}
-.m-graph g.m-edge polygon,
-.m-graph g.m-edge path,
-.m-graph g.m-node ellipse,
-.m-graph g.m-node polygon,
-.m-graph g.m-node polyline,
-.m-graph.m-default g.m-edge polygon,
-.m-graph.m-default g.m-edge path,
-.m-graph.m-default g.m-node ellipse,
-.m-graph.m-default g.m-node polygon,
-.m-graph.m-default g.m-node polyline {
-  stroke: #000000;
-}
-.m-math.m-primary,
-.m-math g.m-primary,
-.m-math rect.m-primary,
-div.m-plot svg .m-bar.m-primary,
-.m-graph.m-primary g.m-edge polygon,
-.m-graph.m-primary g.m-node:not(.m-flat) ellipse,
-.m-graph.m-primary g.m-node:not(.m-flat) polygon,
-.m-graph.m-primary g.m-edge text,
-.m-graph.m-primary g.m-node.m-flat text {
-  fill: #31708f;
-}
-.m-graph.m-primary g.m-edge polygon,
-.m-graph.m-primary g.m-edge path,
-.m-graph.m-primary g.m-node ellipse,
-.m-graph.m-primary g.m-node polygon,
-.m-graph.m-primary g.m-node polyline {
-  stroke: #31708f;
-}
-.m-math.m-success,
-.m-math g.m-success,
-.m-math rect.m-success,
-div.m-plot svg .m-bar.m-success,
-.m-graph.m-success g.m-edge polygon,
-.m-graph.m-success g.m-node:not(.m-flat) ellipse,
-.m-graph.m-success g.m-node:not(.m-flat) polygon,
-.m-graph.m-success g.m-edge text,
-.m-graph.m-success g.m-node.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph.m-success g.m-edge polygon,
-.m-graph.m-success g.m-edge path,
-.m-graph.m-success g.m-node ellipse,
-.m-graph.m-success g.m-node polygon,
-.m-graph.m-success g.m-node polyline {
-  stroke: #9ad36a;
-}
-.m-math.m-warning,
-.m-math g.m-warning,
-.m-math rect.m-warning,
-div.m-plot svg .m-bar.m-warning,
-.m-graph.m-warning g.m-edge polygon,
-.m-graph.m-warning g.m-node:not(.m-flat) ellipse,
-.m-graph.m-warning g.m-node:not(.m-flat) polygon,
-.m-graph.m-warning g.m-edge text,
-.m-graph.m-warning g.m-node.m-flat text {
-  fill: #f9cf79;
-}
-.m-graph.m-warning g.m-edge polygon,
-.m-graph.m-warning g.m-edge path,
-.m-graph.m-warning g.m-node ellipse,
-.m-graph.m-warning g.m-node polygon,
-.m-graph.m-warning g.m-node polyline {
-  stroke: #f9cf79;
-}
-.m-math.m-danger,
-.m-math g.m-danger,
-.m-math rect.m-danger,
-div.m-plot svg .m-bar.m-danger,
-.m-graph.m-danger g.m-edge polygon,
-.m-graph.m-danger g.m-node:not(.m-flat) ellipse,
-.m-graph.m-danger g.m-node:not(.m-flat) polygon,
-.m-graph.m-danger g.m-edge text,
-.m-graph.m-danger g.m-node.m-flat text {
-  fill: #f60000;
-}
-.m-graph.m-danger g.m-edge polygon,
-.m-graph.m-danger g.m-edge path,
-.m-graph.m-danger g.m-node ellipse,
-.m-graph.m-danger g.m-node polygon,
-.m-graph.m-danger g.m-node polyline {
-  stroke: #f60000;
-}
-.m-math.m-info,
-.m-math g.m-info,
-.m-math rect.m-info,
-div.m-plot svg .m-bar.m-info,
-.m-graph.m-info g.m-edge polygon,
-.m-graph.m-info g.m-node:not(.m-flat) ellipse,
-.m-graph.m-info g.m-node:not(.m-flat) polygon,
-.m-graph.m-info g.m-edge text,
-.m-graph.m-info g.m-node.m-flat text {
-  fill: #31708f;
-}
-.m-graph.m-info g.m-edge polygon,
-.m-graph.m-info g.m-edge path,
-.m-graph.m-info g.m-node ellipse,
-.m-graph.m-info g.m-node polygon,
-.m-graph.m-info g.m-node polyline {
-  stroke: #31708f;
-}
-.m-math.m-dim,
-.m-math g.m-dim,
-.m-math rect.m-dim,
-div.m-plot svg .m-bar.m-dim,
-.m-graph.m-dim g.m-edge polygon,
-.m-graph.m-dim g.m-node:not(.m-flat) ellipse,
-.m-graph.m-dim g.m-node:not(.m-flat) polygon,
-.m-graph.m-dim g.m-edge text,
-.m-graph.m-dim g.m-node.m-flat text {
-  fill: #bdbdbd;
-}
-.m-graph.m-dim g.m-edge polygon,
-.m-graph.m-dim g.m-edge path,
-.m-graph.m-dim g.m-node ellipse,
-.m-graph.m-dim g.m-node polygon,
-.m-graph.m-dim g.m-node polyline {
-  stroke: #bdbdbd;
-}
-.m-math.m-type,
-.m-math g.m-type,
-.m-math rect.m-type,
-div.m-plot svg .m-bar.m-type,
-.m-graph.m-type g.m-edge polygon,
-.m-graph.m-type g.m-node:not(.m-flat) ellipse,
-.m-graph.m-type g.m-node:not(.m-flat) polygon,
-.m-graph.m-type g.m-edge text,
-.m-graph.m-type g.m-node.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph.m-type g.m-edge polygon,
-.m-graph.m-type g.m-edge path,
-.m-graph.m-type g.m-node ellipse,
-.m-graph.m-type g.m-node polygon,
-.m-graph.m-type g.m-node polyline {
-  stroke: #9ad36a;
-}
-.m-graph g.m-edge.m-default polygon,
-.m-graph g.m-node.m-default:not(.m-flat) ellipse,
-.m-graph g.m-node.m-default:not(.m-flat) polygon,
-.m-graph g.m-edge.m-default text,
-.m-graph g.m-node.m-default.m-flat text {
-  fill: #000000;
-}
-.m-graph g.m-edge.m-default polygon,
-.m-graph g.m-edge.m-default path,
-.m-graph g.m-node.m-default ellipse,
-.m-graph g.m-node.m-default polygon,
-.m-graph g.m-node.m-default polyline {
-  stroke: #000000;
-}
-.m-graph g.m-edge.m-primary polygon,
-.m-graph g.m-node.m-primary:not(.m-flat) ellipse,
-.m-graph g.m-node.m-primary:not(.m-flat) polygon,
-.m-graph g.m-edge.m-primary text,
-.m-graph g.m-node.m-primary.m-flat text {
-  fill: #31708f;
-}
-.m-graph g.m-edge.m-primary polygon,
-.m-graph g.m-edge.m-primary path,
-.m-graph g.m-node.m-primary ellipse,
-.m-graph g.m-node.m-primary polygon,
-.m-graph g.m-node.m-primary polyline {
-  stroke: #31708f;
-}
-.m-graph g.m-edge.m-success polygon,
-.m-graph g.m-node.m-success:not(.m-flat) ellipse,
-.m-graph g.m-node.m-success:not(.m-flat) polygon,
-.m-graph g.m-edge.m-success text,
-.m-graph g.m-node.m-success.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph g.m-edge.m-success polygon,
-.m-graph g.m-edge.m-success path,
-.m-graph g.m-node.m-success ellipse,
-.m-graph g.m-node.m-success polygon,
-.m-graph g.m-node.m-success polyline {
-  stroke: #9ad36a;
-}
-.m-graph g.m-edge.m-warning polygon,
-.m-graph g.m-node.m-warning:not(.m-flat) ellipse,
-.m-graph g.m-node.m-warning:not(.m-flat) polygon,
-.m-graph g.m-edge.m-warning text,
-.m-graph g.m-node.m-warning.m-flat text {
-  fill: #f9cf79;
-}
-.m-graph g.m-edge.m-warning polygon,
-.m-graph g.m-edge.m-warning path,
-.m-graph g.m-node.m-warning ellipse,
-.m-graph g.m-node.m-warning polygon,
-.m-graph g.m-node.m-warning polyline {
-  stroke: #f9cf79;
-}
-.m-graph g.m-edge.m-danger polygon,
-.m-graph g.m-node.m-danger:not(.m-flat) ellipse,
-.m-graph g.m-node.m-danger:not(.m-flat) polygon,
-.m-graph g.m-edge.m-danger text,
-.m-graph g.m-node.m-danger.m-flat text {
-  fill: #f60000;
-}
-.m-graph g.m-edge.m-danger polygon,
-.m-graph g.m-edge.m-danger path,
-.m-graph g.m-node.m-danger ellipse,
-.m-graph g.m-node.m-danger polygon,
-.m-graph g.m-node.m-danger polyline {
-  stroke: #f60000;
-}
-.m-graph g.m-edge.m-info polygon,
-.m-graph g.m-node.m-info:not(.m-flat) ellipse,
-.m-graph g.m-node.m-info:not(.m-flat) polygon,
-.m-graph g.m-edge.m-info text,
-.m-graph g.m-node.m-info.m-flat text {
-  fill: #31708f;
-}
-.m-graph g.m-edge.m-info polygon,
-.m-graph g.m-edge.m-info path,
-.m-graph g.m-node.m-info ellipse,
-.m-graph g.m-node.m-info polygon,
-.m-graph g.m-node.m-info polyline {
-  stroke: #31708f;
-}
-.m-graph g.m-edge.m-dim polygon,
-.m-graph g.m-node.m-dim:not(.m-flat) ellipse,
-.m-graph g.m-node.m-dim:not(.m-flat) polygon,
-.m-graph g.m-edge.m-dim text,
-.m-graph g.m-node.m-dim.m-flat text {
-  fill: #bdbdbd;
-}
-.m-graph g.m-edge.m-dim polygon,
-.m-graph g.m-edge.m-dim path,
-.m-graph g.m-node.m-dim ellipse,
-.m-graph g.m-node.m-dim polygon,
-.m-graph g.m-node.m-dim polyline {
-  stroke: #bdbdbd;
-}
-.m-graph g.m-edge.m-type polygon,
-.m-graph g.m-node.m-type:not(.m-flat) ellipse,
-.m-graph g.m-node.m-type:not(.m-flat) polygon,
-.m-graph g.m-edge.m-type text,
-.m-graph g.m-node.m-type.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph g.m-edge.m-type polygon,
-.m-graph g.m-edge.m-type path,
-.m-graph g.m-node.m-type ellipse,
-.m-graph g.m-node.m-type polygon,
-.m-graph g.m-node.m-type polyline {
-  stroke: #9ad36a;
-}
-p,
-ul,
-ol,
-dl,
-blockquote,
-pre,
-.m-code-figure,
-.m-console-figure,
-hr,
-.m-note,
-.m-frame,
-.m-block,
-div.m-button,
-div.m-scroll,
-table.m-table,
-div.m-image,
-img.m-image,
-svg.m-image,
-figure.m-figure,
-.m-imagegrid,
-div.m-math,
-div.m-graph,
-div.m-plot {
-  margin-bottom: 1rem;
-}
-p:last-child,
-p.m-nopadb,
-ul:last-child,
-ul.m-nopadb,
-ol:last-child,
-ol.m-nopadb,
-dl:last-child,
-dl.m-nopadb,
-blockquote:last-child,
-blockquote.m-nopadb,
-pre:last-child,
-pre.m-nopadb,
-.m-code-figure:last-child,
-.m-code-figure.m-nopadb,
-.m-console-figure:last-child,
-.m-console-figure.m-nopadb,
-hr:last-child,
-hr.m-nopadb,
-.m-note:last-child,
-.m-note.m-nopadb,
-.m-frame:last-child,
-.m-frame.m-nopadb,
-.m-block:last-child,
-.m-block.m-nopadb,
-div.m-button:last-child,
-div.m-button.m-nopadb,
-div.m-scroll:last-child,
-div.m-scroll.m-nopadb,
-table.m-table:last-child,
-table.m-table.m-nopadb,
-img.m-image:last-child,
-img.m-image.m-nopadb,
-svg.m-image:last-child,
-svg.m-image.m-nopadb,
-div.m-image:last-child,
-div.m-image.m-nopadb,
-figure.m-figure:last-child,
-figure.m-figure.m-nopadb,
-.m-imagegrid:last-child,
-.m-imagegrid.m-nopadb,
-div.m-math:last-child,
-div.m-math.m-nopadb,
-div.m-graph:last-child,
-div.m-graph.m-nopadb,
-div.m-plot:last-child,
-div.m-plot.m-nopadb {
-  margin-bottom: 0;
-}
-li > p:last-child,
-li > blockquote:last-child,
-li > pre:last-child,
-li > .m-code-figure:last-child,
-li > .m-console-figure:last-child,
-li > .m-note:last-child,
-li > .m-frame:last-child,
-li > .m-block:last-child,
-li > div.m-button:last-child,
-li > div.m-scroll:last-child,
-li > table.m-table:last-child,
-li > img.m-image:last-child,
-li > svg.m-image:last-child,
-li > div.m-image:last-child,
-li > figure.m-figure:last-child,
-li > div.m-math:last-child,
-li > div.m-graph:last-child,
-li > div.m-plot:last-child {
-  margin-bottom: 1rem;
-}
-li:last-child > p:last-child,
-li:last-child > p.m-nopadb,
-li:last-child > blockquote:last-child,
-li:last-child > blockquote.m-nopadb,
-li:last-child > pre:last-child,
-li:last-child > pre.m-nopadb,
-li:last-child > .m-code-figure:last-child,
-li:last-child > .m-code-figure.m-nopadb,
-li:last-child > .m-console-figure:last-child,
-li:last-child > .m-console-figure.m-nopadb,
-li:last-child > .m-note:last-child,
-li:last-child > .m-note.m-nopadb,
-li:last-child > .m-frame:last-child,
-li:last-child > .m-frame.m-nopadb,
-li:last-child > .m-block:last-child,
-li:last-child > .m-block.m-nopadb,
-li:last-child > div.m-button:last-child,
-li:last-child > div.m-button.m-nopadb,
-li:last-child > div.m-scroll:last-child,
-li:last-child > div.m-scroll.m-nopadb,
-li:last-child > table.m-table:last-child,
-li:last-child > table.m-table.m-nopadb,
-li:last-child > img.m-image:last-child,
-li:last-child > img.m-image.m-nopadb,
-li:last-child > svg.m-image:last-child,
-li:last-child > svg.m-image.m-nopadb,
-li:last-child > div.m-image:last-child,
-li:last-child > div.m-image.m-nopadb,
-li:last-child > figure.m-figure:last-child,
-li:last-child > figure.m-figure.m-nopadb,
-li:last-child > div.m-math:last-child,
-li:last-child > div.m-math.m-nopadb,
-li:last-child > div.m-graph:last-child,
-li:last-child > div.m-graph.m-nopadb,
-li:last-child > div.m-plot:last-child,
-li:last-child > div.m-plot.m-nopadb {
-  margin-bottom: 0;
-}
-
-body > header > nav {
-  width: 100%;
-  background-color: #000000;
-  min-height: 3rem;
-  font-size: 16px;
-}
-body > header > nav.m-navbar-landing,
-body > header > nav.m-navbar-cover {
-  background-color: transparent;
-  position: relative;
-}
-body > header > nav.m-navbar-landing {
-  opacity: 0.8;
-}
-body > header > nav.m-navbar-cover {
-  background-color: #000000;
-  opacity: 1;
-}
-body > header > nav.m-navbar-landing:hover,
-body > header > nav.m-navbar-cover:hover {
-  background-color: #000000;
-  opacity: 1;
-}
-body > header > nav.m-navbar-landing:target,
-body > header > nav.m-navbar-cover:target {
-  background-color: #000000;
-  opacity: 1;
-}
-body > header > nav.m-navbar-landing #m-navbar-brand.m-navbar-brand-hidden {
-  visibility: hidden;
-}
-body
-  > header
-  > nav.m-navbar-landing:target
-  #m-navbar-brand.m-navbar-brand-hidden {
-  visibility: visible;
-}
-body > header > nav {
-  margin-left: auto;
-  margin-right: auto;
-  color: #ffffff;
-}
-body > header > nav a {
-  text-decoration: none;
-  text-transform: none;
-  display: inline-block;
-  vertical-align: middle;
-  line-height: 2.75rem;
-  color: #ffffff;
-}
-body > header > nav #m-navbar-brand,
-body > header > nav a#m-navbar-show,
-body > header > nav a#m-navbar-hide {
-  font-weight: 300;
-  font-size: 1.125rem;
-  padding-left: 1rem;
-  padding-right: 1rem;
-}
-body > header > nav a#m-navbar-brand,
-body > header > nav #m-navbar-brand a {
-  text-transform: none;
-}
-body > header > nav a#m-navbar-brand img,
-body > header > nav #m-navbar-brand a img {
-  height: 5rem;
-  vertical-align: -22.5%;
-  margin-right: 0.5rem;
-}
-body > header > nav #m-navbar-brand a {
-  padding-left: 0;
-  padding-right: 0;
-}
-body > header > nav #m-navbar-brand .m-thin {
-  font-weight: normal;
-}
-body > header > nav #m-navbar-brand .m-breadcrumb {
-  color: #bdbdbd;
-}
-body > header > nav a#m-navbar-show:before,
-body > header > nav a#m-navbar-hide:before {
-  content: "\2630";
-}
-body > header > nav #m-navbar-collapse {
-  padding-bottom: 1rem;
-}
-body > header > nav #m-navbar-collapse li {
-  border-style: solid;
-  border-color: transparent;
-  border-width: 0 0 0 0.25rem;
-  margin-left: -1rem;
-}
-body > header > nav #m-navbar-collapse li a {
-  border-style: solid;
-  border-color: transparent;
-  line-height: 1.5rem;
-  margin-left: -0.25rem;
-  padding-left: 0.75rem;
-  border-width: 0 1px 1px 1px;
-  width: 100%;
-}
-body > header > nav #m-navbar-collapse li ol {
-  border-color: #ddd;
-}
-body > header > nav #m-navbar-collapse li a#m-navbar-current {
-  color: #ffffff;
-  background-color: #000000;
-  border-color: #000000;
-}
-body > header > nav #m-navbar-collapse li ol li a#m-navbar-current {
-  color: #000000;
-  background-color: #ffffff;
-  border-color: #ddd;
-}
-body > header > nav ol {
-  list-style-type: none;
-  margin: 0;
-}
-body > header > nav ol ol {
-  padding-left: 1.5rem;
-}
-body > header > nav .m-row > [class*="m-col-"] {
-  padding-top: 0;
-  padding-bottom: 0;
-}
-body > header > nav a:hover,
-body > header > nav a:focus,
-body > header > nav a:active {
-  color: #ffffff;
-}
-body > header > nav #m-navbar-collapse li:hover {
-  border-color: #ffffff;
-}
-body > header > nav #m-navbar-collapse li a:hover,
-body > header > nav #m-navbar-collapse li a:focus,
-body > header > nav #m-navbar-collapse li a:active {
-  border-color: #ffffff;
-  background-color: #000000;
-}
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:hover,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:hover,
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:focus,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:focus,
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:active,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:active {
-  background-color: var(--header-link-active-background-color-semi);
-}
-body > header > nav #m-navbar-hide {
-  display: none;
-}
-body > header > nav:target #m-navbar-collapse {
-  display: block;
-}
-body > header > nav:target #m-navbar-show {
-  display: none;
-}
-body > header > nav:target #m-navbar-hide {
-  display: inline-block;
-}
-@media screen and (min-width: 768px) {
-  body > header > nav #m-navbar-show,
-  body > header > nav #m-navbar-hide,
-  body > header > nav:target #m-navbar-show,
-  body > header > nav:target #m-navbar-hide {
-    display: none;
-  }
-  body > header > nav #m-navbar-collapse li a {
-    line-height: 2.75rem;
-  }
-  body > header > nav a,
-  body > header > nav #m-navbar-collapse li a {
-    margin-left: 0;
-    padding-left: 1rem;
-    padding-right: 1rem;
-    white-space: nowrap;
-  }
-  body > header > nav #m-navbar-collapse {
-    padding-bottom: 0;
-  }
-  body > header > nav #m-navbar-collapse li ol {
-    background-color: #000000;
-  }
-  body > header > nav #m-navbar-collapse ol ol li {
-    margin-left: 0;
-    padding-left: 0;
-    border-left-width: 0;
-  }
-  body > header > nav #m-navbar-collapse ol ol li a {
-    padding-left: 0.75rem;
-    color: #000000;
-    background-color: #ffffff;
-    border-color: #ddd;
-  }
-  body > header > nav #m-navbar-collapse ol ol li a:active {
-    padding-left: 0.75rem;
-    color: #ffffff;
-    background-color: #353535;
-    border-color: #ddd;
-  }
-  body > header > nav #m-navbar-collapse ol ol li a:hover {
-    padding-left: 0.75rem;
-    color: #ffffff;
-    background-color: #353535;
-    border-color: #ddd;
-  }
-  body > header > nav #m-navbar-collapse > .m-row > ol > li {
-    margin-left: 0;
-    border-left-width: 0;
-  }
-  body > header > nav #m-navbar-collapse > .m-row > ol > li > a {
-    border-width: 0.25rem 0 0 0;
-  }
-  body > header > nav #m-navbar-collapse ol {
-    padding-left: 0;
-    padding-right: 0;
-  }
-  body > header > nav #m-navbar-collapse > .m-row > ol,
-  body > header > nav #m-navbar-collapse > .m-row > ol > li {
-    float: left;
-  }
-  body > header > nav #m-navbar-collapse ol ol {
-    z-index: 99999;
-    position: absolute;
-    visibility: hidden;
-  }
-  body > header > nav #m-navbar-collapse li:hover ol {
-    visibility: visible;
-  }
-}
-body > footer {
-  width: 100%;
-}
-body > footer > nav {
-  padding-top: 1rem;
-  padding-bottom: 1rem;
-  font-size: 0.85rem;
-  text-align: center;
-  color: #777777;
-  background-color: #353535;
-}
-body > footer > nav h3,
-body > footer > nav h3 a {
-  text-transform: capitalize;
-  font-weight: normal;
-}
-body > footer > nav ul {
-  list-style-type: none;
-  padding: 0;
-  margin: 0;
-}
-body > footer > nav a {
-  text-decoration: none;
-  text-transform: none;
-  color: #999;
-}
-body > footer > nav a:hover,
-body > footer > nav a:focus,
-body > footer > nav a:active {
-  color: #494949;
-}
-body > main {
-  padding-top: 1rem;
-  padding-bottom: 1rem;
-}
-article h1 {
-  font-size: 1.75rem;
-}
-article h1 .m-breadcrumb {
-  color: #bdbdbd;
-  font-weight: normal;
-  font-size: 16px;
-}
-article h1 .m-breadcrumb a {
-  color: #26a9e0;
-}
-article h1 .m-breadcrumb a:hover,
-article h1 a:focus,
-article h1 a:active {
-  color: #26a9e0;
-}
-article hr {
-  width: 75%;
-  border-width: 2px 0 0 0 ;
-  border-style: solid;
-  border-color: #92d050;
-  margin: auto;
-}
-article section hr {
-  width: 50%;
-  border-width: 1px 0 0 0;
-  border-style: solid;
-  border-color: #ddd;
-  margin: auto;
-  padding-top: 5px;
-  padding-bottom: 10px;
-}
-article > header h1 {
-  font-size: 2rem;
-  margin-bottom: 0.5rem;
-}
-article h1 a,
-article > header h1,
-article > header h1 a,
-article section > h2,
-article section > h2 a,
-article section > h3,
-article section > h3 a,
-article section > h4,
-article section > h4 a,
-article section > h5,
-article section > h5 a,
-article section > h6,
-article section > h6 a {
-  color: #000000;
-}
-article h1 a:hover,
-article > header h1 a:hover,
-article > header h1 a:focus,
-article > header h1 a:active,
-article section > h2 a:hover,
-article section > h2 a:focus,
-article section > h2 a:active,
-article section > h3 a:hover,
-article section > h3 a:focus,
-article section > h3 a:active,
-article section > h4 a:hover,
-article section > h4 a:focus,
-article section > h4 a:active,
-article section > h5 a:hover,
-article section > h5 a:focus,
-article section > h5 a:active,
-article section > h6 a:hover,
-article section > h6 a:focus,
-article section > h6 a:active {
-  color: #000000;
-}
-article > header .m-date {
-  display: block;
-  width: 2.5rem;
-  float: left;
-  text-align: center;
-  line-height: 95%;
-  font-size: 0.75rem;
-  font-weight: normal;
-  white-space: nowrap;
-  border-right-style: solid;
-  border-right-width: 0.125rem;
-  border-color: #000000;
-  padding-right: 0.75rem;
-  margin-top: -0.1rem;
-  margin-right: 0.75rem;
-  margin-bottom: 0.25rem;
-}
-article > header .m-date-day {
-  display: block;
-  font-weight: bold;
-  padding-top: 0.2rem;
-  padding-bottom: 0.15rem;
-  font-size: 1.25rem;
-}
-article > header p {
-  color: #7a7a7a;
-  font-size: 1.125rem;
-}
-article > header h1::after {
-  content: " ";
-  clear: both;
-  display: table;
-}
-article > footer {
-  color: #969696;
-}
-article > footer p {
-  font-style: italic;
-  font-size: 0.85rem;
-  text-indent: 0;
-}
-article h1 a,
-article > header h1 a,
-article section > h2 a,
-article section > h3 a,
-article section > h4 a,
-article section > h5 a,
-article section > h6 a {
-  text-decoration: none;
-}
-#m-landing-image,
-#m-cover-image,
-article#m-jumbo > header #m-jumbo-image {
-  background-size: cover;
-  background-color: #666666;
-  background-position: center center;
-  background-repeat: no-repeat;
-  margin-top: -4rem;
-  padding-top: 5rem;
-}
-#m-landing-image {
-  color: #ffffff;
-}
-#m-cover-image {
-  height: 30rem;
-  margin-bottom: -26rem;
-}
-#m-landing-cover h1 {
-  font-size: 2.8rem;
-  margin-top: -0.5rem;
-  padding-left: 1.5rem;
-  padding-bottom: 1rem;
-  text-transform: capitalize;
-}
-#m-landing-cover {
-  padding-bottom: 10rem;
-  margin-bottom: -6rem;
-}
-article#m-jumbo {
-  margin-top: -1rem;
-}
-#m-landing-cover,
-#m-cover-image > div,
-article#m-jumbo > header #m-jumbo-cover {
-  background: linear-gradient(
-    transparent 0%,
-    transparent 50%,
-    #e8e8e8 100%
-  );
-  width: 100%;
-  height: 100%;
-}
-article#m-jumbo > header h1,
-article#m-jumbo > header h2 {
-  text-align: center;
-  font-weight: bold;
-}
-article#m-jumbo > header a {
-  text-decoration: none;
-}
-article#m-jumbo > header #m-jumbo-cover {
-  padding-bottom: 5rem;
-}
-article#m-jumbo > header #m-jumbo-image {
-  font-size: 2.5vmin;
-  margin-bottom: -3rem;
-}
-article#m-jumbo > header h1 {
-  font-size: 10vmin;
-}
-article#m-jumbo > header h2 {
-  font-size: 3vmin;
-}
-@media screen and (max-height: 640px), screen and (max-width: 640px) {
-  article#m-jumbo > header h1 {
-    font-size: 3rem;
-  }
-  article#m-jumbo > header #m-jumbo-image,
-  article#m-jumbo > header h2 {
-    font-size: 1rem;
-  }
-}
-article#m-jumbo > header,
-article#m-jumbo > header h1,
-article#m-jumbo > header a {
-  color: #ffffff;
-}
-article#m-jumbo > header a:hover,
-article#m-jumbo > header a:focus,
-article#m-jumbo > header a:active {
-  color: #f0f0f0;
-}
-article#m-jumbo.m-inverted > header,
-article#m-jumbo.m-inverted > header h1,
-article#m-jumbo.m-inverted > header a {
-  color: #000000;
-}
-article#m-jumbo.m-inverted > header a:hover,
-article#m-jumbo.m-inverted > header a:focus,
-article#m-jumbo.m-inverted > header a:active {
-  color: #0f0f0f;
-}
-.m-landing-news h3 a {
-  color: #000000;
-  text-decoration: none;
-  text-transform: capitalize;
-}
-.m-landing-news h3 a:hover,
-.m-landing-news h3 a:hover,
-.m-landing-news h3 a:focus,
-.m-landing-news h3 a:active {
-  color: #000000;
-}
-.m-landing-news time {
-  display: inline-block;
-  margin-left: 1rem;
-  float: right;
-}
-.m-article-pagination {
-  text-align: center;
-  padding: 1rem;
-}
-nav.m-navpanel {
-  text-align: center;
-}
-nav.m-navpanel h3 {
-  text-transform: capitalize;
-  font-weight: normal;
-}
-nav.m-navpanel ol {
-  text-transform: capitalize;
-}
-nav.m-navpanel ol,
-nav.m-navpanel ul {
-  list-style-type: none;
-  padding: 0;
-}
-nav.m-navpanel a {
-  color: #292929;
-  text-decoration: none;
-}
-nav.m-navpanel a:hover,
-nav.m-navpanel a:focus,
-nav.m-navpanel a:active {
-  color: #cb4b16;
-}
-ul.m-tagcloud li {
-  display: inline;
-}
-ul.m-tagcloud li.m-tag-1 {
-  font-size: 0.75rem;
-}
-ul.m-tagcloud li.m-tag-2 {
-  font-size: 0.825rem;
-}
-ul.m-tagcloud li.m-tag-3 {
-  font-size: 1rem;
-}
-ul.m-tagcloud li.m-tag-4 {
-  font-size: 1.25rem;
-}
-ul.m-tagcloud li.m-tag-5 {
-  font-size: 1.5rem;
-}
-article section:target figure.m-code-figure,
-article section:target figure.m-console-figure {
-  z-index: 1;
-}
-article,
-article > header,
-article section {
-  margin-bottom: 1rem;
-}
-article:last-child,
-article section:last-child {
-  margin-bottom: 0;
-}
-.m-container-inflatable section:target > .m-note,
-.m-container-inflatable section:target > .m-frame,
-.m-container-inflatable section:target > .m-block,
-.m-container-inflatable section:target > pre,
-.m-container-inflatable section:target > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target > .m-console-figure > pre:first-child,
-.m-container-inflatable section:target section > .m-note,
-.m-container-inflatable section:target section > .m-frame,
-.m-container-inflatable section:target section > .m-block,
-.m-container-inflatable section:target section > pre,
-.m-container-inflatable
-  section:target
-  section
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  section
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target [class*="m-center-"] > .m-note,
-.m-container-inflatable section:target [class*="m-center-"] > .m-frame,
-.m-container-inflatable section:target [class*="m-center-"] > .m-block,
-.m-container-inflatable section:target [class*="m-center-"] > pre,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target [class*="m-left-"] > .m-note,
-.m-container-inflatable section:target [class*="m-left-"] > .m-frame,
-.m-container-inflatable section:target [class*="m-left-"] > .m-block,
-.m-container-inflatable section:target [class*="m-left-"] > pre,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target [class*="m-right-"] > .m-note,
-.m-container-inflatable section:target [class*="m-right-"] > .m-frame,
-.m-container-inflatable section:target [class*="m-right-"] > .m-block,
-.m-container-inflatable section:target [class*="m-right-"] > pre,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target .m-container-inflate > .m-note,
-.m-container-inflatable section:target .m-container-inflate > .m-frame,
-.m-container-inflatable section:target .m-container-inflate > .m-block,
-.m-container-inflatable section:target .m-container-inflate > pre,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-console-figure
-  > pre:first-child {
-  margin-left: -1rem;
-  border-left-style: solid;
-  border-left-width: 0.25rem;
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-  padding-left: 0.75rem;
-}
-.m-container-inflatable section:target > .m-code-figure::before,
-.m-container-inflatable section:target > .m-console-figure::before,
-.m-container-inflatable section:target section > .m-code-figure::before,
-.m-container-inflatable section:target section > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-console-figure::before {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-  border-left-width: 0.25rem;
-}
-.m-container-inflatable section:target > .m-code-figure > pre.m-nopad,
-.m-container-inflatable section:target > .m-console-figure > pre.m-nopad {
-  margin-left: -0.75rem;
-  padding-left: -0.75rem;
-}
-@media screen and (min-width: 576px) {
-  .m-container-inflatable section:target .m-center-s > .m-note,
-  .m-container-inflatable section:target .m-center-s > pre,
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-console-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-console-figure
-    > pre:first-child {
-    border-left-width: 0;
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable section:target .m-center-s > .m-block,
-  .m-container-inflatable section:target .m-right-s > .m-block {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-  }
-  .m-container-inflatable section:target .m-center-s > .m-frame,
-  .m-container-inflatable section:target .m-right-s > .m-frame {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-    padding-left: 0.875rem;
-  }
-  .m-container-inflatable section:target .m-right-s > .m-block,
-  .m-container-inflatable section:target .m-right-s > .m-frame {
-    margin-left: 0;
-  }
-  .m-container-inflatable section:target .m-right-s > .m-note,
-  .m-container-inflatable section:target .m-right-s > pre {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    margin-left: 0;
-    border-left-width: 0;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-console-figure::before {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container-inflatable section:target .m-center-m > .m-note,
-  .m-container-inflatable section:target .m-center-m > pre,
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-console-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-console-figure
-    > pre:first-child {
-    border-left-width: 0;
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable section:target .m-center-m > .m-block,
-  .m-container-inflatable section:target .m-right-m > .m-block {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-  }
-  .m-container-inflatable section:target .m-center-m > .m-frame,
-  .m-container-inflatable section:target .m-right-m > .m-frame {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-    padding-left: 0.875rem;
-  }
-  .m-container-inflatable section:target .m-right-m > .m-block,
-  .m-container-inflatable section:target .m-right-m > .m-frame {
-    margin-left: 0;
-  }
-  .m-container-inflatable section:target .m-right-m > .m-note,
-  .m-container-inflatable section:target .m-right-m > pre {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    margin-left: 0;
-    border-left-width: 0;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-console-figure::before {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container-inflatable section:target .m-center-l > .m-note,
-  .m-container-inflatable section:target .m-center-l > pre,
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-console-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-console-figure
-    > pre:first-child {
-    border-left-width: 0;
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable section:target .m-center-l > .m-block,
-  .m-container-inflatable section:target .m-right-l > .m-block {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-  }
-  .m-container-inflatable section:target .m-center-l > .m-frame,
-  .m-container-inflatable section:target .m-right-l > .m-frame {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-    padding-left: 0.875rem;
-  }
-  .m-container-inflatable section:target .m-right-l > .m-block,
-  .m-container-inflatable section:target .m-right-l > .m-frame {
-    margin-left: 0;
-  }
-  .m-container-inflatable section:target .m-right-l > .m-note,
-  .m-container-inflatable section:target .m-right-l > pre {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    margin-left: 0;
-    border-left-width: 0;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-console-figure::before {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-  }
-}
-.m-container-inflatable section:target > figure.m-code-figure::before,
-.m-container-inflatable section:target > figure.m-console-figure::before,
-.m-container-inflatable section:target section > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  section
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflatable
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflatable
-  > figure.m-console-figure::before {
-  border-left-color: #ddd;
-}
-@media screen and (min-width: 576px) {
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-code-figure::before {
-    border-color: #f7f7f7;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-console-figure::before {
-    border-color: #f7f7f7;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-code-figure::before {
-    border-color: #f7f7f7;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-console-figure::before {
-    border-color: #f7f7f7;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-code-figure::before {
-    border-color: #f7f7f7;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-console-figure::before {
-    border-color: #f7f7f7;
-  }
-}
-.m-container-inflatable section:target pre,
-.m-container-inflatable section:target figure.m-code-figure > pre:first-child,
-.m-container-inflatable
-  section:target
-  figure.m-console-figure
-  > pre:first-child {
-  border-color: #ddd;
-}
-.m-container-inflatable section:target .m-note.m-default {
-  border-color: #ddd;
-}
-.m-container-inflatable section:target .m-note.m-primary {
-  border-color: #31708f;
-}
-.m-container-inflatable section:target .m-note.m-success {
-  border-color: #9ad36a;
-}
-.m-container-inflatable section:target .m-note.m-warning {
-  border-color: #f9cf79;
-}
-.m-container-inflatable section:target .m-note.m-danger {
-  border-color: #f60000;
-}
-.m-container-inflatable section:target .m-note.m-info {
-  border-color: #31708f;
-}
-.m-container-inflatable section:target .m-note.m-dim {
-  border-color: #bdbdbd;
-}
-
-.m-code .c {
-  color: #95a5a6;
-}
-.m-code .err {
-  color: #a61717;
-}
-.m-code .k {
-  color: #728e00;
-}
-.m-code .n {
-  color: #434f54;
-}
-.m-code .o {
-  color: #728e00;
-}
-.m-code .ch {
-  color: #95a5a6;
-}
-.m-code .cm {
-  color: #95a5a6;
-}
-.m-code .cp {
-  color: #728e00;
-}
-.m-code .cpf {
-  color: #95a5a6;
-}
-.m-code .c1 {
-  color: #95a5a6;
-}
-.m-code .cs {
-  color: #95a5a6;
-}
-.m-code .kc {
-  color: #00979d;
-}
-.m-code .kd {
-  color: #728e00;
-}
-.m-code .kn {
-  color: #728e00;
-}
-.m-code .kp {
-  color: #00979d;
-}
-.m-code .kr {
-  color: #00979d;
-}
-.m-code .kt {
-  color: #00979d;
-}
-.m-code .m {
-  color: #8a7b52;
-}
-.m-code .s {
-  color: #7f8c8d;
-}
-.m-code .na {
-  color: #434f54;
-}
-.m-code .nb {
-  color: #728e00;
-}
-.m-code .nc {
-  color: #434f54;
-}
-.m-code .no {
-  color: #434f54;
-}
-.m-code .nd {
-  color: #434f54;
-}
-.m-code .ni {
-  color: #434f54;
-}
-.m-code .ne {
-  color: #434f54;
-}
-.m-code .nf {
-  color: #d35400;
-}
-.m-code .nl {
-  color: #434f54;
-}
-.m-code .nn {
-  color: #434f54;
-}
-.m-code .nx {
-  color: #728e00;
-}
-.m-code .py {
-  color: #434f54;
-}
-.m-code .nt {
-  color: #434f54;
-}
-.m-code .nv {
-  color: #434f54;
-}
-.m-code .ow {
-  color: #728e00;
-}
-.m-code .mb {
-  color: #8a7b52;
-}
-.m-code .mf {
-  color: #8a7b52;
-}
-.m-code .mh {
-  color: #8a7b52;
-}
-.m-code .mi {
-  color: #8a7b52;
-}
-.m-code .mo {
-  color: #8a7b52;
-}
-.m-code .sa {
-  color: #7f8c8d;
-}
-.m-code .sb {
-  color: #7f8c8d;
-}
-.m-code .sc {
-  color: #7f8c8d;
-}
-.m-code .dl {
-  color: #7f8c8d;
-}
-.m-code .sd {
-  color: #7f8c8d;
-}
-.m-code .s2 {
-  color: #7f8c8d;
-}
-.m-code .se {
-  color: #7f8c8d;
-}
-.m-code .sh {
-  color: #7f8c8d;
-}
-.m-code .si {
-  color: #7f8c8d;
-}
-.m-code .sx {
-  color: #7f8c8d;
-}
-.m-code .sr {
-  color: #7f8c8d;
-}
-.m-code .s1 {
-  color: #7f8c8d;
-}
-.m-code .ss {
-  color: #7f8c8d;
-}
-.m-code .bp {
-  color: #728e00;
-}
-.m-code .fm {
-  color: #d35400;
-}
-.m-code .vc {
-  color: #434f54;
-}
-.m-code .vg {
-  color: #434f54;
-}
-.m-code .vi {
-  color: #434f54;
-}
-.m-code .vm {
-  color: #434f54;
-}
-.m-code .il {
-  color: #8a7b52;
-}
-
-.m-console .hll { background-color: #ffffcc }
-.m-console .g-AnsiBackgroundBlack { background-color: #232627 }
-.m-console .g-AnsiBackgroundBlue { background-color: #1d99f3 }
-.m-console .g-AnsiBackgroundBrightBlack { background-color: #7f8c8d }
-.m-console .g-AnsiBackgroundBrightBlue { background-color: #3daee9 }
-.m-console .g-AnsiBackgroundBrightCyan { background-color: #16a085 }
-.m-console .g-AnsiBackgroundBrightGreen { background-color: #1cdc9a }
-.m-console .g-AnsiBackgroundBrightMagenta { background-color: #8e44ad }
-.m-console .g-AnsiBackgroundBrightRed { background-color: #c0392b }
-.m-console .g-AnsiBackgroundBrightWhite { background-color: #ffffff }
-.m-console .g-AnsiBackgroundBrightYellow { background-color: #fdbc4b }
-.m-console .g-AnsiBackgroundCyan { background-color: #1abc9c }
-.m-console .g-AnsiBackgroundDefault { background-color: #fcfcfc }
-.m-console .g-AnsiBackgroundGreen { background-color: #11d116 }
-.m-console .g-AnsiBackgroundMagenta { background-color: #9b59b6 }
-.m-console .g-AnsiBackgroundRed { background-color: #ed1515 }
-.m-console .g-AnsiBackgroundWhite { background-color: #fcfcfc }
-.m-console .g-AnsiBackgroundYellow { background-color: #f67400 }
-.m-console .g-AnsiBlack { color: #232627 }
-.m-console .g-AnsiBlue { color: #1d99f3 }
-.m-console .g-AnsiBrightBlack { color: #7f8c8d; font-weight: bold }
-.m-console .g-AnsiBrightBlue { color: #3daee9; font-weight: bold }
-.m-console .g-AnsiBrightCyan { color: #16a085; font-weight: bold }
-.m-console .g-AnsiBrightDefault { color: #ffffff; font-weight: bold }
-.m-console .g-AnsiBrightGreen { color: #1cdc9a; font-weight: bold }
-.m-console .g-AnsiBrightMagenta { color: #8e44ad; font-weight: bold }
-.m-console .g-AnsiBrightRed { color: #c0392b; font-weight: bold }
-.m-console .g-AnsiBrightWhite { color: #ffffff; font-weight: bold }
-.m-console .g-AnsiBrightYellow { color: #fdbc4b; font-weight: bold }
-.m-console .g-AnsiCyan { color: #1abc9c }
-.m-console .g-AnsiDefault { color: #fcfcfc }
-.m-console .g-AnsiGreen { color: #11d116 }
-.m-console .g-AnsiMagenta { color: #9b59b6 }
-.m-console .g-AnsiRed { color: #ed1515 }
-.m-console .g-AnsiWhite { color: #fcfcfc }
-.m-console .g-AnsiYellow { color: #f67400 }
-.m-console .go { color: #fcfcfc }
-.m-console .gp { color: #16a085; font-weight: bold }
-.m-console .w { color: #fcfcfc }
-
-a.m-doc, a.m-doc-self, a.m-doc-external,
-ul.m-doc li.m-doc-expansible > a:first-child, ul.m-doc li.m-doc-collapsible > a:first-child,
-.m-code.m-inverted.m-doc-include > a {
-  text-decoration: none;
-}
-a.m-doc, a.m-doc-self {
-  font-weight: bold;
-}
-.m-thin a.m-doc, .m-thin a.m-doc-self {
-  font-weight: normal;
-}
-ul.m-doc li.m-doc-expansible > a:first-child,
-ul.m-doc li.m-doc-collapsible > a:first-child,
-ul.m-doc li.m-doc-expansible > a:first-child:hover,
-ul.m-doc li.m-doc-expansible > a:first-child:focus,
-ul.m-doc li.m-doc-expansible > a:first-child:active,
-ul.m-doc li.m-doc-collapsible > a:first-child:hover,
-ul.m-doc li.m-doc-collapsible > a:first-child:focus,
-ul.m-doc li.m-doc-collapsible > a:first-child:active {
-  color: #000000;
-}
-a.m-doc-self,
-ul.m-doc li.m-doc-expansible > a:first-child:before,
-ul.m-doc li.m-doc-collapsible > a:first-child:before {
-  color: #26a9e0;
-}
-a.m-doc-self:hover, a.m-doc-self:focus, a.m-doc-self:active,
-ul.m-doc li.m-doc-expansible > a:first-child:hover::before,
-ul.m-doc li.m-doc-expansible > a:first-child:focus::before,
-ul.m-doc li.m-doc-expansible > a:first-child:active::before,
-ul.m-doc li.m-doc-collapsible > a:first-child:hover::before,
-ul.m-doc li.m-doc-collapsible > a:first-child:focus::before,
-ul.m-doc li.m-doc-collapsible > a:first-child:active::before {
-  color: #26a9e0;
-}
-h3 a.m-doc-external {
-  font-weight: normal;
-}
-span.m-doc-wrap-bumper {
-  margin-right: -1rem;
-  display: inline-block;
-  vertical-align: text-top;
-}
-span.m-doc-wrap {
-  padding-left: 1rem;
-  display: inline-block;
-  vertical-align: text-top;
-  white-space: pre-line;
-  max-width: 100%;
-}
-dl.m-doc dd {
-  margin-bottom: 0.5rem;
-}
-dl.m-doc dd {
-  margin-left: 0;
-  padding-left: 2.5rem;
-}
-dl.m-doc dt:target, dl.m-doc dt:target + dd {
-  margin-left: -1.0rem;
-  border-left-style: solid;
-  border-left-width: 0.25rem;
-  border-color: #000000;
-}
-dl.m-doc dt:target { padding-left: 0.75rem; }
-dl.m-doc dt:target + dd { padding-left: 3.25rem; }
-ul.m-doc {
-  list-style: none;
-  margin-left:  1.0375rem;
-  padding-left: 0.9rem;
-  border-left-color: #ddd;
-  border-left-width: 0.0625rem;
-  border-left-style: solid;
-}
-ul.m-doc li {
-  text-indent: -1rem;
-  padding-left: 1rem;
-}
-ul.m-doc li.m-doc-expansible > ul {
-  display: none;
-}
-ul.m-doc li.m-doc-expansible, ul.m-doc li.m-doc-collapsible {
-  padding-left: 0.6rem;
-}
-ul.m-doc li.m-doc-expansible > ul.m-doc, ul.m-doc li.m-doc-collapsible > ul.m-doc {
-  margin-left: 0.5rem;
-}
-ul.m-doc li.m-doc-expansible > a:first-child:before, ul.m-doc li.m-doc-collapsible > a:first-child:before {
-  background-color: #e8e8e8;
-  display: inline-block;
-  width: 0.4rem;
-  font-weight: bold;
-}
-ul.m-doc li.m-doc-expansible > a:first-child:before { content: '⊕'; }
-ul.m-doc li.m-doc-collapsible > a:first-child:before { content: '⊖'; }
-h1 .m-doc-template, h1 .m-doc-include {
-  font-size: 1.3rem;
-  font-weight: normal;
-  float: right;
-}
-h1 .m-doc-include:last-child {
-  margin-bottom: -0.5rem;
-}
-h3 .m-doc-template, h3 .m-doc-include {
-  font-size: 1rem;
-  font-weight: normal;
-}
-.m-doc-template, dl.m-doc dd, ul.m-doc li > span.m-doc {
-  color: #bdbdbd;
-}
-dl.m-doc dd svg.m-math, ul.m-doc li > span.m-doc svg.m-math {
-  fill: #bdbdbd;
-}
-.m-doc-template a, dl.m-doc dd a, ul.m-doc li > span.m-doc a {
-  color: #c0c0c0;
-}
-.m-doc-template a:hover, .m-doc-template a:focus, .m-doc-template a:active,
-dl.m-doc dd a:hover, dl.m-doc dd a:focus, dl.m-doc dd a:active,
-ul.m-doc li > span.m-doc a:hover, ul.m-doc li > span.m-doc a:focus, ul.m-doc li > span.m-doc a:active {
-  color: #949494;
-}
-.m-code.m-inverted.m-doc-include > a:link,
-.m-code.m-inverted.m-doc-include > a:visited {
-  opacity: 0.6666;
-}
-.m-code.m-inverted.m-doc-include > a:hover,
-.m-code.m-inverted.m-doc-include > a:focus,
-.m-code.m-inverted.m-doc-include > a:active {
-  opacity: 1;
-}
-article section.m-doc-details > div {
-  margin-top: 0;
-  margin-left: 0;
-  margin-right: 0;
-  position: relative;
-  padding: 1rem;
-}
-article section.m-doc-details > div::before {
-  position: absolute;
-  content: ' ';
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  z-index: -1;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-  border-color: #f7f7f7;
-}
-article section.m-doc-details > div > h3:first-child {
-  position: relative;
-  margin: -1rem -1rem 1rem -1rem;
-  padding: 0.5rem 1rem;
-  background-color: #f7f7f7;
-  border-top-left-radius: 0px;
-  border-top-right-radius: 0px;
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-}
-article section.m-doc-details:target {
-  border-color: transparent;
-}
-article section.m-doc-details:target > div {
-  z-index: 1;
-}
-.m-container-inflatable > .m-row > [class*='m-col-'] section.m-doc-details > div {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-.m-container-inflatable section.m-doc-details:target > div > h3:first-child,
-.m-container-inflatable section.m-doc-details:target section > div > h3:first-child {
-  margin-left: -1.0rem;
-  border-left-style: solid;
-  border-left-color: #000000;
-  border-left-width: 0.25rem;
-  padding-left: 0.75rem;
-}
-.m-container-inflatable section.m-doc-details:target > div::before,
-.m-container-inflatable section-dox-details:target section > div.m::before {
-  border-left-width: 0.25rem;
-  border-left-color: #000000;
-}
-a.m-doc-search-icon {
-  padding-left: 1rem;
-  padding-right: 1rem;
-}
-a.m-doc-search-icon svg {
-  fill: #ffffff;
-}
-body > header > nav #m-navbar-collapse a.m-doc-search-icon svg {
-  vertical-align: -5%;
-}
-a.m-doc-search-icon:focus svg, a.m-doc-search-icon:hover svg, a.m-doc-search-icon:active svg {
-  fill: #ffffff;
-}
-.m-doc-search {
-  display: none;
-  z-index: 10;
-  position: fixed;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-  background-color: #000000;
-}
-.m-doc-search:target {
-  display: block;
-}
-.m-doc-search > a {
-  display: block;
-  position: absolute;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-}
-.m-doc-search-header {
-  margin-top: 2.5rem;
-  padding: 0.5rem 1rem;
-  height: 2rem;
-}
-.m-doc-search-header > div:first-child {
-  float: right;
-}
-.m-doc-search-content {
-  background-color: #000000;
-  border-radius: 0px;
-  padding: 1rem;
-}
-.m-doc-search input {
-  width: 100%;
-  height: 3rem;
-  font-size: 1.2rem;
-  border-width: 0;
-  color: #000000;
-  background-color: transparent;
-  border-radius: 0px;
-  margin-bottom: 1rem;
-  padding: 0 1rem;
-}
-.m-doc-search #search-notfound {
-  display: none;
-}
-.m-doc-search ul#search-results {
-  list-style-type: none;
-  padding-left: 0;
-  max-height: calc(100vh - 12.5rem);
-  overflow-y: auto;
-  display: none;
-}
-.m-doc-search ul#search-results li a {
-  display: block;
-  padding-left: 1rem;
-  padding-right: 1rem;
-  text-decoration: none;
-  width: 100%;
-  line-height: 1.5rem;
-  color: #000000;
-}
-.m-doc-search ul#search-results li a > div {
-  white-space: nowrap;
-  overflow: hidden;
-}
-.m-doc-search ul#search-results li a > div:not(.m-doc-search-alias) {
-  direction: rtl;
-}
-.m-doc-search ul#search-results li a .m-label {
-  float: right;
-  line-height: 1rem;
-  margin-top: 0.1rem;
-  margin-left: 0.25rem;
-}
-.m-doc-search ul#search-results li a .m-label.m-flat {
-  margin-right: -0.75rem;
-}
-.m-doc-search ul#search-results li#search-current a {
-  background-color: transparent;
-}
-.m-doc-search ul#search-results li#search-current.m-doc-search-copied a {
-  background-color: transparent;
-}
-.m-doc-search-typed {
-  color: #26a9e0;
-}
-.m-doc-search input[type="search"] { -webkit-appearance: textfield; }
-.m-doc-search input[type="search"]::-webkit-search-decoration,
-.m-doc-search input[type="search"]::-webkit-search-cancel-button,
-.m-doc-search input[type="search"]::-webkit-search-results-button,
-.m-doc-search input[type="search"]::-webkit-search-results-decoration {
-  display: none;
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/documentExamples.py b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/documentExamples.py
deleted file mode 100644
index ddce97120318aa1f460e404bc040a2ce8a855ebc..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/documentExamples.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env python
-import fileinput
-import re
-import os
-import glob
-
-fileDir = os.path.dirname(os.path.realpath("__file__"))
-# print(fileDir)
-
-output_file = "examples.dox"
-read_mes = [
-    "../examples/ReadMe.md",
-    "../examples/a_wild_card/ReadMe.md",
-    "../examples/b_address_change/ReadMe.md",
-    "../examples/c_check_all_addresses/ReadMe.md",
-    "../examples/d_simple_logger/ReadMe.md",
-    "../examples/e_continuous_measurement/ReadMe.md",
-    "../examples/f_basic_data_request/ReadMe.md",
-    "../examples/g_terminal_window/ReadMe.md",
-    "../examples/h_SDI-12_slave_implementation/ReadMe.md",
-    "../examples/i_SDI-12_interface/ReadMe.md",
-    "../examples/j_external_pcint_library/ReadMe.md",
-    "../examples/k_concurrent_logger/ReadMe.md",
-]
-
-if not os.path.exists(os.path.join(fileDir, "examples")):
-    os.makedirs(os.path.join(fileDir, "examples"))
-
-for filename in read_mes:
-    out_path = os.path.join(fileDir, "examples")
-    out_dir = filename.split("/")[2]
-    out_name = out_dir + ".dox"
-    if out_name == "ReadMe.md.dox":
-        out_name = "examples.dox"
-    abs_out = os.path.join(out_path, out_name)
-    # print(abs_out)
-    # with open(output_file, 'w+') as out_file:
-    with open(abs_out, "w+") as out_file:
-
-        abs_file_path = os.path.join(fileDir, filename)
-        abs_file_path = os.path.abspath(os.path.realpath(abs_file_path))
-        # print(abs_file_path)
-
-        with open(abs_file_path, "r") as in_file:  # open in readonly mode
-            out_file.write("/**\n")
-            if out_name != "examples.dox":
-                # out_file.write(
-                #     "@example{{lineno}} {} @m_examplenavigation{{examples_page,{}/}} @m_footernavigation \n\n".format(
-                #         filename.replace("..\\examples\\", "").replace(
-                #             "\\ReadMe.md", ".ino"
-                #         ), out_dir
-                #     )
-                # )
-                out_file.write(
-                    "@example{{lineno}} {} @m_examplenavigation{{examples_page,}} @m_footernavigation \n\n".format(
-                        filename.replace("../examples/", "").replace(
-                            "/ReadMe.md", ".ino"
-                        )
-                    )
-                )
-                # out_file.write(
-                #     "@example{{lineno}} {} \n\n".format(
-                #         filename.replace("..\\examples\\", "").replace(
-                #             "\\ReadMe.md", ".ino"
-                #         )
-                #     )
-                # )
-            # out_file.write('\n@tableofcontents\n\n')
-
-            print_me = True
-            skip_me = False
-            i = 1
-            lines = in_file.readlines()
-            for line in lines:
-                # print(i, print_me, skip_me, line)
-
-                # Remove markdown comment tags from doxygen commands within the markdown
-                if print_me and not skip_me:
-                    new_line = (
-                        re.sub(r"\[//\]: # \( @(\w+?.*) \)", r"@\1", line)
-                        .replace("```ini", "@code{.ini}")
-                        .replace("```cpp", "@code{.cpp}")
-                        .replace("```", "@endcode")
-                    )
-                    if out_name != "examples.dox":
-                        new_line = new_line.replace("@page", "@section")
-                        #    .replace('@section', '')
-                        #    .replace('@subsection', '')
-                        #    .replace('@subsubsection', '')
-                        #    .replace('@paragraph', '')
-                        #    .replace('@par', '')
-                    out_file.write(new_line)
-
-                # using skip_me to skip single lines, so unset it after reading a line
-                if skip_me:
-                    skip_me = False
-
-                # a page, section, subsection, or subsubsection commands followed
-                # immediately with by a markdown header leads to that section appearing
-                # twice in the doxygen html table of contents.
-                # I'm putting the section markers right above the header and then will skip the header.
-                if re.match(r"\[//\]: # \( @mainpage", line) is not None:
-                    skip_me = True
-                if re.match(r"\[//\]: # \( @page", line) is not None:
-                    skip_me = True
-                if re.match(r"\[//\]: # \( @.*section", line) is not None:
-                    skip_me = True
-                if re.match(r"\[//\]: # \( @paragraph", line) is not None:
-                    skip_me = True
-
-                # I'm using these comments to fence off content that is only intended for
-                # github mardown rendering
-                if "[//]: # ( Start GitHub Only )" in line:
-                    print_me = False
-
-                if "[//]: # ( End GitHub Only )" in line:
-                    print_me = True
-
-                i += 1
-
-            out_file.write("\n*/\n\n")
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/fixXmlExampleSections.py b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/fixXmlExampleSections.py
deleted file mode 100644
index 539bdc86be73fbdbbfc27a86a85d37342248a75a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/fixXmlExampleSections.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-import fileinput
-import re
-import os
-import glob
-import xml.etree.ElementTree as ET
-
-fileDir = os.path.dirname(os.path.realpath("__file__"))
-# print("Program Directory: {}".format(fileDir))
-relative_dir = "../../Arduino-SDI-12Doxygen/xml/"
-abs_file_path = os.path.join(fileDir, relative_dir)
-abs_file_path = os.path.abspath(os.path.realpath(abs_file_path))
-# print("XML Directory: {}".format(fileDir))
-
-all_files = [
-    f
-    for f in os.listdir(abs_file_path)
-    if os.path.isfile(os.path.join(abs_file_path, f)) and f.endswith("8ino-example.xml")
-]
-
-for filename in all_files:
-    print(filename)
-
-    tree = ET.parse(os.path.join(abs_file_path, filename))
-    root = tree.getroot()
-
-    needs_to_be_fixed = False
-    for definition in root.iter("compounddef"):
-        # print(definition.attrib)
-        compound_id = definition.attrib["id"]
-        # print(compound_id)
-        # print("---")
-
-        for i in range(6):
-            for section in definition.iter("sect" + str(i)):
-                # print(section.attrib)
-                section_id = section.attrib["id"]
-                if not section_id.startswith(compound_id):
-                    # print("problem!")
-                    needs_to_be_fixed = True
-                    dox_loc = section_id.find(".dox_")
-                    section_suffix = section_id[dox_loc + 6 :]
-                    # print(section_suffix)
-                    corrected_id = compound_id + "_" + section_suffix
-                    # print(corrected_id)
-                    section.attrib["id"] = corrected_id
-
-    if needs_to_be_fixed:
-        tree.write(os.path.join(abs_file_path, filename + "_fixed"))
-        os.rename(
-            os.path.join(abs_file_path, filename),
-            os.path.join(abs_file_path, filename + "_original"),
-        )
-        os.rename(
-            os.path.join(abs_file_path, filename + "_fixed"),
-            os.path.join(abs_file_path, filename),
-        )
-    # print()
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/markdown_prefilter.py b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/markdown_prefilter.py
deleted file mode 100644
index 6c2b4eef278e67628f42d141ff1e700d99bb4995..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/markdown_prefilter.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-import fileinput, re
-
-print_me = True
-skip_me = False
-i = 1
-# for line in fileinput.input(openhook=fileinput.hook_encoded("utf-8", "surrogateescape")):
-for line in fileinput.input():
-    # print(i, print_me, skip_me, line)
-
-    # Remove markdown comment tags from doxygen commands within the markdown
-    if print_me and not skip_me:
-        print(re.sub(r'\[//\]: # \( @(\w+?.*) \)', r'@\1', line), end="")
-
-    # using skip_me to skip single lines, so unset it after reading a line
-    if skip_me:
-        skip_me = False;
-
-    # a page, section, subsection, or subsubsection commands followed
-    # immediately with by a markdown header leads to that section appearing
-    # twice in the doxygen html table of contents.
-    # I'm putting the section markers right above the header and then will skip the header.
-    if re.match(r'\[//\]: # \( @mainpage', line) is not None:
-        skip_me = True;
-    if re.match(r'\[//\]: # \( @page', line) is not None:
-        skip_me = True;
-    if re.match(r'\[//\]: # \( @.*section', line) is not None:
-        skip_me = True;
-    if re.match(r'\[//\]: # \( @paragraph', line) is not None:
-        skip_me = True;
-
-    # I'm using these comments to fence off content that is only intended for
-    # github mardown rendering
-    if "[//]: # ( Start GitHub Only )" in line:
-        print_me = False
-
-    if "[//]: # ( End GitHub Only )" in line:
-        print_me = True
-
-    i += 1
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-Doxyfile b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-Doxyfile
deleted file mode 100644
index 107316aa1ac533655cf3bbd41306e1fb81c55b34..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-Doxyfile
+++ /dev/null
@@ -1,21 +0,0 @@
-@INCLUDE                = Doxyfile
-GENERATE_HTML           = NO
-GENERATE_XML            = YES
-XML_PROGRAMLISTING      = NO
-HTML_OUTPUT             = ../Arduino-SDI-12Doxygen/m.css
-SHOW_INCLUDE_FILES = YES
-WARN_LOGFILE           = mcssDoxygenOutput.log
-PROJECT_REPOSITORY = https://github.com/EnviroDIY/Arduino-SDI-12
-ALIASES += \
-    "m_div{1}=@xmlonly<mcss:div xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-    "m_enddiv=@xmlonly</mcss:div>@endxmlonly" \
-    "m_span{1}=@xmlonly<mcss:span xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-    "m_endspan=@xmlonly</mcss:span>@endxmlonly" \
-    "m_class{1}=@xmlonly<mcss:class xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\" />@endxmlonly" \
-    "m_footernavigation=@xmlonly<mcss:footernavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" />@endxmlonly" \
-    "m_examplenavigation{2}=@xmlonly<mcss:examplenavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:page=\"\1\" mcss:prefix=\"\2\" />@endxmlonly" \
-    "m_keywords{1}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keywords=\"\1\" />@endxmlonly" \
-    "m_keyword{3}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keyword=\"\1\" mcss:title=\"\2\" mcss:suffix-length=\"\3\" />@endxmlonly" \
-    "m_enum_values_as_keywords=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:enum-values-as-keywords=\"true\" />@endxmlonly" \
-    "m_since{2}=@since @m_class{m-label m-success m-flat} @ref changelog-\1-\2 \"since v\1.\2\"" \
-    "m_deprecated_since{2}=@since deprecated in v\1.\2 @deprecated"
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-conf.py b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-conf.py
deleted file mode 100644
index df2343a5a4c5f034fc56d0ec5309ff249c157848..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-conf.py
+++ /dev/null
@@ -1,54 +0,0 @@
-DOXYFILE = "mcss-Doxyfile"
-THEME_COLOR = "#cb4b16"
-# FAVICON = "https://3qzcxr28gq9vutx8scdn91zq-wpengine.netdna-ssl.com/wp-content/uploads/2016/05/cropped-EnviroDIY_LogoMaster_TrueSquare_V5_TwoTree_Trans_notext-192x192.png"
-FAVICON = "SDI-12Text-Cropped.png"
-LINKS_NAVBAR1 = [
-    (
-        "Functions",
-        "class_s_d_i12",
-        [
-            ('<a href="class_s_d_i12.html#constructor-destructor-begins-and-setters">Constructor, Destructor, Begins, and Setters</a>', ),
-            ('<a href="class_s_d_i12.html#waking-up-and-talking-to-sensors">Waking Up and Talking To Sensors</a>', ),
-            ('<a href="class_s_d_i12.html#reading-from-the-sdi-12-buffer">Reading from the SDI-12 Buffer</a>', ),
-            ('<a href="class_s_d_i12.html#data-line-states">Data Line States</a>', ),
-            ('<a href="class_s_d_i12.html#using-more-than-one-sdi-12-object">Using more than one SDI-12 Object</a>', ),
-            ('<a href="class_s_d_i12.html#interrupt-service-routine">Interrupt Service Routine</a>', ),
-        ],
-    ),
-    (
-        "Examples",
-        "examples_page",
-        [
-            ('<a href="a_wild_card_8ino-example.html">Getting Sensor Information</a>', ),
-            ('<a href="b_address_change_8ino-example.html">Address Change</a>', ),
-            ('<a href="c_check_all_addresses_8ino-example.html">Checking all Addresses</a>', ),
-            ('<a href="d_simple_logger_8ino-example.html">Logging Data</a>', ),
-            ('<a href="e_simple_parsing_8ino-example.html">Parsing Data</a>', ),
-            ('<a href="f_basic_data_request_8ino-example.html">Simple Data Request</a>', ),
-            ('<a href="g_terminal_window_8ino-example.html">Terminal Emulator 1</a>', ),
-            ('<a href="h__s_d_i-12_slave_implementation_8ino-example.html">Slave Implementation</a>',),
-            ('<a href="i__s_d_i-12_interface_8ino-example.html">Terminal Emulator 2</a>', ),
-            ('<a href="j_external_pcint_library_8ino-example.html">External Interrupts</a>', ),
-            ('<a href="k_concurrent_logger_8ino-example.html">Concurrent Measurements</a>', ),
-        ],
-    ),
-    ("Classes", "annotated", [],),
-    # ("Files", "files", []),
-    (
-        "Notes",
-        "pages",
-        [
-            ("The SDI-12 Specification", "specifications"),
-            ("Overview of Pin Change Interrupts", "interrupts_page"),
-            ("Stepping through the Rx ISR", "rx_page"),
-        ],
-    ),
-]
-LINKS_NAVBAR2 = [
-]
-VERSION_LABELS = True
-CLASS_INDEX_EXPAND_LEVELS = 2
-
-STYLESHEETS = [
-    "css/m-EnviroDIY+documentation.compiled.css",
-]
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/ReadMe.md
deleted file mode 100644
index b6acefc8c0e42428275c71941e6a70dacd5bdea7..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/ReadMe.md
+++ /dev/null
@@ -1,75 +0,0 @@
-[//]: # ( @page examples_page Examples )
-# Examples using the SDI-12 Library
-
-[//]: # ( @brief Examples using the SDI-12 Library )
-
-[//]: # ( Start GitHub Only )
-- [Example A](@ref a_wild_card.ino):
-  - Gets sensor information from a single attached sensor and prints it to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/a_wild_card)
-- [Example B](@ref b_address_change.ino):
-  - Allows you to change the address of your SDI-12 Sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/b_address_change)
-- [Example C](@ref c_check_all_addresses.ino):
-  - Checks all addresses for active sensors, and prints their status to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/c_check_all_addresses)
-- [Example D](@ref d_simple_logger.ino):
-  - Checks all addresses for active sensors, and logs data for each sensor every minute
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/d_simple_logger)
-- [Example E](@ref e_simple_parsing.ino):
-  - Demonstrates the ability to parse integers and floats from the buffer.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/e_simple_parsing)
-- [Example F](@ref f_basic_data_request.ino):
-  - Issues a data request to a single specified sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/f_basic_data_request)
-- [Example G](@ref g_terminal_window.ino):
-  - Demonstrates using the Arduino as a command terminal for SDI-12 sensors.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/g_terminal_window)
-- [Example H](@ref h_SDI-12_slave_implementation.ino):
-  - Demonstrates using SDI-12 in slave mode
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/h_SDI-12_slave_implementation)
-- [Example I](@ref i_SDI-12_interface.ino):
-  - Shows code for an Arduino-based USB dongle to translate between SDI-12 and a PC
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/i_SDI-12_interface)
-- [Example J](@ref j_external_pcint_library.ino):
-  - Shows how to use an external PCInt library to call the interrupts for this library.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/j_external_pcint_library)
-- [Example K](@ref k_concurrent_logger.ino):
-  -  Shows how to request concurrent measurements
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/k_concurrent_logger)
-
-[//]: # ( End GitHub Only )
-
-- [Example A](@ref a_wild_card.ino):
-  - Gets sensor information from a single attached sensor and prints it to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/a_wild_card)
-- [Example B](@ref b_address_change.ino):
-  - Allows you to change the address of your SDI-12 Sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/b_address_change)
-- [Example C](@ref c_check_all_addresses.ino):
-  - Checks all addresses for active sensors, and prints their status to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/c_check_all_addresses)
-- [Example D](@ref d_simple_logger.ino):
-  - Checks all addresses for active sensors, and logs data for each sensor every minute
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/d_simple_logger)
-- [Example E](@ref e_simple_parsing.ino):
-  - Demonstrates the ability to parse integers and floats from the buffer.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/e_simple_parsing)
-- [Example F](@ref f_basic_data_request.ino):
-  - Issues a data request to a single specified sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/f_basic_data_request)
-- [Example G](@ref g_terminal_window.ino):
-  - Demonstrates using the Arduino as a command terminal for SDI-12 sensors.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/g_terminal_window)
-- [Example H](@ref h_SDI-12_slave_implementation.ino):
-  - Demonstrates using SDI-12 in slave mode
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/h_SDI-12_slave_implementation)
-- [Example I](@ref i_SDI-12_interface.ino):
-  - Shows code for an Arduino-based USB dongle to translate between SDI-12 and a PC
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/i_SDI-12_interface)
-- [Example J](@ref j_external_pcint_library.ino):
-  - Shows how to use an external PCInt library to call the interrupts for this library.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/j_external_pcint_library)
-- [Example K](@ref k_concurrent_logger.ino):
-  -  Shows how to request concurrent measurements
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/k_concurrent_logger)
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/ReadMe.md
deleted file mode 100644
index f8f87caaa5e400211a2121cb190bacff773071c0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/ReadMe.md
+++ /dev/null
@@ -1,11 +0,0 @@
-[//]: # ( @page example_a_page Example A: Using the Wildcard - Getting Single Sensor Information )
-# Example A: Using the Wildcard - Getting Single Sensor Information
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-It requests information about a single attached sensor, including its address and manufacturer info, and prints it to the serial port
-
-[//]: # ( @section a_wild_card_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} a_wild_card/platformio.ini )
-
-[//]: # ( @section a_wild_card_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/a_wild_card.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/a_wild_card.ino
deleted file mode 100644
index 8add10a36ee902eebeaa8306c2539fdc4f2099b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/a_wild_card.ino
+++ /dev/null
@@ -1,59 +0,0 @@
-
-/**
- * @file a_wild_card.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example A: Using the Wildcard - Getting Single Sensor Information
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It requests information about the attached sensor, including its address and
- * manufacturer info.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-/**
-  '?' is a wildcard character which asks any and all sensors to respond
-  'I' indicates that the command wants information about the sensor
-  '!' finishes the command
-*/
-String myCommand = "?I!";
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  mySDI12.sendCommand(myCommand);
-  delay(300);                    // wait a while for a response
-  while (mySDI12.available()) {  // write the response to the screen
-    Serial.write(mySDI12.read());
-  }
-  delay(3000);  // print again in three seconds
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/ReadMe.md
deleted file mode 100644
index f220b9b2ecd793b61f870458cb9fe891f600ea6e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/ReadMe.md
+++ /dev/null
@@ -1,24 +0,0 @@
-[//]: # ( @page example_b_page Example B: Changing the Address of your SDI-12 Sensor )
-# Example B: Changing the Address of your SDI-12 Sensor
-
-Communication with an SDI-12 sensor depends on its 1-character alphanumeric address (1-9, A-Z, a-z).  A sensor can also be programmed with an address of 0, but that address cannot always be used to get measurements from the sensor.  This sketch enables you to find and change the address of your sensor.
-
-First, physically connect your SDI-12 sensor to your device.  Some helpful hits for connecting it can be found here:  https://envirodiy.org/topic/logging-mayfly-with-decagon-sdi-12-sensor/#post-2129.
-
-Once your sensor is physically connected to your board, download this library and open this sketch.
-
-Scroll to line 54 of the sketch (`#define DATA_PIN 7`).  Change the `7` to the pin number that your sensor is attached to.
-
-Set the pin to provide power to your sensor in line 55 (`#define POWER_PIN 22`).  If your sensor is continuously powered, set the power pin to -1.
-
-Upload the sketch to your board.  After the upload finishes, open up the serial port monitor at a baud rate of 115200 on line 53.
-
-In the serial monitor you will see it begin scanning through all possible SDI-12 addresses.  Once it has found an occupied address, it will stop and ask you to enter a new address.  Send your desired address to the serial port.  On the screen you should see "Readdressing Sensor." followed by "Success.  Rescanning for verification."  The scan will begin again, stopping at your new address.  If you are now happy with the address you've selected, smile and close the serial port monitor.
-
-If you are using a Meter Group Hydros 21 CTD sensor, change the channel to 1 in the serial monitor where prompted.
-
-[//]: # ( @section b_address_change_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} b_address_change/platformio.ini )
-
-[//]: # ( @section b_address_change_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/b_address_change.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/b_address_change.ino
deleted file mode 100644
index c3af7e42d723c457871870b5039f25303547e4c5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/b_address_change.ino
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * @file b_address_change.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example B: Changing the Address of your SDI-12 Sensor
- *
- * This is a simple demonstration of the SDI-12 library for arduino.
- * It discovers the address of the attached sensor and allows you to change it.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-String myCommand  = "";   // empty to start
-char   oldAddress = '!';  // invalid address as placeholder
-
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(byte i) {  // this checks for activity at a particular address
-  Serial.print("Checking address ");
-  Serial.print((char)i);
-  Serial.print("...");
-  myCommand = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(30);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      Serial.println("Occupied");
-      mySDI12.clearBuffer();
-      return true;
-    } else {
-      Serial.println("Vacant");  // otherwise it is vacant.
-      mySDI12.clearBuffer();
-    }
-  }
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  boolean found = false;  // have we identified the sensor yet?
-
-  for (byte i = '0'; i <= '9'; i++) {  // scan address space 0-9
-    if (found) break;
-    if (checkActive(i)) {
-      found      = true;
-      oldAddress = i;
-    }
-  }
-
-  for (byte i = 'a'; i <= 'z'; i++) {  // scan address space a-z
-    if (found) break;
-    if (checkActive(i)) {
-      found      = true;
-      oldAddress = i;
-    }
-  }
-
-  for (byte i = 'A'; i <= 'Z'; i++) {  // scan address space A-Z
-    if (found) break;
-    if (checkActive(i)) {
-      found      = true;
-      oldAddress = i;
-    }
-  }
-
-  if (!found) {
-    Serial.println(
-      "No sensor detected. Check physical connections.");  // couldn't find a sensor.
-                                                           // check connections..
-  } else {
-    Serial.print("Sensor active at address ");  // found a sensor!
-    Serial.print(oldAddress);
-    Serial.println(".");
-
-    Serial.println("Enter new address.");  // prompt for a new address
-    while (!Serial.available())
-      ;
-    char newAdd = Serial.read();
-
-    // wait for valid response
-    while (((newAdd < '0') || (newAdd > '9')) && ((newAdd < 'a') || (newAdd > 'z')) &&
-           ((newAdd < 'A') || (newAdd > 'Z'))) {
-      if (!(newAdd == '\n') || (newAdd == '\r') || (newAdd == ' ')) {
-        Serial.println(
-          "Not a valid address. Please enter '0'-'9', 'a'-'A', or 'z'-'Z'.");
-      }
-      while (!Serial.available())
-        ;
-      newAdd = Serial.read();
-    }
-
-    /* the syntax of the change address command is:
-    [currentAddress]A[newAddress]! */
-
-    Serial.println("Readdressing sensor.");
-    myCommand = "";
-    myCommand += (char)oldAddress;
-    myCommand += "A";
-    myCommand += (char)newAdd;
-    myCommand += "!";
-    mySDI12.sendCommand(myCommand);
-
-    /* wait for the response then throw it away by
-    clearing the buffer with clearBuffer()  */
-    delay(300);
-    mySDI12.clearBuffer();
-
-    Serial.println("Success. Rescanning for verification.");
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/ReadMe.md
deleted file mode 100644
index ed0247a258b0048d64841523b6a8a622b7ccb8e5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/ReadMe.md
+++ /dev/null
@@ -1,16 +0,0 @@
-[//]: # ( @page example_c_page Example C: Check all Addresses for Active Sensors and Print Status )
-# Example C: Check all Addresses for Active Sensors and Print Status
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It discovers the address of all sensors active on any pin on your board.
-
-Each sensor should have a unique address already - if not, multiple sensors may respond simultaenously to the same request and the output will not be readable by the Arduino.
-
-To address a sensor, please see Example B: b_address_change.ino
-
-[//]: # ( @section c_check_all_addresses_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} c_check_all_addresses/platformio.ini )
-
-[//]: # ( @section c_check_all_addresses_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/c_check_all_addresses.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/c_check_all_addresses.ino
deleted file mode 100644
index 8ee179041938718c28ce8e857dc9bdeda3fb754c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/c_check_all_addresses.ino
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * @file c_check_all_addresses.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example C: Check all Addresses for Active Sensors and Print Status
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active and attached to the board.
- * THIS CAN BE *REALLY* SLOW TO RUN!!!
- *
- * Each sensor should have a unique address already - if not, multiple sensors may
- * respond simultaenously to the same request and the output will not be readable
- * by the Arduino.
- *
- * To address a sensor, please see Example B: b_address_change.ino
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define FirstPin 5         /*! change to lowest pin number on your board */
-#define LastPin 24         /*! change to highest pin number on your board */
-
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port expects
- *
- * @param sdi the SDI-12 instance
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'
- */
-void printInfo(SDI12 sdi, char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  sdi.sendCommand(command);
-  sdi.clearBuffer();
-  delay(30);
-
-  Serial.print("  --");
-  Serial.print(i);
-  Serial.print("--  ");
-
-  while (sdi.available()) {
-    Serial.write(sdi.read());
-    delay(10);  // 1 character ~ 7.5ms
-  }
-}
-
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(SDI12 sdi, char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    sdi.sendCommand(myCommand);
-    sdi.clearBuffer();
-    delay(30);
-    if (sdi.available()) {  // If we here anything, assume we have an active sensor
-      return true;
-    }
-  }
-  sdi.clearBuffer();
-  return false;
-}
-
-void scanAddressSpace(SDI12 sdi) {
-  // scan address space 0-9
-  for (char i = '0'; i <= '9'; i++)
-    if (checkActive(sdi, i)) { printInfo(sdi, i); }
-  // scan address space a-z
-  for (char i = 'a'; i <= 'z'; i++)
-    if (checkActive(sdi, i)) { printInfo(sdi, i); }
-  // scan address space A-Z
-  for (char i = 'A'; i <= 'Z'; i++)
-    if (checkActive(sdi, i)) { printInfo(sdi, i); };
-}
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  Serial.println("//\n// Start Search for SDI-12 Devices \n// -----------------------");
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  for (uint8_t pin = FirstPin; pin <= LastPin; pin++) {
-    if (pin != POWER_PIN) {
-      pinMode(pin, INPUT);
-      SDI12 mySDI12(pin);
-      mySDI12.begin();
-      Serial.print("Checking pin ");
-      Serial.print(pin);
-      Serial.println("...");
-      scanAddressSpace(mySDI12);
-      mySDI12.end();
-    }
-  }
-
-  Serial.println("\n//\n// End Search for SDI-12 Devices \n// ---------------------");
-
-  // Cut power
-  digitalWrite(POWER_PIN, LOW);
-}
-
-void loop() {}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/ReadMe.md
deleted file mode 100644
index 5606c43c95bddb63ae07775272255299c9835bb8..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/ReadMe.md
+++ /dev/null
@@ -1,18 +0,0 @@
-[//]: # ( @page example_d_page Example D: Check all Addresses for Active Sensors and Log Data )
-## Example D: Check all Addresses for Active Sensors and Log Data
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It discovers the address of all sensors active on a single bus and takes measurements from them.
-
-Every SDI-12 device is different in the time it takes to take a measurement, and the amount of data it returns.  This sketch will not serve every sensor type, but it will likely be helpful in getting you started.
-
-Each sensor should have a unique address already - if not, multiple sensors may respond simultaneously to the same request and the output will not be readable by the Arduino.
-
-To address a sensor, please see Example B: b_address_change.ino
-
-[//]: # ( @section d_simple_logger_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} d_simple_logger/platformio.ini )
-
-[//]: # ( @section d_simple_logger_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/d_simple_logger.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/d_simple_logger.ino
deleted file mode 100644
index 61375f427d65a72dfd5080aa918dfc25fbfdcb4f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/d_simple_logger.ino
+++ /dev/null
@@ -1,281 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example D: Check all Addresses for Active Sensors and Log Data
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active on a single bus and takes measurements
- * from them.
- *
- * Every SDI-12 device is different in the time it takes to take a
- * measurement, and the amount of data it returns. This sketch will not serve every
- * sensor type, but it will likely be helpful in getting you started.
- *
- * Each sensor should have a unique address already - if not, multiple sensors may
- * respond simultaenously to the same request and the output will not be readable by the
- * Arduino.
- *
- * To address a sensor, please see Example B: b_address_change.ino
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-bool takeMeasurement(char i, String meas_type = "") {
-  mySDI12.clearBuffer();
-  String command = "";
-  command += i;
-  command += "M";
-  command += meas_type;
-  command += "!";  // SDI-12 measurement command format  [address]['M'][!]
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-
-  String addr = sdiResponse.substring(0, 1);
-  Serial.print(addr);
-  Serial.print(", ");
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  Serial.print(wait);
-  Serial.print(", ");
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  Serial.print(numResults);
-  Serial.print(", ");
-
-  unsigned long timerStart = millis();
-  while ((millis() - timerStart) < (1000 * (wait + 1))) {
-    if (mySDI12.available())  // sensor can interrupt us to let us know it is done early
-    {
-      Serial.print(millis() - timerStart);
-      Serial.print(", ");
-      mySDI12.clearBuffer();
-      break;
-    }
-  }
-  // Wait for anything else and clear it out
-  delay(30);
-  mySDI12.clearBuffer();
-
-  if (numResults > 0) { return getResults(i, numResults); }
-
-  return true;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Sensor Address, Protocol Version, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println(
-    "Time Elapsed (s), Sensor Address, Est Measurement Time (s), Number Measurements, "
-    "Real Measurement Time (ms), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  String commands[] = {"", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
-  for (uint8_t a = 0; a < 3; a++) {
-    // measure one at a time
-    for (byte i = 0; i < 62; i++) {
-      char addr = decToChar(i);
-      if (isActive[i]) {
-        // Serial.print(millis() / 1000);
-        Serial.print(millis());
-        Serial.print(", ");
-        takeMeasurement(addr, commands[a]);
-        Serial.println();
-      }
-    }
-  }
-
-  delay(10000L);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/ReadMe.md
deleted file mode 100644
index 43653d2fc6f80ad574ead9b1741ffa3cab8d7b63..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/ReadMe.md
+++ /dev/null
@@ -1,18 +0,0 @@
-[//]: # ( @page example_e_page Example E: Check all Addresses for Active Sensors and Start Continuous Measurements )
-## Example E: Check all Addresses for Active Sensors and Start Continuous Measurements
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It discovers the address of all sensors active on a single bus and takes continuous measurements from them.
-
-Every SDI-12 device is different in the time it takes to take a measurement, and the amount of data it returns.  This sketch will not serve every sensor type, but it will likely be helpful in getting you started.
-
-Each sensor should have a unique address already - if not, multiple sensors may respond simultaneously to the same request and the output will not be readable by the Arduino.
-
-To address a sensor, please see Example B: b_address_change.ino
-
-[//]: # ( @section e_continuous_measurement_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} e_continuous_measurement/platformio.ini )
-
-[//]: # ( @section e_continuous_measurement_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/e_continuous_measurement.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/e_continuous_measurement.ino
deleted file mode 100644
index d3be64dabe64526e1f1841c2ee40bc988cd4b925..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/e_continuous_measurement.ino
+++ /dev/null
@@ -1,220 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example D: Check all Addresses for Active Sensors and Log Data
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active on a single bus and takes continuous
- * measurements from them.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getContinuousResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "R";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Sensor Address, Protocol Version, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println(
-    "Time Elapsed (s), Sensor Address, Est Measurement Time (s), Number Measurements, "
-    "Real Measurement Time (ms), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  // measure one at a time
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (isActive[i]) {
-      // Serial.print(millis() / 1000);
-      Serial.print(millis());
-      Serial.print(", ");
-      getContinuousResults(addr, 4);
-      Serial.println();
-    }
-  }
-
-  delay(5000L);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/ReadMe.md
deleted file mode 100644
index b8572a1073a431b7de44f511ce18d9b51469ca48..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_f_page Example F: Basic Data Request to a Single Sensor )
-# Example F: Basic Data Request to a Single Sensor
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-This is a very basic (stripped down) example where the user initiates a measurement and receives the results to a terminal window without typing numerous commands into the terminal.
-
-[//]: # ( @section f_basic_data_request_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} f_basic_data_request/platformio.ini )
-
-[//]: # ( @section f_basic_data_request_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/f_basic_data_request.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/f_basic_data_request.ino
deleted file mode 100644
index 8f66b6556cfad1eeed972d2ef03f8832eb4ccf04..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/f_basic_data_request.ino
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * @file f_basic_data_request.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Ruben Kertesz <github@emnet.net> or @rinnamon on twitter
- * @date 2/10/2016
- *
- * @brief Example F: Basic Data Request to a Single Sensor
- *
- * This is a very basic (stripped down) example where the user initiates a measurement
- * and receives the results to a terminal window without typing numerous commands into
- * the terminal.
- *
- * Edited by Ruben Kertesz for ISCO Nile 502 2/10/2016
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define SENSOR_ADDRESS 1
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-String sdiResponse = "";
-String myCommand   = "";
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  do {  // wait for a response from the serial terminal to do anything
-    delay(30);
-  } while (!Serial.available());
-  char nogo =
-    Serial.read();  // simply hit enter in the terminal window or press send and the
-                    // characters get discarded but now the rest of the loop continues
-
-  // first command to take a measurement
-  myCommand = String(SENSOR_ADDRESS) + "M!";
-  Serial.println(myCommand);  // echo command to terminal
-
-  mySDI12.sendCommand(myCommand);
-  delay(30);  // wait a while for a response
-
-  while (mySDI12.available()) {  // build response string
-    char c = mySDI12.read();
-    if ((c != '\n') && (c != '\r')) {
-      sdiResponse += c;
-      delay(10);  // 1 character ~ 7.5ms
-    }
-  }
-  if (sdiResponse.length() > 1)
-    Serial.println(sdiResponse);  // write the response to the screen
-  mySDI12.clearBuffer();
-
-
-  delay(1000);       // delay between taking reading and requesting data
-  sdiResponse = "";  // clear the response string
-
-
-  // next command to request data from last measurement
-  myCommand = String(SENSOR_ADDRESS) + "D0!";
-  Serial.println(myCommand);  // echo command to terminal
-
-  mySDI12.sendCommand(myCommand);
-  delay(30);  // wait a while for a response
-
-  while (mySDI12.available()) {  // build string from response
-    char c = mySDI12.read();
-    if ((c != '\n') && (c != '\r')) {
-      sdiResponse += c;
-      delay(10);  // 1 character ~ 7.5ms
-    }
-  }
-  if (sdiResponse.length() > 1)
-    Serial.println(sdiResponse);  // write the response to the screen
-  mySDI12.clearBuffer();
-
-  // now go back to top and wait until user hits enter on terminal window
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/ReadMe.md
deleted file mode 100644
index c222be674f8beb6e45b727c00ae451972bdf6ed1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_g_page Example G: Using the Arduino as a Command Terminal for SDI-12 Sensors )
-# Example G: Using the Arduino as a Command Terminal for SDI-12 Sensors
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It's purpose is to allow a user to interact with an SDI-12 sensor directly, issuing commands through a serial terminal window.
-
-[//]: # ( @section g_terminal_window_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} g_terminal_window/platformio.ini )
-
-[//]: # ( @section g_terminal_window_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/g_terminal_window.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/g_terminal_window.ino
deleted file mode 100644
index 9957e7a9b440b5cf7dc56201af35958286081cbe..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/g_terminal_window.ino
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * @file g_terminal_window.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- * @author Ruben Kertesz <github@emnet.net> or @rinnamon on twitter
- * @date 2016
- *
- * @brief Example G: Using the Arduino as a Command Terminal for SDI-12 Sensors
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.  It's purpose is to
- * allow a user to interact with an SDI-12 sensor directly, issuing commands through a
- * serial terminal window.
- *
- * Edited by Ruben Kertesz for ISCO Nile 502 2/10/2016
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-char   inByte      = 0;
-String sdiResponse = "";
-String myCommand   = "";
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  if (Serial.available()) {
-    inByte = Serial.read();
-    if ((inByte != '\n') &&
-        (inByte != '\r')) {  // read all values entered in terminal window before enter
-      myCommand += inByte;
-      delay(10);  // 1 character ~ 7.5ms
-    }
-  }
-
-  if (inByte == '\r') {  // once we press enter, send string to SDI sensor/probe
-    inByte = 0;
-    Serial.println(myCommand);
-    mySDI12.sendCommand(myCommand);
-    delay(30);  // wait a while for a response
-
-    while (mySDI12.available()) {  // build a string of the response
-      char c = mySDI12.read();
-      if ((c != '\n') && (c != '\r')) {
-        sdiResponse += c;
-        delay(10);  // 1 character ~ 7.5ms
-      }
-    }
-    if (sdiResponse.length() >= 1)
-      Serial.println(sdiResponse);  // write the response to the screen
-
-    mySDI12.clearBuffer();  // clear the line
-    myCommand   = "";
-    sdiResponse = "";
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/ReadMe.md
deleted file mode 100644
index 950d64da6e16661d3309affaa64b5cdf5dc9e20e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_h_page Example H: Using SDI-12 in Slave Mode )
-# Example H: Using SDI-12 in Slave Mode
-
-Example sketch demonstrating how to implement an Arduino as a slave on an SDI-12 bus. This may be used, for example, as a middleman between an I2C sensor and an SDI-12 datalogger.
-
-Note that an SDI-12 slave must respond to M! or C! with the number of values it will report and the max time until these values will be available.  This example uses 9 values available in 21 s, but references to these numbers and the output array size and datatype should be changed for your specific application.
-
-[//]: # ( @section h_SDI-12_slave_implementation_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} h_SDI-12_slave_implementation/platformio.ini )
-
-[//]: # ( @section h_SDI-12_slave_implementation_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino
deleted file mode 100644
index f91e72ebed69fff4ea1b43abdbab3307554b1276..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino
+++ /dev/null
@@ -1,253 +0,0 @@
-/**
- * @file h_SDI-12_slave_implementation.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @date 2016
- * @author D. Wasielewski
- *
- * @brief Example H:  Using SDI-12 in Slave Mode
- *
- * Example sketch demonstrating how to implement an arduino as a slave on an SDI-12 bus.
- * This may be used, for example, as a middleman between an I2C sensor and an SDI-12
- * datalogger.
- *
- * Note that an SDI-12 slave must respond to M! or C! with the number of values it will
- * report and the max time until these values will be available.  This example uses 9
- * values available in 21 s, but references to these numbers and the output array size
- * and datatype should be changed for your specific application.
- *
- * D. Wasielewski, 2016
- * Builds upon work started by:
- * https://github.com/jrzondagh/AgriApps-SDI-12-Arduino-Sensor
- * https://github.com/Jorge-Mendes/Agro-Shield/tree/master/SDI-12ArduinoSensor
- *
- * Suggested improvements:
- *  - Get away from memory-hungry arduino String objects in favor of char buffers
- *  - Make an int variable for the "number of values to report" instead of the
- *    hard-coded 9s interspersed throughout the code
- */
-
-#include <SDI12.h>
-
-#define DATA_PIN 7   /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22 /*!< The sensor power pin (or -1 if not switching power) */
-
-char sensorAddress = '5';
-int  state         = 0;
-
-#define WAIT 0
-#define INITIATE_CONCURRENT 1
-#define INITIATE_MEASUREMENT 2
-
-// Create object by which to communicate with the SDI-12 bus on SDIPIN
-SDI12 slaveSDI12(DATA_PIN);
-
-
-void pollSensor(float* measurementValues) {
-  measurementValues[0] = 1.111111;
-  measurementValues[1] = -2.222222;
-  measurementValues[2] = 3.333333;
-  measurementValues[3] = -4.444444;
-  measurementValues[4] = 5.555555;
-  measurementValues[5] = -6.666666;
-  measurementValues[6] = 7.777777;
-  measurementValues[7] = -8.888888;
-  measurementValues[8] = -9.999999;
-}
-
-void parseSdi12Cmd(String command, String* dValues) {
-  /* Ingests a command from an SDI-12 master, sends the applicable response, and
-   * (when applicable) sets a flag to initiate a measurement
-   */
-
-  // First char of command is always either (a) the address of the device being
-  // probed OR (b) a '?' for address query.
-  // Do nothing if this command is addressed to a different device
-  if (command.charAt(0) != sensorAddress && command.charAt(0) != '?') { return; }
-
-  // If execution reaches this point, the slave should respond with something in
-  // the form:   <address><responseStr><Carriage Return><Line Feed>
-  // The following if-switch-case block determines what to put into <responseStr>,
-  // and the full response will be constructed afterward. For '?!' (address query)
-  // or 'a!' (acknowledge active) commands, responseStr is blank so section is skipped
-  String responseStr = "";
-  if (command.length() > 1) {
-    switch (command.charAt(1)) {
-      case 'I':
-        // Identify command
-        // Slave should respond with ID message: 2-char SDI-12 version + 8-char
-        // company name + 6-char sensor model + 3-char sensor version + 0-13 char S/N
-        responseStr = "13COMPNAME0000011.0001";  // Substitute proper ID String here
-        break;
-      case 'C':
-        // Initiate concurrent measurement command
-        // Slave should immediately respond with: "tttnn":
-        //    3-digit (seconds until measurement is available) +
-        //    2-digit (number of values that will be available)
-        // Slave should also start a measurment and relinquish control of the data line
-        responseStr =
-          "02109";  // 9 values ready in 21 sec; Substitue sensor-specific values here
-        // It is not preferred for the actual measurement to occur in this subfunction,
-        // because doing to would hold the main program hostage until the measurement
-        // is complete.  Instead, we'll just set a flag and handle the measurement
-        // elsewhere.
-        state = INITIATE_CONCURRENT;
-        break;
-        // NOTE: "aC1...9!" commands may be added by duplicating this case and adding
-        //       additional states to the state flag
-      case 'M':
-        // Initiate measurement command
-        // Slave should immediately respond with: "tttnn":
-        //    3-digit (seconds until measurement is available) +
-        //    1-digit (number of values that will be available)
-        // Slave should also start a measurment but may keep control of the data line
-        // until advertised time elapsed OR measurement is complete and service request
-        // sent
-        responseStr =
-          "0219";  // 9 values ready in 21 sec; Substitue sensor-specific values here
-        // It is not preferred for the actual measurement to occur in this subfunction,
-        // because doing to would hold the main program hostage until the measurement is
-        // complete.  Instead, we'll just set a flag and handle the measurement
-        // elsewhere. It is preferred though not required that the slave send a service
-        // request upon completion of the measurement.  This should be handled in the
-        // main loop().
-        state = INITIATE_MEASUREMENT;
-        break;
-        // NOTE: "aM1...9!" commands may be added by duplicating this case and adding
-        //       additional states to the state flag
-
-      case 'D':
-        // Send data command
-        // Slave should respond with a String of values
-        // Values to be returned must be split into Strings of 35 characters or fewer
-        // (75 or fewer for concurrent).  The number following "D" in the SDI-12 command
-        // specifies which String to send
-        responseStr = dValues[(int)command.charAt(2) - 48];
-        break;
-      case 'A':
-        // Change address command
-        // Slave should respond with blank message (just the [new] address + <CR> +
-        // <LF>)
-        sensorAddress = command.charAt(2);
-        break;
-      default:
-        // Mostly for debugging; send back UNKN if unexpected command received
-        responseStr = "UNKN";
-        break;
-    }
-  }
-
-  // Issue the response speficied in the switch-case structure above.
-  slaveSDI12.sendResponse(String(sensorAddress) + responseStr + "\r\n");
-}
-
-
-void formatOutputSDI(float* measurementValues, String* dValues, unsigned int maxChar) {
-  /* Ingests an array of floats and produces Strings in SDI-12 output format */
-
-  dValues[0] = "";
-  int j      = 0;
-
-  // upper limit on i should be number of elements in measurementValues
-  for (int i = 0; i < 9; i++) {
-    // Read float value "i" as a String with 6 deceimal digits
-    // (NOTE: SDI-12 specifies max of 7 digits per value; we can only use 6
-    //  decimal place precision if integer part is one digit)
-    String valStr = String(measurementValues[i], 6);
-    // Explictly add implied + sign if non-negative
-    if (valStr.charAt(0) != '-') { valStr = '+' + valStr; }
-    // Append dValues[j] if it will not exceed 35 (aM!) or 75 (aC!) characters
-    if (dValues[j].length() + valStr.length() < maxChar) {
-      dValues[j] += valStr;
-    }
-    // Start a new dValues "line" if appending would exceed 35/75 characters
-    else {
-      dValues[++j] = valStr;
-    }
-  }
-
-  // Fill rest of dValues with blank strings
-  while (j < 9) { dValues[++j] = ""; }
-}
-
-
-void setup() {
-  slaveSDI12.begin();
-  delay(500);
-  slaveSDI12.forceListen();  // sets SDIPIN as input to prepare for incoming message
-}
-
-void loop() {
-  static float measurementValues[9];  // 9 floats to hold simulated sensor data
-  static String
-                dValues[10];  // 10 String objects to hold the responses to aD0!-aD9! commands
-  static String commandReceived = "";  // String object to hold the incoming command
-
-
-  // If a byte is available, an SDI message is queued up. Read in the entire message
-  // before proceding.  It may be more robust to add a single character per loop()
-  // iteration to a static char buffer; however, the SDI-12 spec requires a precise
-  // response time, and this method is invariant to the remaining loop() contents.
-  int avail = slaveSDI12.available();
-  if (avail < 0) {
-    slaveSDI12.clearBuffer();
-  }  // Buffer is full; clear
-  else if (avail > 0) {
-    for (int a = 0; a < avail; a++) {
-      char charReceived = slaveSDI12.read();
-      // Character '!' indicates the end of an SDI-12 command; if the current
-      // character is '!', stop listening and respond to the command
-      if (charReceived == '!') {
-        // Command string is completed; do something with it
-        parseSdi12Cmd(commandReceived, dValues);
-        // Clear command string to reset for next command
-        commandReceived = "";
-        // '!' should be the last available character anyway, but exit the "for" loop
-        // just in case there are any stray characters
-        slaveSDI12.clearBuffer();
-        // eliminate the chance of getting anything else after the '!'
-        slaveSDI12.forceHold();
-        break;
-      }
-      // If the current character is anything but '!', it is part of the command
-      // string.  Append the commandReceived String object.
-      else {
-        // Append command string with new character
-        commandReceived += String(charReceived);
-      }
-    }
-  }
-
-  // For aM! and aC! commands, parseSdi12Cmd will modify "state" to indicate that
-  // a measurement should be taken
-  switch (state) {
-    case WAIT: break;
-    case INITIATE_CONCURRENT:
-      // Do whatever the sensor is supposed to do here
-      // For this example, we will just create arbitrary "simulated" sensor data
-      // NOTE: Your application might have a different data type (e.g. int) and
-      //       number of values to report!
-      pollSensor(measurementValues);
-      // Populate the "dValues" String array with the values in SDI-12 format
-      formatOutputSDI(measurementValues, dValues, 75);
-      state = WAIT;
-      slaveSDI12.forceListen();  // sets SDI-12 pin as input to prepare for incoming
-                                 // message AGAIN
-      break;
-    case INITIATE_MEASUREMENT:
-      // Do whatever the sensor is supposed to do here
-      // For this example, we will just create arbitrary "simulated" sensor data
-      // NOTE: Your application might have a different data type (e.g. int) and
-      //       number of values to report!
-      pollSensor(measurementValues);
-      // Populate the "dValues" String array with the values in SDI-12 format
-      formatOutputSDI(measurementValues, dValues, 35);
-      // For aM!, Send "service request" (<address><CR><LF>) when data is ready
-      slaveSDI12.sendResponse(String(sensorAddress) + "\r\n");
-      state = WAIT;
-      slaveSDI12.forceListen();  // sets SDI-12 pin as input to prepare for incoming
-                                 // message AGAIN
-      break;
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/ReadMe.md
deleted file mode 100644
index 9b7dd5a16a2849a7fa80120bc59aa42de4b80c5d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/ReadMe.md
+++ /dev/null
@@ -1,15 +0,0 @@
-[//]: # ( @page example_i_page Example I: SDI-12 PC Interface )
-# Example I:  SDI-12 PC Interface
-
-Code for an Arduino-based USB dongle translates serial comm from PC to SDI-12 (electrical and timing)
-1. Allows user to communicate to SDI-12 devices from a serial terminal emulator (e.g. PuTTY).
-2. Able to spy on an SDI-12 bus for troubleshooting comm between datalogger and sensors.
-3. Can also be used as a hardware middleman for interfacing software to an SDI-12 sensor.  For example, implementing an SDI-12 datalogger in Python on a PC.  Use verbatim mode with feedback off in this case.
-
-Note: "translation" means timing and electrical interface.  It does not ensure SDI-12 compliance of commands sent via it.
-
-[//]: # ( @section i_SDI-12_interface_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} i_SDI-12_interface/platformio.ini )
-
-[//]: # ( @section i_SDI-12_interface_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/i_SDI-12_interface.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/i_SDI-12_interface.ino
deleted file mode 100644
index 8fc6b393d5eb6e4f6eb211ca9858040257eb76c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/i_SDI-12_interface.ino
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * @file h_SDI-12_slave_implementation.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @date 2016
- * @author D. Wasielewski
- *
- * @brief Example I:  SDI-12 PC Interface
- *
- *  Arduino-based USB dongle translates serial comm from PC to SDI-12 (electrical and
- * timing)
- *  1. Allows user to communicate to SDI-12 devices from a serial terminal emulator
- * (e.g. PuTTY).
- *  2. Able to spy on an SDI-12 bus for troubleshooting comm between datalogger and
- * sensors.
- *  3. Can also be used as a hardware middleman for interfacing software to an SDI-12
- * sensor. For example, implementing an SDI-12 datalogger in Python on a PC.  Use
- * verbatim mode with feedback off in this case.
- *
- *  Note: "translation" means timing and electrical interface.  It does not ensure
- * SDI-12 compliance of commands sent via it.
- *
- * D. Wasielewski, 2016
- * Builds upon work started by:
- * https://github.com/jrzondagh/AgriApps-SDI-12-Arduino-Sensor
- * https://github.com/Jorge-Mendes/Agro-Shield/tree/master/SDI-12ArduinoSensor
- *
- * Known issues:
- *  - Backspace adds a "backspace character" into the serialMsgStr (which gets sent
- *    out on the SDI-12 interface) instead of removing the previous char from it
- *  - Suceptible to noise on the SDI-12 data line; consider hardware filtering or
- *    software error-checking
- */
-
-#define HELPTEXT                                                                    \
-  "OPTIONS:\r\n"                                                                    \
-  "help   : Print this message\r\n"                                                 \
-  "mode s : SDI-12 command mode (uppercase and ! automatically corrected) "         \
-  "[default]\r\n"                                                                   \
-  "mode v : verbatim mode (text will be sent verbatim)\r\n"                         \
-  "fb on  : Enable feedback (characters visible while typing) [default]\r\n"        \
-  "fb off : Disable feedback (characters not visible while typing; may be desired " \
-  "for developers)\r\n"                                                             \
-  "(else) : send command to SDI-12 bus"
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define SENSOR_ADDRESS 1
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Initiate serial connection to SDI-12 bus
-  mySDI12.begin();
-  delay(500);
-  mySDI12.forceListen();
-
-  // Print help text (may wish to comment out if used for communicating to software)
-  Serial.println(HELPTEXT);
-}
-
-void loop() {
-  static String  serialMsgStr;
-  static boolean serialMsgReady = false;
-
-  static String  sdiMsgStr;
-  static boolean sdiMsgReady = false;
-
-  static boolean verbatim = false;
-  static boolean feedback = true;
-
-
-  // -- READ SERIAL (PC COMMS) DATA --
-  // If serial data is available, read in a single byte and add it to
-  // a String on each iteration
-  if (Serial.available()) {
-    char inByte1 = Serial.read();
-    if (feedback) { Serial.print(inByte1); }
-    if (inByte1 == '\r' || inByte1 == '\n') {
-      serialMsgReady = true;
-    } else {
-      serialMsgStr += inByte1;
-    }
-  }
-
-  // -- READ SDI-12 DATA --
-  // If SDI-12 data is available, keep reading until full message consumed
-  // (Normally I would prefer to allow the loop() to keep executing while the string
-  //  is being read in--as the serial example above--but SDI-12 depends on very precise
-  //  timing, so it is probably best to let it hold up loop() until the string is
-  //  complete)
-  int avail = mySDI12.available();
-  if (avail < 0) {
-    mySDI12.clearBuffer();
-  }  // Buffer is full; clear
-  else if (avail > 0) {
-    for (int a = 0; a < avail; a++) {
-      char inByte2 = mySDI12.read();
-      Serial.println(inByte2);
-      if (inByte2 == '\n') {
-        sdiMsgReady = true;
-      } else if (inByte2 == '!') {
-        sdiMsgStr += "!";
-        sdiMsgReady = true;
-      } else {
-        sdiMsgStr += String(inByte2);
-      }
-    }
-  }
-
-
-  // Report completed SDI-12 messages back to serial interface
-  if (sdiMsgReady) {
-    Serial.println(sdiMsgStr);
-    // Reset String for next SDI-12 message
-    sdiMsgReady = false;
-    sdiMsgStr   = "";
-  }
-
-  // Send completed Serial message as SDI-12 command
-  if (serialMsgReady) {
-    Serial.println();
-    // Check if the serial message is a known command to the SDI-12 interface program
-    String lowerMsgStr = serialMsgStr;
-    lowerMsgStr.toLowerCase();
-    if (lowerMsgStr == "mode v") {
-      verbatim = true;
-      Serial.println("Verbatim mode; exact text will be sent.  Enter \"mode s\" for "
-                     "SDI-12 command mode.");
-    } else if (lowerMsgStr == "mode s") {
-      verbatim = false;
-      Serial.println("SDI-12 command mode; uppercase and ! suffix optional.  Enter "
-                     "\"mode v\" for verbatim mode.");
-    } else if (lowerMsgStr == "help") {
-      Serial.println(HELPTEXT);
-    } else if (lowerMsgStr == "fb off") {
-      feedback = false;
-      Serial.println("Feedback off; typed commands will not be visible.  Enter \"fb "
-                     "on\" to enable feedback.");
-    } else if (lowerMsgStr == "fb on") {
-      feedback = true;
-      Serial.println("Feedback on; typed commands will be visible.  Enter \"fb off\" "
-                     "to disable feedback.");
-    }
-    // If not a known command to the SDI-12 interface program, send out on SDI-12 data
-    // pin
-    else {
-      if (verbatim) {
-        mySDI12.sendCommand(serialMsgStr);
-      } else {
-        serialMsgStr.toUpperCase();
-        mySDI12.sendCommand(serialMsgStr + "!");
-      }
-    }
-    // Reset String for next serial message
-    serialMsgReady = false;
-    serialMsgStr   = "";
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/ReadMe.md
deleted file mode 100644
index 9d6daf1fe0d8f4520936129821ffd5d8e2d4e9d5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_j_page Example J: Using External Interrupts )
-# Example J: Using External Interrupts
-
-This is identical to example D, except that instead of using internal definitions of pin change interrupt vectors, it depends on another library to define them for it.
-
-To use this example, you must remove the comment braces around `#define SDI12_EXTERNAL_PCINT` in the library and re-compile it.
-
-[//]: # ( @section j_external_pcint_library_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} j_external_pcint_library/platformio.ini )
-
-[//]: # ( @section j_external_pcint_library_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/j_external_pcint_library.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/j_external_pcint_library.ino
deleted file mode 100644
index 7700ecaa314be932268c7c606bb85ecd1e6e2a51..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/j_external_pcint_library.ino
+++ /dev/null
@@ -1,273 +0,0 @@
-/**
- * @file j_external_pcint_library.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- *
- * @brief Example J: Using External Interrupts
- *
- * This is identical to example B, except that it uses the library
- * [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt) to define the
- * interrupt vector. This allows it to play nicely with any other libraries which define
- * interrupt vectors.
- *
- * For this to work, you must remove the comment braces around
- * `#define SDI12_EXTERNAL_PCINT` in the library and re-compile it.
- */
-
-#include <EnableInterrupt.h>
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-bool takeMeasurement(char i, String meas_type = "") {
-  mySDI12.clearBuffer();
-  String command = "";
-  command += i;
-  command += "M";
-  command += meas_type;
-  command += "!";  // SDI-12 measurement command format  [address]['M'][!]
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-
-  String addr = sdiResponse.substring(0, 1);
-  Serial.print(addr);
-  Serial.print(", ");
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  Serial.print(wait);
-  Serial.print(", ");
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  Serial.print(numResults);
-  Serial.print(", ");
-
-  unsigned long timerStart = millis();
-  while ((millis() - timerStart) < (1000 * (wait + 1))) {
-    if (mySDI12.available())  // sensor can interrupt us to let us know it is done early
-    {
-      Serial.print(millis() - timerStart);
-      Serial.print(", ");
-      mySDI12.clearBuffer();
-      break;
-    }
-  }
-  // Wait for anything else and clear it out
-  delay(30);
-  mySDI12.clearBuffer();
-
-  if (numResults > 0) { return getResults(i, numResults); }
-
-  return true;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Enable interrupts for the recieve pin
-  pinMode(DATA_PIN, INPUT_PULLUP);
-  enableInterrupt(DATA_PIN, SDI12::handleInterrupt, CHANGE);
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Protocol Version, Sensor Address, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println("Time Elapsed (s), Est Measurement Time (s), Number Measurements, "
-                 "Real Measurement Time (ms), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  // measure one at a time
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (isActive[i]) {
-      Serial.print(millis() / 1000);
-      Serial.print(", ");
-      takeMeasurement(addr);
-      Serial.println();
-    }
-  }
-
-  delay(10000);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/ReadMe.md
deleted file mode 100644
index 3025222cc1c8874e8a74c1279fd42800eb03c62f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_k_page Example K: Concurrent Measurements )
-# Example K: Concurrent Measurements
-
-This is very similar to example D - finding all attached sensors and logging data from them.
-Unlike example D, however, which waits for each sensor to complete a measurement, this asks all sensors to take measurements concurrently and then waits until each is finished to query for results.
-This can be much faster than waiting for each sensor when you have multiple sensor attached.
-
-[//]: # ( @section k_concurrent_logger_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} k_concurrent_logger/platformio.ini )
-
-[//]: # ( @section k_concurrent_logger_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/k_concurrent_logger.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/k_concurrent_logger.ino
deleted file mode 100644
index 24f72760019f5181554e3afdc24b1d4dac5ab09a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/k_concurrent_logger.ino
+++ /dev/null
@@ -1,287 +0,0 @@
-/**
- * @file k_concurrent_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Sara Geleskie Damiano <sdamiano@stroudcenter.org>
- *
- * @brief Example K:  Concurrent Measurements
- *
- * This is very similar to example B - finding all attached sensors and logging data
- * from them. Unlike example B, however, which waits for each sensor to complete a
- * measurement, this asks all sensors to take measurements concurrently and then waits
- * until each is finished to query for results. This can be much faster than waiting for
- * each sensor when you have multiple sensor attached.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-// keeps track of the wait time for each active addresses
-uint8_t waitTime[64] = {
-  0,
-};
-
-// keeps track of the time each sensor was started
-uint32_t millisStarted[64] = {
-  0,
-};
-
-// keeps track of the time each sensor will be ready
-uint32_t millisReady[64] = {
-  0,
-};
-
-// keeps track of the number of results expected
-uint8_t returnedResults[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-int startConcurrentMeasurement(char i, String meas_type = "") {
-  mySDI12.clearBuffer();
-  String command = "";
-  command += i;
-  command += "C";
-  command += meas_type;
-  command += "!";  // SDI-12 concurrent measurement command format  [address]['C'][!]
-  mySDI12.sendCommand(command);
-  delay(30);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-
-  uint8_t sensorNum   = charToDec(i);  // e.g. convert '0' to 0, 'a' to 10, 'Z' to 61.
-  waitTime[sensorNum] = wait;
-  millisStarted[sensorNum] = millis();
-  if (wait == 0) {
-    millisReady[sensorNum] = millis();
-  } else {
-    millisReady[sensorNum] = millis() + wait * 1000;
-  }
-  returnedResults[sensorNum] = numResults;
-
-  return numResults;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Protocol Version, Sensor Address, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println("Time Elapsed (s), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  // start all sensors measuring concurrently
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (isActive[i]) { startConcurrentMeasurement(addr); }
-  }
-
-  // get all readings
-  uint8_t numReadingsRecorded = 0;
-  while (numReadingsRecorded < numSensors) {
-    for (byte i = 0; i < 62; i++) {
-      char addr = decToChar(i);
-      if (isActive[i]) {
-        if (millis() > millisReady[i]) {
-          if (returnedResults[i] > 0) {
-            Serial.print(millis() / 1000);
-            Serial.print(", ");
-            Serial.print(addr);
-            Serial.print(", ");
-            getResults(addr, returnedResults[i]);
-            Serial.println();
-          }
-          numReadingsRecorded++;
-        }
-      }
-    }
-  }
-
-  delay(10000);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/keywords.txt b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/keywords.txt
deleted file mode 100644
index 4f30b8e6f56f637090db332fe4a7207781e3c460..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/keywords.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-
-# Syntax Coloring Map for SDI12 when
-# using the Arduino IDE.
-
-### Classes (KEYWORD1)
-
-SDI12	KEYWORD1
-
-### Methods and Functions (KEYWORD2)
-
-begin	KEYWORD2
-end	KEYWORD2
-forceHold	KEYWORD2
-forceListen	KEYWORD2
-sendCommand	KEYWORD2
-sendResponse	KEYWORD2
-available	KEYWORD2
-peek		KEYWORD2
-read		KEYWORD2
-clearBuffer		KEYWORD2
-flush		KEYWORD2
-setActive	KEYWORD2
-isActive	KEYWORD2
-handleInterrupt	KEYWORD2
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.json b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.json
deleted file mode 100644
index 95b25f7653495896e9af2afb03dda75a9aa1c995..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
-  "name": "SDI-12",
-  "version": "2.1.4",
-  "keywords": "SDI-12, sdi12, communication, bus, sensor, Decagon",
-  "description": "An Arduino library for SDI-12 communication with a wide variety of environmental sensors.",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/EnviroDIY/Arduino-SDI-12.git"
-  },
-  "authors": [
-    {
-      "name": "Kevin M. Smith",
-      "email": "Kevin@elite-education.org"
-    },
-    {
-      "name": "Shannon Hicks",
-      "email": "shicks@stroudcenter.org"
-    },
-    {
-      "name": "Sara Damiano",
-      "email": "sdamiano@stroudcenter.org",
-      "maintainer": true
-    }
-  ],
-  "license": "BSD-3-Clause",
-  "frameworks": "arduino",
-  "platforms": [
-      "atmelavr",
-      "atmelsam"
-  ],
-  "export": {
-    "exclude": ["doc/*"]
-  },
-  "examples": ["examples/*/*.ino"]
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.properties b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.properties
deleted file mode 100644
index 83a2da9623b2109f2dde9376d605d163e3b2adf1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-name=SDI-12
-version=2.1.4
-author=Kevin M. Smith <Kevin@elite-education.org>, Shannon Hicks <shicks@stroudcenter.org>
-maintainer=Sara Damiano <sdamiano@stroudcenter.org>
-sentence=An Arduino library for SDI-12 communication with a wide variety of environmental sensors.
-paragraph=This library provides a general software solution, without requiring any additional hardware.
-category=Communication
-url=https://github.com/EnviroDIY/Arduino-SDI-12
-architectures=avr,sam,samd,espressif
-includes=SDI12.h
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/ReadMe.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/ReadMe.md
deleted file mode 100644
index 8d315f78de0ccb3908b0bde9266a180dfb92423b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/ReadMe.md
+++ /dev/null
@@ -1 +0,0 @@
-These are the library source files.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.cpp
deleted file mode 100644
index c71e998e91c2eeed083e0e9a4dacc4bc66a4d652..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.cpp
+++ /dev/null
@@ -1,726 +0,0 @@
-/**
- * @file SDI12.cpp
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @date August 2013
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- *
- * @brief This file implements the main class for the SDI-12 implementation.
- *
- * ========================== Arduino SDI-12 ==================================
- *
- * An Arduino library for SDI-12 communication with a wide variety of environmental
- * sensors. This library provides a general software solution, without requiring any
- * additional hardware.
- *
- * ======================== Attribution & License =============================
- *
- * Copyright (C) 2013  Stroud Water Research Center
- * Available at https://github.com/EnviroDIY/Arduino-SDI-12
- *
- * Authored initially in August 2013 by:
- *          Kevin M. Smith (http://ethosengineering.org)
- *          Inquiries: SDI12@ethosengineering.org
- *
- * Modified 2017 by Manuel Jimenez Buendia to work with ARM based processors (Arduino
- * Zero)
- *
- * Maintenance and merging 2017 by Sara Damiano
- *
- * based on the SoftwareSerial library (formerly NewSoftSerial), authored by:
- *         ladyada (http://ladyada.net)
- *         Mikal Hart (http://www.arduiniana.org)
- *         Paul Stoffregen (http://www.pjrc.com)
- *         Garrett Mace (http://www.macetech.com)
- *         Brett Hagman (http://www.roguerobotics.com/)
- *
- * This library is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation; either version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with
- * this library; if not, write to the Free Software Foundation, Inc., 51 Franklin
- * Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-
-#include "SDI12.h"  //  Header file for this library
-
-/* ================  Set static constants ===========================================*/
-
-// Pointer to active SDI12 object
-SDI12* SDI12::_activeObject = NULL;
-// Timer functions
-SDI12Timer SDI12::sdi12timer;
-
-// The size of a bit in microseconds
-// 1200 baud = 1200 bits/second ~ 833.333 µs/bit
-const uint16_t SDI12::bitWidth_micros = (uint16_t)833;
-// The required "break" before sending commands, >= 12ms
-const uint16_t SDI12::lineBreak_micros = (uint16_t)12300;
-// The required mark before a command or response, >= 8.33ms
-const uint16_t SDI12::marking_micros = (uint16_t)8500;
-
-// the width of a single bit in "ticks" of the cpu clock.
-const uint8_t SDI12::txBitWidth = TICKS_PER_BIT;
-// A fudge factor to make things work
-const uint8_t SDI12::rxWindowWidth = RX_WINDOW_FUDGE;
-// The number of bits per tick, shifted by 2^10.
-const uint8_t SDI12::bitsPerTick_Q10 = BITS_PER_TICK_Q10;
-// A mask waiting for a start bit; 0b11111111
-const uint8_t SDI12::WAITING_FOR_START_BIT = 0xFF;
-
-uint16_t SDI12::prevBitTCNT;  // previous RX transition in micros
-uint8_t  SDI12::rxState;      // 0: got start bit; >0: bits rcvd
-uint8_t  SDI12::rxMask;       // bit mask for building received character
-uint8_t  SDI12::rxValue;      // character being built
-
-uint16_t SDI12::mul8x8to16(uint8_t x, uint8_t y) {
-  return x * y;
-}
-
-uint16_t SDI12::bitTimes(uint8_t dt) {
-  return mul8x8to16(dt + rxWindowWidth, bitsPerTick_Q10) >> 10;
-}
-
-
-/* ================ Buffer Setup ====================================================*/
-uint8_t          SDI12::_rxBuffer[SDI12_BUFFER_SIZE];  // The Rx buffer
-volatile uint8_t SDI12::_rxBufferTail = 0;             // index of buff tail
-volatile uint8_t SDI12::_rxBufferHead = 0;             // index of buff head
-
-
-/* ================ Reading from the SDI-12 Buffer ==================================*/
-
-// reveals the number of characters available in the buffer
-int SDI12::available() {
-  if (_bufferOverflow) return -1;
-  return (_rxBufferTail + SDI12_BUFFER_SIZE - _rxBufferHead) % SDI12_BUFFER_SIZE;
-}
-
-// reveals the next character in the buffer without consuming
-int SDI12::peek() {
-  if (_rxBufferHead == _rxBufferTail) return -1;  // Empty buffer? If yes, -1
-  return _rxBuffer[_rxBufferHead];                // Otherwise, read from "head"
-}
-
-// a public function that clears the buffer contents and resets the status of the buffer
-// overflow.
-void SDI12::clearBuffer() {
-  _rxBufferHead = _rxBufferTail = 0;
-  _bufferOverflow               = false;
-}
-
-// reads in the next character from the buffer (and moves the index ahead)
-int SDI12::read() {
-  _bufferOverflow = false;                        // Reading makes room in the buffer
-  if (_rxBufferHead == _rxBufferTail) return -1;  // Empty buffer? If yes, -1
-  uint8_t nextChar = _rxBuffer[_rxBufferHead];    // Otherwise, grab char at head
-  _rxBufferHead    = (_rxBufferHead + 1) % SDI12_BUFFER_SIZE;  // increment head
-  return nextChar;                                             // return the char
-}
-
-// these functions hide the stream equivalents to return a custom timeout value
-int SDI12::peekNextDigit(LookaheadMode lookahead, bool detectDecimal) {
-  int c;
-  while (1) {
-    c = timedPeek();
-
-    if (c < 0 || c == '-' || (c >= '0' && c <= '9') || (detectDecimal && c == '.'))
-      return c;
-
-    switch (lookahead) {
-      case SKIP_NONE: return -1;  // Fail code.
-      case SKIP_WHITESPACE:
-        switch (c) {
-          case ' ':
-          case '\t':
-          case '\r':
-          case '\n': break;
-          default: return -1;  // Fail code.
-        }
-      case SKIP_ALL: break;
-    }
-    read();  // discard non-numeric
-  }
-}
-
-long SDI12::parseInt(LookaheadMode lookahead, char ignore) {
-  bool     isNegative = false;
-  uint16_t value      = 0;
-  int      c;
-
-  c = peekNextDigit(lookahead, false);
-  // ignore non numeric leading characters
-  if (c < 0) return TIMEOUT;  // TIMEOUT returned if timeout
-  //  THIS IS THE ONLY DIFFERENCE BETWEEN THIS FUNCTION AND THE STREAM DEFAULT!
-
-  do {
-    if (c == ignore) {  // ignore this character
-    } else if (c == '-') {
-      isNegative = true;
-    } else if (c >= '0' && c <= '9') {  // is c a digit?
-      value = value * 10 + c - '0';
-    }
-    read();  // consume the character we got with peek
-    c = timedPeek();
-  } while ((c >= '0' && c <= '9') || c == ignore);
-
-  if (isNegative) value = -value;
-  return value;
-}
-
-// the same as parseInt but returns a floating point value
-float SDI12::parseFloat(LookaheadMode lookahead, char ignore) {
-  bool  isNegative = false;
-  bool  isFraction = false;
-  long  value      = 0;
-  int   c;
-  float fraction = 1.0;
-
-  c = peekNextDigit(lookahead, true);
-  // ignore non numeric leading characters
-  if (c < 0) return TIMEOUT;  // TIMEOUT returned if timeout
-  //  THIS IS THE ONLY DIFFERENCE BETWEEN THIS FUNCTION AND THE STREAM DEFAULT!
-
-  do {
-    if (c == ignore) {  // ignore
-    } else if (c == '-') {
-      isNegative = true;
-    } else if (c == '.') {
-      isFraction = true;
-    } else if (c >= '0' && c <= '9') {  // is c a digit?
-      value = value * 10 + c - '0';
-      if (isFraction) fraction *= 0.1;
-    }
-    read();  // consume the character we got with peek
-    c = timedPeek();
-  } while ((c >= '0' && c <= '9') || (c == '.' && !isFraction) || c == ignore);
-
-  if (isNegative) value = -value;
-  if (isFraction)
-    return value * fraction;
-  else
-    return value;
-}
-
-/* ================ Constructor, Destructor, begin(), end(), and timeout ============*/
-// Constructor
-SDI12::SDI12() {
-  _dataPin        = -1;
-  _bufferOverflow = false;
-  // SDI-12 protocol says sensors must respond within 15 milliseconds
-  // We'll bump that up to 150, just for good measure, but we don't want to
-  // wait the whole stream default of 1s for a response.
-  setTimeout(150);
-  // Because SDI-12 is mostly used for environmental sensors, we want to be able
-  // to distinguish between the '0' that parseInt and parseFloat usually return
-  // on timeouts and a real measured 0 value.  So we force the timeout response
-  // to be -9999, which is not a common value for most variables measured by
-  // in-site environmental sensors.
-  setTimeoutValue(-9999);
-}
-SDI12::SDI12(int8_t dataPin) {
-  _dataPin        = dataPin;
-  _bufferOverflow = false;
-  // SDI-12 protocol says sensors must respond within 15 milliseconds
-  // We'll bump that up to 150, just for good measure, but we don't want to
-  // wait the whole stream default of 1s for a response.
-  setTimeout(150);
-  // Because SDI-12 is mostly used for environmental sensors, we want to be able
-  // to distinguish between the '0' that parseInt and parseFloat usually return
-  // on timeouts and a real measured 0 value.  So we force the timeout response
-  // to be -9999, which is not a common value for most variables measured by
-  // in-site environmental sensors.
-  setTimeoutValue(-9999);
-}
-
-// Destructor
-SDI12::~SDI12() {
-  setState(SDI12_DISABLED);
-  if (isActive()) { _activeObject = NULL; }
-  // Set the timer prescalers back to original values
-  // NOTE:  This does NOT reset SAMD board pre-scalers!
-  sdi12timer.resetSDI12TimerPrescale();
-}
-
-// Begin
-void SDI12::begin() {
-  // setState(SDI12_HOLDING);
-  setActive();
-  // Set up the prescaler as needed for timers
-  // This function is defined in SDI12_boards.h
-  sdi12timer.configSDI12TimerPrescale();
-}
-void SDI12::begin(int8_t dataPin) {
-  _dataPin = dataPin;
-  begin();
-}
-
-// End
-void SDI12::end() {
-  setState(SDI12_DISABLED);
-  _activeObject = NULL;
-  // Set the timer prescalers back to original values
-  // NOTE:  This does NOT reset SAMD board pre-scalers!
-  sdi12timer.resetSDI12TimerPrescale();
-}
-
-// Set the timeout return
-void SDI12::setTimeoutValue(int16_t value) {
-  TIMEOUT = value;
-}
-
-// Set the data pin for the SDI-12 instance
-void SDI12::setDataPin(int8_t dataPin) {
-  _dataPin = dataPin;
-}
-
-// Return the data pin for the SDI-12 instance
-int8_t SDI12::getDataPin() {
-  return _dataPin;
-}
-
-
-/* ================ Using more than one SDI-12 object ===============================*/
-// a method for setting the current object as the active object
-bool SDI12::setActive() {
-  if (_activeObject != this) {
-    setState(SDI12_HOLDING);
-    _activeObject = this;
-    return true;
-  }
-  return false;
-}
-
-// a method for checking if this object is the active object
-bool SDI12::isActive() {
-  return this == _activeObject;
-}
-
-
-/* ================ Data Line States ================================================*/
-// Processor specific parity and interrupts
-#if defined __AVR__
-#include <avr/interrupt.h>  // interrupt handling
-#include <util/parity.h>    // optimized parity bit handling
-#else
-// Added MJB: parity function to replace the one specific for AVR from util/parity.h
-// http://graphics.stanford.edu/~seander/bithacks.html#ParityNaive
-uint8_t SDI12::parity_even_bit(uint8_t v) {
-  uint8_t parity = 0;
-  while (v) {
-    parity = !parity;
-    v      = v & (v - 1);
-  }
-  return parity;
-}
-#endif
-
-// a helper function to switch pin interrupts on or off
-void SDI12::setPinInterrupts(bool enable) {
-#if defined(ARDUINO_ARCH_SAMD) || defined(ESP32) || defined(ESP8266)
-  // Merely need to attach the interrupt function to the pin
-  if (enable) attachInterrupt(digitalPinToInterrupt(_dataPin), handleInterrupt, CHANGE);
-  // Merely need to detach the interrupt function from the pin
-  else
-    detachInterrupt(digitalPinToInterrupt(_dataPin));
-
-#elif defined(__AVR__) && not defined(SDI12_EXTERNAL_PCINT)
-  if (enable) {
-    // Enable interrupts on the register with the pin of interest
-    *digitalPinToPCICR(_dataPin) |= (1 << digitalPinToPCICRbit(_dataPin));
-    // Enable interrupts on the specific pin of interest
-    // The interrupt function is actually attached to the interrupt way down in
-    // section 7.5
-    *digitalPinToPCMSK(_dataPin) |= (1 << digitalPinToPCMSKbit(_dataPin));
-  } else {
-    // Disable interrupts on the specific pin of interest
-    *digitalPinToPCMSK(_dataPin) &= ~(1 << digitalPinToPCMSKbit(_dataPin));
-    if (!*digitalPinToPCMSK(_dataPin)) {
-      // If there are no other pins on the register left with enabled interrupts,
-      // disable the whole register
-      *digitalPinToPCICR(_dataPin) &= ~(1 << digitalPinToPCICRbit(_dataPin));
-    }
-    // We don't detach the function from the interrupt for AVR processors
-  }
-#else
-  if (enable) {
-    return;
-  } else {
-    return;
-  }
-#endif
-}
-
-// sets the state of the SDI-12 object.
-void SDI12::setState(SDI12_STATES state) {
-  switch (state) {
-    case SDI12_HOLDING: {
-      pinMode(_dataPin, INPUT);     // Turn off the pull-up resistor
-      pinMode(_dataPin, OUTPUT);    // Pin mode = output
-      digitalWrite(_dataPin, LOW);  // Pin state = low - marking
-      setPinInterrupts(false);      // Interrupts disabled on data pin
-      break;
-    }
-    case SDI12_TRANSMITTING: {
-      pinMode(_dataPin, INPUT);   // Turn off the pull-up resistor
-      pinMode(_dataPin, OUTPUT);  // Pin mode = output
-      setPinInterrupts(false);    // Interrupts disabled on data pin
-      break;
-    }
-    case SDI12_LISTENING: {
-      digitalWrite(_dataPin, LOW);  // Pin state = low (turns off pull-up)
-      pinMode(_dataPin, INPUT);     // Pin mode = input, pull-up resistor off
-      interrupts();                 // Enable general interrupts
-      setPinInterrupts(true);       // Enable Rx interrupts on data pin
-      rxState = WAITING_FOR_START_BIT;
-      break;
-    }
-    default:  // SDI12_DISABLED or SDI12_ENABLED
-    {
-      digitalWrite(_dataPin, LOW);  // Pin state = low (turns off pull-up)
-      pinMode(_dataPin, INPUT);     // Pin mode = input, pull-up resistor off
-      setPinInterrupts(false);      // Interrupts disabled on data pin
-      break;
-    }
-  }
-}
-
-// forces a SDI12_HOLDING state.
-void SDI12::forceHold() {
-  setState(SDI12_HOLDING);
-}
-
-// forces a SDI12_LISTENING state.
-void SDI12::forceListen() {
-  setState(SDI12_LISTENING);
-}
-
-
-/* ================ Waking Up and Talking To Sensors ================================*/
-// this function wakes up the entire sensor bus
-void SDI12::wakeSensors(int8_t extraWakeTime) {
-  setState(SDI12_TRANSMITTING);
-  // Universal interrupts can be on while the break and marking happen because
-  // timings for break and from the recorder are not critical.
-  // Interrupts on the pin are disabled for the entire transmitting state
-  digitalWrite(_dataPin, HIGH);         // break is HIGH
-  delayMicroseconds(lineBreak_micros);  // Required break of 12 milliseconds (12,000 µs)
-  delay(extraWakeTime);                 // allow the sensors to wake
-  digitalWrite(_dataPin, LOW);          // marking is LOW
-  delayMicroseconds(marking_micros);  // Required marking of 8.33 milliseconds(8,333 µs)
-}
-
-// this function writes a character out on the data line
-void SDI12::writeChar(uint8_t outChar) {
-  uint8_t currentTxBitNum = 0;  // first bit is start bit
-  uint8_t bitValue        = 1;  // start bit is HIGH (inverse parity...)
-
-  noInterrupts();  // _ALL_ interrupts disabled so timing can't be shifted
-
-  sdi12timer_t t0 = READTIME;  // start time
-
-  digitalWrite(
-    _dataPin,
-    HIGH);  // immediately get going on the start bit
-            // this gives us 833µs to calculate parity and position of last high bit
-  currentTxBitNum++;
-
-  uint8_t parityBit = parity_even_bit(outChar);  // Calculate the parity bit
-  outChar |= (parityBit << 7);  // Add parity bit to the outgoing character
-
-  // Calculate the position of the last bit that is a 0/HIGH (ie, HIGH, not marking)
-  // That bit will be the last time-critical bit.  All bits after that can be
-  // sent with interrupts enabled.
-
-  uint8_t lastHighBit =
-    9;  // The position of the last bit that is a 0 (ie, HIGH, not marking)
-  uint8_t msbMask = 0x80;  // A mask with all bits at 1
-  while (msbMask & outChar) {
-    lastHighBit--;
-    msbMask >>= 1;
-  }
-
-  // Hold the line for the rest of the start bit duration
-
-  while ((uint8_t)(READTIME - t0) < txBitWidth) {}
-  t0 = READTIME;  // advance start time
-
-  // repeat for all data bits until the last bit different from marking
-  while (currentTxBitNum++ < lastHighBit) {
-    bitValue = outChar & 0x01;  // get next bit in the character to send
-    if (bitValue) {
-      digitalWrite(_dataPin, LOW);  // set the pin state to LOW for 1's
-    } else {
-      digitalWrite(_dataPin, HIGH);  // set the pin state to HIGH for 0's
-    }
-    // Hold the line for this bit duration
-    while ((uint8_t)(READTIME - t0) < txBitWidth) {}
-    t0 = READTIME;  // start time
-
-    outChar = outChar >> 1;  // shift character to expose the following bit
-  }
-
-  // Set the line low for the all remaining 1's and the stop bit
-  digitalWrite(_dataPin, LOW);
-
-  interrupts();  // Re-enable universal interrupts as soon as critical timing is past
-
-  // Hold the line low until the end of the 10th bit
-  uint8_t bitTimeRemaining = txBitWidth * (10 - lastHighBit);
-  while ((uint8_t)(READTIME - t0) < bitTimeRemaining) {}
-}
-
-// The typical write functionality for a stream object
-// This allows you to use the stream print functions to send commands out on
-// the SDI-12, line, but it will not wake the sensors in advance of the command.
-size_t SDI12::write(uint8_t byte) {
-  setState(SDI12_TRANSMITTING);
-  writeChar(byte);            // write the character/byte
-  setState(SDI12_LISTENING);  // listen for reply
-  return 1;                   // 1 character sent
-}
-
-// this function sends out the characters of the String cmd, one by one
-void SDI12::sendCommand(String& cmd, int8_t extraWakeTime) {
-  wakeSensors(extraWakeTime);  // wake up sensors
-  for (int unsigned i = 0; i < cmd.length(); i++) {
-    writeChar(cmd[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // listen for reply
-}
-
-void SDI12::sendCommand(const char* cmd, int8_t extraWakeTime) {
-  wakeSensors(extraWakeTime);  // wake up sensors
-  for (int unsigned i = 0; i < strlen(cmd); i++) {
-    writeChar(cmd[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // listen for reply
-}
-
-void SDI12::sendCommand(FlashString cmd, int8_t extraWakeTime) {
-  wakeSensors(extraWakeTime);  // wake up sensors
-  for (int unsigned i = 0; i < strlen_P((PGM_P)cmd); i++) {
-    // write each character
-    writeChar(static_cast<char>(pgm_read_byte((const char*)cmd + i)));
-  }
-  setState(SDI12_LISTENING);  // listen for reply
-}
-
-// This function sets up for a response to a separate data recorder by sending out a
-// marking and then sending out the characters of resp one by one (for slave-side use,
-// that is, when the Arduino itself is acting as an SDI-12 device rather than a
-// recorder).
-void SDI12::sendResponse(String& resp) {
-  setState(SDI12_TRANSMITTING);       // Get ready to send data to the recorder
-  digitalWrite(_dataPin, LOW);        // marking is LOW
-  delayMicroseconds(marking_micros);  // 8.33 ms marking before response
-  for (int unsigned i = 0; i < resp.length(); i++) {
-    writeChar(resp[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // return to listening state
-}
-
-void SDI12::sendResponse(const char* resp) {
-  setState(SDI12_TRANSMITTING);       // Get ready to send data to the recorder
-  digitalWrite(_dataPin, LOW);        // marking is LOW
-  delayMicroseconds(marking_micros);  // 8.33 ms marking before response
-  for (int unsigned i = 0; i < strlen(resp); i++) {
-    writeChar(resp[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // return to listening state
-}
-
-void SDI12::sendResponse(FlashString resp) {
-  setState(SDI12_TRANSMITTING);       // Get ready to send data to the recorder
-  digitalWrite(_dataPin, LOW);        // marking is LOW
-  delayMicroseconds(marking_micros);  // 8.33 ms marking before response
-  for (int unsigned i = 0; i < strlen_P((PGM_P)resp); i++) {
-    // write each character
-    writeChar(static_cast<char>(pgm_read_byte((const char*)resp + i)));
-  }
-  setState(SDI12_LISTENING);  // return to listening state
-}
-
-
-/* ================ Interrupt Service Routine =======================================*/
-
-// Passes off responsibility for the interrupt to the active object.
-// On espressif boards (ESP8266 and ESP32), the ISR must be stored in IRAM
-#if defined(ESP32) || defined(ESP8266)
-void ICACHE_RAM_ATTR SDI12::handleInterrupt() {
-  if (_activeObject) _activeObject->receiveISR();
-}
-#else
-void SDI12::handleInterrupt() {
-  if (_activeObject) _activeObject->receiveISR();
-}
-#endif
-
-// Creates a blank slate of bits for an incoming character
-void SDI12::startChar() {
-  rxState = 0x00;  // 0b00000000, got a start bit
-  rxMask  = 0x01;  // 0b00000001, bit mask, lsb first
-  rxValue = 0x00;  // 0b00000000, RX character to be, a blank slate
-}  // startChar
-
-// The actual interrupt service routine
-void SDI12::receiveISR() {
-  // time of this data transition (plus ISR latency)
-  sdi12timer_t thisBitTCNT = READTIME;
-
-  uint8_t pinLevel = digitalRead(_dataPin);  // current RX data level
-
-  // Check if we're ready for a start bit, and if this could possibly be it.
-  if (rxState == WAITING_FOR_START_BIT) {
-    // If we are waiting for a start bit and the pin is low it's not a start bit, exit
-    // Inverse logic start bit = HIGH
-    if (pinLevel == LOW) { return; }
-    // If the pin is HIGH, this should be a start bit.
-    // Thus startChar(), which sets the rxState to 0, create an empty character, and a
-    // new mask with a 1 in the lowest place
-    startChar();
-  } else {
-    // If we're not waiting for a start bit, it's because we're in the middle of an
-    // incomplete character and therefore this change in the pin state must be from a
-    // data, parity, or stop bit.
-
-    // Check how many bit times have passed since the last change
-    uint16_t rxBits = bitTimes((uint8_t)(thisBitTCNT - prevBitTCNT));
-    // Calculate how many *data+parity* bits should be left in the current character
-    //      - Each character has a total of 10 bits, 1 start bit, 7 data bits, 1 parity
-    // bit, and 1 stop bit
-    //      - The #rxState holds record of how many of the data + parity bits we've
-    // gotten (up to 8)
-    //      - We have to treat the parity bit as a data bit because we don't know its
-    // state
-    //      - Since we're mid character, we know the start bit is past which knocks us
-    // down to 9
-    //      - There will always be one left over for the stop bit, which will be LOW/1
-    uint8_t bitsLeft = 9 - rxState;
-    // If the number of bits passed since the last transition is more than then number
-    // of bits left on the character we were working on, a new character must have
-    // started.
-    // This will happen if the parity bit is 1 or the last bit(s) of the character and
-    // the parity bit are all 1's.
-    bool nextCharStarted = (rxBits > bitsLeft);
-
-    // Check how many data+parity bits have been sent in this frame.  This will be
-    // different from the rxBits if a new character has started because of the start
-    // and stop bits.
-    //      - If the total number of bits in this frame is more than the number of
-    // data+parity bits remaining in the character, then the number of data+parity bits
-    // is equal to the number of bits remaining for the character and partiy.
-    //      - If the total number of bits in this frame is less than the number of data
-    // bits left for the character and parity, then the number of data+parity bits
-    // received in this frame is equal to the total number of bits received in this
-    // frame.
-    // translation:
-    //    if nextCharStarted then bitsThisFrame = bitsLeft
-    //                       else bitsThisFrame = rxBits
-    uint8_t bitsThisFrame = nextCharStarted ? bitsLeft : rxBits;
-    // Tick up the rxState by the number of data+parity bits received in the frame
-    rxState += bitsThisFrame;
-
-    // Set all the bits received between the last change and this change
-    if (pinLevel == HIGH) {
-      // If the current state is HIGH (and it just became so), then all bits between
-      // the last change and now must have been LOW.
-      // back fill previous bits with 1's (inverse logic - LOW = 1)
-      while (bitsThisFrame-- > 0) {
-        // for each of the bits that happened in this frame
-
-        rxValue |= rxMask;     // Add a 1 to the LSB/right-most place of our character
-                               // value from the mask
-        rxMask = rxMask << 1;  // Shift the 1 in the mask up by one position
-      }
-      // And shift the 1 in the mask up by one more position for the current bit.
-      // It's HIGH/0 now, so we don't use `|=` with the mask for this last one.
-      rxMask = rxMask << 1;
-    } else {
-      // If the current state is LOW (and it just became so), then this bit is LOW
-      // but all bits between the last change and now must have been HIGH
-
-      // pinLevel==LOW
-      // previous bits were 0's so only this bit is a 1 (inverse logic - LOW = 1)
-      rxMask = rxMask << (bitsThisFrame -
-                          1);  // Shift the 1 in the mask up by the number of bits past
-      rxValue |= rxMask;  //  And add that shifted one to the character being created
-    }
-
-    // If this was the 8th or more bit then the character and parity are complete.
-    if (rxState > 7) {
-      rxValue &= 0x7F;        // Throw away the parity bit (and with 0b01111111)
-      charToBuffer(rxValue);  // Put the finished character into the buffer
-
-
-      // if this is LOW, or we haven't exceeded the number of bits in a
-      // character (but have gotten all the data bits) then this should be a
-      // stop bit and we can start looking for a new start bit.
-      if ((pinLevel == LOW) || !nextCharStarted) {
-        rxState = WAITING_FOR_START_BIT;  // DISABLE STOP BIT TIMER
-      } else {
-        // If we just switched to HIGH, or we've exceeded the total number of
-        // bits in a character, then the character must have ended with 1's/LOW,
-        // and this new 0/HIGH is actually the start bit of the next character.
-        startChar();
-      }
-    }
-  }
-  prevBitTCNT = thisBitTCNT;  // finally remember time stamp of this change!
-}
-
-// Put a new character in the buffer
-void SDI12::charToBuffer(uint8_t c) {
-  // Check for a buffer overflow. If not, proceed.
-  if ((_rxBufferTail + 1) % SDI12_BUFFER_SIZE == _rxBufferHead) {
-    _bufferOverflow = true;
-  } else {
-    // Save the character, advance buffer tail.
-    _rxBuffer[_rxBufferTail] = c;
-    _rxBufferTail            = (_rxBufferTail + 1) % SDI12_BUFFER_SIZE;
-  }
-}
-
-// Define AVR interrupts
-// Check if the various interrupt vectors are defined.  If they are the ISR is
-// instructed to call handleInterrupt() when they trigger.
-
-#if defined __AVR__  // Only AVR processors use interrupts like this
-
-#ifdef SDI12_EXTERNAL_PCINT
-// Client code must call SDI12::handleInterrupt() in PCINT handler for the data pin
-#else
-
-#if defined(PCINT0_vect)
-ISR(PCINT0_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#if defined(PCINT1_vect)
-ISR(PCINT1_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#if defined(PCINT2_vect)
-ISR(PCINT2_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#if defined(PCINT3_vect)
-ISR(PCINT3_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#endif  // SDI12_EXTERNAL_PCINT
-
-#endif  // __AVR__
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.h
deleted file mode 100644
index ec949e3452b8204528d4d52ed56c0fd0f6362d5d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.h
+++ /dev/null
@@ -1,981 +0,0 @@
-/**
- * @file SDI12.h
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @date August 2013
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- *
- * @brief This file contains the main class for the SDI-12 implementation.
- *
- * ========================== Arduino SDI-12 ==================================
- *
- * An Arduino library for SDI-12 communication with a wide variety of environmental
- * sensors. This library provides a general software solution, without requiring any
- * additional hardware.
- *
- * ======================== Attribution & License =============================
- *
- * Copyright (C) 2013  Stroud Water Research Center
- * Available at https://github.com/EnviroDIY/Arduino-SDI-12
- *
- * Authored initially in August 2013 by:
- *          Kevin M. Smith (http://ethosengineering.org)
- *          Inquiries: SDI12@ethosengineering.org
- *
- * Modified 2017 by Manuel Jimenez Buendia to work with ARM based processors (Arduino
- * Zero)
- *
- * Maintenance and merging 2017 by Sara Damiano
- *
- * based on the SoftwareSerial library (formerly NewSoftSerial), authored by:
- *         ladyada (http://ladyada.net)
- *         Mikal Hart (http://www.arduiniana.org)
- *         Paul Stoffregen (http://www.pjrc.com)
- *         Garrett Mace (http://www.macetech.com)
- *         Brett Hagman (http://www.roguerobotics.com/)
- *
- * This library is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation; either version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with
- * this library; if not, write to the Free Software Foundation, Inc., 51 Franklin
- * Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-/**
- * @page specifications Notes on SDI-12, Specification v1.4
- *
- * @tableofcontents
- *
- * @section overview Overview
- *
- * SDI-12 is a communications protocol that uses a single data wire to communicate with
- * up to 62 uniquely addressed sensors.  So long as each sensor supports SDI-12, mixed
- * sensor types can appear on the same data bus.  Each address is a single character.
- * The valid ranges are 0-9, a-z, and A-Z. Only the datalogger can initiate
- * communications on the data bus.
- *
- * It does so by pulling the data line into a 5v state for at least 12 milliseconds to
- * wake up all the sensors, before returning the line into a 0v state for 8 milliseconds
- * announce an outgoing command.  The command contains both the action to be taken, and
- * the address of the device who should respond.  If there is a sensor on the bus with
- * that address, it is responsible for responding to the command.  Sensors should ignore
- * commands that were not issued to them, and should return to a sleep state until the
- * datalogger again issues the wakeup sequence.
- *
- * @section connection_details Connection Details
- *
- * **Physical Connections:**
- *   - 1 data line (0v - 5.5v)
- *   - 1 12v power line (9.6v - 16v)
- *   - 1 ground line
- *
- * **Baud Rate:**
- *   - 1200 bits per second
- *
- * **Data Frame Format:**
- *   - 10 bits per data frame
- *   - 1 start bit
- *   - 7 data bits (least significant bit first)
- *   - 1 even parity bit
- *   - 1 stop bit
- *
- * Data Line:  SDI-12 communication uses a single bi-directional data line with
- * three-state, inverse logic.
- *
- * | LINE CONDITION | BINARY STATE | VOLTAGE RANGE     |
- * |----------------|--------------|-------------------|
- * | marking        |      1       | -0.5 to 1.0 volts |
- * | spacing        |      0       | 3.5 to 5.5 volts  |
- * | transition     |  undefined   | 1.0 to 3.5 volts  |
- *
- * While a series of bits is being transmitted on the dataline, the voltage level on
- * that line might look something like this:
- *
- * @code
- *       _____       _____       _____       _____       _____     spacing
- * 5v   |     |     |     |     |     |     |     |     |     |
- *      |  0  |  1  |  0  |  1  |  0  |  1  |  0  |  1  |  0  | transition
- * Ov___|     |_____|     |_____|     |_____|     |_____|     |___ marking
- * @endcode
- *
- * @note Although the specification gives these voltages, some manufacturers chose to
- * implement SDI-12 at other logic levels - ie, with spacing voltages lower or higher
- * than the specified ~5V.
- *
- * For more information, and for a list of commands and responses, please see
- * SDI-12.org, official site of the SDI-12 Support Group.
- */
-/*** ==================== Code Organization ======================
- * - Includes, Defines, & Variable Declarations
- * - Buffer Setup
- * - Reading from the SDI-12 Buffer
- * - Constructor, Destructor, Begins, and Setters
- * - Using more than one SDI-12 object, isActive() and setActive()
- * - Setting Proper Data Line States
- * - Waking up and Talking to the Sensors
- * - Interrupt Service Routine (getting the data into the buffer)
- */
-
-
-#ifndef SRC_SDI12_H_
-#define SRC_SDI12_H_
-
-//  Import Required Libraries
-#include <inttypes.h>      // integer types library
-#include <Arduino.h>       // Arduino core library
-#include <Stream.h>        // Arduino Stream library
-#include "SDI12_boards.h"  //  Include timer information
-
-/// Helper for strings stored in flash
-typedef const __FlashStringHelper* FlashString;
-
-/// a char not found in a valid ASCII numeric field
-#define NO_IGNORE_CHAR '\x01'
-
-#ifndef SDI12_WAKE_DELAY
-/**
- * @brief The amount of additional time in milliseconds that the sensor takes to wake
- * before being ready to receive a command.  Default is 0ms - meaning the sensor is
- * ready for a command by the end of the 12ms break.  Per protocol, the wake time must
- * be less than 100 ms.
- */
-#define SDI12_WAKE_DELAY 0
-#endif
-
-#ifndef SDI12_BUFFER_SIZE
-/**
- * @brief The buffer size for incoming SDI-12 data.
- *
- * All responses should be less than 81 characters:
- * - address is a single (1) character
- * - values has a maximum value of 75 characters
- * - CRC is 3 characters
- * - CR is a single character
- * - LF is a single character
- */
-#define SDI12_BUFFER_SIZE 81
-#endif
-
-#if defined(ESP32) || defined(ESP8266)
-/**
- * @brief This enumeration provides the lookahead options for parseInt(), parseFloat().
- *
- * The rules set out here are used until either the first valid character is found or a
- * time out occurs due to lack of input.
- *
- * This enum is part of the Stream parent class, but is missing from the ESP8266 and
- * ESP32 cores.
- */
-enum LookaheadMode {
-  /** All invalid characters are ignored. */
-  SKIP_ALL,
-  /** Nothing is skipped, and the stream is not touched unless the first waiting
-     character is valid. */
-  SKIP_NONE,
-  /** Only tabs, spaces, line feeds & carriage returns are skipped.*/
-  SKIP_WHITESPACE
-};
-/**
- * @brief The function or macro used to read the clock timer value.
- *
- * @note  The ESP32 and ESP8266 are fast enough processors that they can take the
- * time to read the core 'micros()' function still complete the other processing needed
- * on the serial bits.  All of the other processors using the Arduino core also have the
- * micros function, but the rest are not fast enough to waste the processor cycles to
- * use the micros function and must use the faster assembly macros to read the
- * processor timer directly.
- */
-#define READTIME sdi12timer.SDI12TimerRead()
-#else
-/**
- * @brief The function or macro used to read the clock timer value.
- */
-#define READTIME TCNTX
-#endif  // defined(ESP32) || defined(ESP8266)
-
-/**
- * @brief The main class for SDI 12 instances
- */
-class SDI12 : public Stream {
-  /**
-   * @anchor sdi12_statics
-   * @name Static member variables
-   *
-   * @brief These are constants that apply to all SDI-12 instances.
-   */
-  /**@{*/
- private:
-  /**
-   * @brief static pointer to active SDI12 instance
-   */
-  static SDI12* _activeObject;
-  /**
-   * @brief The SDI12Timer instance to use for checking bit reception times.
-   */
-  static SDI12Timer sdi12timer;
-  /**
-   * @brief The size of a bit in microseconds
-   *
-   * 1200 baud = 1200 bits/second ~ 833.333 µs/bit
-   */
-  static const uint16_t bitWidth_micros;
-  /**
-   * @brief The required "break" before sending commands, >= 12ms
-   *
-   */
-  static const uint16_t lineBreak_micros;
-  /**
-   * @brief The required mark before a command or response, >= 8.33ms
-   */
-  static const uint16_t marking_micros;
-
-  /**
-   * @brief the width of a single bit in "ticks" of the cpu clock.
-   */
-  static const uint8_t txBitWidth;
-  /**
-   * @brief A fudge factor to make things work
-   */
-  static const uint8_t rxWindowWidth;
-  /**
-   * @brief The number of bits per tick, shifted by 2^10.
-   */
-  static const uint8_t bitsPerTick_Q10;
-  /**
-   * @brief A mask for the #rxState while waiting for a start bit; 0b11111111
-   */
-  static const uint8_t WAITING_FOR_START_BIT;
-
-  /**
-   * @brief Stores the time of the previous RX transition in micros
-   */
-  static uint16_t prevBitTCNT;
-  /**
-   * @brief Tracks how many bits are accounted for on an incoming character.
-   *
-   * - if 0: indicates that we got a start bit
-   * - if >0: indicates the number of bits received
-   */
-  static uint8_t rxState;
-  /**
-   * @brief a bit mask for building a received character
-   *
-   * The mask has a single bit set, in the place of the active bit based on the
-   * #rxState.
-   */
-  static uint8_t rxMask;
-  /**
-   * @brief the value of the character being built
-   */
-  static uint8_t rxValue;
-
-  /**
-   * @brief static method for getting a 16-bit value from the multiplication of 2 8-bit
-   * values
-   *
-   * @param x The first 8 bit integer
-   * @param y The second 8 bit integer
-   * @return @m_span{m-type} uint16_t @m_endspan The result of the multiplication, as a
-   * 16 bit integer.
-   */
-  static uint16_t mul8x8to16(uint8_t x, uint8_t y);
-
-  /**
-   * @brief static method for calculating the number of bit-times that have elapsed
-   * given an 8-bit counter/timer timestamp.
-   *
-   * @param dt The current value of the 8-bit timer
-   * @return @m_span{m-type} uint16_t @m_endspan The number of bit times that have
-   * passed at 1200 baud.
-   *
-   * Adds a rxWindowWidth fudge factor to the time difference to get the number of
-   * ticks, and then multiplies the fudged ticks by the number of bits per tick.  Uses
-   * the number of bits per tick shifted up by 2^10 and then shifts the result down by
-   * the same amount to compensate for the fact that the number of bits per tick is a
-   * decimal the timestamp is only an 8-bit integer.
-   *
-   * @see https://github.com/SlashDevin/NeoSWSerial/pull/13#issuecomment-315463522
-   */
-  static uint16_t bitTimes(uint8_t dt);
-  /**@}*/
-
-
-  /**
-   * @anchor sdi12_buffer
-   * @name Buffer Setup
-   *
-   * @brief Creating a circular buffer for incoming data.
-   *
-   * The buffer is used to store characters from the SDI-12 data line.  Characters are
-   * read into the buffer when an interrupt is received on the data line. The buffer
-   * uses a circular implementation with pointers to both the head and the tail. All
-   * SDI-12 instances share the same buffer.
-   *
-   * The default buffer size is the maximum length of a response to a normal SDI-12
-   * command, which is 81 characters:
-   * - address is a single (1) character
-   * - values has a maximum value of 75 characters
-   * - CRC is 3 characters
-   * - CR is a single character
-   * - LF is a single character
-   *
-   * For more information on circular buffers:
-   * http://en.wikipedia.org/wiki/Circular_buffer
-   */
-  /**@{*/
- private:
-  /**
-   * @brief A single incoming character buffer for ALL SDI-12 objects (Rx buffer)
-   *
-   * Increasing the buffer size will use more RAM. If you exceed 256 characters, be sure
-   * to change the data type of the index to support the larger range of addresses.  To
-   * adjust the size of the buffer, change the value of `SDI12_BUFFER_SIZE` in the
-   * header file.
-   */
-  static uint8_t _rxBuffer[SDI12_BUFFER_SIZE];
-  /**
-   * @brief Index of buffer head. (unsigned 8-bit integer, can map from 0-255)
-   */
-  static volatile uint8_t _rxBufferTail;
-  /**
-   * @brief Index of buffer tail. (unsigned 8-bit integer, can map from 0-255)
-   */
-  static volatile uint8_t _rxBufferHead;
-  /**
-   * @brief The buffer overflow status
-   */
-  bool _bufferOverflow;
-  /**@}*/
-
-
-  /**
-   * @anchor reading_buffer
-   * @name Reading from the SDI-12 Buffer
-   *
-   * @brief These functions are for reading incoming data stored in the SDI-12 buffer.
-   *
-   * @see <a href="class_s_d_i12.html#buffer-setup">Buffer Setup</a>
-   *
-   * @note peakNextDigit(), parseInt() and parseFloat() are fully implemented in the
-   * parent Stream class but we don't want to them use as they are inherited.  Although
-   * they are not virtual and cannot be overridden, recreating them here hides the
-   * stream default versions to allow for a custom timeout return value.  The default
-   * value for the Stream class is to return 0.  This makes distinguishing timeouts from
-   * true zero readings impossible. Therefore the default value has been set to -9999 in
-   * the being function.  The value returned by a timeout (SDI12::TIMEOUT) is a public
-   * variable and can be changed dynamically within a program by calling
-   * `mySDI12.TIMEOUT = (int) newValue` or using SDI12::setTimeoutValue(int16_t value).
-   *
-   */
-  /**@{*/
- public:
-  /**
-   * @brief Return the number of bytes available in the Rx buffer
-   *
-   * @return @m_span{m-type} int @m_endspan The number of characters in the buffer
-   *
-   * available() is a public function that returns the number of characters available in
-   * the Rx buffer.
-   *
-   * To understand how:
-   * `_rxBufferTail + SDI12_BUFFER_SIZE - _rxBufferHead) % SDI12_BUFFER_SIZE;`
-   * accomplishes this task, we will use a few examples.
-   *
-   * To start take the buffer below that has `SDI12_BUFFER_SIZE = 10`. The message
-   * "abc" has been wrapped around (circular buffer).
-   *
-   * @code{.cpp}
-   *     _rxBufferTail = 1 // points to the '-' after c
-   *     _rxBufferHead = 8 // points to 'a'
-   * @endcode
-   *
-   * [ c ] [ - ] [ - ] [ - ] [ - ] [ - ] [ - ] [ - ]  [ a ] [ b ]
-   *
-   * The number of available characters is (1 + 10 - 8) % 10 = 3
-   *
-   * The '%' or modulo operator finds the remainder of division of one number by
-   * another. In integer arithmetic 3 / 10 = 0, but has a remainder of 3.  We can only
-   * get the remainder by using the the modulo '%'. 3 % 10 = 3.  This next case
-   * demonstrates more clearly why the modulo is used.
-   *
-   * @code{.cpp}
-   *     _rxBufferTail = 4 // points to the '-' after c
-   *     _rxBufferHead = 1 // points to 'a'
-   * @endcode
-   *
-   * [ a ] [ b ] [ c ] [ - ] [ - ] [ - ] [ - ] [ - ]  [ - ] [ - ]
-   *
-   * The number of available characters is (4 + 10 - 1) % 10 = 3
-   *
-   * If we did not use the modulo we would get either ( 4 + 10 - 1 ) = 13 characters or
-   * ( 4 + 10 - 1 ) / 10 = 1 character. Obviously neither is correct.
-   *
-   * If there has been a buffer overflow, available() will return -1.
-   */
-  int available() override;
-  /**
-   * @brief Reveal next byte in the Rx buffer without consuming it.
-   *
-   * @return @m_span{m-type} int @m_endspan The next byte in the character buffer.
-   *
-   * peek() is a public function that allows the user to look at the character that is
-   * at the head of the buffer. Unlike read() it does not consume the character (i.e.
-   * the index addressed by _rxBufferHead is not changed). peek() returns -1 if there
-   * are no characters to show.
-   */
-  int peek() override;
-  /**
-   * @brief Clear the Rx buffer by setting the head and tail pointers to the same value.
-   *
-   * clearBuffer() is a public function that clears the buffers contents by setting the
-   * index for both head and tail back to zero.
-   */
-  void clearBuffer();
-  /**
-   * @brief Return next byte in the Rx buffer, consuming it
-   *
-   * @return @m_span{m-type} int @m_endspan The next byte in the character buffer.
-   *
-   * read() returns the character at the current head in the buffer after incrementing
-   * the index of the buffer head. This action 'consumes' the character, meaning it can
-   * not be read from the buffer again. If you would rather see the character, but leave
-   * the index to head intact, you should use peek();
-   */
-  int read() override;
-  /**
-   * @brief Wait for sending to finish - because no TX buffering, does nothing
-   */
-  void flush() override {}
-
-  /**
-   * @brief Return the first valid (long) integer value from the current position.
-   *
-   * The value of lookahead determines how parseInt looks ahead in the stream.
-   * See LookaheadMode enumeration at the top of the file.
-   * Lookahead is terminated by the first character that is not a valid part of an
-   * integer.
-   * Once parsing commences, 'ignore' will be skipped in the stream.
-   *
-   * @param lookahead the mode to use to look ahead in the
-   * stream, default is LookaheadMode::SKIP_ALL
-   * @param ignore a character to ignore in the stream, default is '\\x01'
-   * @return @m_span{m-type} long @m_endspan The first valid integer in the stream
-   *
-   * @note This function _hides_ the Stream class function to allow a custom value to be
-   * returned on timeout.  It cannot overwrite the Stream function because it is not
-   * virtual.
-   * @see @ref SDI12::LookaheadMode
-   */
-  long parseInt(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR);
-
-  /**
-   * @brief Return the first valid float value from the current position.
-   *
-   * The value of lookahead determines how parseInt looks ahead in the stream.
-   * See LookaheadMode enumeration at the top of the file.
-   * Lookahead is terminated by the first character that is not a valid part of an
-   * integer.
-   * Once parsing commences, 'ignore' will be skipped in the stream.
-   *
-   * @param lookahead the mode to use to look ahead in the
-   * stream, default is LookaheadMode::SKIP_ALL
-   * @param ignore a character to ignore in the stream, default is '\\x01'
-   * @return @m_span{m-type} long @m_endspan The first valid float in the stream
-   *
-   * @note This function _hides_ the Stream class function to allow a custom value to be
-   * returned on timeout.  It cannot overwrite the Stream function because it is not
-   * virtual.
-   * @see @ref SDI12::LookaheadMode
-   */
-  float parseFloat(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR);
-
- protected:
-  /**
-   * @brief Return the next numeric digit in the stream or -1 if timeout
-   *
-   * @param lookahead the mode to use to look ahead in the
-   * stream
-   * @param detectDecimal True to accept a decimal point ('.') as part of a
-   * number
-   * @return @m_span{m-type} int @m_endspan The next numeric digit in the stream
-   */
-  int peekNextDigit(LookaheadMode lookahead, bool detectDecimal);
-  /**@}*/
-
-
-  /**
-   * @anchor ctor
-   * @name Constructor, Destructor, Begins, and Setters
-   *
-   * @brief These functions set up the SDI-12 object and prepare it for use.
-   */
-  /**@{*/
- private:
-  /**
-   * @brief reference to the data pin
-   */
-  int8_t _dataPin;
-
- public:
-  /**
-   * @brief Construct a new SDI12 instance with no data pin set.
-   *
-   * Before using the SDI-12 instance, the data pin must be set with
-   * SDI12::setDataPin(dataPin) or SDI12::begin(dataPin). This empty constructor is
-   * provided for easier integration with other Arduino libraries.
-   *
-   * When the constructor is called it resets the buffer overflow status to FALSE.
-   */
-  SDI12();
-  /**
-   * @brief Construct a new SDI12 with the data pin set
-   *
-   * @param dataPin The data pin's digital pin number
-   *
-   * When the constructor is called it resets the buffer overflow status to FALSE and
-   * assigns the pin number "dataPin" to the private variable "_dataPin".
-   */
-  explicit SDI12(int8_t dataPin);
-  /**
-   * @brief Destroy the SDI12 object.
-   *
-   * When the destructor is called, it's main task is to disable any interrupts that had
-   * been previously assigned to the pin, so that the pin will behave as expected when
-   * used for other purposes. This is achieved by putting the SDI-12 object in the
-   * SDI12_DISABLED state.  After disabling interrupts, the pointer to the current
-   * active SDI-12 instance is set to null if it had pointed to the destroyed object.
-   * Finally, for AVR board, the timer prescaler is set back to whatever it had been
-   * prior to creating the SDI-12 object.
-   */
-  ~SDI12();
-  /**
-   * @brief Begin the SDI-12 object.
-   *
-   * This is called to begin the functionality of the SDI-12 object.  It sets the object
-   * as the active object, sets the stream timeout to 150ms to match SDI-12 specs, sets
-   * the timeout return value to SDI12::TIMEOUT, and configures the timer prescaler.
-   */
-  void begin();
-  /**
-   * @brief Set the SDI12::_datapin and begin the SDI-12 object.
-   *
-   * @copydetails SDI12::begin()
-   * If the SDI-12 instance is created using the empty constuctor, this must be used
-   * to set the data pin.
-   *
-   * @param dataPin The data pin's digital pin number
-   */
-  void begin(int8_t dataPin);
-  /**
-   * @brief Disable the SDI-12 object (but do not destroy it).
-   *
-   * Set the SDI-12 state to disabled, set the pointer to the current active instance
-   * to null, and then, for AVR boards, unset the timer prescaler.
-   *
-   * This can be called to temporarily cease all functionality of the SDI-12 object. It
-   * is not as harsh as destroying the object with the destructor, as it will maintain
-   * the memory buffer.
-   */
-  void end();
-  /**
-   * @brief The value to return if a parse or read times out with no return from the
-   * sensor.
-   *
-   * The timeout return for an Arduino stream object when no character is available in
-   * the Rx buffer is "0."  For enviromental sensors (the typical SDI-12 users) 0 is a
-   * common result value.  To better distinguish between a timeout because of no
-   * sensor response and a true zero return, the timeout should be set to some value
-   * that is NOT a possible return from that sensor.  If the timeout is not set, -9999
-   * is used.
-   */
-  int16_t TIMEOUT;
-  /**
-   * @brief Set the value to return if a parse int or parse float times out with no
-   * return from the sensor.
-   *
-   * The "standard" timeout return for an Arduino stream object when no character is
-   * available in the Rx buffer is "0."  For enviromental sensors (the typical SDI-12
-   * users) 0 is a common result value.  To better distinguish between a timeout because
-   * of no sensor response and a true zero return, the timeout should be set to some
-   * value that is NOT a possible return from that sensor.  If the timeout is not set,
-   * -9999 is used.
-   *
-   * @param value the value to return on timeout
-   */
-  void setTimeoutValue(int16_t value);
-  /**
-   * @brief Get the data pin for the current SDI-12 instance
-   *
-   * @return @m_span{m-type} int8_t @m_endspan the data pin number
-   */
-  int8_t getDataPin();
-  /**
-   * @brief Set the data pin for the current SDI-12 instance
-   *
-   * @param dataPin  The data pin's digital pin number
-   */
-  void setDataPin(int8_t dataPin);
-  /**@}*/
-
-
-  /**
-   * @anchor multiple_objects
-   * @name Using more than one SDI-12 Object
-   *
-   * @brief Functions needed for multiple instances of the SDI12 class.
-   *
-   * This library is allows for multiple instances of itself running on the same or
-   * different pins.  SDI-12 can support up to 62 sensors on a single pin/bus, so it is
-   * not necessary to use an instance for each sensor.
-   *
-   * Because we are using pin change interrupts there can only be one active object at a
-   * time (since this is the only reliable way to determine which pin the interrupt
-   * occurred on).  The active object is the only object that will respond properly to
-   * interrupts.  However promoting another instance to Active status does not
-   * automatically remove the interrupts on the other pin. For proper behavior it is
-   * recommended to use this pattern:
-   *
-   * @code{.cpp}
-   *     mySDI12.forceHold();
-   *     myOtherSDI12.setActive();
-   * @endcode
-   *
-   * @note
-   * - Promoting an object into the Active state will set it as `SDI12_HOLDING`.
-   * - Calling mySDI12.begin() will assert mySDI12 as the new active object, until
-   * another instance calls myOtherSDI12.begin() or myOtherSDI12.setActive().
-   * - Calling mySDI12.end() does NOT hand-off active status to another SDI-12 instance.
-   * - You can check on the active object by calling mySDI12.isActive(), which will
-   * return a boolean value TRUE if active or FALSE if inactive.
-   */
-  /**@{*/
- public:
-  /**
-   * @brief Set this instance as the active SDI-12 instance
-   *
-   * @return @m_span{m-type} bool @m_endspan True indicates that the current SDI-12
-   * instance was not formerly the active one and now is.  False indicates that the
-   * current SDI-12 instance *is already the active one* and the state was not changed.
-   *
-   * A method for setting the current object as the active object; returns TRUE if
-   * the object was not formerly the active object and now is.
-   * - Promoting an inactive to the active instance will start it in the SDI12_HOLDING
-   * state and return TRUE.
-   * - Otherwise, if the object is currently the active instance, it will remain
-   * unchanged and return FALSE.
-   */
-  bool setActive();
-
-  /**
-   * @brief Check if this instance is active
-   *
-   * @return @m_span{m-type} bool @m_endspan True indicates that the curren SDI-12
-   * instace is the active one.
-   *
-   * isActive() is a method for checking if the object is the active object.  Returns
-   * true if the object is currently the active object, false otherwise.
-   */
-  bool isActive();
-  /**@}*/
-
-
-  /**
-   * @anchor line_states
-   * @name Data Line States
-   *
-   * @brief Functions for maintaining the proper data line state.
-   *
-   * The Arduino is responsible for managing communication with the sensors.  Since all
-   * the data transfer happens on the same line, the state of the data line is very
-   * important.
-   *
-   * @section line_state_spec Specifications
-   *
-   * Per the SDI-12 specification, the voltage ranges for SDI-12 are:
-   *
-   * - When the pin is in the SDI12_HOLDING state, it is holding the line LOW so that
-   * interference does not unintentionally wake the sensors up.  The interrupt is
-   * disabled for the dataPin, because we are not expecting any SDI-12 traffic.
-   * - In the SDI12_TRANSMITTING state, we would like exclusive control of the Arduino,
-   * so we shut off all interrupts, and vary the voltage of the dataPin in order to wake
-   * up and send commands to the sensor.
-   * - In the SDI12_LISTENING state, we are waiting for a sensor to respond, so we drop
-   * the voltage level to LOW and relinquish control (INPUT).
-   * - If we would like to disable all SDI-12 functionality, then we set the system to
-   * the SDI12_DISABLED state, removing the interrupt associated with the dataPin.  For
-   * predictability, we set the pin to a LOW level high impedance state (INPUT).
-   *
-   * @section line_state_table As a Table
-   *
-   * Summarized in a table:
-   *
-   * | State               | Interrupts       | Pin Mode   | Pin Level |
-   * |---------------------|------------------|------------|-----------|
-   * | SDI12_DISABLED      | Pin Disable      | INPUT      | ---       |
-   * | SDI12_ENABLED       | Pin Disable      | INPUT      | ---       |
-   * | SDI12_HOLDING       | Pin Disable      | OUTPUT     | LOW       |
-   * | SDI12_TRANSMITTING  | All/Pin Disable  | OUTPUT     | VARYING   |
-   * | SDI12_LISTENING     | All Enable       | INPUT      | ---       |
-   *
-   *
-   * @section line_state_seq Sequencing
-   *
-   * Generally, this flow of line states is acceptable:
-   *
-   * `HOLDING --> TRANSMITTING --> LISTENING --> TRANSMITTING --> LISTENING`
-   *
-   * If you have interference, you should force a hold, using forceHold().
-   * The flow would then be:
-   *
-   * `HOLDING --> TRANSMITTING --> LISTENING -->` done reading, forceHold() `--->
-   * HOLDING`
-   *
-   * @see For a detailed explanation of interrupts see @ref interrupts_page
-   */
-  /**@{*/
- private:
-  /**
-   * @brief The various SDI-12 line states.
-   */
-  typedef enum SDI12_STATES {
-    /** SDI-12 is disabled, pin mode INPUT, interrupts disabled for the pin */
-    SDI12_DISABLED,
-    /** SDI-12 is enabled, pin mode INPUT, interrupts disabled for the pin */
-    SDI12_ENABLED,
-    /** The line is being held LOW, pin mode OUTPUT, interrupts disabled for the pin */
-    SDI12_HOLDING,
-    /** Data is being transmitted by the SDI-12 master, pin mode OUTPUT, interrupts
-       disabled for the pin */
-    SDI12_TRANSMITTING,
-    /** The SDI-12 master is listening for a response from the slave, pin mode INPUT,
-       interrupts enabled for the pin */
-    SDI12_LISTENING
-  } SDI12_STATES;
-
-#ifndef __AVR__
-  /**
-   * @brief Calculate the parity value for a character using even parity.
-   *
-   * @param v **uint8_t (char)** the character to calculate the parity of
-   * @return @m_span{m-type} uint8_t @m_endspan the input character with the 8th bit set
-   * to the even parity value for that character
-   *
-   * Sets up parity and interrupts for different processor types - that is, imports the
-   * interrupts and parity for the AVR processors where they exist.
-   *
-   * This function is defined in the Arduino core for AVR processors, but must be
-   * defined here for SAMD and ESP cores.
-   */
-  static uint8_t parity_even_bit(uint8_t v);
-#endif
-
-  /**
-   * @brief Set the pin interrupts to be on (enabled) or off (disabled)
-   *
-   * @param enable True to enable pin interrupts
-   *
-   * A private helper function to turn pin interupts on or off
-   */
-  void setPinInterrupts(bool enable);
-  /**
-   * @brief Set the the state of the SDI12 object[s]
-   *
-   * @param state The state the SDI-12 object should be set to, from
-   * the SDI12_STATES enum.
-   *
-   * This is a private function, and only used internally.
-   */
-  void setState(SDI12_STATES state);
-
- public:
-  /**
-   * @brief Set line state to SDI12_HOLDING
-   *
-   * A public function which forces the line into a "holding" state. This is generally
-   * unneeded, but for deployments where interference is an issue, it should be used
-   * after all expected bytes have been returned from the sensor.
-   */
-  void forceHold();
-  /**
-   * @brief Set line state to SDI12_LISTENING
-   *
-   * A public function which forces the line into a "listening" state.  This may be
-   * needed for implementing a slave-side device, which should relinquish control of the
-   * data line when not transmitting.
-   */
-  void forceListen();
-  /**@}*/
-
-
-  /**
-   * @anchor communication
-   * @name Waking Up and Talking To Sensors
-   *
-   * @brief These functions are needed to communicate with SDI-12 sensors (slaves) or an
-   * SDI-12 datalogger (master).
-   */
-  /**@{*/
- private:
-  /**
-   * @brief Used to wake up the SDI12 bus.
-   *
-   * @param extraWakeTime The amount of additional time in milliseconds that the sensor
-   * takes to wake before being ready to receive a command.  Default is 0ms - meaning
-   * the sensor is ready for a command by the end of the 12ms break.  Should be lower
-   * than 100.
-   *
-   * Wakes up all the sensors on the bus.  Set the SDI-12 state to transmitting, hold
-   * the data line high for the required break of 12 milliseconds plus any needed
-   * additional delay to allow the sensor to wake, then hold the line low for the
-   * required marking of 8.33 milliseconds.
-   *
-   * The SDI-12 protocol requires a pulse of HIGH voltage for at least 12 milliseconds
-   * (the break) followed immediately by a pulse of LOW voltage for at least 8.33, but
-   * not more than 100, milliseconds. Setting the SDI-12 object into the
-   * SDI12_TRANSMITTING allows us to assert control of the line without triggering any
-   * interrupts.
-   *
-   * Per specifications:
-   * > • A data recorder transmits a break by setting the data line to spacing for at
-   * > least 12 milliseconds.
-   * >
-   * > • The sensor will not recognize a break condition for a continuous spacing time
-   * > of less than 6.5 milliseconds and will always recognize a break when the line is
-   * > continuously spacing for more than 12 milliseconds.
-   *
-   * > • Upon receiving a break, a sensor must detect 8.33 milliseconds of marking on
-   * > the data line before it looks for an address.
-   * >
-   * > • A sensor must wake up from a low-power standby mode and be capable of detecting
-   * > a start bit from a valid command within 100 milliseconds after detecting a break
-   * >
-   * > • Sensors must return to a low-power standby mode after receiving an invalid
-   * > address or after detecting a marking state on the data line for 100 milliseconds.
-   * > (Tolerance:    +0.40 milliseconds.)
-   */
-  void wakeSensors(int8_t extraWakeTime = 0);
-  /**
-   * @brief Used to send a character out on the data line
-   *
-   * @param out **uint8_t (char)** the character to write
-   *
-   * This function writes a character out to the data line.  SDI-12 specifies the
-   * general transmission format of a single character as:
-   * - 10 bits per data frame
-   *     - 1 start bit
-   *     - 7 data bits (least significant bit first)
-   *     - 1 even parity bit
-   *     - 1 stop bit
-   *
-   * Recall that we are using inverse logic, so HIGH represents 0, and LOW represents
-   * a 1.
-   */
-  void writeChar(uint8_t out);
-
- public:
-  /**
-   * @brief Write out a byte on the SDI-12 line
-   *
-   * @param byte The character to write
-   * @return @m_span{m-type} size_t @m_endspan The number of characters written
-   *
-   * Sets the state to transmitting, writes a character, and then sets the state back to
-   * listening.  This function must be implemented as part of the Arduino Stream
-   * instance, but is *NOT* intenteded to be used for SDI-12 objects.  Instead, use the
-   * SDI12::sendCommand() or SDI12::sendResponse() functions.
-   */
-  virtual size_t write(uint8_t byte);
-
-  /**
-   * @brief Send a command out on the data line, acting as a datalogger (master)
-   *
-   * @param cmd the command to send
-   *
-   * A publicly accessible function that sends a break to wake sensors and sends out a
-   * command byte by byte on the data line.
-   *
-   * @param extraWakeTime The amount of additional time in milliseconds that the sensor
-   * takes to wake before being ready to receive a command.  Default is 0ms - meaning
-   * the sensor is ready for a command by the end of the 12ms break.  Per protocol, the
-   * wake time must be less than 100 ms.
-   */
-  void sendCommand(String& cmd, int8_t extraWakeTime = SDI12_WAKE_DELAY);
-  /// @copydoc SDI12::sendCommand(String&, int8_t)
-  void sendCommand(const char* cmd, int8_t extraWakeTime = SDI12_WAKE_DELAY);
-  /// @copydoc SDI12::sendCommand(String&, int8_t)
-  void sendCommand(FlashString cmd, int8_t extraWakeTime = SDI12_WAKE_DELAY);
-
-  /**
-   * @brief Send a response out on the data line (for slave use)
-   *
-   * @param resp the response to send
-   *
-   * A publicly accessible function that sends out an 8.33 ms marking and a response
-   * byte by byte on the data line.  This is needed if the Arduino is acting as an
-   * SDI-12 device itself, not as a recorder for another SDI-12 device.
-   */
-  void sendResponse(String& resp);
-  /// @copydoc SDI12::sendResponse(String& resp)
-  void sendResponse(const char* resp);
-  /// @copydoc SDI12::sendResponse(String& resp)
-  void sendResponse(FlashString resp);
-  ///@}
-
-
-  /**
-   * @anchor interrupt_fxns
-   * @name Interrupt Service Routine
-   *
-   * @brief Functions for handling interrupts - responding to changes on the data line
-   * and converting them to characters in the Rx buffer.
-   *
-   * @see For a detailed explanation of interrupts see @ref interrupts_page
-   */
-  /**@{*/
- private:
-  /**
-   * @brief Creates a blank slate for a new incoming character
-   */
-  void startChar();
-  /**
-   * @brief The interrupt service routine (ISR) - the function responding to changes in
-   * rx line state.
-   *
-   * This function checks which direction the change of the interrupt was and then uses
-   * that to populate the bits of the character. Unlike SoftwareSerial which listens for
-   * a start bit and then halts all program and other ISR execution until the end of the
-   * character, this library grabs the time of the interrupt, does some quick math, and
-   * lets the processor move on.  The logic of creating a character this way is harder
-   * for a person to follow, but it pays off because we're not tieing up the processor
-   * in an ISR that lasts for 8.33ms for each character. [10 bits @ 1200 bits/s] For a
-   * person, that 8.33ms is trivial, but for even a "slow" 8MHz processor, that's over
-   * 60,000 ticks sitting idle per character.
-   */
-  void receiveISR();
-  /**
-   * @brief Put a finished character into the SDI12 buffer
-   *
-   * @param c **uint8_t (char)** the character to add to the buffer
-   */
-  void charToBuffer(uint8_t c);
-
- public:
-  /**
-   * @brief Intermediary used by the ISR - passes off responsibility for the interrupt
-   * to the active object.
-   *
-   * On espressif boards (ESP8266 and ESP32), the ISR must be stored in IRAM
-   */
-  static void handleInterrupt();
-
-  /** on AVR boards, uncomment to use your own PCINT ISRs */
-  // #define SDI12_EXTERNAL_PCINT
-  /**@}*/
-};
-
-#endif  // SRC_SDI12_H_
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.cpp
deleted file mode 100644
index beb28e8610e0f122f009926498f708d78e0f39e3..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/**
- * @file SDI12_boards.cpp
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @author Sara Geleskie Damiano (sdamiano@stroudcenter.org)
- *
- * @brief This file implements the setting and unsetting of the proper prescalers for
- * the timers for SDI-12.
- *
- */
-
-/* ======================== Arduino SDI-12 =================================
-An Arduino library for SDI-12 communication with a wide variety of environmental
-sensors. This library provides a general software solution, without requiring
-   ======================== Arduino SDI-12 =================================*/
-
-#include "SDI12_boards.h"
-
-SDI12Timer::SDI12Timer() {}
-
-// Most 'standard' AVR boards
-//
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || \
-  defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) ||  \
-  defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) ||   \
-  defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284__)
-
-/**
- * @brief The value of timer control register 2A prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR2A;
-/**
- * @brief The value of timer control register 2B prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR2B;
-
-#if F_CPU == 16000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR2A = TCCR2A;
-  preSDI12_TCCR2B = TCCR2B;
-  TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation, OC2A &
-                  // OC2B disconnected
-  TCCR2B = 0x07;  // TCCR2B = 0x07 = 0b00000111 - Clock Select bits 22, 21, & 20 on -
-                  // prescaler set to CK/1024
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR2A = preSDI12_TCCR2A;
-  TCCR2B = preSDI12_TCCR2B;
-}
-
-#elif F_CPU == 12000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR2A = TCCR2A;
-  preSDI12_TCCR2B = TCCR2B;
-  TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation, OC2A &
-                  // OC2B disconnected
-  TCCR2B = 0x07;  // TCCR2B = 0x07 = 0b00000111 - Clock Select bits 22, 21, & 20 on -
-                  // prescaler set to CK/1024
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR2A = preSDI12_TCCR2A;
-  TCCR2B = preSDI12_TCCR2B;
-}
-
-#elif F_CPU == 8000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR2A = TCCR2A;
-  preSDI12_TCCR2B = TCCR2B;
-  TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation, OC2A &
-                  // OC2B disconnected
-  TCCR2B = 0x06;  // TCCR2B = 0x06 = 0b00000110 - Clock Select bits 22 & 20 on -
-                  // prescaler set to CK/256
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR2A = preSDI12_TCCR2A;
-  TCCR2B = preSDI12_TCCR2B;
-}
-
-// void SDI12Timer::configSDI12TimerPrescale(void)
-// {
-//     preSDI12_TCCR2A = TCCR2A;
-//     preSDI12_TCCR2B = TCCR2B;
-//     TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation,
-//     OC2A & OC2B disconnected TCCR2B = 0x07;  // TCCR2B = 0x07 = 0b00000111 - Clock
-//     Select bits 22, 21, & 20 on - prescaler set to CK/1024
-// }
-// void SDI12Timer::resetSDI12TimerPrescale(void)
-// {
-//     TCCR2A = preSDI12_TCCR2A;
-//     TCCR2B = preSDI12_TCCR2B;
-// }
-#endif
-
-
-// ATtiny boards (ie, adafruit trinket)
-//
-#elif defined(__AVR_ATtiny25__) | defined(__AVR_ATtiny45__) | defined(__AVR_ATtiny85__)
-
-/**
- * @brief The value of timer control register 1A prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR1A;
-
-#if F_CPU == 16000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR1A = TCCR1;
-  TCCR1 = 0b00001011;  // Set the prescaler to 1024
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR1 = preSDI12_TCCR1A;
-}
-
-
-#elif F_CPU == 8000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR1A = TCCR1;
-  TCCR1 = 0b00001010;  // Set the prescaler to 512
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR1 = preSDI12_TCCR1A;
-}
-#endif
-
-
-// Arduino Leonardo & Yun and other 32U4 boards
-//
-#elif defined(ARDUINO_AVR_YUN) || defined(ARDUINO_AVR_LEONARDO) || \
-  defined(__AVR_ATmega32U4__)
-
-/**
- * @brief The value of timer control register 4A prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4A;
-/**
- * @brief The value of timer control register 4B prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4B;
-/**
- * @brief The value of timer control register 4C prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4C;
-/**
- * @brief The value of timer control register 4D prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4D;
-/**
- * @brief The value of timer control register 4E prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4E;
-
-#if F_CPU == 16000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR4A = TCCR4A;
-  preSDI12_TCCR4B = TCCR4B;
-  preSDI12_TCCR4C = TCCR4C;
-  preSDI12_TCCR4D = TCCR4D;
-  preSDI12_TCCR4E = TCCR4E;
-  TCCR4A = 0x00;  // TCCR4A = 0x00 = "normal" operation - Normal port operation, OC4A &
-                  // OC4B disconnected
-  TCCR4B = 0x0B;  // TCCR4B = 0x0B = 0b00001011 - Clock Select bits 43, 41, & 40 on -
-                  // prescaler set to CK/1024
-  TCCR4C = 0x00;  // TCCR4C = 0x00 = "normal" operation - Normal port operation, OC4D0
-                  // disconnected
-  TCCR4D = 0x00;  // TCCR4D = 0x00 = No fault protection
-  TCCR4E = 0x00;  // TCCR4E = 0x00 = No register locks or overrides
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR4A = preSDI12_TCCR4A;
-  TCCR4B = preSDI12_TCCR4B;
-  TCCR4C = preSDI12_TCCR4C;
-  TCCR4D = preSDI12_TCCR4D;
-  TCCR4E = preSDI12_TCCR4E;
-}
-
-#elif F_CPU == 8000000L
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR4A = TCCR4A;
-  preSDI12_TCCR4B = TCCR4B;
-  preSDI12_TCCR4C = TCCR4C;
-  preSDI12_TCCR4D = TCCR4D;
-  preSDI12_TCCR4E = TCCR4E;
-  TCCR4A = 0x00;  // TCCR4A = 0x00 = "normal" operation - Normal port operation, OC4A &
-                  // OC4B disconnected
-  TCCR4B = 0x0A;  // TCCR4B = 0x0A = 0b00001010 - Clock Select bits 43 & 41 on -
-                  // prescaler set to CK/512
-  TCCR4C = 0x00;  // TCCR4C = 0x00 = "normal" operation - Normal port operation, OC4D0
-                  // disconnected
-  TCCR4D = 0x00;  // TCCR4D = 0x00 = No fault protection
-  TCCR4E = 0x00;  // TCCR4E = 0x00 = No register locks or overrides
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR4A = preSDI12_TCCR4A;
-  TCCR4B = preSDI12_TCCR4B;
-  TCCR4C = preSDI12_TCCR4C;
-  TCCR4D = preSDI12_TCCR4D;
-  TCCR4E = preSDI12_TCCR4E;
-}
-#endif
-
-
-// Arduino Zero other SAMD21 boards
-//
-#elif defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_ARCH_SAMD) || \
-  defined(__SAMD21G18A__) || defined(__SAMD21J18A__) || defined(__SAMD21E18A__)
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  // Select generic clock generator 4 (Arduino core uses 0, 1, and 3.  RTCZero uses 2)
-  // Many examples use clock generator 4.. consider yourself warned!
-  // I would use a higher clock number, but some of the cores don't include them for
-  // some reason
-  REG_GCLK_GENDIV = GCLK_GENDIV_ID(4) |  // Select Generic Clock Generator 4
-    GCLK_GENDIV_DIV(3);                  // Divide the clock source by divisor 3
-  while (GCLK->STATUS.bit.SYNCBUSY) {}   // Wait for synchronization
-
-
-  // Write the generic clock generator 4 configuration
-  REG_GCLK_GENCTRL = (GCLK_GENCTRL_ID(4) |        // Select GCLK4
-                      GCLK_GENCTRL_SRC_DFLL48M |  // Select the 48MHz clock source
-                      GCLK_GENCTRL_IDC |     // Set the duty cycle to 50/50 HIGH/LOW
-                      GCLK_GENCTRL_GENEN) &  // Enable the generic clock clontrol
-    ~GCLK_GENCTRL_RUNSTDBY &                 // Do NOT run in stand by
-    ~GCLK_GENCTRL_DIVSEL;  // Divide clock source by GENDIV.DIV: 48MHz/3=16MHz
-                           // ^^ & ~ for DIVSEL because not not divided
-  while (GCLK->STATUS.bit.SYNCBUSY) {}  // Wait for synchronization
-
-  // Feed GCLK4 to TC3 (also feeds to TCC2, the two must have the same source)
-  // TC3 (and TCC2) seem to be free, so I'm using them
-  // TC4 is used by Tone, TC5 is tied to the same clock as TC4
-  // TC6 and TC7 are not available on all boards
-  REG_GCLK_CLKCTRL = GCLK_CLKCTRL_GEN_GCLK4 |  // Select Generic Clock Generator 4
-    GCLK_CLKCTRL_CLKEN |                       // Enable the generic clock generator
-    GCLK_CLKCTRL_ID_TCC2_TC3;  // Feed the Generic Clock Generator 4 to TCC2 and TC3
-  while (GCLK->STATUS.bit.SYNCBUSY) {}  // Wait for synchronization
-
-  REG_TC3_CTRLA |=
-    TC_CTRLA_PRESCALER_DIV1024 |  // Set prescaler to 1024, 16MHz/1024 = 15.625kHz
-    TC_CTRLA_WAVEGEN_NFRQ |       // Put the timer TC3 into normal frequency (NFRQ) mode
-    TC_CTRLA_MODE_COUNT8 |        // Put the timer TC3 into 8-bit mode
-    TC_CTRLA_ENABLE;              // Enable TC3
-  while (TC3->COUNT16.STATUS.bit.SYNCBUSY) {}  // Wait for synchronization
-}
-// NOT resetting the SAMD timer settings
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  // Disable TCx
-  TC3->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE;
-  while (TC3->COUNT16.STATUS.bit.SYNCBUSY) {}
-
-  // Reset TCx
-  TC3->COUNT16.CTRLA.reg = TC_CTRLA_SWRST;
-  while (TC3->COUNT16.STATUS.bit.SYNCBUSY) {}
-  while (TC3->COUNT16.CTRLA.bit.SWRST) {}
-
-  // Disable generic clock generator
-  REG_GCLK_GENCTRL = GCLK_GENCTRL_ID(4) &  // Select GCLK4
-    ~GCLK_GENCTRL_GENEN;                   // Disable the generic clock control
-  while (GCLK->STATUS.bit.SYNCBUSY) {}     // Wait for synchronization
-}
-
-// Espressif ESP32/ESP8266 boards
-//
-#elif defined(ESP32) || defined(ESP8266)
-
-void         SDI12Timer::configSDI12TimerPrescale(void) {}
-void         SDI12Timer::resetSDI12TimerPrescale(void) {}
-sdi12timer_t SDI12Timer::SDI12TimerRead(void) {
-  // Its a one microsecond clock but we want 64uS ticks so divide by 64 i.e. right shift
-  // 6
-  return ((sdi12timer_t)(micros() >> 6));
-}
-// Unknown board
-#else
-#error "Please define your board timer and pins"
-#endif
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.h
deleted file mode 100644
index a2a533e67aaba091f369ccd89d270ffc11b354ad..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.h
+++ /dev/null
@@ -1,394 +0,0 @@
-/**
- * @file SDI12_boards.h
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @author Sara Geleskie Damiano (sdamiano@stroudcenter.org)
- *
- * @brief This file defines the timing units needed for various Arduino boards.
- *
- */
-
-/* ======================== Arduino SDI-12 =================================
-An Arduino library for SDI-12 communication with a wide variety of environmental
-sensors. This library provides a general software solution, without requiring
-   ======================== Arduino SDI-12 =================================*/
-
-#ifndef SRC_SDI12_BOARDS_H_
-#define SRC_SDI12_BOARDS_H_
-
-#include <Arduino.h>
-
-#if defined(ESP32) || defined(ESP8266)
-/** The interger type (size) of the timer return value */
-typedef uint32_t sdi12timer_t;
-#else
-/** The interger type (size) of the timer return value */
-typedef uint8_t sdi12timer_t;
-#endif
-
-/**
- * @brief The class used to define the processor timer for the SDI-12 serial emulation.
- */
-class SDI12Timer {
- public:
-  /**
-   * @brief Construct a new SDI12Timer
-   */
-  SDI12Timer();
-  /**
-   * @brief Set the processor timer prescaler such that the 10 bits of an SDI-12
-   * character are divided into the rollover time of the timer.
-   *
-   * @note  The ESP32 and ESP8266 are fast enough processors that they can take the
-   * time to read the core 'micros()' function still complete the other processing
-   * needed on the serial bits.  All of the other processors using the Arduino core also
-   * have the micros function, but the rest are not fast enough to waste the processor
-   * cycles to use the micros function and must manually configure the processor timer
-   * and use the faster assembly macros to read that processor timer directly.
-   */
-  void configSDI12TimerPrescale(void);
-  /**
-   * @brief Reset the processor timer prescaler to whatever it was prior to being
-   * adjusted for this library.
-   *
-   * @note The prescaler is *NOT* set back to initial values for SAMD boards!  On those
-   * processors, generic clock generator 4 will remain configured for SDI-12 until it is
-   * reset outside of this library.
-   */
-  void resetSDI12TimerPrescale(void);
-
-// Most 'standard' AVR boards
-//
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || \
-  defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) ||  \
-  defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) ||   \
-  defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "TCNT2"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX TCNT2  // Using Timer 2
-
-#if F_CPU == 16000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 12000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 12MHz / 1024 prescaler = 11719 'ticks'/sec = 85 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/85 µs) = 9.765625 ticks/bit
- */
-#define TICKS_PER_BIT 10
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(9.765625 ticks/bit) * 2^10 = 104.8576
- */
-#define BITS_PER_TICK_Q10 105
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 8000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "256"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 8MHz / 256 prescaler = 31250 'ticks'/sec = 32 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/32 µs) = 26.04166667 ticks/bit
- */
-#define TICKS_PER_BIT 26
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(26.04166667 ticks/bit) * 2^10 = 39.3216
- */
-#define BITS_PER_TICK_Q10 39
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 10
-
-  // #define PRESCALE_IN_USE_STR "1024"
-  // #define TICKS_PER_BIT 6
-  //     // 8MHz / 1024 prescaler = 31250 'ticks'/sec = 128 µs / 'tick'
-  //     // (1 sec/1200 bits) * (1 tick/128 µs) = 6.5104166667 ticks/bit
-  // #define BITS_PER_TICK_Q10 157
-  //     // 1/(6.5104166667 ticks/bit) * 2^10 = 157.2864
-  // #define RX_WINDOW_FUDGE 5
-
-#endif
-
-
-// ATtiny boards (ie, adafruit trinket)
-//
-#elif defined(__AVR_ATtiny25__) | defined(__AVR_ATtiny45__) | defined(__AVR_ATtiny85__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "TCNT1"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX TCNT1  // Using Timer 1
-
-#if F_CPU == 16000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 8000000L
-#define PRESCALE_IN_USE_STR "512"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 8MHz / 512 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 5
-
-#endif
-
-
-// Arduino Leonardo & Yun and other 32U4 boards
-//
-#elif defined(ARDUINO_AVR_YUN) || defined(ARDUINO_AVR_LEONARDO) || \
-  defined(__AVR_ATmega32U4__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "TCNT4"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX TCNT4  // Using Timer 4
-
-#if F_CPU == 16000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 8000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "512"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit
- * at the SDI-12 baud rate of 1200 bits/second.
- *
- * 8MHz / 512 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 5
-
-#endif
-
-
-// Arduino Zero other SAMD21 boards
-//
-#elif defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_ARCH_SAMD) || \
-  defined(__SAMD21G18A__) || defined(__SAMD21J18A__) || defined(__SAMD21E18A__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "GCLK4-TC3"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX REG_TC3_COUNT8_COUNT  // Using Timer 3 with generic clock 4
-
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "3x1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 48MHz / 3 pre-prescaler = 16MHz
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-// Espressif ESP32/ESP8266 boards
-//
-#elif defined(ESP32) || defined(ESP8266)
-  /**
-   * @brief Read the processor micros and right shift 6 bits (ie, divide by 64) to get a
-   * 64µs tick.
-   *
-   * @note  The ESP32 and ESP8266 are fast enough processors that they can take the time
-   * to read the core 'micros()' function still complete the other processing needed on
-   * the serial bits.  All of the other processors using the Arduino core also have the
-   * micros function, but the rest are not fast enough to waste the processor cycles to
-   * use the micros function and must use the faster assembly macros to read the
-   * processor timer directly.
-   *
-   * @return **sdi12timer_t** The current processor micros
-   */
-  sdi12timer_t SDI12TimerRead(void);
-
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit
- * at the SDI-12 baud rate of 1200 bits/second.
- *
- * 48MHz / 3 pre-prescaler = 16MHz
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-// Unknown board
-#else
-#error "Please define your board timer and pins"
-#endif
-};
-
-#endif  // SRC_SDI12_BOARDS_H_
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/src.dox b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/src.dox
deleted file mode 100644
index f4bbd274b985aff670c3f818951ce5f73ba6a2df..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/src.dox
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * @dir src
- *
- * @brief Contains the source code for the SDI-12 library.
- */
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestCommands/TestCommands.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestCommands/TestCommands.ino
deleted file mode 100644
index 3a83f557387b4ae9a2e6405d52c420b49570d738..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestCommands/TestCommands.ino
+++ /dev/null
@@ -1,659 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example D: Check all Addresses for Active Sensors and Log Data
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active on a single bus and takes measurements
- * from them.
- *
- * Every SDI-12 device is different in the time it takes to take a
- * measurement, and the amount of data it returns. This sketch will not serve every
- * sensor type, but it will likely be helpful in getting you started.
- *
- * Each sensor should have a unique address already - if not, multiple sensors may
- * respond simultaenously to the same request and the output will not be readable by the
- * Arduino.
- *
- * To address a sensor, please see Example B: b_address_change.ino
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define FIRST_ADDRESS 0
-#define LAST_ADDRESS 6  // 62
-#define WAKE_DELAY 0    /*!< The extra time needed for the board to wake. */
-#define COMMANDS_TO_TEST \
-  2 /*!< The number of measurement commands to test, between 1 and 11. */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-/// variable that alternates output type back and forth between parsed and raw
-boolean flip = 0;
-
-String commands[] = {"","0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
-
-// keeps track of active addresses
-bool isActive[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the wait time for each active addresses
-uint8_t waitTime[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the time each sensor was started
-uint32_t millisStarted[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the time each sensor will be ready
-uint32_t millisReady[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the number of results expected
-uint8_t returnedResults[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-
-String prev_result[LAST_ADDRESS - FIRST_ADDRESS] = {
-  "",
-};
-String this_result[LAST_ADDRESS - FIRST_ADDRESS] = {
-  "",
-};
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i, bool printCommands = true) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command, WAKE_DELAY);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-
-  Serial.print("Address: ");
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", SDI-12 Version: ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", Vendor ID: ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", Sensor Model: ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", Sensor Version: ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", Sensor ID: ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.println();
-}
-
-bool getResults(char i, int resultsExpected, bool printCommands = true) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  // while (resultsReceived < resultsExpected && cmd_number <= 9) {
-  while (resultsReceived < resultsExpected && cmd_number <= 1) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    if (printCommands) {
-      Serial.print("<<<");
-      Serial.write(mySDI12.read());  // ignore the repeated SDI12 address
-    } else {
-      mySDI12.read();
-    }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c >= 0 && c != '\r' && c != '\n') {
-        Serial.write(mySDI12.read());
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (printCommands) {
-      Serial.print("Total Results Received: ");
-      Serial.print(resultsReceived);
-      Serial.print(", Remaining: ");
-      Serial.println(resultsExpected - resultsReceived);
-    }
-    if (!resultsReceived) { break; }  // don't do another loop if we got nothing
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-String getStringResults(char i, int resultsExpected, bool printCommands = true) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  String  str_result      = "";
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    // while (resultsReceived < resultsExpected && cmd_number <= 1) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 150) {}
-    if (printCommands) {
-      Serial.print("<<<");
-      Serial.write(mySDI12.read());  // ignore the repeated SDI12 address
-    } else {
-      mySDI12.read();
-    }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        str_result += String(result, 8);
-        if (printCommands) { Serial.print(String(result, 8)); }
-        if (result != -9999) { resultsReceived++; }
-      } else if (c >= 0 && c != '\r' && c != '\n') {
-        str_result += String(c);
-        if (printCommands) {
-          Serial.write(mySDI12.read());
-        } else {
-          mySDI12.read();
-        }
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (printCommands) {
-      Serial.print("\nTotal Results Received: ");
-      Serial.print(resultsReceived);
-      Serial.print(", Remaining: ");
-      Serial.println(resultsExpected - resultsReceived);
-    }
-    if (!resultsReceived) { break; }  // don't do another loop if we got nothing
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return str_result;
-}
-
-bool getContinuousResults(char i, int resultsExpected, bool printCommands = true) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "R";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    if (printCommands) {
-      Serial.print("<<<");
-      Serial.write(mySDI12.read());  // ignore the repeated SDI12 address
-    }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c >= 0 && c != '\r' && c != '\n') {
-        Serial.write(mySDI12.read());
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (printCommands) {
-      Serial.print("Total Results Received: ");
-      Serial.print(resultsReceived);
-      Serial.print(", Remaining: ");
-      Serial.println(resultsExpected - resultsReceived);
-    }
-    if (!resultsReceived) { break; }  // don't do another loop if we got nothing
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-int startConcurrentMeasurement(char i, String meas_type = "",
-                               bool printCommands = true) {
-  String command = "";
-  command += i;
-  command += "C";
-  command += meas_type;
-  command += "!";  // SDI-12 concurrent measurement command format  [address]['C'][!]
-  mySDI12.sendCommand(command, WAKE_DELAY);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-  mySDI12.clearBuffer();
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  if (printCommands) {
-    Serial.print("wait: ");
-    Serial.print(wait);
-    Serial.print(", ");
-  }
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  if (printCommands) {
-    Serial.print("Number Results: ");
-    Serial.println(numResults);
-  }
-
-  uint8_t sensorNum   = charToDec(i);  // e.g. convert '0' to 0, 'a' to 10, 'Z' to 61.
-  waitTime[sensorNum] = wait;
-  millisStarted[sensorNum] = millis();
-  if (wait == 0) {
-    millisReady[sensorNum] = millis();
-  } else {
-    millisReady[sensorNum] = millis() + (wait + 1 * 1000);
-  }
-  returnedResults[sensorNum] = numResults;
-
-  return numResults;
-}
-
-String takeMeasurement(char i, String meas_type = "", bool printCommands = true) {
-  String command = "";
-  command += i;
-  command += "M";
-  command += meas_type;
-  command += "!";  // SDI-12 measurement command format  [address]['M'][!]
-  mySDI12.sendCommand(command, WAKE_DELAY);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  if (printCommands) {
-    Serial.print("Wait: ");
-    Serial.print(wait);
-    Serial.print(", ");
-  }
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  if (printCommands) {
-    Serial.print("Number Results: ");
-    Serial.println(numResults);
-  }
-  // if (numResults==0){return false;}
-  if (numResults == 0) { return ""; }
-
-  unsigned long timerStart = millis();
-  while ((millis() - timerStart) < ((uint16_t)1000 * (wait + 1))) {
-    if (mySDI12.available())  // sensor can interrupt us to let us know it is done early
-    {
-      unsigned long measTime = millis() - timerStart;
-      if (printCommands) {
-        Serial.print("<<<");
-        Serial.println(mySDI12.readStringUntil('\n'));
-        // mySDI12.clearBuffer();
-      }
-      Serial.print("Completed after ");
-      Serial.print(measTime);
-      Serial.println(" ms");
-      break;
-    }
-  }
-  // Wait for anything else and clear it out
-  delay(30);
-  mySDI12.clearBuffer();
-
-  // return getResults(i, numResults,printCommands);
-  String res = getStringResults(i, numResults, printCommands);
-  Serial.print("Result: ");
-  Serial.println(res);
-  return res;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i, int8_t numPings = 3, bool printCommands = false) {
-  String command = "";
-  command += (char)i;  // sends basic 'acknowledge' command [address][!]
-  command += "!";
-
-  for (int j = 0; j < numPings; j++) {  // goes through three rapid contact attempts
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      if (printCommands) {
-        Serial.print("<<<");
-        while (mySDI12.available()) {
-          Serial.write(mySDI12.read());
-          delay(10);
-        }
-      } else {
-        mySDI12.clearBuffer();
-      }
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering down sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, LOW);
-    delay(2500L);
-  }
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(10000L);
-    // delay(125);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-
-  for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-    char addr = decToChar(i);
-    Serial.print("i: ");
-    Serial.print(i);
-    Serial.print(", addr: ");
-    Serial.print(addr);
-    Serial.print(", rev: ");
-    Serial.print(charToDec(addr));
-    if (checkActive(addr, 5, true)) {
-      numSensors++;
-      isActive[i] = 1;
-      Serial.println(", +");
-      printInfo(addr);
-    } else {
-      Serial.println(", -");
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println("-------------------------------------------------------------------"
-                 "------------");
-
-  delay(1000);
-}
-
-void loop() {
-  // flip = !flip;  // flip the switch between concurrent and not
-  // flip = 1;
-  flip           = 0;
-  uint32_t start = millis();
-  Serial.print("Flip: ");
-  Serial.println(flip);
-
-  // // Power the sensors;
-  // if (POWER_PIN > 0) {
-  //   Serial.println("Powering down sensors...");
-  //   pinMode(POWER_PIN, OUTPUT);
-  //   digitalWrite(POWER_PIN, LOW);
-  //   delay(5000L);
-  // }
-
-  // // Power the sensors;
-  // if (POWER_PIN > 0) {
-  //   Serial.println("Powering up sensors...");
-  //   pinMode(POWER_PIN, OUTPUT);
-  //   digitalWrite(POWER_PIN, HIGH);
-  //   delay(125);
-  // }
-
-  if (flip) {
-    // measure one at a time
-    for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-      char addr = decToChar(i);
-      if (isActive[i]) {
-        for (uint8_t a = 0; a < COMMANDS_TO_TEST; a++) {
-          Serial.print("Command ");
-          Serial.print(i);
-          Serial.print("M");
-          Serial.print(commands[a]);
-          Serial.println('!');
-          this_result[i] = takeMeasurement(addr, commands[a], true);
-        }
-        // getContinuousResults(addr, 3);
-        Serial.println();
-      }
-    }
-    Serial.print("Total Time for Individual Measurements: ");
-    Serial.println(millis() - start);
-  } else {
-    for (uint8_t a = 0; a < COMMANDS_TO_TEST; a++) {
-      uint8_t  min_wait  = 127;
-      uint8_t  max_wait  = 0;
-      uint32_t for_start = millis();
-      // start all sensors measuring concurrently
-      for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-        char addr = decToChar(i);
-        if (isActive[i]) {
-          Serial.print("Command ");
-          Serial.print(i);
-          Serial.print("C");
-          Serial.print(commands[a]);
-          Serial.println('!');
-          startConcurrentMeasurement(addr, commands[a], true);
-        }
-        if (waitTime[i] < min_wait) { min_wait = waitTime[i]; }
-        if (waitTime[i] > max_wait) { max_wait = waitTime[i]; }
-      }
-      min_wait = max(1, (min_wait - 1) / 2);
-      max_wait = max(1, max_wait + 1);
-      // Serial.print("minimum expected wait: ");
-      // Serial.println(min_wait);
-      // Serial.print("maximum expected wait: ");
-      // Serial.println(max_wait);
-
-
-      uint8_t numReadingsRecorded = 0;
-      delay(min_wait * 1000);
-      while (millis() - for_start < max_wait * 1000 &&
-             numReadingsRecorded < numSensors) {
-        // get all readings
-        for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-          uint32_t timeWaited = millis() - millisStarted[i];
-          if (this_result[i] != "") { prev_result[i] = this_result[i]; }
-
-          char addr = decToChar(i);
-          if (isActive[i]) {
-            // if (millis() > millisReady[i]) {
-            // if (millis() > millisStarted[i] + a) {
-            if (returnedResults[i] > 0) {
-              this_result[i] = getStringResults(addr, returnedResults[i], true);
-              // if (this_result[i] != "") {
-              // Serial.print("timeWaited: ");
-              // Serial.print(timeWaited);
-              // Serial.print(", This result: ");
-              // Serial.println(this_result[i]);
-              // Serial.print("                 , prev result: ");
-              // Serial.println(prev_result[i]);
-              // } else {
-              //   Serial.print("timeWaited: ");
-              //   Serial.println(timeWaited);
-              // }
-              // this_result = getResults(addr, returnedResults[i]);
-              // Serial.print("Got results from ");
-              // Serial.print(numReadingsRecorded);
-              // Serial.print(" of ");
-              // Serial.print(numSensors);
-              // Serial.println(" sensors");
-            }
-            if (this_result[i] != prev_result[i] && this_result[i] != "") {
-              numReadingsRecorded++;
-              Serial.print("Time Waited: ");
-              Serial.println(timeWaited);
-              Serial.print("Result: ");
-              Serial.println(this_result[i]);
-            }
-            // } else {
-            //   Serial.print("Result from ");
-            //   Serial.print(addr);
-            //   Serial.print(" won't be ready for ");
-            //   Serial.print(millisReady[i] - millis());
-            //   Serial.println(" ms ");
-            // }
-          }
-        }
-      }
-    }
-    Serial.print("Total Time for Concurrent Measurements: ");
-    Serial.println(millis() - start);
-  }
-
-  Serial.println("-------------------------------------------------------------------"
-                 "------------");
-  // delay(1000);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestWarmUp/TestWarmUp.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestWarmUp/TestWarmUp.ino
deleted file mode 100644
index 072339dab637840884ec8fa729e7d7f6c9b1dc75..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestWarmUp/TestWarmUp.ino
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Sara Damiano <sdamiano@stroudcenter.org>
- * @date March 2021
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define SENSOR_ADDRESS '0' /*!< The address of the SDI-12 sensor */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12   mySDI12(DATA_PIN);
-int32_t wake_delay      = 0;  /*!< The time for the board to wake after a line break. */
-int32_t increment_wake  = 10; /*!< The time to lengthen waits between reps. */
-int32_t power_delay     = 5400;   /*!< The time for the board to wake after power on. */
-int32_t increment_power = 50;    /*!< The time to lengthen waits between reps. */
-int32_t max_power_delay = 10000L; /*!< The max time to test wake after power on. */
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-bool printInfo(char i, bool printCommands = true) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command, wake_delay);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-
-  Serial.print("Address: ");
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", SDI-12 Version: ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", Vendor ID: ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", Sensor Model: ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", Sensor Version: ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", Sensor ID: ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.println();
-
-  if (sdiResponse.length() < 3) { return false; };
-  return true;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i, int8_t numPings = 3, bool printCommands = false) {
-  String command = "";
-  command += (char)i;  // sends basic 'acknowledge' command [address][!]
-  command += "!";
-
-  for (int j = 0; j < numPings; j++) {  // goes through three rapid contact attempts
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-    mySDI12.sendCommand(command, wake_delay);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      if (printCommands) {
-        Serial.print("<<<");
-        while (mySDI12.available()) {
-          Serial.write(mySDI12.read());
-          delay(10);
-        }
-      } else {
-        mySDI12.clearBuffer();
-      }
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-}
-
-void loop() {
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering down sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, LOW);
-    delay(2500L);
-  }
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(power_delay);
-  }
-
-  if (checkActive(SENSOR_ADDRESS, 5, true)) {
-    Serial.print("Got response after ");
-    Serial.print(power_delay);
-    Serial.print("ms after power with ");
-    Serial.print(wake_delay);
-    Serial.println("ms with wake delay");
-    if (printInfo(SENSOR_ADDRESS, true)) {
-      // if we got sensor info, stop
-      while (1)
-        ;
-    }
-  } else {
-    Serial.print("No response after ");
-    Serial.print(power_delay);
-    Serial.print("ms after power with ");
-    Serial.print(wake_delay);
-    Serial.println("ms with wake delay");
-  }
-  Serial.println("-------------------------------------------------------------------"
-                 "------------");
-  if (power_delay > max_power_delay) {
-    power_delay = 0;
-    wake_delay  = wake_delay + increment_wake;
-  } else {
-    power_delay = power_delay + increment_power;
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/powerOn/powerOn.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/powerOn/powerOn.ino
deleted file mode 100644
index ae244aeaf400e73edb5458eb7febbb34530dcf37..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/powerOn/powerOn.ino
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <Arduino.h>
-
-int8_t powerPin = 22;
-
-void setup() {
-    pinMode(powerPin, OUTPUT);
-    digitalWrite(powerPin, HIGH);
-    pinMode(A5, OUTPUT);
-    digitalWrite(A5, HIGH);
-    pinMode(10, OUTPUT);
-    digitalWrite(10, HIGH);
-}
-
-void loop() {}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.gitattributes b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.gitattributes
deleted file mode 100644
index dfe0770424b2a19faf507a501ebfc23be8f54e7b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.gitattributes	
+++ /dev/null
@@ -1,2 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.piopm b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.piopm
deleted file mode 100644
index a99115c881ba3f7a8ad56e7171c0b70c9ce49adf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.piopm	
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "SparkFun SCD30 Arduino Library", "version": "1.0.18", "spec": {"owner": "sparkfun", "id": 5449, "name": "SparkFun SCD30 Arduino Library", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/LICENSE.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/LICENSE.md
deleted file mode 100644
index 37238686da3d06815b45154961d5744d28516153..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/LICENSE.md	
+++ /dev/null
@@ -1,55 +0,0 @@
-SparkFun License Information
-============================
-
-SparkFun uses two different licenses for our files — one for hardware and one for code.
-
-Hardware
----------
-
-**SparkFun hardware is released under [Creative Commons Share-alike 4.0 International](http://creativecommons.org/licenses/by-sa/4.0/).**
-
-Note: This is a human-readable summary of (and not a substitute for) the [license](http://creativecommons.org/licenses/by-sa/4.0/legalcode).
-
-You are free to:
-
-Share — copy and redistribute the material in any medium or format
-Adapt — remix, transform, and build upon the material
-for any purpose, even commercially.
-The licensor cannot revoke these freedoms as long as you follow the license terms.
-Under the following terms:
-
-Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
-ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
-No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
-Notices:
-
-You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.
-No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.
-
-
-Code
---------
-
-**SparkFun code, firmware, and software is released under the MIT License(http://opensource.org/licenses/MIT).**
-
-The MIT License (MIT)
-
-Copyright (c) 2020 SparkFun Electronics
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/README.md b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/README.md
deleted file mode 100644
index 9be1a0eae22818145a733f66955603ef007c49a9..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/README.md	
+++ /dev/null
@@ -1,51 +0,0 @@
-SparkFun SCD30 COâ‚‚ Sensor Library
-===========================================================
-
-![SparkFun SCD30 COâ‚‚ Sensor](https://cdn.sparkfun.com//assets/parts/1/2/9/8/4/SparkFun_Sensirion_SCD30.jpg)
-
-[*SparkX COâ‚‚ Humidity and Temperature Sensor - SCD30 (SPX-14751)*](https://www.sparkfun.com/products/14751)
-
-The SCD30 from Sensirion is a high quality [NDIR](https://en.wikipedia.org/wiki/Nondispersive_infrared_sensor) based CO₂ sensor capable of detecting 400 to 10000ppm with an accuracy of ±(30ppm+3%). In order to improve accuracy the SCD30 has temperature and humidity sensing built-in, as well as commands to compensate for altitude.
-
-We've written an Arduino library to make reading the COâ‚‚, humidity, and temperature very easy. It can be downloaded through the Arduino Library manager: search for 'SparkFun SCD30'. We recommend using a [Qwiic Breadboard Cable](https://www.sparkfun.com/products/14425) to connect the SCD30 to a Qwiic compatible board. The Ye*LL*ow wire goes in the SC*L* pin. The SCD30 also supports a serial interface but we haven't worked with it.
-
-The COâ‚‚ sensor works very well and for additional accuracy the SCD30 accepts ambient pressure readings. We recommend using the SCD30 in conjunction with the [Qwiic Pressure Sensor - MS5637](https://www.sparkfun.com/products/14688) or the [Qwiic Environmental Sensor - BME680](https://www.sparkfun.com/products/14570) to obtain the current barometric pressure.
-
-Note: The SCD30 has an automatic self-calibration routine. Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete.
-
-Library written by Nathan Seidle ([SparkFun](http://www.sparkfun.com)).
-
-Thanks to!
-
-* [jobr97](https://github.com/jobr97) for adding the getTemperatureOffset() method
-* [bobobo1618](https://github.com/bobobo1618) for writing a CRC check and improving the return values of the library
-* [labeneator](https://github.com/labeneator) for adding method to disable calibrate at begin
-* [AndreasExner](https://github.com/AndreasExner) for adding [reset and getAutoSelfCalibration methods](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/17)
-* [awatterott](https://github.com/awatterott) for adding [getAltitudeCompensation()](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/18)
-* [jogi-k](https://github.com/jogi-k) for adding [teensy i2clib](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/19) support
-* [paulvha](https://github.com/paulvha) for the suggestions and corrections in [his version of the library](https://github.com/paulvha/scd30)
-* [yamamaya](https://github.com/yamamaya) for the [3ms delay](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/24)
-
-Repository Contents
--------------------
-
-* **/examples** - Example sketches for the library (.ino). Run these from the Arduino IDE.
-* **/src** - Source files for the library (.cpp, .h).
-* **keywords.txt** - Keywords from this library that will be highlighted in the Arduino IDE.
-* **library.properties** - General library properties for the Arduino package manager.
-
-Documentation
---------------
-
-* **[Installing an Arduino Library Guide](https://learn.sparkfun.com/tutorials/installing-an-arduino-library)** - Basic information on how to install an Arduino library.
-
-License Information
--------------------
-
-This product is _**open source**_!
-
-Please use, reuse, and modify these files as you see fit. Please maintain attribution to SparkFun Electronics and release anything derivative under the same license.
-
-Distributed as-is; no warranty is given.
-
-- Your friends at SparkFun.
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example1_BasicReadings/Example1_BasicReadings.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example1_BasicReadings/Example1_BasicReadings.ino
deleted file mode 100644
index 7493565b66fd9a25bf44e2208d656f22661cf1d1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example1_BasicReadings/Example1_BasicReadings.ino	
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example prints the current CO2 level, relative humidity, and temperature in C.
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-  Serial.begin(115200);
-  Serial.println("SCD30 Example");
-  Wire.begin();
-
-  if (airSensor.begin() == false)
-  {
-    Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-    while (1)
-      ;
-  }
-
-  //The SCD30 has data ready every two seconds
-}
-
-void loop()
-{
-  if (airSensor.dataAvailable())
-  {
-    Serial.print("co2(ppm):");
-    Serial.print(airSensor.getCO2());
-
-    Serial.print(" temp(C):");
-    Serial.print(airSensor.getTemperature(), 1);
-
-    Serial.print(" humidity(%):");
-    Serial.print(airSensor.getHumidity(), 1);
-
-    Serial.println();
-  }
-  else
-    Serial.println("Waiting for new data");
-
-  delay(500);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example2_SetOptions/Example2_SetOptions.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example2_SetOptions/Example2_SetOptions.ino
deleted file mode 100644
index 7e7f9036c8a3b2a7ddf34421fcaeffc59228e1c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example2_SetOptions/Example2_SetOptions.ino	
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example prints the current CO2 level, relative humidity, and temperature in C.
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-
-  Note: All settings (interval, altitude, etc) are saved to non-volatile memory and are
-  loaded by the SCD30 at power on. There's no damage in sending that at each power on.
-
-  Note: 100kHz I2C is fine, but according to the datasheet 400kHz I2C is not supported by the SCD30
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-  Serial.begin(115200);
-  Serial.println("SCD30 Example");
-  Wire.begin();
-
-  if (airSensor.begin() == false)
-  {
-    Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-    while (1)
-      ;
-  }
-
-  airSensor.setMeasurementInterval(16); //Change number of seconds between measurements: 2 to 1800 (30 minutes), stored in non-volatile memory of SCD30
-
-  //While the setting is recorded, it is not immediately available to be read.
-  delay(200);
-
-  int interval = airSensor.getMeasurementInterval();
-  Serial.print("Measurement Interval: ");
-  Serial.println(interval);
-
-  //My desk is ~1600m above sealevel
-  airSensor.setAltitudeCompensation(1600); //Set altitude of the sensor in m, stored in non-volatile memory of SCD30
-
-  //Read altitude compensation value
-  unsigned int altitude = airSensor.getAltitudeCompensation();
-  Serial.print("Current altitude: ");
-  Serial.print(altitude);
-  Serial.println("m");
-
-  //Pressure in Boulder, CO is 24.65inHg or 834.74mBar
-  airSensor.setAmbientPressure(835); //Current ambient pressure in mBar: 700 to 1200, will overwrite altitude compensation
-
-  airSensor.setTemperatureOffset(5); //Optionally we can set temperature offset to 5°C, stored in non-volatile memory of SCD30
-
-  //Read temperature offset
-  float offset = airSensor.getTemperatureOffset();
-  Serial.print("Current temp offset: ");
-  Serial.print(offset, 2);
-  Serial.println("C");
-}
-
-void loop()
-{
-  if (airSensor.dataAvailable())
-  {
-    Serial.print("co2(ppm):");
-    Serial.print(airSensor.getCO2());
-
-    Serial.print(" temp(C):");
-    Serial.print(airSensor.getTemperature(), 1);
-
-    Serial.print(" humidity(%):");
-    Serial.print(airSensor.getHumidity(), 1);
-
-    Serial.println();
-  }
-  else
-    Serial.print(".");
-
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example3_WireOptions/Example3_WireOptions.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example3_WireOptions/Example3_WireOptions.ino
deleted file mode 100644
index 3acdb3f60420a28e366269a4493f14a8ab637039..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example3_WireOptions/Example3_WireOptions.ino	
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example prints the current CO2 level, relative humidity, and temperature in C.
-
-  Hardware Connections:
-  This example requires a platform that has multiple I2C ports.
-  It will not compile on an Uno. Try an Artemis RedBoard or ATP.
-
-  Note: 100kHz I2C is fine, but according to the datasheet 400kHz I2C is not supported by the SCD30
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-  Serial.begin(115200);
-  Serial.println("SCD30 Example");
-
-  Wire1.begin(); //Start the wire hardware that may be supported by your platform
-
-  if (airSensor.begin(Wire1) == false) //Pass the Wire port to the .begin() function
-  {
-    Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-    while (1)
-      ;
-  }
-
-  //The library will now use Wire1 for all communication
-}
-
-void loop()
-{
-  if (airSensor.dataAvailable())
-  {
-    Serial.print("co2(ppm):");
-    Serial.print(airSensor.getCO2());
-
-    Serial.print(" temp(C):");
-    Serial.print(airSensor.getTemperature(), 1);
-
-    Serial.print(" humidity(%):");
-    Serial.print(airSensor.getHumidity(), 1);
-
-    Serial.println();
-  }
-  else
-    Serial.print(".");
-
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example4_EnableCalibrate/Example4_EnableCalibrate.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example4_EnableCalibrate/Example4_EnableCalibrate.ino
deleted file mode 100644
index 50ca661d90a1c0ec74673d06c24c0dc453c4a833..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example4_EnableCalibrate/Example4_EnableCalibrate.ino	
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example turns on the auto-calibrate function during .begin()
-  Please see section 1.3.6 of the SCD30 datasheet:
-
-  "When activated for the first time a
-    period of minimum 7 days is needed so that the algorithm can find its initial parameter set for ASC. The sensor has to be exposed
-    to fresh air for at least 1 hour every day. Also during that period, the sensor may not be disconnected from the power supply,
-    otherwise the procedure to find calibration parameters is aborted and has to be restarted from the beginning. The successfully
-    calculated parameters are stored in non-volatile memory of the SCD30 having the effect that after a restart the previously found
-    parameters for ASC are still present. "
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-    Serial.begin(115200);
-    Serial.println("SCD30 Example");
-    Wire.begin();
-
-    //Start sensor using the Wire port and enable the auto-calibration (ASC)
-    if (airSensor.begin(Wire, true) == false)
-    {
-        Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-        while (1)
-            ;
-    }
-
-    Serial.print("Auto calibration set to ");
-    if (airSensor.getAutoSelfCalibration() == true)
-        Serial.println("true");
-    else
-        Serial.println("false");
-
-    //The SCD30 has data ready every two seconds
-}
-
-void loop()
-{
-    if (airSensor.dataAvailable())
-    {
-        Serial.print("co2(ppm):");
-        Serial.print(airSensor.getCO2());
-
-        Serial.print(" temp(C):");
-        Serial.print(airSensor.getTemperature(), 1);
-
-        Serial.print(" humidity(%):");
-        Serial.print(airSensor.getHumidity(), 1);
-
-        Serial.println();
-    }
-    else
-        Serial.println("Waiting for new data");
-
-    delay(500);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example5_GetSettings/Example5_GetSettings.ino b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example5_GetSettings/Example5_GetSettings.ino
deleted file mode 100644
index bdfcf77057a5f15ac4774503e833c4f10fd006b2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example5_GetSettings/Example5_GetSettings.ino	
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example gets the SCD30's settings using the new getSettingValue function (thank you paulvha)
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-    Serial.begin(115200);
-    Serial.println("SCD30 Example");
-    Wire.begin();
-
-    //Start sensor using the Wire port, but disable the auto-calibration
-    if (airSensor.begin(Wire, false) == false)
-    {
-        Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-        while (1)
-            ;
-    }
-
-    uint16_t settingVal; // The settings will be returned in settingVal
-    
-    if (airSensor.getForcedRecalibration(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Forced recalibration factor (ppm) is ");
-      Serial.println(settingVal);
-    }
-    else
-    {
-      Serial.print("getForcedRecalibration failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getMeasurementInterval(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Measurement interval (s) is ");
-      Serial.println(settingVal);
-    }
-    else
-    {
-      Serial.print("getMeasurementInterval failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getTemperatureOffset(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Temperature offset (C) is ");
-      Serial.println(((float)settingVal) / 100.0, 2);
-    }
-    else
-    {
-      Serial.print("getTemperatureOffset failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getAltitudeCompensation(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Altitude offset (m) is ");
-      Serial.println(settingVal);
-    }
-    else
-    {
-      Serial.print("getAltitudeCompensation failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getFirmwareVersion(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Firmware version is 0x");
-      Serial.println(settingVal, HEX);
-    }
-    else
-    {
-      Serial.print("getFirmwareVersion! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    Serial.print("Auto calibration set to ");
-    if (airSensor.getAutoSelfCalibration() == true)
-        Serial.println("true");
-    else
-        Serial.println("false");
-
-    //The SCD30 has data ready every two seconds
-}
-
-void loop()
-{
-    if (airSensor.dataAvailable())
-    {
-        Serial.print("co2(ppm):");
-        Serial.print(airSensor.getCO2());
-
-        Serial.print(" temp(C):");
-        Serial.print(airSensor.getTemperature(), 1);
-
-        Serial.print(" humidity(%):");
-        Serial.print(airSensor.getHumidity(), 1);
-
-        Serial.println();
-    }
-    else
-        Serial.println("Waiting for new data");
-
-    delay(500);
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/keywords.txt b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/keywords.txt
deleted file mode 100644
index e1a66d76d114097d56bcaa2596420b5e835c272b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/keywords.txt	
+++ /dev/null
@@ -1,67 +0,0 @@
-#######################################
-# Syntax Coloring Map
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-SCD30	KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-SCD30	KEYWORD2
-begin	KEYWORD2
-isConnected	KEYWORD2
-enableDebugging	KEYWORD2
-beginMeasuring	KEYWORD2
-StopMeasurement	KEYWORD2
-
-setAmbientPressure	KEYWORD2
-
-getSettingValue	KEYWORD2
-getFirmwareVersion	KEYWORD2
-getCO2	KEYWORD2
-getHumidity	KEYWORD2
-getTemperature	KEYWORD2
-
-getMeasurementInterval	KEYWORD2
-setMeasurementInterval	KEYWORD2
-
-getAltitudeCompensation	KEYWORD2
-setAltitudeCompensation	KEYWORD2
-
-getAutoSelfCalibration	KEYWORD2
-setAutoSelfCalibration	KEYWORD2
-
-getForcedRecalibration	KEYWORD2
-setForcedRecalibrationFactor	KEYWORD2
-
-getTemperatureOffset	KEYWORD2
-setTemperatureOffset	KEYWORD2
-
-dataAvailable	KEYWORD2
-readMeasurement	KEYWORD2
-reset	KEYWORD2
-sendCommand	KEYWORD2
-readRegister	KEYWORD2
-computeCRC8	KEYWORD2
-
-#######################################
-# Constants (LITERAL1)
-#######################################
-
-SCD30_ADDRESS	LITERAL1
-COMMAND_CONTINUOUS_MEASUREMENT	LITERAL1
-COMMAND_SET_MEASUREMENT_INTERVAL	LITERAL1
-COMMAND_GET_DATA_READY	LITERAL1
-COMMAND_READ_MEASUREMENT	LITERAL1
-COMMAND_AUTOMATIC_SELF_CALIBRATION	LITERAL1
-COMMAND_SET_FORCED_RECALIBRATION_FACTOR	LITERAL1
-COMMAND_SET_TEMPERATURE_OFFSET	LITERAL1
-COMMAND_SET_ALTITUDE_COMPENSATION	LITERAL1
-COMMAND_RESET	LITERAL1
-COMMAND_STOP_MEAS	LITERAL1
-COMMAND_READ_FW_VER	LITERAL1
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/library.properties b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/library.properties
deleted file mode 100644
index 439df0d90d5b49d79b2b684401099cfe2cb4908a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/library.properties	
+++ /dev/null
@@ -1,9 +0,0 @@
-name=SparkFun SCD30 Arduino Library
-version=1.0.18
-author=SparkFun Electronics
-maintainer=SparkFun Electronics <sparkfun.com>
-sentence=Library for the Sensirion SCD30 CO2 Sensor
-paragraph=An Arduino library for the SCD30 CO2 sensor from Sensirion. The SCD30 is a high quality <a href="https://en.wikipedia.org/wiki/Nondispersive_infrared_sensor">NDIR</a> based CO₂ sensor capable of detecting 400 to 10000ppm with an accuracy of ±(30ppm+3%). In order to improve accuracy the SCD30 has temperature and humidity sensing built-in, as well as commands to set the current altitude.<br><br>Get the SCD30 <a href="https://www.sparkfun.com/products/14751">here</a>.
-category=Sensors
-url=https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library
-architectures=*
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.cpp b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.cpp
deleted file mode 100644
index 3082507c7e217792d31a8e19a9e0ce6aeb700db1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.cpp	
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
-  This is a library written for the SCD30
-  SparkFun sells these at its website: www.sparkfun.com
-  Do you like this library? Help support SparkFun. Buy a board!
-  https://www.sparkfun.com/products/14751
-
-  Written by Nathan Seidle @ SparkFun Electronics, May 22nd, 2018
-
-  Updated February 1st 2021 to include some of the features of paulvha's version of the library
-  (while maintaining backward-compatibility):
-  https://github.com/paulvha/scd30
-  Thank you Paul!
-
-  The SCD30 measures CO2 with accuracy of +/- 30ppm.
-
-  This library handles the initialization of the SCD30 and outputs
-  CO2 levels, relative humidty, and temperature.
-
-  https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library
-
-  Development environment specifics:
-  Arduino IDE 1.8.13
-
-  SparkFun code, firmware, and software is released under the MIT License.
-  Please see LICENSE.md for more details.
-*/
-
-#include "SparkFun_SCD30_Arduino_Library.h"
-
-SCD30::SCD30(void)
-{
-  // Constructor
-}
-
-// Initialize the Serial port
-#ifdef USE_TEENSY3_I2C_LIB
-bool SCD30::begin(i2c_t3 &wirePort, bool autoCalibrate, bool measBegin)
-#else
-bool SCD30::begin(TwoWire &wirePort, bool autoCalibrate, bool measBegin)
-#endif
-{
-  _i2cPort = &wirePort; // Grab which port the user wants us to use
-
-  /* Especially during obtaining the ACK BIT after a byte sent the SCD30 is using clock stretching  (but NOT only there)!
-   * The need for clock stretching is described in the Sensirion_CO2_Sensors_SCD30_Interface_Description.pdf
-   *
-   * The default clock stretch (maximum wait time) on the ESP8266-library (2.4.2) is 230us which is set during _i2cPort->begin();
-   * In the current implementation of the ESP8266 I2C driver there is NO error message when this time expired, while
-   * the clock stretch is still happening, causing uncontrolled behaviour of the hardware combination.
-   *
-   * To set ClockStretchlimit() a check for ESP8266 boards has been added in the driver.
-   *
-   * With setting to 20000, we set a max timeout of 20mS (> 20x the maximum measured) basically disabling the time-out
-   * and now wait for clock stretch to be controlled by the client.
-   */
-
-#if defined(ARDUINO_ARCH_ESP8266)
-  _i2cPort->setClockStretchLimit(200000);
-#endif
-
-  if (isConnected() == false)
-    return (false);
-
-  if (measBegin == false) // Exit now if measBegin is false
-    return (true);
-
-  // Check for device to respond correctly
-  if (beginMeasuring() == true) // Start continuous measurements
-  {
-    setMeasurementInterval(2);             // 2 seconds between measurements
-    setAutoSelfCalibration(autoCalibrate); // Enable auto-self-calibration
-
-    return (true);
-  }
-
-  return (false); // Something went wrong
-}
-
-// Returns true if device responds to a firmware request
-bool SCD30::isConnected()
-{
-  uint16_t fwVer;
-  if (getFirmwareVersion(&fwVer) == false) // Read the firmware version. Return false if the CRC check fails.
-    return (false);
-
-  if (_printDebug == true)
-  {
-    _debugPort->print(F("Firmware version 0x"));
-    _debugPort->println(fwVer, HEX);
-  }
-
-  return (true);
-}
-
-// Calling this function with nothing sets the debug port to Serial
-// You can also call it with other streams like Serial1, SerialUSB, etc.
-void SCD30::enableDebugging(Stream &debugPort)
-{
-  _debugPort = &debugPort;
-  _printDebug = true;
-}
-
-// Returns the latest available CO2 level
-// If the current level has already been reported, trigger a new read
-uint16_t SCD30::getCO2(void)
-{
-  if (co2HasBeenReported == true) // Trigger a new read
-  {
-    if (readMeasurement() == false) // Pull in new co2, humidity, and temp into global vars
-      co2 = 0;                      // Failed to read sensor
-  }
-
-  co2HasBeenReported = true;
-
-  return (uint16_t)co2; // Cut off decimal as co2 is 0 to 10,000
-}
-
-// Returns the latest available humidity
-// If the current level has already been reported, trigger a new read
-float SCD30::getHumidity(void)
-{
-  if (humidityHasBeenReported == true) // Trigger a new read
-    if (readMeasurement() == false)    // Pull in new co2, humidity, and temp into global vars
-      humidity = 0;                    // Failed to read sensor
-
-  humidityHasBeenReported = true;
-
-  return humidity;
-}
-
-// Returns the latest available temperature
-// If the current level has already been reported, trigger a new read
-float SCD30::getTemperature(void)
-{
-  if (temperatureHasBeenReported == true) // Trigger a new read
-    if (readMeasurement() == false)       // Pull in new co2, humidity, and temp into global vars
-      temperature = 0;                    // Failed to read sensor
-
-  temperatureHasBeenReported = true;
-
-  return temperature;
-}
-
-// Enables or disables the ASC
-bool SCD30::setAutoSelfCalibration(bool enable)
-{
-  if (enable)
-    return sendCommand(COMMAND_AUTOMATIC_SELF_CALIBRATION, 1); // Activate continuous ASC
-  else
-    return sendCommand(COMMAND_AUTOMATIC_SELF_CALIBRATION, 0); // Deactivate continuous ASC
-}
-
-// Set the forced recalibration factor. See 1.3.7.
-// The reference CO2 concentration has to be within the range 400 ppm ≤ cref(CO2) ≤ 2000 ppm.
-bool SCD30::setForcedRecalibrationFactor(uint16_t concentration)
-{
-  if (concentration < 400 || concentration > 2000)
-  {
-    return false; // Error check.
-  }
-  return sendCommand(COMMAND_SET_FORCED_RECALIBRATION_FACTOR, concentration);
-}
-
-// Get the temperature offset. See 1.3.8.
-float SCD30::getTemperatureOffset(void)
-{
-  uint16_t response = readRegister(COMMAND_SET_TEMPERATURE_OFFSET);
-
-  union
-  {
-    int16_t signed16;
-    uint16_t unsigned16;
-  } signedUnsigned; // Avoid any ambiguity casting int16_t to uint16_t
-  signedUnsigned.signed16 = response;
-
-  return (((float)signedUnsigned.signed16) / 100.0);
-}
-
-// Set the temperature offset to remove module heating from temp reading
-bool SCD30::setTemperatureOffset(float tempOffset)
-{
-  // Temp offset is only positive. See: https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/issues/27#issuecomment-971986826
-  //"The SCD30 offset temperature is obtained by subtracting the reference temperature from the SCD30 output temperature"
-  // https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/9.5_CO2/Sensirion_CO2_Sensors_SCD30_Low_Power_Mode.pdf
-
-  if (tempOffset < 0.0)
-    return (false);
-
-  uint16_t value = tempOffset * 100;
-
-  return sendCommand(COMMAND_SET_TEMPERATURE_OFFSET, value);
-}
-
-// Get the altitude compenstation. See 1.3.9.
-uint16_t SCD30::getAltitudeCompensation(void)
-{
-  return readRegister(COMMAND_SET_ALTITUDE_COMPENSATION);
-}
-
-// Set the altitude compenstation. See 1.3.9.
-bool SCD30::setAltitudeCompensation(uint16_t altitude)
-{
-  return sendCommand(COMMAND_SET_ALTITUDE_COMPENSATION, altitude);
-}
-
-// Set the pressure compenstation. This is passed during measurement startup.
-// mbar can be 700 to 1200
-bool SCD30::setAmbientPressure(uint16_t pressure_mbar)
-{
-  if (pressure_mbar < 700 || pressure_mbar > 1200)
-  {
-    return false;
-  }
-  return sendCommand(COMMAND_CONTINUOUS_MEASUREMENT, pressure_mbar);
-}
-
-// SCD30 soft reset
-void SCD30::reset()
-{
-  sendCommand(COMMAND_RESET);
-}
-
-// Get the current ASC setting
-bool SCD30::getAutoSelfCalibration()
-{
-  uint16_t response = readRegister(COMMAND_AUTOMATIC_SELF_CALIBRATION);
-  if (response == 1)
-  {
-    return true;
-  }
-  else
-  {
-    return false;
-  }
-}
-
-// Begins continuous measurements
-// Continuous measurement status is saved in non-volatile memory. When the sensor
-// is powered down while continuous measurement mode is active SCD30 will measure
-// continuously after repowering without sending the measurement command.
-// Returns true if successful
-bool SCD30::beginMeasuring(uint16_t pressureOffset)
-{
-  return (sendCommand(COMMAND_CONTINUOUS_MEASUREMENT, pressureOffset));
-}
-
-// Overload - no pressureOffset
-bool SCD30::beginMeasuring(void)
-{
-  return (beginMeasuring(0));
-}
-
-// Stop continuous measurement
-bool SCD30::StopMeasurement(void)
-{
-  return (sendCommand(COMMAND_STOP_MEAS));
-}
-
-// Sets interval between measurements
-// 2 seconds to 1800 seconds (30 minutes)
-bool SCD30::setMeasurementInterval(uint16_t interval)
-{
-  return sendCommand(COMMAND_SET_MEASUREMENT_INTERVAL, interval);
-}
-
-// Gets interval between measurements
-// 2 seconds to 1800 seconds (30 minutes)
-uint16_t SCD30::getMeasurementInterval(void)
-{
-  uint16_t interval = 0;
-  getSettingValue(COMMAND_SET_MEASUREMENT_INTERVAL, &interval);
-  return (interval);
-}
-
-// Returns true when data is available
-bool SCD30::dataAvailable()
-{
-  uint16_t response = readRegister(COMMAND_GET_DATA_READY);
-
-  if (response == 1)
-    return (true);
-  return (false);
-}
-
-// Get 18 bytes from SCD30
-// Updates global variables with floats
-// Returns true if success
-bool SCD30::readMeasurement()
-{
-  // Verify we have data from the sensor
-  if (dataAvailable() == false)
-    return (false);
-
-  ByteToFl tempCO2;
-  tempCO2.value = 0;
-  ByteToFl tempHumidity;
-  tempHumidity.value = 0;
-  ByteToFl tempTemperature;
-  tempTemperature.value = 0;
-
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(COMMAND_READ_MEASUREMENT >> 8);   // MSB
-  _i2cPort->write(COMMAND_READ_MEASUREMENT & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (0); // Sensor did not ACK
-
-  delay(3);
-
-  const uint8_t receivedBytes = _i2cPort->requestFrom((uint8_t)SCD30_ADDRESS, (uint8_t)18);
-  bool error = false;
-  if (_i2cPort->available())
-  {
-    uint8_t bytesToCrc[2];
-    for (uint8_t x = 0; x < 18; x++)
-    {
-      uint8_t incoming = _i2cPort->read();
-
-      switch (x)
-      {
-      case 0:
-      case 1:
-      case 3:
-      case 4:
-        tempCO2.array[x < 3 ? 3 - x : 4 - x] = incoming;
-        bytesToCrc[x % 3] = incoming;
-        break;
-      case 6:
-      case 7:
-      case 9:
-      case 10:
-        tempTemperature.array[x < 9 ? 9 - x : 10 - x] = incoming;
-        bytesToCrc[x % 3] = incoming;
-        break;
-      case 12:
-      case 13:
-      case 15:
-      case 16:
-        tempHumidity.array[x < 15 ? 15 - x : 16 - x] = incoming;
-        bytesToCrc[x % 3] = incoming;
-        break;
-      default:
-        // Validate CRC
-        uint8_t foundCrc = computeCRC8(bytesToCrc, 2);
-        if (foundCrc != incoming)
-        {
-          if (_printDebug == true)
-          {
-            _debugPort->print(F("readMeasurement: found CRC in byte "));
-            _debugPort->print(x);
-            _debugPort->print(F(", expected 0x"));
-            _debugPort->print(foundCrc, HEX);
-            _debugPort->print(F(", got 0x"));
-            _debugPort->println(incoming, HEX);
-          }
-          error = true;
-        }
-        break;
-      }
-    }
-  }
-  else
-  {
-    if (_printDebug == true)
-    {
-      _debugPort->print(F("readMeasurement: no SCD30 data found from I2C, i2c claims we should receive "));
-      _debugPort->print(receivedBytes);
-      _debugPort->println(F(" bytes"));
-    }
-    return false;
-  }
-
-  if (error)
-  {
-    if (_printDebug == true)
-      _debugPort->println(F("readMeasurement: encountered error reading SCD30 data."));
-    return false;
-  }
-  // Now copy the uint32s into their associated floats
-  co2 = tempCO2.value;
-  temperature = tempTemperature.value;
-  humidity = tempHumidity.value;
-
-  // Mark our global variables as fresh
-  co2HasBeenReported = false;
-  humidityHasBeenReported = false;
-  temperatureHasBeenReported = false;
-
-  return (true); // Success! New data available in globals.
-}
-
-// Gets a setting by reading the appropriate register.
-// Returns true if the CRC is valid.
-bool SCD30::getSettingValue(uint16_t registerAddress, uint16_t *val)
-{
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(registerAddress >> 8);   // MSB
-  _i2cPort->write(registerAddress & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (false); // Sensor did not ACK
-
-  delay(3);
-
-  _i2cPort->requestFrom((uint8_t)SCD30_ADDRESS, (uint8_t)3); // Request data and CRC
-  if (_i2cPort->available())
-  {
-    uint8_t data[2];
-    data[0] = _i2cPort->read();
-    data[1] = _i2cPort->read();
-    uint8_t crc = _i2cPort->read();
-    *val = (uint16_t)data[0] << 8 | data[1];
-    uint8_t expectedCRC = computeCRC8(data, 2);
-    if (crc == expectedCRC) // Return true if CRC check is OK
-      return (true);
-    if (_printDebug == true)
-    {
-      _debugPort->print(F("getSettingValue: CRC fail: expected 0x"));
-      _debugPort->print(expectedCRC, HEX);
-      _debugPort->print(F(", got 0x"));
-      _debugPort->println(crc, HEX);
-    }
-  }
-  return (false);
-}
-
-// Gets two bytes from SCD30
-uint16_t SCD30::readRegister(uint16_t registerAddress)
-{
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(registerAddress >> 8);   // MSB
-  _i2cPort->write(registerAddress & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (0); // Sensor did not ACK
-
-  delay(3);
-
-  _i2cPort->requestFrom((uint8_t)SCD30_ADDRESS, (uint8_t)2);
-  if (_i2cPort->available())
-  {
-    uint8_t msb = _i2cPort->read();
-    uint8_t lsb = _i2cPort->read();
-    return ((uint16_t)msb << 8 | lsb);
-  }
-  return (0); // Sensor did not respond
-}
-
-// Sends a command along with arguments and CRC
-bool SCD30::sendCommand(uint16_t command, uint16_t arguments)
-{
-  uint8_t data[2];
-  data[0] = arguments >> 8;
-  data[1] = arguments & 0xFF;
-  uint8_t crc = computeCRC8(data, 2); // Calc CRC on the arguments only, not the command
-
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(command >> 8);     // MSB
-  _i2cPort->write(command & 0xFF);   // LSB
-  _i2cPort->write(arguments >> 8);   // MSB
-  _i2cPort->write(arguments & 0xFF); // LSB
-  _i2cPort->write(crc);
-  if (_i2cPort->endTransmission() != 0)
-    return (false); // Sensor did not ACK
-
-  return (true);
-}
-
-// Sends just a command, no arguments, no CRC
-bool SCD30::sendCommand(uint16_t command)
-{
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(command >> 8);   // MSB
-  _i2cPort->write(command & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (false); // Sensor did not ACK
-
-  return (true);
-}
-
-// Given an array and a number of bytes, this calculate CRC8 for those bytes
-// CRC is only calc'd on the data portion (two bytes) of the four bytes being sent
-// From: http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html
-// Tested with: http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
-// x^8+x^5+x^4+1 = 0x31
-uint8_t SCD30::computeCRC8(uint8_t data[], uint8_t len)
-{
-  uint8_t crc = 0xFF; // Init with 0xFF
-
-  for (uint8_t x = 0; x < len; x++)
-  {
-    crc ^= data[x]; // XOR-in the next input byte
-
-    for (uint8_t i = 0; i < 8; i++)
-    {
-      if ((crc & 0x80) != 0)
-        crc = (uint8_t)((crc << 1) ^ 0x31);
-      else
-        crc <<= 1;
-    }
-  }
-
-  return crc; // No output reflection
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.h b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.h
deleted file mode 100644
index 20d651194ffffc58b2d2ceb3656ae3aa26e36f94..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.h	
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-  This is a library written for the SCD30
-  SparkFun sells these at its website: www.sparkfun.com
-  Do you like this library? Help support SparkFun. Buy a board!
-  https://www.sparkfun.com/products/14751
-
-  Written by Nathan Seidle @ SparkFun Electronics, May 22nd, 2018
-
-	Updated February 1st 2021 to include some of the features of paulvha's version of the library
-	(while maintaining backward-compatibility):
-	https://github.com/paulvha/scd30
-	Thank you Paul!
-
-  The SCD30 measures CO2 with accuracy of +/- 30ppm.
-
-  This library handles the initialization of the SCD30 and outputs
-  CO2 levels, relative humidty, and temperature.
-
-  https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library
-
-  Development environment specifics:
-  Arduino IDE 1.8.13
-
-	SparkFun code, firmware, and software is released under the MIT License.
-  Please see LICENSE.md for more details.
-*/
-
-#ifndef __SparkFun_SCD30_ARDUINO_LIBARARY_H__
-#define __SparkFun_SCD30_ARDUINO_LIBARARY_H__
-
-// Uncomment the next #define if using an Teensy >= 3 or Teensy LC and want to use the dedicated I2C-Library for it
-// Then you also have to include <i2c_t3.h> on your application instead of <Wire.h>
-
-// #define USE_TEENSY3_I2C_LIB
-
-#include "Arduino.h"
-#ifdef USE_TEENSY3_I2C_LIB
-#include <i2c_t3.h>
-#else
-#include <Wire.h>
-#endif
-
-// The default I2C address for the SCD30 is 0x61.
-#define SCD30_ADDRESS 0x61
-
-// Available commands
-
-#define COMMAND_CONTINUOUS_MEASUREMENT 0x0010
-#define COMMAND_SET_MEASUREMENT_INTERVAL 0x4600
-#define COMMAND_GET_DATA_READY 0x0202
-#define COMMAND_READ_MEASUREMENT 0x0300
-#define COMMAND_AUTOMATIC_SELF_CALIBRATION 0x5306
-#define COMMAND_SET_FORCED_RECALIBRATION_FACTOR 0x5204
-#define COMMAND_SET_TEMPERATURE_OFFSET 0x5403
-#define COMMAND_SET_ALTITUDE_COMPENSATION 0x5102
-#define COMMAND_RESET 0xD304 // Soft reset
-#define COMMAND_STOP_MEAS 0x0104
-#define COMMAND_READ_FW_VER 0xD100
-
-typedef union
-{
-	uint8_t array[4];
-	float value;
-} ByteToFl; // paulvha
-
-class SCD30
-{
-public:
-	SCD30(void);
-
-	bool begin(bool autoCalibrate) { return begin(Wire, autoCalibrate); }
-#ifdef USE_TEENSY3_I2C_LIB
-	bool begin(i2c_t3 &wirePort = Wire, bool autoCalibrate = false, bool measBegin = true); // By default use Wire port
-#else
-	bool begin(TwoWire &wirePort = Wire, bool autoCalibrate = false, bool measBegin = true); // By default use Wire port
-#endif
-
-	bool isConnected();
-	void enableDebugging(Stream &debugPort = Serial); // Turn on debug printing. If user doesn't specify then Serial will be used.
-
-	bool beginMeasuring(uint16_t pressureOffset);
-	bool beginMeasuring(void);
-	bool StopMeasurement(void); // paulvha
-
-	bool setAmbientPressure(uint16_t pressure_mbar);
-
-	bool getSettingValue(uint16_t registerAddress, uint16_t *val);
-	bool getFirmwareVersion(uint16_t *val) { return (getSettingValue(COMMAND_READ_FW_VER, val)); }
-	uint16_t getCO2(void);
-	float getHumidity(void);
-	float getTemperature(void);
-
-	uint16_t getMeasurementInterval(void);
-	bool getMeasurementInterval(uint16_t *val) { return (getSettingValue(COMMAND_SET_MEASUREMENT_INTERVAL, val)); }
-	bool setMeasurementInterval(uint16_t interval);
-
-	uint16_t getAltitudeCompensation(void);
-	bool getAltitudeCompensation(uint16_t *val) { return (getSettingValue(COMMAND_SET_ALTITUDE_COMPENSATION, val)); }
-	bool setAltitudeCompensation(uint16_t altitude);
-
-	bool getAutoSelfCalibration(void);
-	bool setAutoSelfCalibration(bool enable);
-
-	bool getForcedRecalibration(uint16_t *val) { return (getSettingValue(COMMAND_SET_FORCED_RECALIBRATION_FACTOR, val)); }
-	bool setForcedRecalibrationFactor(uint16_t concentration);
-
-	float getTemperatureOffset(void);
-	bool getTemperatureOffset(uint16_t *val) { return (getSettingValue(COMMAND_SET_TEMPERATURE_OFFSET, val)); }
-	bool setTemperatureOffset(float tempOffset);
-
-	bool dataAvailable();
-	bool readMeasurement();
-
-	void reset();
-
-	bool sendCommand(uint16_t command, uint16_t arguments);
-	bool sendCommand(uint16_t command);
-
-	uint16_t readRegister(uint16_t registerAddress);
-
-	uint8_t computeCRC8(uint8_t data[], uint8_t len);
-
-private:
-	// Variables
-#ifdef USE_TEENSY3_I2C_LIB
-	i2c_t3 *_i2cPort; // The generic connection to user's chosen I2C hardware
-#else
-	TwoWire *_i2cPort;																		 // The generic connection to user's chosen I2C hardware
-#endif
-	// Global main datums
-	float co2 = 0;
-	float temperature = 0;
-	float humidity = 0;
-
-	// These track the staleness of the current data
-	// This allows us to avoid calling readMeasurement() every time individual datums are requested
-	bool co2HasBeenReported = true;
-	bool humidityHasBeenReported = true;
-	bool temperatureHasBeenReported = true;
-
-	// Debug
-	Stream *_debugPort;			 // The stream to send debug messages to if enabled. Usually Serial.
-	boolean _printDebug = false; // Flag to print debugging variables
-};
-#endif
diff --git a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/integrity.dat b/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/integrity.dat
deleted file mode 100644
index 7a7e2c6c5f131a62abf4636aae2c768fa7b7c200..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/integrity.dat
+++ /dev/null
@@ -1,6 +0,0 @@
-adafruit/Adafruit ADS1X15@^2.4.0
-wollewald/INA219_WE@^1.3.1
-Wire
-SPI
-envirodiy/SDI-12@^2.1.4
-sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/.vscode/c_cpp_properties.json b/code-snippets/client/sensor_station_analog/client/.vscode/c_cpp_properties.json
deleted file mode 100644
index fb9daefd22186794ed000133cfedb87da57d6ab7..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.vscode/c_cpp_properties.json
+++ /dev/null
@@ -1,473 +0,0 @@
-//
-// !!! WARNING !!! AUTO-GENERATED FILE!
-// PLEASE DO NOT MODIFY IT AND USE "platformio.ini":
-// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-//
-{
-    "configurations": [
-        {
-            "name": "PlatformIO",
-            "includePath": [
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/include",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/scd30",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/ina219",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/drs26_digital",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/button/button/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qspi_qspi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/cores/esp32",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/variants/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
-                ""
-            ],
-            "browse": {
-                "limitSymbolsToIncludedHeaders": true,
-                "path": [
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/include",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/scd30",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/ina219",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/drs26_digital",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit ADS1X15",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/Adafruit BusIO",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/button/button/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qspi_qspi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/cores/esp32",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/variants/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
-                    ""
-                ]
-            },
-            "defines": [
-                "PLATFORMIO=60104",
-                "ARDUINO_ESP32C3_DEV",
-                "HAVE_CONFIG_H",
-                "MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
-                "UNITY_INCLUDE_CONFIG_H",
-                "WITH_POSIX",
-                "_GNU_SOURCE",
-                "IDF_VER=\"v4.4.1-1-gb8050b365e\"",
-                "ESP_PLATFORM",
-                "_POSIX_READER_WRITER_LOCKS",
-                "ARDUINO_ARCH_ESP32",
-                "ESP32",
-                "F_CPU=160000000L",
-                "ARDUINO=10812",
-                "ARDUINO_VARIANT=\"esp32c3\"",
-                "ARDUINO_BOARD=\"Espressif ESP32-C3-DevKitM-1\"",
-                "ARDUINO_PARTITION_default",
-                ""
-            ],
-            "cStandard": "c99",
-            "cppStandard": "c++11",
-            "compilerPath": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-gcc",
-            "compilerArgs": [
-                "-march=rv32imc",
-                ""
-            ]
-        }
-    ],
-    "version": 4
-}
diff --git a/code-snippets/client/sensor_station_analog/client/.vscode/launch.json b/code-snippets/client/sensor_station_analog/client/.vscode/launch.json
deleted file mode 100644
index 43e08ee3d0e6d24b29d6ab380943d613512359fd..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/.vscode/launch.json
+++ /dev/null
@@ -1,44 +0,0 @@
-// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
-//
-// PIO Unified Debugger
-//
-// Documentation: https://docs.platformio.org/page/plus/debugging.html
-// Configuration: https://docs.platformio.org/page/projectconf/section_env_debug.html
-
-{
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug",
-            "executable": "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart",
-            "preLaunchTask": {
-                "type": "PlatformIO",
-                "task": "Pre-Debug"
-            }
-        },
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug (skip Pre-Debug)",
-            "executable": "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart"
-        },
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug (without uploading)",
-            "executable": "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog/client/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart",
-            "loadMode": "manual"
-        }
-    ]
-}
diff --git a/code-snippets/client/sensor_station_analog/client/lib/README b/code-snippets/client/sensor_station_analog/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/dr26.cpp b/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/dr26.cpp
deleted file mode 100644
index 288ad51e5a4b9cd79ddec22b8b3226b679cee80a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/dr26.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include "dr26.hpp"
-#include "pinout.hpp"
-
-Adafruit_ADS1115 ads;
-
-void Forte_DR26 :: setup(){
-   Wire.begin(I2C_SDA, I2C_SCL);
-    ads.setGain(GAIN_ONE);
-    ads.begin() ?  Serial.println("ADS initialized") : Serial.println("failed to initialize ADS");
-    delay(100);
-}
-
-float* Forte_DR26 :: read_data(){
-    for(int i=0; i<10; i++){
-        int16_t adc = ads.readADC_SingleEnded(0);
-        float volt = ads.computeVolts(adc);
-        volts += volt;
-    }
-    volts /= 10;
-    return &volts;
-}
-float volts = 0;
-  // SETTING THE GAIN VALUE INCORRECTLY MAY DESTROY THE ADC!
-  // The maximum output of the dendrometer is 2.5V, and so a gain of
-  // one (max 4.096V) or two (max 2.048V) is optimal. Changing the gain
-  // changes the accuracy of the sensor: higher gain gives a higher
-  // precision but a smaller range.
-  //                                                                
-  // GAIN_TWOTHIRDS  // 2/3x gain +/- 6.144V  1 bit = 0.1875mV (default)
-  // GAIN_ONE        // 1x gain   +/- 4.096V  1 bit = 0.125mV
-  // GAIN_TWO        // 2x gain   +/- 2.048V  1 bit = 0.0625mV
-  // GAIN_FOUR       // 4x gain   +/- 1.024V  1 bit = 0.03125mV
-  // GAIN_EIGHT      // 8x gain   +/- 0.512V  1 bit = 0.015625mV
-  // GAIN_SIXTEEN    // 16x gain  +/- 0.256V  1 bit = 0.0078125mV
-void Forte_DR26 :: change_Gain(adsGain_t gain){
-    ads.setGain(gain);
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/dr26.hpp b/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/dr26.hpp
deleted file mode 100644
index 6e66a44aa01b537afa9afe506c28d3bf5e3e4b4f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/dr26.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef _DR26
-#define _DR26
-
-#include "forte_sensor.hpp"
-#include "pinout.hpp"
-#include <Wire.h>
-#include <Adafruit_ADS1X15.h>
-
-class Forte_DR26 : public Forte_Sensor{
-    public:
-        // void setup(adsGain_t gain);
-        float* read_data();
-        void change_Gain(adsGain_t gain);
-        // void* read_data();
-        void setup();
-
-    private:
-           float volts = 0;
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/forte_sensor.hpp b/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/forte_sensor.hpp
deleted file mode 100644
index 58194537779126b9d3dc814408b1e3db1a8f3c8c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-//
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/pinout.hpp b/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/pinout.hpp
deleted file mode 100644
index 4f22fa9f82eed2a5d1e961a652e612b021805902..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/dr26_analogue/pinout.hpp
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for SDI12
-#define I2C_SDA 6                            // use GPIO pin for I2C: SDA
-#define I2C_SCL 7                            // use GPIO pin for I2C: SCL
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/drs26.cpp b/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 6b987ff12d976e3cf8cef4c2c302e2d0efdbd6b0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,44 +0,0 @@
-#include <drs26.hpp>
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck 
-*/
-
-void Forte_DRS26 ::setup()
-{
-    drs26.begin(SDI_DATA);
-}
-
-out_data_drs26 *Forte_DRS26 ::read_data()
-{
-    String sdiResponse = "";
-    String measurement_command="1M!"; //The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is specified as 1M!=Sebsir measurement request at adress 1
-    String data_command="1D0!";       //and the followed data command 1D0! = Sensor data request at adress 1 
-
-    drs26.sendCommand(measurement_command);
-    delay(1000);
-    drs26.sendCommand(data_command);
-
-    while (drs26.available())
-    {
-        char next_character = drs26.read();
-        if ((next_character != '\n') && (next_character != '\r'))
-        {
-            sdiResponse += next_character;
-            delay(10); // 1 character ~ 7.5ms
-        }
-    }
-
-   // Serial.println(sdiResponse);
-
-    if (sdiResponse.length() > 1)
-    {
-        data.id = sdiResponse.substring(0, 8).toInt();
-        data.circumference = sdiResponse.substring(8, 16).toFloat();
-        data.temperatur = sdiResponse.substring(15, 22).toFloat();
-        return &data;
-    }
-
-    return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/drs26.hpp b/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index 83d02ae0a5a5f88e556e1f4a811dc6510b122f98..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include <forte_sensor.hpp>
-#include <SDI12.h>
-#include <pinout.hpp>
-#include "Wire.h"
-
-     
-struct out_data_drs26 {
-        int id;
-        float circumference;
-        float temperatur;
-    };
-
-
-class Forte_DRS26 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_drs26* read_data();
- 
-    private:
-        SDI12 drs26;
-        out_data_drs26 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/forte_sensor.hpp b/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/forte_sensor.hpp
deleted file mode 100644
index 58194537779126b9d3dc814408b1e3db1a8f3c8c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-//
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/pinout.hpp b/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/pinout.hpp
deleted file mode 100644
index cf8f907ad9d9034a8179390e06db5d7aeba37815..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/drs26_digital/pinout.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for SDI12
-#define SDI_DATA 4
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/sensor_station_analog/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/ina219/ina219.cpp b/code-snippets/client/sensor_station_analog/client/lib/ina219/ina219.cpp
deleted file mode 100644
index 5bd28c80aee54e9ef0c5670f3887229ec4a13422..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "ina219.hpp"
-
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data_ina219* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        Serial.println("data avalable");
-        return &data;
-    }
-    else
-        throw std::invalid_argument("AddPositiveIntegers arguments must be positive");;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/ina219/ina219.hpp b/code-snippets/client/sensor_station_analog/client/lib/ina219/ina219.hpp
deleted file mode 100644
index 1fcb8d27558fb7e71a3a00b9a09eb578a364c705..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <INA219_WE.h>
-#include <Wire.h>
-
-//TwoWire I2Cone = TwoWire(0);
-//TwoWire I2Ctwo = TwoWire(1);
-     
-struct out_data_ina219 {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_ina219* read_data();
- 
-    private:
-        INA219_WE ina219;
-        out_data_ina219 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/ina219/pinout.hpp b/code-snippets/client/sensor_station_analog/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 7c3d725bb7cfd202fdb1e762c0f47f539c91e2b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Protocol (for digital communication between ESP and the Sensor)
-#define I2C_SCL 7
-#define I2C_SDA 6
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/sensor_station_analog/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/scd30/pinout.hpp b/code-snippets/client/sensor_station_analog/client/lib/scd30/pinout.hpp
deleted file mode 100644
index b7ac5326271d1d1da68f3449942e87bd1c9013e0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Proctocol  (for digital communication between ESP and the Sensor)
-#define I2C_SCL 9
-#define I2C_SDA 8
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/scd30/scd30.cpp b/code-snippets/client/sensor_station_analog/client/lib/scd30/scd30.cpp
deleted file mode 100644
index c7c2084754bfc94aef7b1ca25947ede9c4c03fc1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "scd30.hpp"
-
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-out_data_scd30* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data.C02= airSensor.getCO2();
-        data.Temperature = airSensor.getTemperature();
-        data.Humidity = airSensor.getHumidity();
-
-        return   &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog/client/lib/scd30/scd30.hpp b/code-snippets/client/sensor_station_analog/client/lib/scd30/scd30.hpp
deleted file mode 100644
index d630c0fa808fcdd7ad59dd13eac1e110c6346628..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <Wire.h>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-struct out_data_scd30
-{
-    float C02;
-    float Temperature;
-    float Humidity;
-};
-
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_scd30* read_data();
-
-    private:
-        SCD30 airSensor;
-        out_data_scd30 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/.piopm b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/.piopm
deleted file mode 100644
index dbbfae4d03ba653de5ef184d449729ac1ede5117..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/.piopm
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "ESP32Time", "version": "1.1.0", "spec": {"owner": "fbiego", "id": 11703, "name": "ESP32Time", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/ESP32Time.cpp b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/ESP32Time.cpp
deleted file mode 100644
index 168ffc8e708e16fc959d1ce7645c57a04d03858d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/ESP32Time.cpp
+++ /dev/null
@@ -1,343 +0,0 @@
-/*
-   MIT License
-
-  Copyright (c) 2021 Felix Biego
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in all
-  copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-#include "ESP32Time.h"
-#include "time.h"
-#include <sys/time.h>
-
-/*!
-    @brief  Constructor for ESP32Time
-*/
-ESP32Time::ESP32Time(){}
-
-/*!
-    @brief  Constructor for ESP32Time
-	@param  offest
-            gmt offset in seconds
-*/
-ESP32Time::ESP32Time(long offset){
-	this->offset = offset;
-}
-
-/*!
-    @brief  set the internal RTC time
-    @param  sc
-            second (0-59)
-    @param  mn
-            minute (0-59)
-    @param  hr
-            hour of day (0-23)
-    @param  dy
-            day of month (1-31)
-    @param  mt
-            month (1-12)
-    @param  yr
-            year ie 2021
-    @param  ms
-            microseconds (optional)
-*/
-void ESP32Time::setTime(int sc, int mn, int hr, int dy, int mt, int yr, int ms) {
-  // seconds, minute, hour, day, month, year $ microseconds(optional)
-  // ie setTime(20, 34, 8, 1, 4, 2021) = 8:34:20 1/4/2021
-  struct tm t = {0};        // Initalize to all 0's
-  t.tm_year = yr - 1900;    // This is year-1900, so 121 = 2021
-  t.tm_mon = mt - 1;
-  t.tm_mday = dy;
-  t.tm_hour = hr;
-  t.tm_min = mn;
-  t.tm_sec = sc;
-  time_t timeSinceEpoch = mktime(&t);
-  setTime(timeSinceEpoch, ms);
-}
-
-/*!
-    @brief  set time from struct
-	@param	tm
-			time struct
-*/
-void ESP32Time::setTimeStruct(tm t) { 
-	time_t timeSinceEpoch = mktime(&t); 
-	setTime(timeSinceEpoch, 0); 
-}
-
-/*!
-    @brief  set the internal RTC time
-    @param  epoch
-            epoch time in seconds
-    @param  ms
-            microseconds (optional)
-*/
-void ESP32Time::setTime(long epoch, int ms) {
-  struct timeval tv;
-  tv.tv_sec = epoch;  // epoch time (seconds)
-  tv.tv_usec = ms;    // microseconds
-  settimeofday(&tv, NULL);
-}
-
-/*!
-    @brief  get the internal RTC time as a tm struct
-*/
-tm ESP32Time::getTimeStruct(){
-  struct tm timeinfo;
-  getLocalTime(&timeinfo);
-  time_t tt = mktime (&timeinfo);
-  tt = tt + offset;
-  struct tm * tn = localtime(&tt);;
-  return *tn;
-}
-
-/*!
-    @brief  get the time and date as an Arduino String object
-    @param  mode
-            true = Long date format
-			false = Short date format
-*/
-String ESP32Time::getDateTime(bool mode){
-	struct tm timeinfo = getTimeStruct();
-	char s[51];
-	if (mode)
-	{
-		strftime(s, 50, "%A, %B %d %Y %H:%M:%S", &timeinfo);
-	}
-	else
-	{
-		strftime(s, 50, "%a, %b %d %Y %H:%M:%S", &timeinfo);
-	}
-	return String(s);
-}
-
-/*!
-    @brief  get the time and date as an Arduino String object
-    @param  mode
-            true = Long date format
-			false = Short date format
-*/
-String ESP32Time::getTimeDate(bool mode){
-	struct tm timeinfo = getTimeStruct();
-	char s[51];
-	if (mode)
-	{
-		strftime(s, 50, "%H:%M:%S %A, %B %d %Y", &timeinfo);
-	}
-	else
-	{
-		strftime(s, 50, "%H:%M:%S %a, %b %d %Y", &timeinfo);
-	}
-	return String(s);
-}
-
-/*!
-    @brief  get the time as an Arduino String object
-*/
-String ESP32Time::getTime(){
-	struct tm timeinfo = getTimeStruct();
-	char s[51];
-	strftime(s, 50, "%H:%M:%S", &timeinfo);
-	return String(s);
-}
-
-/*!
-    @brief  get the time as an Arduino String object with the specified format
-	@param	format
-			time format 
-			http://www.cplusplus.com/reference/ctime/strftime/
-*/
-String ESP32Time::getTime(String format){
-	struct tm timeinfo = getTimeStruct();
-	char s[128];
-	char c[128];
-	format.toCharArray(c, 127);
-	strftime(s, 127, c, &timeinfo);
-	return String(s);
-}
-
-/*!
-    @brief  get the date as an Arduino String object
-    @param  mode
-            true = Long date format
-			false = Short date format
-*/
-String ESP32Time::getDate(bool mode){
-	struct tm timeinfo = getTimeStruct();
-	char s[51];
-	if (mode)
-	{
-		strftime(s, 50, "%A, %B %d %Y", &timeinfo);
-	}
-	else
-	{
-		strftime(s, 50, "%a, %b %d %Y", &timeinfo);
-	}
-	return String(s);
-}
-
-/*!
-    @brief  get the current milliseconds as long
-*/
-long ESP32Time::getMillis(){
-	struct timeval tv;
-	gettimeofday(&tv, NULL);
-	return tv.tv_usec/1000;
-}
-
-/*!
-    @brief  get the current microseconds as long
-*/
-long ESP32Time::getMicros(){
-	struct timeval tv;
-	gettimeofday(&tv, NULL);
-	return tv.tv_usec;
-}
-
-/*!
-    @brief  get the current epoch seconds as long
-*/
-long ESP32Time::getEpoch(){
-	struct tm timeinfo = getTimeStruct();
-	return mktime(&timeinfo);
-}
-
-/*!
-    @brief  get the current epoch seconds as long from the rtc without offset
-*/
-long ESP32Time::getLocalEpoch(){
-	struct timeval tv;
-	gettimeofday(&tv, NULL);
-	return tv.tv_sec;
-}
-
-/*!
-    @brief  get the current seconds as int
-*/
-int ESP32Time::getSecond(){
-	struct tm timeinfo = getTimeStruct();
-	return timeinfo.tm_sec;
-}
-
-/*!
-    @brief  get the current minutes as int
-*/
-int ESP32Time::getMinute(){
-	struct tm timeinfo = getTimeStruct();
-	return timeinfo.tm_min;
-}
-
-/*!
-    @brief  get the current hour as int
-	@param	mode
-			true = 24 hour mode (0-23)
-			false = 12 hour mode (0-12)
-*/
-int ESP32Time::getHour(bool mode){
-	struct tm timeinfo = getTimeStruct();
-	if (mode)
-	{
-		return timeinfo.tm_hour;
-	}
-	else
-	{
-		int hour = timeinfo.tm_hour;
-		if (hour > 12)
-		{
-			return timeinfo.tm_hour-12;
-		}
-		else
-		{
-			return timeinfo.tm_hour;
-		}
-		
-	}
-}
-
-/*!
-    @brief  return current hour am or pm
-	@param	lowercase
-			true = lowercase
-			false = uppercase
-*/
-String ESP32Time::getAmPm(bool lowercase){
-	struct tm timeinfo = getTimeStruct();
-	if (timeinfo.tm_hour >= 12)
-	{
-		if (lowercase)
-		{
-			return "pm";
-		}
-		else
-		{
-			return "PM";
-		}
-	}
-	else
-	{
-		if (lowercase)
-		{
-			return "am";
-		}
-		else
-		{
-			return "AM";
-		}
-	}
-}
-
-/*!
-    @brief  get the current day as int (1-31)
-*/
-int ESP32Time::getDay(){
-	struct tm timeinfo = getTimeStruct();
-	return timeinfo.tm_mday;
-}
-
-/*!
-    @brief  get the current day of week as int (0-6)
-*/
-int ESP32Time::getDayofWeek(){
-	struct tm timeinfo = getTimeStruct();
-	return timeinfo.tm_wday;
-}
-
-/*!
-    @brief  get the current day of year as int (0-365)
-*/
-int ESP32Time::getDayofYear(){
-	struct tm timeinfo = getTimeStruct();
-	return timeinfo.tm_yday;
-}
-
-/*!
-    @brief  get the current month as int (0-11)
-*/
-int ESP32Time::getMonth(){
-	struct tm timeinfo = getTimeStruct();
-	return timeinfo.tm_mon;
-}
-
-/*!
-    @brief  get the current year as int
-*/
-int ESP32Time::getYear(){
-	struct tm timeinfo = getTimeStruct();
-	return timeinfo.tm_year+1900;
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/ESP32Time.h b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/ESP32Time.h
deleted file mode 100644
index 3038aec584f397be0f5da65825d3618a4799f3f0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/ESP32Time.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-   MIT License
-
-  Copyright (c) 2021 Felix Biego
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in all
-  copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-#ifndef ESP32TIME_H
-#define ESP32TIME_H
-
-#include <Arduino.h>
-
-class ESP32Time {
-	
-	public:
-		ESP32Time();
-		ESP32Time(long offset);
-		void setTime(long epoch = 1609459200, int ms = 0);	// default (1609459200) = 1st Jan 2021
-		void setTime(int sc, int mn, int hr, int dy, int mt, int yr, int ms = 0);
-		void setTimeStruct(tm t);
-		tm getTimeStruct();
-		String getTime(String format);
-		
-		String getTime();
-		String getDateTime(bool mode = false);
-		String getTimeDate(bool mode = false);
-		String getDate(bool mode = false);
-		String getAmPm(bool lowercase = false);
-		
-		long getEpoch();
-		long getMillis();
-		long getMicros();
-		int getSecond();
-		int getMinute();
-		int getHour(bool mode = false);
-		int getDay();
-		int getDayofWeek();
-		int getDayofYear();
-		int getMonth();
-		int getYear();
-		
-		long offset;
-		long getLocalEpoch();
-		
-
-};
-
-
-#endif
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/LICENSE b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/LICENSE
deleted file mode 100644
index d674f820ba911ff42e275ae451bcbae30f78d185..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2021 Felix Biego
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/README.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/README.md
deleted file mode 100644
index d7d79e79ea47e2e2879b4ceaa605d3f60c1a7ac1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/README.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# ESP32Time
-An Arduino library for setting and retrieving internal RTC time on ESP32 boards
-
-[![arduino-library-badge](https://www.ardu-badge.com/badge/ESP32Time.svg?)](https://www.arduinolibraries.info/libraries/esp32-time)
-
-## Functions
-
-```
-ESP32Time rtc(offset); // create an instance with a specifed offset in seconds
-rtc.offset;	// get or modify the current offset
-setTime(30, 24, 15, 17, 1, 2021);  // 17th Jan 2021 15:24:30
-setTime(1609459200);  // 1st Jan 2021 00:00:00
-setTimeStruct(time);	// set with time struct
-
-getTime()          //  (String) 15:24:38
-getDate()          //  (String) Sun, Jan 17 2021
-getDate(true)      //  (String) Sunday, January 17 2021
-getDateTime()      //  (String) Sun, Jan 17 2021 15:24:38
-getDateTime(true)  //  (String) Sunday, January 17 2021 15:24:38
-getTimeDate()      //  (String) 15:24:38 Sun, Jan 17 2021
-getTimeDate(true)  //  (String) 15:24:38 Sunday, January 17 2021
-
-getMicros()        //  (long)    723546
-getMillis()        //  (long)    723
-getEpoch()         //  (long)    1609459200
-getLocalEpoch()    //  (long)    1609459200 // local epoch without offset
-getSecond()        //  (int)     38    (0-59)
-getMinute()        //  (int)     24    (0-59)
-getHour()          //  (int)     3     (0-12)
-getHour(true)      //  (int)     15    (0-23)
-getAmPm()          //  (String)  pm
-getAmPm(true)      //  (String)  PM
-getDay()           //  (int)     17    (1-31)
-getDayofWeek()     //  (int)     0     (0-6)
-getDayofYear()     //  (int)     16    (0-365)
-getMonth()         //  (int)     0     (0-11)
-getYear()          //  (int)     2021
-
-getTime("%A, %B %d %Y %H:%M:%S")   // (String) returns time with specified format 
-```
-[`Formatting options`](http://www.cplusplus.com/reference/ctime/strftime/)
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/examples/esp32_time/esp32_time.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/examples/esp32_time/esp32_time.ino
deleted file mode 100644
index 53a7066daa99cff244b1b964b0d1f1eed36b8feb..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/examples/esp32_time/esp32_time.ino
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-   MIT License
-
-  Copyright (c) 2021 Felix Biego
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in all
-  copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-#include <ESP32Time.h>
-
-//ESP32Time rtc;
-ESP32Time rtc(3600);  // offset in seconds GMT+1
-
-void setup() {
-  Serial.begin(115200);
-  rtc.setTime(30, 24, 15, 17, 1, 2021);  // 17th Jan 2021 15:24:30
-  //rtc.setTime(1609459200);  // 1st Jan 2021 00:00:00
-  //rtc.offset = 7200; // change offset value
-
-/*---------set with NTP---------------*/
-//  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
-//  struct tm timeinfo;
-//  if (getLocalTime(&timeinfo)){
-//    rtc.setTimeStruct(timeinfo); 
-//  }
-}
-
-void loop() {
-//  Serial.println(rtc.getTime());          //  (String) 15:24:38
-//  Serial.println(rtc.getDate());          //  (String) Sun, Jan 17 2021
-//  Serial.println(rtc.getDate(true));      //  (String) Sunday, January 17 2021
-//  Serial.println(rtc.getDateTime());      //  (String) Sun, Jan 17 2021 15:24:38
-//  Serial.println(rtc.getDateTime(true));  //  (String) Sunday, January 17 2021 15:24:38
-//  Serial.println(rtc.getTimeDate());      //  (String) 15:24:38 Sun, Jan 17 2021
-//  Serial.println(rtc.getTimeDate(true));  //  (String) 15:24:38 Sunday, January 17 2021
-//
-//  Serial.println(rtc.getMicros());        //  (long)    723546
-//  Serial.println(rtc.getMillis());        //  (long)    723
-//  Serial.println(rtc.getEpoch());         //  (long)    1609459200
-//  Serial.println(rtc.getSecond());        //  (int)     38    (0-59)
-//  Serial.println(rtc.getMinute());        //  (int)     24    (0-59)
-//  Serial.println(rtc.getHour());          //  (int)     3     (0-12)
-//  Serial.println(rtc.getHour(true));      //  (int)     15    (0-23)
-//  Serial.println(rtc.getAmPm());          //  (String)  pm
-//  Serial.println(rtc.getAmPm(true));      //  (String)  PM
-//  Serial.println(rtc.getDay());           //  (int)     17    (1-31)
-//  Serial.println(rtc.getDayofWeek());     //  (int)     0     (0-6)
-//  Serial.println(rtc.getDayofYear());     //  (int)     16    (0-365)
-//  Serial.println(rtc.getMonth());         //  (int)     0     (0-11)
-//  Serial.println(rtc.getYear());          //  (int)     2021
-
-//  Serial.println(rtc.getLocalEpoch());         //  (long)    1609459200 epoch without offset
-  Serial.println(rtc.getTime("%A, %B %d %Y %H:%M:%S"));   // (String) returns time with specified format 
-  // formating options  http://www.cplusplus.com/reference/ctime/strftime/
-
-
-  struct tm timeinfo = rtc.getTimeStruct();
-  //Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");   //  (tm struct) Sunday, January 17 2021 07:24:38
-  
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/examples/esp32_time_multiple/esp32_time_multiple.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/examples/esp32_time_multiple/esp32_time_multiple.ino
deleted file mode 100644
index bbab7e8d4dfa15efcb05e5236626aff468150a28..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/examples/esp32_time_multiple/esp32_time_multiple.ino
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-   MIT License
-
-  Copyright (c) 2021 Felix Biego
-
-  Permission is hereby granted, free of charge, to any person obtaining a copy
-  of this software and associated documentation files (the "Software"), to deal
-  in the Software without restriction, including without limitation the rights
-  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-  copies of the Software, and to permit persons to whom the Software is
-  furnished to do so, subject to the following conditions:
-
-  The above copyright notice and this permission notice shall be included in all
-  copies or substantial portions of the Software.
-
-  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-  SOFTWARE.
-*/
-
-#include <ESP32Time.h>
-
-ESP32Time rtc;
-ESP32Time rtc1(-3600);  // offset GMT-1
-ESP32Time rtc2(7200);   // offset GMT+2
-
-void setup() {
-  Serial.begin(115200);
-  rtc.setTime(30, 24, 15, 17, 1, 2021);  // 17th Jan 2021 15:24:30
-  //rtc1.setTime(1609459200);  // 1st Jan 2021 00:00:00
-  // time can be set on one instance
-  // no need for rtc1.setTime() or rtc2.setTime()
-  
-
-}
-
-void loop() {
-//  Serial.println(rtc.getTime());          //  (String) 15:24:38
-//  Serial.println(rtc.getDate());          //  (String) Sun, Jan 17 2021
-//  Serial.println(rtc.getDate(true));      //  (String) Sunday, January 17 2021
-//  Serial.println(rtc.getDateTime());      //  (String) Sun, Jan 17 2021 15:24:38
-//  Serial.println(rtc.getDateTime(true));  //  (String) Sunday, January 17 2021 15:24:38
-//  Serial.println(rtc.getTimeDate());      //  (String) 15:24:38 Sun, Jan 17 2021
-//  Serial.println(rtc.getTimeDate(true));  //  (String) 15:24:38 Sunday, January 17 2021
-//
-//  Serial.println(rtc.getMicros());        //  (long)    723546
-//  Serial.println(rtc.getMillis());        //  (long)    723
-//  Serial.println(rtc.getEpoch());         //  (long)    1609459200
-//  Serial.println(rtc.getSecond());        //  (int)     38    (0-59)
-//  Serial.println(rtc.getMinute());        //  (int)     24    (0-59)
-//  Serial.println(rtc.getHour());          //  (int)     3     (0-12)
-//  Serial.println(rtc.getHour(true));      //  (int)     15    (0-23)
-//  Serial.println(rtc.getAmPm());          //  (String)  pm
-//  Serial.println(rtc.getAmPm(true));      //  (String)  PM
-//  Serial.println(rtc.getDay());           //  (int)     17    (1-31)
-//  Serial.println(rtc.getDayofWeek());     //  (int)     0     (0-6)
-//  Serial.println(rtc.getDayofYear());     //  (int)     16    (0-365)
-//  Serial.println(rtc.getMonth());         //  (int)     0     (0-11)
-//  Serial.println(rtc.getYear());          //  (int)     2021
-
-  Serial.println(rtc.getTime("RTC0: %A, %B %d %Y %H:%M:%S"));   // (String) returns time with specified format 
-  Serial.println(rtc1.getTime("RTC1: %A, %B %d %Y %H:%M:%S"));   // (String) returns time with specified format 
-  Serial.println(rtc2.getTime("RTC2: %A, %B %d %Y %H:%M:%S"));   // (String) returns time with specified format 
-  
-  // formating options  http://www.cplusplus.com/reference/ctime/strftime/
-
-  Serial.println(rtc.getEpoch());         //  (long)    
-  Serial.println(rtc1.getEpoch());         //  (long)   
-  Serial.println(rtc2.getEpoch());         //  (long)    
-
-  Serial.println(rtc.getLocalEpoch());         //  (long) epoch without offset, same for all instances
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/keywords.txt b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/keywords.txt
deleted file mode 100644
index 9914509471e20064a4a2e3cba54b7e64eb39f6bc..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/keywords.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-ESP32Time		KEYWORD1
-
-setTime			KEYWORD2
-getTime			KEYWORD2
-setTimeStruct	KEYWORD2
-getTimeStruct	KEYWORD2
-getDateTime		KEYWORD2
-getTimeDate		KEYWORD2
-getDate			KEYWORD2
-getAmPm			KEYWORD2
-getMillis		KEYWORD2
-getMicros   KEYWORD2
-getEpoch    KEYWORD2
-getLocalEpoch    KEYWORD2
-getSecond		KEYWORD2
-getMinute		KEYWORD2
-getHour			KEYWORD2
-getDay			KEYWORD2
-getDayofWeek	KEYWORD2
-getDayofYear	KEYWORD2
-getMonth		KEYWORD2
-getYear			KEYWORD2
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/library.json b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/library.json
deleted file mode 100644
index 50cdb52605a8f57a750de1ff83ac86ed4a39d883..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/library.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  "name": "ESP32Time",
-  "version": "1.1.0",
-  "keywords": "Arduino, ESP32, Time, Internal RTC",
-  "description": "An Arduino library for setting and retrieving internal RTC time on ESP32 boards",
-  "repository":
-  {
-    "type": "git",
-    "url": "https://github.com/fbiego/ESP32Time"
-  },
-  "authors":
-  [
-    {
-        "name": "fbiego",
-        "email": "fbiego.fb@gmail.com",
-        "maintainer": true
-    }
-  ],
-  "frameworks": "arduino",
-  "platforms": "espressif8266, espressif32"
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/library.properties b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/library.properties
deleted file mode 100644
index 3f4816ac2183d1640c024a2dcb83ca95f55bb570..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time/library.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-name=ESP32Time
-version=1.1.0
-author=fbiego
-maintainer=fbiego
-sentence=Set and retrieve internal RTC time on ESP32 boards.
-paragraph=No need for external RTC module or NTP time synchronization.
-category=Timing
-url=https://github.com/fbiego/ESP32Time
-architectures=*
-includes=ESP32Time.h
-
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/.piopm b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/.piopm
deleted file mode 100644
index 9b85dcedabd1e7fc2f87b13f16ec528b1be28058..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/.piopm
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "INA219_WE", "version": "1.3.1", "spec": {"owner": "wollewald", "id": 7435, "name": "INA219_WE", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/LICENSE b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/LICENSE
deleted file mode 100644
index 3adeb788925bac372c54f94423c424e8c63da16b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2020 Wolfgang (Wolle) Ewald
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/README.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/README.md
deleted file mode 100644
index e41018d5997c320516a12699a91ea823771a92b5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# INA219_WE
-An Arduino library for the INA219 current and power sensor module.
-
-It allows to set various ADC modes, gains and bus voltage ranges. Continuous mode, triggered mode, power down and ADC off mode are supported. Default shunt size is 0.1 ohms, but you can change it. 
-
-You can run the library on an ATtiny, I tested it on the ATtiny85. To do so, you need to also install the TinyWireM library from Adafruit. An example sketch is included. 
-
-I attached a list of public functions and a fritzing scheme for the example sketches.
-
-You find further details here: 
-
-https://wolles-elektronikkiste.de/ina219  (German)
-
-https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous/Continuous.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous/Continuous.ino
deleted file mode 100644
index 5a20f66b6daeac81f26f47bb14105d36526a754c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous/Continuous.ino
+++ /dev/null
@@ -1,114 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module in continuous mode. 
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  Serial.println("INA219 Current Sensor Example Sketch - Continuous");
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous_ATTINY/Continuous_ATTINY.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous_ATTINY/Continuous_ATTINY.ino
deleted file mode 100644
index a74df95aab7f8a51156adcfaa707424707b22e92..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Continuous_ATTINY/Continuous_ATTINY.ino
+++ /dev/null
@@ -1,142 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module with the TinyWireM library:
-* https://github.com/adafruit/TinyWireM
-* This allows you to run the INA219_WE library on an ATtiny85, for example.
-* 
-* For this specific sketch you also need library Tiny4KOLED to display the 
-* measured values on a SSD1306 OLED display:
-* https://github.com/datacute/Tiny4kOLED
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-
-/* !!!! IN ORDER TO USE TinyWireM YOU NEED TO UNCOMMENT #define USE_TINY_WIRE_M_ !!!!
- * !!!! IN ina219_config.h WHICH YOU FIND IN THE INA219_WE/src FOLDER            !!!!                                                       !!!!
- */
-
-#include <TinyWireM.h>
-#include <Tiny4kOLED.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-uint8_t width = 128;
-uint8_t height = 64;
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> define I2C_ADDRESS
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  TinyWireM.begin();
-  oled.begin(width, height, sizeof(tiny4koled_init_128x64br), tiny4koled_init_128x64br);
-  oled.setFont(FONT6X8);
-  oled.clear();
-  oled.on();
-  
-  oled.setCursor(0, 0);
-  if(!ina219.init()){
-     oled.print("INA219 not connected!");
-     while(1){}
-  }
-  else{
-    oled.print("INA219 connected");
-    delay(1000);
-    oled.clear();
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current (if shunt is 0.1 ohms) *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-  
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  //loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  //ina219_overflow = ina219.getOverflow();
-
-  oled.setCursor(0,0);
-  oled.print("Current [mA]: ");
-  oled.print(current_mA);
-  oled.clearToEOL();
-  
-  oled.setCursor(0,2); //10
-  oled.print("Power [mW]:   ");
-  oled.print(power_mW);
-  oled.clearToEOL();
-  
-  oled.setCursor(0,4); 
-  oled.print("Bus [V]:      ");
-  oled.print(busVoltage_V);
-  oled.clearToEOL();
-  
-  oled.setCursor(0,6); 
-  oled.print("Shunt [mV]:   ");
-  oled.print(shuntVoltage_mV);
-  oled.clearToEOL();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/PowerDown/PowerDown.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/PowerDown/PowerDown.ino
deleted file mode 100644
index 460c8d2f2c9aa639892e2ca99525b054efed1faf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/PowerDown/PowerDown.ino
+++ /dev/null
@@ -1,81 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 Power Down mode. 
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  // default parameters are set - for change check the other examples
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-  Serial.println("INA219 Current Sensor Example Sketch - PowerDown");
-  Serial.println("Continuous Sampling starts");
-  Serial.println();
-}
-
-void loop() {
-  for(int i=0; i<5; i++){
-    continuousSampling();
-    delay(3000);
-  }
-  
-  Serial.println("Power down for 10s");
-  ina219.powerDown();
-  for(int i=0; i<10; i++){
-    Serial.print(".");
-    delay(1000);
-  }
-  
-  Serial.println("Power up!");
-  Serial.println("");
-  ina219.powerUp();
-}
-
-void continuousSampling(){
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/SetShuntSize/SetShuntSize.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/SetShuntSize/SetShuntSize.ino
deleted file mode 100644
index d50eb558b156d3ea64fdef35a6eaa445b50cecdc..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/SetShuntSize/SetShuntSize.ino
+++ /dev/null
@@ -1,121 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module with a shunt different than 
-* 0.1 ohms (R100) in continuous mode. 
-* 
-#* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-  }
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  *   * Mode *          * Res / Samples *     * Conversion Time *
-    BIT_MODE_9        9 Bit Resolution             84 µs
-    BIT_MODE_10       10 Bit Resolution            148 µs  
-    BIT_MODE_11       11 Bit Resolution            276 µs
-    BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-    SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-    SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-    SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-    SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-    SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-    SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-    SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  //ina219.setADCMode(SAMPLE_MODE_128); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-    POWER_DOWN  - INA219 switched off
-    TRIGGERED   - measurement on demand
-    ADC_OFF     - Analog/Digital Converter switched off
-    CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  // ina219.setMeasureMode(CONTINUOUS); // choose mode and uncomment for change of default
-  
- /* Set PGain
-  * Gain *  * Shunt Voltage Range *         * Max Current *
-    PG_40          40 mV               0.4 A * 0.1 / shuntSizeInOhms 
-    PG_80          80 mV               0.8 A * 0.1 / shuntSizeInOhms 
-    PG_160        160 mV               1.6 A * 0.1 / shuntSizeInOhms 
-    PG_320        320 mV               3.2 A * 0.1 / shuntSizeInOhms (DEFAULT)
-  */
- //ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-    BRNG_16   -> 16 V
-    BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.5); // insert the shunt voltage (millivolts) you detect at zero current
-
-  /* Set shunt size
-     If you don't use a module with a shunt of 0.1 ohms (R100) you can change set the shunt size 
-     here. 
-  */
-  ina219.setShuntSizeInOhms(0.0333); // Insert your shunt size in ohms
-  
-  Serial.println("INA219 Set Shunt Size"); 
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Triggered/Triggered.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Triggered/Triggered.ino
deleted file mode 100644
index 464c9be717b5c786614e1186f0418f045a3dfec8..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/examples/Triggered/Triggered.ino
+++ /dev/null
@@ -1,117 +0,0 @@
-/***************************************************************************
-* Example sketch for the INA219_WE library
-*
-* This sketch shows how to use the INA219 module in triggered mode. 
-*  
-* Further information can be found on:
-* https://wolles-elektronikkiste.de/ina219 (German)
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* 
-***************************************************************************/
-
-#include <Wire.h>
-#include <INA219_WE.h>
-#define I2C_ADDRESS 0x40
-
-/* There are several ways to create your INA219 object:
- * INA219_WE ina219 = INA219_WE()              -> uses Wire / I2C Address = 0x40
- * INA219_WE ina219 = INA219_WE(ICM20948_ADDR) -> uses Wire / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2)        -> uses the TwoWire object wire2 / I2C_ADDRESS
- * INA219_WE ina219 = INA219_WE(&wire2, I2C_ADDRESS) -> all together
- * Successfully tested with two I2C busses on an ESP32
- */
-INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
-
-void setup() {
-  Serial.begin(9600);
-  Wire.begin();
-  if(!ina219.init()){
-    Serial.println("INA219 not connected!");
-}
-
-  /* Set ADC Mode for Bus and ShuntVoltage
-  * Mode *            * Res / Samples *       * Conversion Time *
-  BIT_MODE_9        9 Bit Resolution             84 µs
-  BIT_MODE_10       10 Bit Resolution            148 µs  
-  BIT_MODE_11       11 Bit Resolution            276 µs
-  BIT_MODE_12       12 Bit Resolution            532 µs  (DEFAULT)
-  SAMPLE_MODE_2     Mean Value 2 samples         1.06 ms
-  SAMPLE_MODE_4     Mean Value 4 samples         2.13 ms
-  SAMPLE_MODE_8     Mean Value 8 samples         4.26 ms
-  SAMPLE_MODE_16    Mean Value 16 samples        8.51 ms     
-  SAMPLE_MODE_32    Mean Value 32 samples        17.02 ms
-  SAMPLE_MODE_64    Mean Value 64 samples        34.05 ms
-  SAMPLE_MODE_128   Mean Value 128 samples       68.10 ms
-  */
-  // ina219.setADCMode(BIT_MODE_12); // choose mode and uncomment for change of default
-  
-  /* Set measure mode
-  POWER_DOWN - INA219 switched off
-  TRIGGERED  - measurement on demand
-  ADC_OFF    - Analog/Digital Converter switched off
-  CONTINUOUS  - Continuous measurements (DEFAULT)
-  */
-  ina219.setMeasureMode(TRIGGERED); // Triggered measurements for this example
-  
-  /* Set PGain
-  * Gain *  * Shunt Voltage Range *   * Max Current *
-   PG_40       40 mV                    0.4 A
-   PG_80       80 mV                    0.8 A
-   PG_160      160 mV                   1.6 A
-   PG_320      320 mV                   3.2 A (DEFAULT)
-  */
-  // ina219.setPGain(PG_320); // choose gain and uncomment for change of default
-  
-  /* Set Bus Voltage Range
-   BRNG_16   -> 16 V
-   BRNG_32   -> 32 V (DEFAULT)
-  */
-  // ina219.setBusRange(BRNG_32); // choose range and uncomment for change of default
-
-  /* If the current values delivered by the INA219 differ by a constant factor
-     from values obtained with calibrated equipment you can define a correction factor.
-     Correction factor = current delivered from calibrated equipment / current delivered by INA219
-  */
-  // ina219.setCorrectionFactor(0.98); // insert your correction factor if necessary
-
-  /* If you experience a shunt voltage offset, that means you detect a shunt voltage which is not 
-     zero, although the current should be zero, you can apply a correction. For this, uncomment the 
-     following function and apply the offset you have detected.   
-  */
-  // ina219.setShuntVoltOffset_mV(0.0); // insert the shunt voltage (millivolts) you detect at zero current
-  
-  Serial.println("INA219 Current Sensor Example Sketch - Triggered Mode");
-
-}
-
-void loop() {
-  float shuntVoltage_mV = 0.0;
-  float loadVoltage_V = 0.0;
-  float busVoltage_V = 0.0;
-  float current_mA = 0.0;
-  float power_mW = 0.0; 
-  bool ina219_overflow = false;
-  
-  ina219.startSingleMeasurement(); // triggers single-shot measurement and waits until completed
-  shuntVoltage_mV = ina219.getShuntVoltage_mV();
-  busVoltage_V = ina219.getBusVoltage_V();
-  current_mA = ina219.getCurrent_mA();
-  power_mW = ina219.getBusPower();
-  loadVoltage_V  = busVoltage_V + (shuntVoltage_mV/1000);
-  ina219_overflow = ina219.getOverflow();
-  
-  Serial.print("Shunt Voltage [mV]: "); Serial.println(shuntVoltage_mV);
-  Serial.print("Bus Voltage [V]: "); Serial.println(busVoltage_V);
-  Serial.print("Load Voltage [V]: "); Serial.println(loadVoltage_V);
-  Serial.print("Current[mA]: "); Serial.println(current_mA);
-  Serial.print("Bus Power [mW]: "); Serial.println(power_mW);
-  if(!ina219_overflow){
-    Serial.println("Values OK - no overflow");
-  }
-  else{
-    Serial.println("Overflow! Choose higher PGAIN");
-  }
-  Serial.println();
-  
-  delay(3000);
-} 
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/keywords.txt b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/keywords.txt
deleted file mode 100644
index 8501907a73a4af87ecdd72744e4e6cf2cc3e6197..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/keywords.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-#######################################
-# Syntax Coloring Map For INA219_WE
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-INA219_WE	KEYWORD1
-
-# ENUM TYPES
-INA219_ADC_MODE	KEYWORD1
-INA219_MEASURE_MODE	KEYWORD1
-INA219_PGAIN	KEYWORD1
-INA219_BUS_RANGE	KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-reset_INA219	KEYWORD2
-init	KEYWORD2
-setCorrectionFactor	KEYWORD2
-setADCMode	KEYWORD2
-setMeasureMode	KEYWORD2
-setPGain	KEYWORD2
-setBusRange	KEYWORD2
-setShuntSizeInOhms	KEYWORD2
-setShuntVoltOffset_mV	KEYWORD2
-getShuntVoltage_mV	KEYWORD2
-getBusVoltage	KEYWORD2
-getCurrent_mA	KEYWORD2
-getBusPower	KEYWORD2
-getOverflow	KEYWORD2
-startSingleMeasurement	KEYWORD2
-powerDown	KEYWORD2
-powerUp	KEYWORD2
-
-
-#######################################
-# Constants (LITERAL1)
-#######################################
-
-# ENUM VALUES
-BIT_MODE_9	LITERAL1
-BIT_MODE_10	LITERAL1
-BIT_MODE_11	LITERAL1
-BIT_MODE_12	LITERAL1
-SAMPLE_MODE_2	LITERAL1
-SAMPLE_MODE_4	LITERAL1
-SAMPLE_MODE_8	LITERAL1
-SAMPLE_MODE_16	LITERAL1
-SAMPLE_MODE_32	LITERAL1
-SAMPLE_MODE_64	LITERAL1
-SAMPLE_MODE_128	LITERAL1
-POWER_DOWN	LITERAL1
-TRIGGERED	LITERAL1
-ADC_OFF	LITERAL1
-CONTINUOUS	LITERAL1
-CONTINOUS	LITERAL1
-PG_40	LITERAL1
-PG_80	LITERAL1
-PG_160	LITERAL1
-PG_320	LITERAL1
-BRNG_16	LITERAL1
-BRNG_32	LITERAL1
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/library.properties b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/library.properties
deleted file mode 100644
index 2a85da11030afc4fb23a58dc2d0b6f1ee2c34dbb..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/library.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-name=INA219_WE
-version=1.3.1
-author=Wolfgang Ewald <wolfgang.ewald@wolles-elektronikkiste.de>
-maintainer=Wolfgang Ewald <wolfgang.ewald@wolles-elektronikkiste.de>
-sentence=A library for the INA219 current sensor module 
-paragraph=It allows to set various ADC modes, gains and bus voltage ranges. Continous mode, triggered mode, power down and ADC off mode are supported. 
-category=Sensors
-url=https://github.com/wollewald/INA219_WE
-architectures=*
-includes=INA219_WE.h
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.cpp b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.cpp
deleted file mode 100644
index c0f41c0338ef7f15c2a73e4c649a6e6e90ed267e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/*****************************************
-* This is a library for the INA219 Current Sensor Module
-*
-* You'll find an example which should enable you to use the library. 
-*
-* You are free to use it, change it or build on it. In case you like 
-* it, it would be cool if you give it a star.
-* 
-* If you find bugs, please inform me!
-* 
-* Written by Wolfgang (Wolle) Ewald
-* https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
-* https://wolles-elektronikkiste.de/ina219 (German)
-*
-*******************************************/
-
-#include "INA219_WE.h"
-
-INA219_WE::INA219_WE(int addr){
-#ifndef USE_TINY_WIRE_M_
-    _wire = &Wire;
-#endif
-    i2cAddress = addr;   
-}
-
-INA219_WE::INA219_WE(){
-#ifndef USE_TINY_WIRE_M_
-    _wire = &Wire;
-#endif
-    i2cAddress = 0x40;   
-}
-
-#ifndef USE_TINY_WIRE_M_
-INA219_WE::INA219_WE(TwoWire *w, int addr){
-    _wire = w;
-    i2cAddress = addr; 
-}
-
-INA219_WE::INA219_WE(TwoWire *w){
-    _wire = w;
-    i2cAddress = 0x40;
-}
-#endif
-    
-bool INA219_WE::init(){ 
-    if( !reset_INA219() )
-    {
-        return false;
-    }
-    setADCMode(BIT_MODE_12);
-    setMeasureMode(CONTINUOUS);
-    setPGain(PG_320);
-    setBusRange(BRNG_32);
-    shuntFactor = 1.0;
-    overflow = false;
-    shuntVoltageOffset = 0.0;
-    offsetIsSet = false;
-    
-    return true;
-}
-
-bool INA219_WE::reset_INA219(){
-    byte ack = writeRegister(INA219_CONF_REG, INA219_RST); 
-    return ack == 0;
-}
-
-void INA219_WE::setCorrectionFactor(float corr){
-    calValCorrected = calVal * corr;
-    writeRegister(INA219_CAL_REG, calValCorrected);
-}
-
-void INA219_WE::setShuntVoltOffset_mV(float offs){
-    shuntVoltageOffset = offs;
-    offsetIsSet = true; 
-}
-
-void INA219_WE::setADCMode(INA219_ADC_MODE mode){
-    deviceADCMode = mode;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x0780);  
-    currentConfReg &= ~(0x0078);
-    uint16_t adcMask = mode<<3;
-    currentConfReg |= adcMask;
-    adcMask = mode<<7;
-    currentConfReg |= adcMask;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-}
-
-void INA219_WE::setMeasureMode(INA219_MEASURE_MODE mode){
-    deviceMeasureMode = mode;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x0007);
-    currentConfReg |= deviceMeasureMode;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-}
-
-void INA219_WE::setPGain(INA219_PGAIN gain){
-    devicePGain = gain;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x1800);
-    currentConfReg |= devicePGain;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-    
-    switch(devicePGain){
-        case PG_40:
-            calVal = 20480;
-            currentDivider_mA = 50.0;
-            pwrMultiplier_mW = 0.4;
-            shuntOverflowLimit = 4000;
-            break;
-        case PG_80:
-            calVal = 10240;
-            currentDivider_mA = 25.0;
-            pwrMultiplier_mW = 0.8;
-            shuntOverflowLimit = 8000;
-            break;
-        case PG_160:
-            calVal = 8192;
-            currentDivider_mA = 20.0;
-            pwrMultiplier_mW = 1.0;
-            shuntOverflowLimit = 16000;
-            break;
-        case PG_320:
-            calVal = 4096;
-            currentDivider_mA = 10.0;
-            pwrMultiplier_mW = 2.0;
-            shuntOverflowLimit = 32000;
-            break;
-    }
-    
-    writeRegister(INA219_CAL_REG, calVal);
-            
-}
-
-void INA219_WE::setBusRange(INA219_BUS_RANGE range){
-    deviceBusRange = range;
-    uint16_t currentConfReg = readRegister(INA219_CONF_REG);
-    currentConfReg &= ~(0x2000);
-    currentConfReg |= deviceBusRange;
-    writeRegister(INA219_CONF_REG, currentConfReg);
-}
-
-void INA219_WE::setShuntSizeInOhms(float shuntSize){
-    shuntFactor = shuntSize / 0.1;
-}
-
-float INA219_WE::getShuntVoltage_mV(){
-    int16_t val;
-    val = (int16_t) readRegister(INA219_SHUNT_REG);
-    if((abs(val))== shuntOverflowLimit){
-        overflow = true;
-    }
-    else{
-        overflow = false;
-    }
-    return (val * 0.01);
-}
-
-
-float INA219_WE::getBusVoltage_V(){
-    uint16_t val;
-    val = readRegister(INA219_BUS_REG);
-    val = ((val>>3) * 4);
-    return (val * 0.001);
-}
-
-
-float INA219_WE::getCurrent_mA(){
-    int16_t val;
-    int16_t offsetCurrent = 0;
-    val = (int16_t)readRegister(INA219_CURRENT_REG);
-    if(offsetIsSet){
-        offsetCurrent = (int16_t)(shuntVoltageOffset * 100.0 * calVal / 4096.0);
-    }
-    return ((val - offsetCurrent) / (currentDivider_mA * shuntFactor));
-}
-
-float INA219_WE::getBusPower(){
-    uint16_t val;
-    float busPwr = 0.0;
-    if(offsetIsSet){
-        float current = getCurrent_mA();
-        float busVolt = getBusVoltage_V();
-        busPwr = current * busVolt;   
-    }
-    else{
-        val = readRegister(INA219_PWR_REG);
-        busPwr = val * pwrMultiplier_mW / shuntFactor;
-    }
-    return busPwr;
-}
-
-bool INA219_WE::getOverflow(){
-    uint16_t val;
-    val = readRegister(INA219_BUS_REG);
-    if(val & 1){ 
-        overflow = true;
-    }
-    return overflow;
-}
-
-void INA219_WE::startSingleMeasurement(){
-    uint16_t val = readRegister(INA219_BUS_REG); // clears CNVR (Conversion Ready) Flag
-    val = readRegister(INA219_CONF_REG);
-    writeRegister(INA219_CONF_REG, val);
-    uint16_t convReady = 0x0000;
-    while(!convReady){
-        convReady = ((readRegister(INA219_BUS_REG)) & 0x0002); // checks if sampling is completed
-    }
-}
-
-
-bool INA219_WE::startSingleMeasurement(unsigned long timeout_us){
-    uint16_t val = readRegister(INA219_BUS_REG); // clears CNVR (Conversion Ready) Flag
-    val = readRegister(INA219_CONF_REG);
-    writeRegister(INA219_CONF_REG, val);
-    uint16_t convReady = 0x0000;
-    unsigned long convStart = micros();
-    while(!convReady && (micros() - convStart < timeout_us)){
-        convReady = ((readRegister(INA219_BUS_REG)) & 0x0002); // checks if sampling is completed
-    }
-    if(convReady) {
-        return true;
-    } else {
-        return false;
-    }
-}
-
-void INA219_WE::powerDown(){
-    confRegCopy = readRegister(INA219_CONF_REG);
-    setMeasureMode(POWER_DOWN);
-}
-
-void INA219_WE::powerUp(){
-    writeRegister(INA219_CONF_REG, confRegCopy);
-    delayMicroseconds(40);  
-}   
-
-#ifndef USE_TINY_WIRE_M_
-uint8_t INA219_WE::writeRegister(uint8_t reg, uint16_t val){
-  _wire->beginTransmission(i2cAddress);
-  uint8_t lVal = val & 255;
-  uint8_t hVal = val >> 8;
-  _wire->write(reg);
-  _wire->write(hVal);
-  _wire->write(lVal);
-  return _wire->endTransmission();
-}
-  
-uint16_t INA219_WE::readRegister(uint8_t reg){
-  uint8_t MSByte = 0, LSByte = 0;
-  uint16_t regValue = 0;
-  _wire->beginTransmission(i2cAddress);
-  _wire->write(reg);
-  _wire->endTransmission(false);
-  _wire->requestFrom(i2cAddress,2);
-  if(_wire->available()){
-    MSByte = _wire->read();
-    LSByte = _wire->read();
-  }
-  regValue = (MSByte<<8) + LSByte;
-  return regValue;
-}
-#else
-uint8_t INA219_WE::writeRegister(uint8_t reg, uint16_t val){
-  TinyWireM.beginTransmission(i2cAddress);
-  uint8_t lVal = val & 255;
-  uint8_t hVal = val >> 8;
-  TinyWireM.send(reg);
-  TinyWireM.send(hVal);
-  TinyWireM.send(lVal);
-  return TinyWireM.endTransmission();
-}
-  
-uint16_t INA219_WE::readRegister(uint8_t reg){
-  uint8_t MSByte = 0, LSByte = 0;
-  uint16_t regValue = 0;
-  TinyWireM.beginTransmission(i2cAddress);
-  TinyWireM.send(reg);
-  TinyWireM.endTransmission();
-  TinyWireM.requestFrom(i2cAddress,2);
-  MSByte = TinyWireM.receive();
-  LSByte = TinyWireM.receive();
-  regValue = (MSByte<<8) + LSByte;
-  return regValue;
-}
-#endif
-
-
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.h b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.h
deleted file mode 100644
index b4f500a1e3516d71730a140dd376d29a5c044a4a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/INA219_WE.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/******************************************************************************
- *
- * This is a library for the INA219 Current Sensor Module
- *
- * You'll find several example sketches which should enable you to use the library. 
- *
- * You are free to use it, change it or build on it. In case you like it, it would
- * be cool if you give it a star.
- *
- * If you find bugs, please inform me!
- * 
- * Written by Wolfgang (Wolle) Ewald
- * https://wolles-elektronikkiste.de/en/ina219-current-and-power-sensor (English)
- * https://wolles-elektronikkiste.de/ina219 (German)
- *
- * 
- ******************************************************************************/
-
-#ifndef INA219_WE_H_
-#define INA219_WE_H_
-
-#if (ARDUINO >= 100)
- #include "Arduino.h"
-#else
- #include "WProgram.h"
-#endif
-#include "ina219_config.h"
-
-#ifdef USE_TINY_WIRE_M_
- #include <TinyWireM.h>
-#endif
-#ifndef USE_TINY_WIRE_M_
- #include <Wire.h>
-#endif
-
-/* registers */
-#define INA219_ADDRESS      0x40
-#define INA219_CONF_REG     0x00 //Configuration Register
-#define INA219_SHUNT_REG    0x01 //Shunt Voltage Register
-#define INA219_BUS_REG      0x02 //Bus Voltage Register
-#define INA219_PWR_REG      0x03 //Power Register 
-#define INA219_CURRENT_REG  0x04 //Current flowing through Shunt
-#define INA219_CAL_REG      0x05 //Calibration Register 
-
-/* parameters */
-#define INA219_RST             0x8000
-
-typedef enum INA219_ADC_MODE{
-    BIT_MODE_9      = 0b00000000,   
-    BIT_MODE_10     = 0b00000001,
-    BIT_MODE_11     = 0b00000010,
-    BIT_MODE_12     = 0b00000011,
-    SAMPLE_MODE_2   = 0b00001001,
-    SAMPLE_MODE_4   = 0b00001010,
-    SAMPLE_MODE_8   = 0b00001011,
-    SAMPLE_MODE_16  = 0b00001100,
-    SAMPLE_MODE_32  = 0b00001101,
-    SAMPLE_MODE_64  = 0b00001110,
-    SAMPLE_MODE_128 = 0b00001111
-} ina219AdcMode;
-
-typedef enum INA219_MEASURE_MODE{
-    POWER_DOWN      = 0b00000000,
-    TRIGGERED       = 0b00000011,
-    ADC_OFF         = 0b00000100,
-    CONTINUOUS      = 0b00000111,
-    CONTINOUS       = 0b00000111  // keeping misspelled enum for backwards compatibility.
-} ina219MeasureMode;
-
-typedef enum INA219_PGAIN{
-    PG_40       = 0x0000,
-    PG_80       = 0x0800,
-    PG_160      = 0x1000,
-    PG_320      = 0x1800
-} ina219PGain;
-
-typedef enum INA219_BUS_RANGE{
-    BRNG_16         = 0x0000,
-    BRNG_32         = 0x2000,
-} ina219BusRange;
-
-
-class INA219_WE
-{
-public: 
-    // Constructors: if not passed 0x40 / Wire will be set as address / wire object
-    INA219_WE(int addr);
-    INA219_WE();
-#ifndef USE_TINY_WIRE_M_   
-    INA219_WE(TwoWire *w, int addr);
-    INA219_WE(TwoWire *w);
-#endif
-  
-    bool init();
-    bool reset_INA219();
-    void setCorrectionFactor(float corr);
-    void setShuntVoltOffset_mV(float offs);
-    void setADCMode(INA219_ADC_MODE mode);
-    void setMeasureMode(INA219_MEASURE_MODE mode);
-    void setPGain(INA219_PGAIN gain);
-    void setBusRange(INA219_BUS_RANGE range);
-    void setShuntSizeInOhms(float shuntSize);
-    float getShuntVoltage_mV();
-    float getBusVoltage_V();
-    float getCurrent_mA();
-    float getBusPower();
-    bool getOverflow();
-    void startSingleMeasurement();
-    bool startSingleMeasurement(unsigned long timeout_us);
-    void powerDown();
-    void powerUp(); 
-    uint8_t writeRegister(uint8_t reg, uint16_t val);
-    uint16_t readRegister(uint8_t reg);
-    
-private:
-    INA219_ADC_MODE deviceADCMode;
-    INA219_MEASURE_MODE deviceMeasureMode;
-    INA219_PGAIN devicePGain;
-    INA219_BUS_RANGE deviceBusRange;
-#ifndef USE_TINY_WIRE_M_    
-    TwoWire *_wire;
-#endif
-    int i2cAddress;
-    uint16_t calVal;
-    uint16_t calValCorrected;
-    uint16_t confRegCopy;
-    float shuntVoltageOffset;
-    float shuntFactor; 
-    float currentDivider_mA;
-    float pwrMultiplier_mW;
-    bool overflow;
-    bool offsetIsSet;
-    uint16_t shuntOverflowLimit;
-};
-
-#endif
-
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/ina219_config.h b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/ina219_config.h
deleted file mode 100644
index edd60ffd7e38b58873fd598ad0839b3efee3d9ef..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src/ina219_config.h
+++ /dev/null
@@ -1,5 +0,0 @@
-#ifndef INA219_CONFIG_H_
-#define INA219_CONFIG_H_
-/* Uncomment the following line to use TinyWireM instead of Wire */
-//#define USE_TINY_WIRE_M_
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.clang-format b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.clang-format
deleted file mode 100644
index 4984ef2f2726e0597a40f3a14eb37a1eca8d61e9..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.clang-format
+++ /dev/null
@@ -1,109 +0,0 @@
----
-Language: Cpp
-# BasedOnStyle:  Google
-AccessModifierOffset: -1
-AlignAfterOpenBracket: Align
-AlignConsecutiveMacros: false
-AlignConsecutiveAssignments: true
-AlignConsecutiveDeclarations: true
-AlignEscapedNewlines: Left
-AlignOperands: false
-AlignTrailingComments: true
-AllowAllArgumentsOnNextLine: true
-AllowAllConstructorInitializersOnNextLine: true
-AllowAllParametersOfDeclarationOnNextLine: true
-AllowShortBlocksOnASingleLine: true
-AllowShortCaseLabelsOnASingleLine: true
-AllowShortFunctionsOnASingleLine: Empty
-AllowShortLambdasOnASingleLine: All
-AllowShortIfStatementsOnASingleLine: WithoutElse
-AllowShortLoopsOnASingleLine: true
-AlwaysBreakAfterDefinitionReturnType: None
-AlwaysBreakAfterReturnType: None
-AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: Yes
-BinPackArguments: true
-BinPackParameters: true
-BreakBeforeBinaryOperators: None
-BreakBeforeBraces: Attach
-BreakBeforeInheritanceComma: false
-BreakInheritanceList: BeforeColon
-BreakBeforeTernaryOperators: true
-BreakConstructorInitializersBeforeComma: false
-BreakConstructorInitializers: BeforeColon
-BreakAfterJavaFieldAnnotations: false
-BreakStringLiterals: true
-ColumnLimit: 88
-CommentPragmas: "^ IWYU pragma:"
-CompactNamespaces: false
-ConstructorInitializerAllOnOneLineOrOnePerLine: false
-ConstructorInitializerIndentWidth: 2
-ContinuationIndentWidth: 2
-Cpp11BracedListStyle: true
-DerivePointerAlignment: false
-DisableFormat: false
-ExperimentalAutoDetectBinPacking: false
-FixNamespaceComments: true
-ForEachMacros:
-  - foreach
-  - Q_FOREACH
-  - BOOST_FOREACH
-IncludeBlocks: Preserve
-IncludeCategories:
-  - Regex: "TinyGsmClient.h"
-    Priority: -1
-  - Regex: "VariableBase.h"
-    Priority: -1
-  - Regex: '^"(llvm|llvm-c|clang|clang-c)/'
-    Priority: 2
-  - Regex: '^(<|"(gtest|gmock|isl|json)/)'
-    Priority: 3
-  - Regex: ".*"
-    Priority: 1
-IncludeIsMainRegex: "([-_](test|unittest))?$"
-IndentCaseLabels: true
-IndentPPDirectives: None
-IndentWidth: 2
-IndentWrappedFunctionNames: false
-JavaScriptQuotes: Leave
-JavaScriptWrapImports: true
-KeepEmptyLinesAtTheStartOfBlocks: false
-MacroBlockBegin: ""
-MacroBlockEnd: ""
-MaxEmptyLinesToKeep: 2
-NamespaceIndentation: None
-# ObjCBinPackProtocolList: Auto
-ObjCBlockIndentWidth: 2
-ObjCSpaceAfterProperty: false
-ObjCSpaceBeforeProtocolList: true
-PenaltyBreakAssignment: 25
-PenaltyBreakBeforeFirstCallParameter: 19
-PenaltyBreakComment: 300
-PenaltyBreakFirstLessLess: 120
-PenaltyBreakString: 1000
-PenaltyBreakTemplateDeclaration: 10
-PenaltyExcessCharacter: 600
-PenaltyReturnTypeOnItsOwnLine: 50
-PointerAlignment: Left
-PointerBindsToType: true
-ReflowComments: true
-SortIncludes: false
-SortUsingDeclarations: true
-SpaceAfterCStyleCast: false
-SpaceAfterLogicalNot: false
-SpaceAfterTemplateKeyword: true
-SpaceBeforeAssignmentOperators: true
-SpaceBeforeCpp11BracedList: false
-SpaceBeforeCtorInitializerColon: true
-SpaceBeforeInheritanceColon: true
-SpaceBeforeParens: ControlStatements
-SpaceBeforeRangeBasedForLoopColon: true
-SpaceInEmptyParentheses: false
-SpacesBeforeTrailingComments: 2
-SpacesInCStyleCastParentheses: false
-SpacesInParentheses: false
-SpacesInSquareBrackets: false
-Standard: Cpp11
-TabWidth: 2
-UseTab: Never
----
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/FUNDING.yml b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/FUNDING.yml
deleted file mode 100644
index 104526e6210848ed2d896918e2e8a472dfcf09e4..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/FUNDING.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-# These are supported funding model platforms
-custom: ['https://stroudcenter.org/donate/']
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_documentation.yaml b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_documentation.yaml
deleted file mode 100644
index 8d7dda9b18d2811c81caee2753d6fae9c2ebb965..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_documentation.yaml
+++ /dev/null
@@ -1,109 +0,0 @@
-name: Build and Publish Documentation
-
-on:
-  # Trigger the workflow on push or pull request,
-  # but only for the main branch
-  push:
-    branches:
-      - master
-  # Also trigger on page_build, as well as release created events
-  page_build:
-  release:
-    types: # This configuration does not affect the page_build event above
-      - created
-
-env:
-  DOXYGEN_VERSION: Release_1_9_1
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    if: "!contains(github.event.head_commit.message, 'ci skip')"
-
-    steps:
-      # check out the Arduino-SDI-12 repo
-      - uses: actions/checkout@v2
-        with:
-          path: code_docs/Arduino-SDI-12
-
-      - name: Restore or Cache pip
-        uses: actions/cache@v2.1.4
-        id: cache_pip
-        with:
-          path: ~/.cache/pip
-          # if requirements.txt hasn't changed, then it will be a "cache hit" and pip will be restored
-          # if requirements.txt HAS changed, it will be a "cache miss" and a new cache of pip will be created if the job completes successfully
-          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
-          restore-keys: ${{ runner.os }}-pip-
-
-      - name: Restore or Cache PlatformIO and Libraries
-        uses: actions/cache@v2.1.4
-        id: cache_pio
-        with:
-          path: ~/.platformio
-          # if nothing in the lock files has changed, then it will be a "cache hit"
-          key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
-
-      - name: Set up Python
-        uses: actions/setup-python@v2
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install PlatformIO
-        run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade platformio
-
-      # Install *all* the dependencies!
-      # We're including the dependencies just so the includes can follow in the doxygen pre-processor
-      - name: Install the dependencies at global level
-        run: |
-          echo "::debug::Installing greygnome/EnableInterrupt"
-          pio lib -g install greygnome/EnableInterrupt
-
-      - name: Update Libraries from Cache
-        run: pio lib -g update
-
-      - name: Install GraphViz (dot)
-        run: sudo apt-get -y install graphviz
-
-      - name: Restore or Cache Doxygen
-        id: cache_doxygen
-        uses: actions/cache@v2.1.4
-        with:
-          path: doxygen-src
-          key: ${{ runner.os }}-doxygen-${{ env.DOXYGEN_VERSION }}
-
-      - name: Clone and build doxygen
-        if: steps.cache_doxygen.outputs.cache-hit != 'true'
-        env:
-          TRAVIS_BUILD_DIR: ${{ github.workspace }}
-        run: |
-          cd ${{ github.workspace }}/code_docs/Arduino-SDI-12/
-          chmod +x continuous_integration/build-install-doxygen.sh
-          sh continuous_integration/build-install-doxygen.sh
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install Pygments and other m.css requirements
-        run: pip3 install jinja2 Pygments beautifulsoup4
-
-      # check out my fork of m.css, for processing Doxygen output
-      - name: Checkout m.css
-        uses: actions/checkout@v2
-        with:
-          # Repository name with owner. For example, actions/checkout
-          repository: SRGDamia1/m.css
-          path: code_docs/m.css
-
-      - name: Generate all the documentation
-        env:
-          TRAVIS_BUILD_DIR: ${{ github.workspace }}
-        run: |
-          cd ${{ github.workspace }}/code_docs/Arduino-SDI-12/
-          chmod +x continuous_integration/generate-documentation.sh
-          sh continuous_integration/generate-documentation.sh
-
-      - name: Deploy to github pages
-        uses: peaceiris/actions-gh-pages@v3
-        with:
-          github_token: ${{ secrets.GITHUB_TOKEN }}
-          publish_dir: ${{ github.workspace }}/code_docs/Arduino-SDI-12Doxygen/m.css
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_examples.yaml b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_examples.yaml
deleted file mode 100644
index 870f6a2c0d13af5f3318cd69159105b38a72610f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/build_examples.yaml
+++ /dev/null
@@ -1,88 +0,0 @@
-name: Build Examples
-
-# Triggers the workflow on push or pull request events
-on: [push, pull_request]
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    if: "!contains(github.event.head_commit.message, 'ci skip')"
-
-    strategy:
-      matrix:
-        example:
-          [
-            examples/a_wild_card/,
-            examples/b_address_change/,
-            examples/c_check_all_addresses/,
-            examples/d_simple_logger/,
-            examples/e_continuous_measurement/,
-            examples/f_basic_data_request/,
-            examples/g_terminal_window/,
-            examples/h_SDI-12_slave_implementation/,
-            examples/i_SDI-12_interface/,
-            examples/j_external_pcint_library/,
-            examples/k_concurrent_logger/,
-          ]
-
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Set variables
-        run: |
-          if [[ -z "${GITHUB_HEAD_REF}" ]]; then
-            echo "::debug::Push to commit ${GITHUB_SHA}"
-            echo "LIBRARY_INSTALL_SOURCE=https://github.com/${GITHUB_REPOSITORY}.git#${GITHUB_SHA}" >> $GITHUB_ENV
-          else
-            echo "::debug::Pull Request from the ${GITHUB_HEAD_REF} branch"
-            echo "LIBRARY_INSTALL_SOURCE=https://github.com/${GITHUB_REPOSITORY}.git#${GITHUB_HEAD_REF}" >> $GITHUB_ENV
-          fi
-
-      - name: Restore or Cache pip
-        uses: actions/cache@v2.1.4
-        with:
-          path: ~/.cache/pip
-          # if requirements.txt hasn't changed, then it will be a "cache hit" and pip will be restored
-          # if requirements.txt HAS changed, it will be a "cache miss" and a new cache of pip will be created if the job completes successfully
-          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
-          restore-keys: ${{ runner.os }}-pip-
-
-      - name: Restore or Cache PlatformIO and Libraries
-        uses: actions/cache@v2.1.4
-        with:
-          path: ~/.platformio
-          # if nothing in the lock files has changed, then it will be a "cache hit" and pip will be restored
-          # otherwise, it will be a "cache miss" and a new cache of libraries will be created if the job completes successfully
-          key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
-
-      - name: Set up Python
-        uses: actions/setup-python@v2
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install PlatformIO
-        run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade platformio
-
-      - name: Run PlatformIO
-        if:  matrix.example != 'examples/j_external_pcint_library/'
-        env:
-          PLATFORMIO_CI_SRC: ${{ matrix.example }}
-        run: |
-          echo "${{ env.LIBRARY_INSTALL_SOURCE }}"
-          pio lib --global install ${{ env.LIBRARY_INSTALL_SOURCE }}
-          pio lib --global install EnableInterrupt
-          platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560 --board=huzzah --board=featheresp32
-          pio lib --global uninstall SDI-12
-
-      - name: Run PlatformIO
-        if: matrix.example == 'examples/j_external_pcint_library/'
-        env:
-          PLATFORMIO_CI_SRC: ${{ matrix.example }}
-          PLATFORMIO_BUILD_FLAGS: -DSDI12_EXTERNAL_PCINT
-        run: |
-          echo "${{ env.LIBRARY_INSTALL_SOURCE }}"
-          pio lib --global install ${{ env.LIBRARY_INSTALL_SOURCE }}
-          pio lib --global install EnableInterrupt
-          platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560
-          pio lib --global uninstall SDI-12
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/changelog_reminder.yaml b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/changelog_reminder.yaml
deleted file mode 100644
index 172868bd8cd4b5e5a7d6c7b4f19e6559ab18955e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/changelog_reminder.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-on: pull_request
-name: Changelog Reminder
-jobs:
-  remind:
-    name: Changelog Reminder
-    runs-on: ubuntu-latest
-    steps:
-      - uses: actions/checkout@master
-        with:
-          persist-credentials: false # otherwise, the token used is the GITHUB_TOKEN, instead of your personal token
-
-      - name: Changelog Reminder
-        uses: peterjgrainger/action-changelog-reminder@v1.3.0
-        with:
-          changelog_regex: '/ChangeLog\/.*\/*.md'
-          customPrMessage: 'Please add your changes to the change log!'
-        env:
-          GITHUB_TOKEN: ${{ secrets.SARA_PUSH_TOKEN }}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/prepare_release.yaml b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/prepare_release.yaml
deleted file mode 100644
index d000dab0a2694a4a9e549efbd422a0bb7ae26b8a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/prepare_release.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-on:
-  push:
-    branches:
-      - master
-    # Sequence of patterns matched against refs/tags
-    paths:
-      - 'VERSION' # Push events when the VERSION file changes
-  workflow_dispatch:
-
-name: Prepare a new release
-
-env:
-  PLATFORMIO_AUTH_TOKEN: ${{ secrets.PLATFORMIO_AUTH_TOKEN }}
-
-jobs:
-  release:
-    name: Prepare a new release
-    runs-on: ubuntu-latest
-
-    steps:
-      - name: Checkout code
-        uses: actions/checkout@v2
-
-      - name: Set variables
-        run: |
-          echo "::debug::Get the current version number"
-          VER=$(cat VERSION)
-          echo "VERSION=$VER" >> $GITHUB_ENV
-
-      - name: Restore or Cache pip
-        uses: actions/cache@v2.1.4
-        with:
-          path: ~/.cache/pip
-          # if requirements.txt hasn't changed, then it will be a "cache hit" and pip will be restored
-          # if requirements.txt HAS changed, it will be a "cache miss" and a new cache of pip will be created if the job completes successfully
-          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
-          restore-keys: ${{ runner.os }}-pip-
-
-      - name: Set up Python
-        uses: actions/setup-python@v2
-
-      # This should be pulled from cache, if there's not a new version
-      - name: Install PlatformIO
-        run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade platformio
-
-      - name: Get notes
-        id: generate_notes
-        uses: anmarkoulis/commitizen-changelog-reader@master
-        with:
-          # NOTE:  Need to add the refs/tags to work with the generate notes action
-          tag_name: ${{ format('refs/tags/{0}', env.VERSION) }}
-          changelog: ChangeLog.md
-
-      # Create a new release
-      - name: Create Release
-        id: create_release
-        uses: actions/create-release@v1
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-        with:
-          tag_name: ${{ env.VERSION }}
-          release_name: ${{ env.VERSION }}
-          draft: false
-          prerelease: false
-          body: ${{join(fromJson(steps.generate_notes.outputs.notes).notes, '')}}
-
-      # Publish the new release to the pio package manager
-      - name: Publish release to PIO
-        id: publish-pio
-        run: pio package publish
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/verify_library_json.yaml b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/verify_library_json.yaml
deleted file mode 100644
index 31fd049702b41d7ca309e137ca3dacecd0fd8131..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.github/workflows/verify_library_json.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-name: Verify JSON structure for library manifest
-
-# Triggers the workflow on push or pull request events
-on: [push, pull_request]
-
-jobs:
-  build:
-    runs-on: ubuntu-latest
-    if: "!contains(github.event.head_commit.message, 'ci skip')"
-
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Setup Node.js
-        uses: actions/setup-node@v1.4.4
-
-      - name: Cache Node.js modules
-        uses: actions/cache@v2.1.4
-        with:
-          # npm cache files are stored in `~/.npm` on Linux/macOS
-          path: ~/.npm
-          key: ${{ runner.OS }}-node-${{ hashFiles('**/package-lock.json') }}
-          restore-keys: |
-            ${{ runner.OS }}-node-
-            ${{ runner.OS }}-
-
-      - name: install jsonlint
-        run: npm install -g jsonlint
-
-      - name: run jsonlint
-        run: jsonlint -q library.json
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.piopm b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.piopm
deleted file mode 100644
index b194a45cd2d4aa3fd4b69146e3ecbff402ccb562..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/.piopm
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "SDI-12", "version": "2.1.4", "spec": {"owner": "envirodiy", "id": 1486, "name": "SDI-12", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/ChangeLog.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/ChangeLog.md
deleted file mode 100644
index 272937451a2e18989e757b44b19dd977ffb4ddff..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/ChangeLog.md
+++ /dev/null
@@ -1,82 +0,0 @@
-# Changelog
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-
-****
-
-## v2.1.4 (2021-05-05) [Revert wake delay to 0ms](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.4)
-
-### Possibly breaking changes
-- Reverted the default wake delay to 0ms.
-  - In 92055d377b26fa862c43d1429de1ccbef054af01 this was bumped up to 10ms, which caused problems for several people.
-  - The delay can now also be set using the build flag `-D SDI12_WAKE_DELAY=#`
-
-## v2.1.3 (2021-03-24) [Migrate to GitHub Actions](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.3)
-
-### Improvements
-- Migrate from Travis to GitHub actions
-
-## v2.1.1 (2020-08-20) [Patches for ATTiny](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.1)
-
-### Bug Fixes
-- fixes for the timer and pre-scaler for the ATTiny, courtesy of @gabbas1
-
-## v2.1.0 (2020-07-10) [Library Rename and ESP support](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v2.1.0)
-
-[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3939731.svg)](https://doi.org/10.5281/zenodo.3939731)
-
-**To comply with requirements for inclusion in the Arduino IDE, the word Arduino has been removed from the name of this library!**  The repository name is unchanged.
-
-### New Features
-- Adds support for Espressif ESP8266 and ESP32
-- Add option of adding a delay before sending a command to allow the sensor to wake.  Take advantage of this by calling the function ```sendCommand(command, extraWakeTime)```. This may resolve issues with some Campbell sensors that would not previous communicate with this library.  See https://www.envirodiy.org/topic/campbell-scientific-cs-215-sdi-12-communication-issues-w-mayfly/#post-14103
-- Adds Doxygen (Javadoc) style comments to **ALL** members of the library.  The generated documentation is available at https://envirodiy.github.io/Arduino-SDI-12/.
-
-## v1.3.6 (2019-08-29) [Fixed extra compiler warnings](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.6)
-
-### Bug Fixes
-- A very minor update to fix compiler warnings found when using -Wextra in addition to -Wall.
-
-## v1.3.5 (2019-07-01) [Removed SAMD Tone Conflict](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.5)
-
-### Improvements
-- SAMD boards will no longer have a conflict with the Tone functions in the Arduino core. AVR boards will still conflict. If you need to use Tone and SDI-12 together for some reason on an AVR boards, you must use the "delayBase" branch.
-- Examples were also updated and given platformio.ini files.
-
-## v1.3.4 (2019-10-29) [Timer class](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.4)
-
-### Improvements
-- Made the timer changes into a compiled class.
-
-Maintaining interrupt control for SAMD processors as there are no interrupt vectors to be in conflict. Because the pin mode changes from input to output and back, allowing another library to control interrupts doesn't work.
-
-## v1.3.3 (2018-05-11) [Unset prescalers](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.3)
-
-### Improvements
-- Now unsetting timer prescalers and setting the isActive pointer to NULL in both the end and the destructor functions.
-- Also some clean-up of the examples.
-
-## v1.3.1 (2018-04-06) [Added processor timer for greater stability](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.3.1)
-
-### New Features
-- Changed the incoming data ISR to use a processor timer, this makes the reception more stable, especially when the ISR is controlled by an external library. This also creates some conflicts with other libraries that use Timer2.
-
-### Improvements
-- Made changes to the write functions to use the timer to reduce the amount of time that all system interrupts are off.
-- Forcing all SDI-12 objects to use the same buffer to reduce ram usage.
-
-## v1.1.0 (2018-03-15) [Better integration inside other libraries](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.1.0)
-
-### Improvements
-- Added notes and an empty constructor/populated begin method to allow this library to be more easily called inside of other libraries.
-
-## v1.0.6 (2018-03-09) [Fixed timeout values](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.0.6)
-
-### Bug Fixes
-- Fixes the time-out values for the ParseInt and ParseFloat to be -9999. This was the intended behavior all along, but at some point those functions changed in the stream library and the identically named functions within SDI-12 intended to "hide" the stream functions ceased to be called.
-
-## v1.0.1 (2017-05-16) [Initial Release](https://github.com/EnviroDIY/Arduino-SDI-12/releases/tag/v1.0.1)
-
-The first "official" release of this interrupt-based SDI-12 library for AVR and SAMD Arduino boards.
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/LICENSE.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/LICENSE.md
deleted file mode 100644
index 6a0ce2abe394e344179ae257a6b7709ecc14fd42..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/LICENSE.md
+++ /dev/null
@@ -1,16 +0,0 @@
-BSD 3-Clause License
-
-Copyright (c) 2013, Stroud Water Research Center (SWRC) and the EnviroDIY Development Team.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/README.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/README.md
deleted file mode 100644
index 724aba55ff2d944c2f371048499900f531b6b17d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/README.md
+++ /dev/null
@@ -1,188 +0,0 @@
-
-[//]: # ( @mainpage SDI-12 for Arduino)
-# SDI-12 for Arduino
-
-[//]: # ( @section mainpage_intro Introduction )
-## Introduction
-
-This is an Arduino library for SDI-12 communication with a wide variety of environmental sensors.
-It provides a general software solution, without requiring any additional hardware, to implement the SDI-12 communication protocol between an Arduino-based data logger and SDI-12-enabled sensors.
-
-[SDI-12](http://www.sdi-12.org/) is an asynchronous, ASCII, serial communications protocol that was developed for intelligent sensory instruments that typically monitor environmental data.
-[Advantages of SDI-12](http://en.wikipedia.org/wiki/SDI-12) include the ability to use a single available data channel for many sensors.
-
-This work is motivated by the [EnviroDIY community](http://envirodiy.org/) vision to create an open source hardware and software stack to deliver near real time environmental data from wireless sensor networks, such as the Arduino-compatible [EnviroDIYâ„¢ Mayfly Data Logger](http://envirodiy.org/mayfly/).
-
-[//]: # ( Start GitHub Only )
-## Documentation
-
-Extensive documentation on the SDI-12 functions and classes is available here:  https://envirodiy.github.io/Arduino-SDI-12/index.html
-
-[//]: # ( End GitHub Only )
-
-[//]: # ( @subsection mainpage_rename Renaming Notice )
-### Renaming Notice
-**As of version 2.0.0 this library was renamed from "Arduino-SDI-12" to simply "SDI-12" to comply with requirements for inclusion in the Arduino.cc's IDE and Library Manager.**
-
-[//]: # ( @tableofcontents )
-
-[//]: # ( Start GitHub Only )
-- [SDI-12 for Arduino](#sdi-12-for-arduino)
-  - [Introduction](#introduction)
-  - [Documentation](#documentation)
-    - [Renaming Notice](#renaming-notice)
-  - [Getting Started](#getting-started)
-  - [Origins and Inherited Limitations](#origins-and-inherited-limitations)
-  - [Compatibility Considerations](#compatibility-considerations)
-  - [Variants and Branches](#variants-and-branches)
-      - [EnviroDIY_SDI12](#envirodiy_sdi12)
-      - [EnviroDIY_SDI12_PCINT3](#envirodiy_sdi12_pcint3)
-      - [EnviroDIY_SDI12_ExtInts](#envirodiy_sdi12_extints)
-  - [Contribute](#contribute)
-  - [License](#license)
-  - [Credits](#credits)
-
-[//]: # ( End GitHub Only )
-
-[//]: # ( @section mainpage_getting_started Getting Started )
-## Getting Started
-
-Learn more, below, about this library's:
-* [Origins and Inherited Limitations](https://github.com/EnviroDIY/Arduino-SDI-12#origins-and-inherited-limitations);
-* [Compatibility Considerations](https://github.com/EnviroDIY/Arduino-SDI-12#compatibility-considerations);
-* [Variants and Branches](https://github.com/EnviroDIY/Arduino-SDI-12#variants-and-branches) we created to overcome some limitations.
-
-Try running our [Example sketches](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples) with your Arduino board and SDI-12 sensor.
-
-Full details on the library functionality can be found on github pages: https://envirodiy.github.io/Arduino-SDI-12/
-
-
-[//]: # ( @section mainpage_origins Origins and Inherited Limitations )
-## Origins and Inherited Limitations
-
-This library was developed from the [SoftwareSerial](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/libraries/SoftwareSerial) library that is a built-in [standard Arduino library](https://www.arduino.cc/en/Reference/Libraries).
-It was further modified to use a timer to improve read stability and decrease the amount of time universal interrupts are disabled using logic from [NeoSWSerial](https://github.com/SlashDevin/NeoSWSerial).
-
-The most obvious "limitation" is that this library will conflict with all other libraries that make use of pin change interrupts.
-You will be unable to compile them together.
-Some other libraries using pin change interrupts include [SoftwareSerial](https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/libraries/SoftwareSerial), [NeoSWSerial](https://github.com/SlashDevin/NeoSWSerial), [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt/), [PinChangeInt](https://playground.arduino.cc/Main/PinChangeInt), [Servo](https://www.arduino.cc/en/Reference/Servo), and quite a number of other libraries.
-See the notes under [Variants and Branches](https://github.com/EnviroDIY/Arduino-SDI-12#variants-and-branches) below for advice in using this library in combination with such libraries.
-
-Another non-trivial, but hidden limitation is that _all_ interrupts are disabled during most of the transmission of each character, which can interfere with other processes.
-That includes other pin-change interrupts, clock/timer interrupts, external interrupts, and every other type of processor interrupt.
-This is particularly problematic for SDI-12, because SDI-12 operates at a very slow baud rate (only 1200 baud).
-This translates to ~8.3 mS of "radio silence" from the processor for each character that goes out via SDI-12, which adds up to ~380-810ms per command!  Interrupts are enabled for the majority of the time while the processor is listening for responses.
-
-For most AVR boards, this library will also conflict with the [tone](https://www.arduino.cc/reference/en/language/functions/advanced-io/tone/) function because of its utilization of timer 2.
-There will be no obvious compile error, but because SDI-12 and the tone library may use different clock-prescaler functions, the results for both might be rather unexpected.
-All 8MHz AVR boards will also have unresolvable prescaler conflicts with [NeoSWSerial](https://github.com/SlashDevin/NeoSWSerial).
-The pre-scaler values needed for the SDI-12 functionality are set in the begin() function and reset to their original values in the end() function.
-
-[//]: # ( @section mainpage_compatibility Compatibility Considerations )
-## Compatibility Considerations
-
-This library has been tested with an Arduino Uno (AtMega328p), EnviroDIY Mayfly (AtMega1284p), Adafruit Feather 32u4 (AtMega32u4, identical to Arduino Leonardo), an Adafruit Feather M0 (SAMD21G18, identical to Arduino Zero), the ESP8266, and the ESP32.
-It should also work on an Arduino Mega (AtMega2560), Gemma/AtTiny board, and most other AVR processors  running on the Arduino framework.
-
-The Arduino Due, Arduino 101, and Teensy boards are not supported at this time.
-If you are interested in adding support for those boards, please send pull requests.
-
-Due to the use of pin change interrupts, not all data pins are available for use with this SDI-12 library.
-Pin availability depends on the micro-controller.
-These pins will work on those processors:
-
-This library requires the use of pin change interrupts (PCINT).
-
-Not all Arduino boards have the same pin capabilities.
-The known compatibile pins for common variants are shown below:
-
-**AtMega328p / Arduino Uno:**
-- Any pin
-
-**AtMega1284p / EnviroDIY Mayfly**
-- Any pin
-
-**ATmega2560 / Arduino Mega or Mega 2560:**
-- 0, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69)
-
-**AtMega32u4 / Arduino Leonardo or Adafruit Feather:**
-- 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI)
-
-**SAMD21G18 / Arduino Zero:**
-- Any pin (except 4 on the zero)
-
-**ESP8266:**
-- Any GPIO, except GPIO16
-
-**ESP32:**
-- Any GPIO
-
-Note that not all of these pins are available with our [Variants and Branches](https://github.com/EnviroDIY/Arduino-SDI-12#variants-and-branches), below.
-
-
-[//]: # ( @section mainpage_variants Variants and Branches )
-## Variants and Branches
-As we've described, the default "master" branch of this library will conflict with SoftwareSerial and any other library that monopolizes all pin change interrupt vectors for all AVR boards.
-To allow simultaneous use of SDI-12 and SoftwareSerial, we have created additional variants of these libraries that we maintain as separate branches of this repository.
-For background information, my be helpful to read our [Overview of Interrupts](https://github.com/EnviroDIY/Arduino-SDI-12/wiki/2b.-Overview-of-Interrupts) wiki page or this [Arduino Pin Change Interrupts article](https://thewanderingengineer.com/2014/08/11/arduino-pin-change-interrupts/).
-
-[//]: # ( @subsection mainpage_master EnviroDIY_SDI12 )
-#### EnviroDIY_SDI12
-EnviroDIY_SDI12 is the default master branch of this repository.
-It controls and monopolizes all pin change interrupt vectors, and can therefore have conflicts with any variant of SoftwareSerial and other libraries that use interrupts.
-
-[//]: # ( @subsection mainpage_pcint3 EnviroDIY_SDI12_PCINT3 )
-#### EnviroDIY_SDI12_PCINT3
-EnviroDIY_SDI12_PCINT3 is in the Mayfly branch of this repository, and was historically was called "SDI12_mod".
-It's been cropped to only control interrupt vector 3, or PCINT3 (D), which on the Mayfly (or Sodaq Mbili) corresponds to Pins D0-D7.
-It is designed to be compatible with [EnviroDIY_SoftwareSerial_PCINT12](https://github.com/EnviroDIY/SoftwareSerial_PCINT12) library (which controls interrupt vectors PCINT1 (B) & PCINT2 (C) / Mayfly pins D08-D15 & D16-D23) and [EnviroDIY PcInt PCINT0](https://github.com/EnviroDIY/PcInt_PCINT0) (which controls interrupt vectors PCINT0 (A) / Mayfly pins D24-D31/A0-A7).
-Note that different AtMega1284p boards have a different mapping from the physical PIN numbers to the listed digital PIN numbers that are printed on the board.
-One of the most helpful lists of pins and interrupts vectors is in the the [Pin/Port Bestiary wiki page for the Enable Interrupt library](https://github.com/GreyGnome/EnableInterrupt/wiki/Usage#PIN__PORT_BESTIARY).
-
-[//]: # ( @subsection mainpage_extints EnviroDIY_SDI12_ExtInts )
-#### EnviroDIY_SDI12_ExtInts
-EnviroDIY_SDI12_ExtInts is the ExtInt branch of this repository.
-It doesn't control any of the interrupts, but instead relies on an external interrupt management library (like [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt)) to assign the SDI-12 receive data function to the right pin.
-This is the least stable because there's some extra delay because the external library is involved, but the use of timers in the SDI-12 library greatly increases it's stability.
-It's also the easiest to get working in combination with any other pin change interrupt based library.
-It can be paired with the [EnviroDIY_SoftwareSerial_ExtInts](https://github.com/EnviroDIY/SoftwareSerial_ExternalInts) libraries (which is, by the way, extremely unstable).
-
-If you would like to use a different pin change interrupt library, uncomment the line ```#define SDI12_EXTERNAL_PCINT``` in SDI12.h and recompile the library.
-Then, in your own code call `SDI12::handleInterrupt()` as the interrupt for the SDI12 pin using the other interrupt library.
-Example j shows doing this in GreyGnome's [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt) library.
-
-
-[//]: # ( @section mainpage_contribute Contribute )
-## Contribute
-Open an [issue](https://github.com/EnviroDIY/Arduino-SDI-12/issues) to suggest and discuss potential changes/additions.
-
-For power contributors:
-
-1. Fork it!
-2. Create your feature branch: `git checkout -b my-new-feature`
-3. Commit your changes: `git commit -am 'Add some feature'`
-4. Push to the branch: `git push origin my-new-feature`
-5. Submit a pull request :D
-
-
-[//]: # ( @section mainpage_license License )
-## License
-The SDI12 library code is released under the GNU Lesser Public License (LGPL 2.1) -- See [LICENSE-examples.md](https://github.com/EnviroDIY/Arduino-SDI-12/blob/master/LICENSE) file for details.
-
-Example Arduino sketches are released under the BSD 3-Clause License -- See [LICENSE-examples.md](https://github.com/EnviroDIY/Arduino-SDI-12/blob/master/LICENSE.md) file for details.
-
-Documentation is licensed as [Creative Commons Attribution-ShareAlike 4.0](https://creativecommons.org/licenses/by-sa/4.0/) (CC-BY-SA) copyright.
-
-[//]: # ( @section mainpage_credits Credits )
-## Credits
-[EnviroDIY](http://envirodiy.org/)â„¢ is presented by the Stroud Water Research Center, with contributions from a community of enthusiasts sharing do-it-yourself ideas for environmental science and monitoring.
-
-[Kevin M. Smith](https://github.com/Kevin-M-Smith) was the primary developer of the SDI-12 library, with input from [S. Hicks](https://github.com/s-hicks2) and [Anthony Aufdenkampe](https://github.com/aufdenkampe).
-
-[Sara Damiano](https://github.com/SRGDamia1) is now the primary maintainer, with input from many [other contributors](https://github.com/EnviroDIY/Arduino-SDI-12/graphs/contributors).
-
-This project has benefited from the support from the following funders:
-
-* National Science Foundation, awards [EAR-0724971](http://www.nsf.gov/awardsearch/showAward?AWD_ID=0724971), [EAR-1331856](http://www.nsf.gov/awardsearch/showAward?AWD_ID=1331856), [ACI-1339834](http://www.nsf.gov/awardsearch/showAward?AWD_ID=1339834)
-* William Penn Foundation, grant 158-15
-* Stroud Water Research Center endowment
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/VERSION b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/VERSION
deleted file mode 100644
index 0f84bed4d4e7455dee513c0a4a7a00708183e9f5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-v2.1.4
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/continuous_integration/.travis.yml_archive b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/continuous_integration/.travis.yml_archive
deleted file mode 100644
index f84a321c4809ef0c97013ac5755403da3ecb05d4..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/continuous_integration/.travis.yml_archive
+++ /dev/null
@@ -1,160 +0,0 @@
-before_install:
-  - git config --global user.email "sdamiano@stroudcenter.org"
-  - git config --global user.name "SRGDamia1"
-
-sudo: false
-git:
-  depth: 1
-branches:
-  except:
-    - gh-pages
-
-cache:
-  pip: true
-  directories:
-    - "~/.platformio"
-    - $TRAVIS_BUILD_DIR/doxygen-src
-
-language: python
-python:
-  - "2.7"
-
-install:
-  # Remove the cloned repo to emulate a user library installation
-  - git rm library.json
-  # - git rm library.properties
-  # - git rm -r pioScripts
-  # - git rm -r src
-  # Install PlatformIO (this should be cached!)
-  - pip install -U platformio
-  - pio upgrade
-  # Uninstall any old version of the current library from the Travis cache
-  - if pio lib --global uninstall EnviroDIY_Arduino-SDI-12; then
-    echo "Uninstalled cached version of Arduino-SDI-12";
-    fi
-  - if pio lib --global uninstall EnviroDIY_SDI-12; then
-    echo "Uninstalled cached version of SDI-12";
-    fi
-  # Install this library from the branch we're working on
-  # echo "Installing SDI-12 from https://github.com/$TRAVIS_REPO_SLUG.git#$TRAVIS_BRANCH";
-  # echo "Installing SDI-12 from https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_BRANCH";
-  - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
-    echo "Installing SDI-12 from https://github.com/$TRAVIS_REPO_SLUG.git#$TRAVIS_COMMIT";
-    else
-    echo "Installing SDI-12 from https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_SHA";
-    fi
-  # pio lib --global install https://github.com/$TRAVIS_REPO_SLUG.git#$BRANCH;
-  # pio lib --global install https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_BRANCH;
-  - if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
-    pio lib --global install https://github.com/$TRAVIS_REPO_SLUG.git#$TRAVIS_COMMIT;
-    else
-    pio lib --global install https://github.com/$TRAVIS_PULL_REQUEST_SLUG.git#$TRAVIS_PULL_REQUEST_SHA;
-    fi
-  - pio update
-
-script:
-  - platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560 --board=huzzah --board=featheresp32
-
-jobs:
-  include:
-    - name: "Verify library JSON format"
-      language: node_js
-      install: npm install -g jsonlint
-      script: jsonlint -q library.json
-      after_success: |
-        echo "TRAVIS_BRANCH=$TRAVIS_BRANCH TRAVIS_PULL_REQUEST=$TRAVIS_PULL_REQUEST"
-        if [[ ($TRAVIS_BRANCH == master) &&
-              ($TRAVIS_PULL_REQUEST == false) ]] ; then
-            curl -LO --retry 3 https://raw.github.com/mernst/plume-lib/master/bin/trigger-travis.sh
-            sh trigger-travis.sh EnviroDIY Libraries $TRAVIS_ACCESS_TOKEN
-        fi
-
-    - name: "Build Doxygen Documentation"
-      if: branch = master AND type != pull_request
-      language: python
-      python:
-        - "3.7"
-      before_install:
-        - git config --global user.email "sdamiano@stroudcenter.org"
-        - git config --global user.name "SRGDamia1"
-        - git config --global push.default simple
-        - sudo apt-get update
-        - sudo apt-get -y install build-essential
-        - sudo apt-get -y install graphviz
-        - sudo apt-get -y install flex
-        - sudo apt-get -y install bison
-        - sudo apt-get -y install texlive-base
-        - sudo apt-get -y install texlive-latex-extra
-        - sudo apt-get -y install texlive-fonts-extra
-        - sudo apt-get -y install texlive-fonts-recommended
-        - pip3 install jinja2 Pygments
-      install:
-        - cd $TRAVIS_BUILD_DIR
-        - chmod +x travis/copy-doc-sources.sh
-        - sh travis/copy-doc-sources.sh
-        - cd $TRAVIS_BUILD_DIR
-        - chmod +x travis/build-install-doxygen.sh
-        - sh travis/build-install-doxygen.sh
-      script:
-        - cd $TRAVIS_BUILD_DIR
-        - chmod +x travis/generate-documentation.sh
-        - sh travis/generate-documentation.sh
-      # after_success:
-      #   - cd $TRAVIS_BUILD_DIR
-      #   - chmod +x travis/deploy-documentation.sh
-      #   - sh travis/deploy-documentation.sh
-      deploy:
-        provider: pages:git
-        token: $GH_REPO_TOKEN
-        edge: true # opt in to dpl v2
-        keep_history: false
-        local_dir: $TRAVIS_BUILD_DIR/code_docs/Arduino-SDI-12Doxygen/m.css
-        project_name: Arduino-SDI-12
-
-    - name: "a_wild_card"
-      env:
-        - PLATFORMIO_CI_SRC=examples/a_wild_card/a_wild_card.ino
-
-    - name: "b_address_change"
-      env:
-        - PLATFORMIO_CI_SRC=examples/b_address_change/b_address_change.ino
-
-    - name: "c_check_all_addresses"
-      env:
-        - PLATFORMIO_CI_SRC=examples/c_check_all_addresses/c_check_all_addresses.ino
-
-    - name: "d_simple_logger"
-      env:
-        - PLATFORMIO_CI_SRC=examples/d_simple_logger/d_simple_logger.ino
-
-    - name: "e_simple_parsing"
-      env:
-        - PLATFORMIO_CI_SRC=examples/e_simple_parsing/e_simple_parsing.ino
-
-    - name: "f_basic_data_request"
-      env:
-        - PLATFORMIO_CI_SRC=examples/f_basic_data_request/f_basic_data_request.ino
-
-    - name: "g_terminal_window"
-      env:
-        - PLATFORMIO_CI_SRC=examples/g_terminal_window/g_terminal_window.ino
-
-    - name: "h_SDI-12_slave_implementation"
-      env:
-        - PLATFORMIO_CI_SRC=examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino
-
-    - name: "i_SDI-12_interface"
-      env:
-        - PLATFORMIO_CI_SRC=examples/i_SDI-12_interface/i_SDI-12_interface.ino
-
-    - name: "j_external_pcint_library"
-      env:
-        - PLATFORMIO_CI_SRC=examples/j_external_pcint_library/j_external_pcint_library.ino
-        - PLATFORMIO_BUILD_FLAGS=-DSDI12_EXTERNAL_PCINT
-      script:
-        - pio lib --global install EnableInterrupt
-        - platformio ci --board=mayfly --board=feather32u4 --board=adafruit_feather_m0 --board=uno --board=megaatmega2560
-
-    - name: "k_concurrent_logger"
-      env:
-        - PLATFORMIO_CI_SRC=examples/k_concurrent_logger/k_concurrent_logger.ino
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/.prettierignore b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/.prettierignore
deleted file mode 100644
index f52eb881b9746bc56322f701d8752cfbc3fbe93b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/.prettierignore
+++ /dev/null
@@ -1 +0,0 @@
-doxygen/header.html
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/CreatingACharacter.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/CreatingACharacter.md
deleted file mode 100644
index 8eeb6cbaf33429af6fed40e20e6bfaf97f214871..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/CreatingACharacter.md
+++ /dev/null
@@ -1,291 +0,0 @@
-[//]: # ( @page rx_page Creating a Character - Stepping through the Rx ISR )
-# Creating a Character - Stepping through the Rx ISR
-
-[//]: # ( @tableofcontents )
-
-[//]: # ( Start GitHub Only )
-- [Creating a Character - Stepping through the Rx ISR](#creating-a-character---stepping-through-the-rx-isr)
-  - [How a Character Looks in SDI-12](#how-a-character-looks-in-sdi-12)
-  - [Static Variables we Need](#static-variables-we-need)
-  - [Following the Mask](#following-the-mask)
-    - [Waiting for a Start Bit](#waiting-for-a-start-bit)
-    - [The Start of a Character](#the-start-of-a-character)
-    - [The Interrupt Fires!](#the-interrupt-fires)
-    - [Bit by Bit](#bit-by-bit)
-      - [A LOW/1 Bit](#a-low1-bit)
-      - [A HIGH/0 Bit](#a-high0-bit)
-      - [Shifting Up](#shifting-up)
-    - [A Finished Character](#a-finished-character)
-  - [The Full Interrupt Function](#the-full-interrupt-function)
-
-[//]: # ( End GitHub Only )
-
-Here we'll walk step-by-step through how the SDI-12 library (and NeoSWSerial) create a character from the ISR.
-Unlike SoftwareSerial which listens for a start bit and then halts all program and other ISR execution until the end of the character, this library grabs the time of the interrupt, does some quick math, and lets the processor move on.
-The logic of creating a character this way is harder for a person to follow, but it pays off because we're not tieing up the processor in an ISR that lasts for 8.33ms for each character.
-[10 bits @ 1200 bits/s]
-For a person, that 8.33ms is trivial, but for even a "slow" 8MHz processor, that's over 60,000 ticks sitting idle per character.
-
-So, let's look at what's happening.
-
-[//]: # ( @section rx_specs How a Character Looks in SDI-12 )
-## How a Character Looks in SDI-12
-
-First we need to keep in mind the specifications of SDI-12:
-- We use *inverse logic* that means a "1" bit is at LOW level and a "0" bit is HIGH level.
-- characters are sent as 10 bits
-  - 1 start bit, which is always a 0/HIGH
-  - 7 data bits
-  - 1 parity bit
-  - 1 stop bit, which is always 1/LOW
-
-[//]: # ( @section rx_vars Static Variables we Need )
-## Static Variables we Need
-
-And lets remind ourselves of the static variables we're using to store states:
-- `prevBitTCNT` stores the time of the previous RX transition in micros
-- `rxState` tracks how many bits are accounted for on an incoming character.
-  - if 0: indicates that we got a start bit
-  - if >0: indicates the number of bits received
-- `WAITING-FOR-START-BIT` is a mask for the rxState while waiting for a start bit, it's set to 0b11111111
-- `rxMask` is a bit mask for building a received character
-  - The mask has a single bit set, in the place of the active bit based on the rxState
-- `rxValue` is the value of the character being built
-
-[//]: # ( @section rx_mask Following the Mask )
-## Following the Mask
-
-[//]: # ( @subsection rx_mask_wait Waiting for a Start Bit )
-### Waiting for a Start Bit
-
-The `rxState`, `rxMask`, and `rxValue` all work together to form a character.
-When we're waiting for a start bit `rxValue` is empty, `rxMask` has only the bottom bit set, and `rxState` is set to WAITING-FOR-START-BIT:
-
-```
-    rxValue: |     0   0   0   0   0   0   0   0
--------------|-----------------------------------
-     rxMask: |     0   0   0   0   0   0   0   1
-    rxState: |     1   1   1   1   1   1   1   1
-```
-
-
-[//]: # ( @subsection rx_mask_start The Start of a Character )
-### The Start of a Character
-
-After we get a start bit, the `startChar()` function creates a blank slate for the new character, so our values are:
-
-```
-    rxValue: |     0   0   0   0   0   0   0   0
--------------|-----------------------------------
-     rxMask: |     0   0   0   0   0   0   0   1
-    rxState: |     0   0   0   0   0   0   0   0
-```
-
-
-[//]: # ( @subsection rx_mask_fire The Interrupt Fires! )
-### The Interrupt Fires!
-
-When an interrupts is received, we use capture the time if the interrupt in `thisBitTCNT`.
-Then we subtract `prevBitTCNT` from `thisBitTCNT` and use the `bitTimes()` function to calculate how many bit-times have passed between this interrupt and the previous one.
-(There's also a fudge factor in this calculation we call the [rxWindowWidth](https://github.com/SlashDevin/NeoSWSerial/pull/13#issuecomment-315463522).)
-
-
-[//]: # ( @subsection rx_mask_bit Bit by Bit )
-### Bit by Bit
-
-For **each bit time that passed**, we apply the `rxMask` to the `rxValue`.
-- Keep in mind multiple bit times can pass between interrupts - this happens any time there are two (or more) high or low bits in a row.
-- We also leave time for the (high) start and (low) stop bit, but do anything with the `rxState`, `rxMask`, or `rxValue` for those bits.
-
-
-[//]: # ( @subsubsection rx_mask_low A LOW/1 Bit )
-#### A LOW/1 Bit
-
-- if the data bit received is LOW (1) we do an `|=` (bitwise OR) between the `rxMask` and the `rxValue`
-
-```
-    rxValue: |     0   0   0   0   0   0   0   1
--------------|---------------------------------^- bit-wise or puts the one
-     rxMask: |     0   0   0   0   0   0   0   1      from the rxMask into
-    rxState: |     0   0   0   0   0   0   0   0      the rxValue
-```
-
-
-[//]: # ( @subsubsection rx_mask_high A HIGH/0 Bit )
-#### A HIGH/0 Bit
-
-- if the data bit received is HIGH (0) we do nothing
-
-```
-    rxValue: |     0   0   0   0   0   0   0   0
--------------|---------------------------------x- nothing happens
-     rxMask: |     0   0   0   0   0   0   0   1
-    rxState: |     0   0   0   0   0   0   0   0
-```
-
-
-[//]: # ( @subsubsection rx_mask_shift Shifting Up )
-#### Shifting Up
-
-- *After* applying the mask, we push everything over one bit to the left.
-The top bit falls off.
-  - we always add a 1 on the `rxState`, to indicate the bit arrived
-  - we always add a 0 on the `rxMask` and the `rxValue`
-  - the values of the second bit of the `rxValue` (?) depends on what we did in the step above
-
-```
-    rxValue: |     0        <--- | 0   0   0   0   0   0   ?   0 <--- add a zero
--------------|-------------------|---------------------------|---
-     rxMask: |     0        <--- | 0   0   0   0   0   0   1   0 <--- add a zero
-    rxState: |     0        <--- | 0   0   0   0   0   0   0   1 <--- add a one
--------------|-------------------|---------------------------|---
-             | falls off the top |                           | added to the bottom
-```
-
-
-[//]: # ( @subsection rx_mask_fin A Finished Character )
-### A Finished Character
-
-After 8 bit times have passed, we should have a fully formed character with 8 bits of data (7 of the character + 1 parity).
-The `rxMask`  will have the one in the top bit.
-And the rxState will be filled - which just happens to be the value of `WAITING-FOR-START-BIT` for the next character.
-
-```
-    rxValue: |     ?   ?   ?   ?   ?   ?   ?   ?
--------------|-----------------------------------
-     rxMask: |     1   0   0   0   0   0   0   0
-    rxState: |     1   1   1   1   1   1   1   1
-```
-
-
-[//]: # ( @section rx_fxn The Full Interrupt Function )
-## The Full Interrupt Function
-
-Understanding how the masking creates the character, you should now be able to follow the full interrupt function below.
-
-```cpp
-// Creates a blank slate of bits for an incoming character
-void SDI12::startChar() {
-  rxState = 0x00;  // 0b00000000, got a start bit
-  rxMask  = 0x01;  // 0b00000001, bit mask, lsb first
-  rxValue = 0x00;  // 0b00000000, RX character to be, a blank slate
-}  // startChar
-
-// The actual interrupt service routine
-void SDI12::receiveISR() {
-  // time of this data transition (plus ISR latency)
-  sdi12timer-t thisBitTCNT = READTIME;
-
-  uint8-t pinLevel = digitalRead(-dataPin);  // current RX data level
-
-  // Check if we're ready for a start bit, and if this could possibly be it.
-  if (rxState == WAITING-FOR-START-BIT) {
-    // If we are waiting for a start bit and the pin is low it's not a start bit, exit
-    // Inverse logic start bit = HIGH
-    if (pinLevel == LOW) { return; }
-    // If the pin is HIGH, this should be a start bit.
-    // Thus startChar(), which sets the rxState to 0, create an empty character, and a
-    // new mask with a 1 in the lowest place
-    startChar();
-  } else {
-    // If we're not waiting for a start bit, it's because we're in the middle of an
-    // incomplete character and therefore this change in the pin state must be from a
-    // data, parity, or stop bit.
-
-    // Check how many bit times have passed since the last change
-    uint16-t rxBits = bitTimes((uint8-t)(thisBitTCNT - prevBitTCNT));
-    // Calculate how many *data+parity* bits should be left in the current character
-    //      - Each character has a total of 10 bits, 1 start bit, 7 data bits, 1 parity
-    // bit, and 1 stop bit
-    //      - The #rxState holds record of how many of the data + parity bits we've
-    // gotten (up to 8)
-    //      - We have to treat the parity bit as a data bit because we don't know its
-    // state
-    //      - Since we're mid character, we know the start bit is past which knocks us
-    // down to 9
-    //      - There will always be one left over for the stop bit, which will be LOW/1
-    uint8-t bitsLeft = 9 - rxState;
-    // If the number of bits passed since the last transition is more than then number
-    // of bits left on the character we were working on, a new character must have
-    // started.
-    // This will happen if the parity bit is 1 or the last bit(s) of the character and
-    // the parity bit are all 1's.
-    bool nextCharStarted = (rxBits > bitsLeft);
-
-    // Check how many data+parity bits have been sent in this frame.  This will be
-    // different from the rxBits if a new character has started because of the start
-    // and stop bits.
-    //      - If the total number of bits in this frame is more than the number of
-    // data+parity bits remaining in the character, then the number of data+parity bits
-    // is equal to the number of bits remaining for the character and partiy.
-    //      - If the total number of bits in this frame is less than the number of data
-    // bits left for the character and parity, then the number of data+parity bits
-    // received in this frame is equal to the total number of bits received in this
-    // frame.
-    // translation:
-    //    if nextCharStarted then bitsThisFrame = bitsLeft
-    //                       else bitsThisFrame = rxBits
-    uint8-t bitsThisFrame = nextCharStarted ? bitsLeft : rxBits;
-    // Tick up the rxState by the number of data+parity bits received in the frame
-    rxState += bitsThisFrame;
-
-    // Set all the bits received between the last change and this change
-    if (pinLevel == HIGH) {
-      // If the current state is HIGH (and it just became so), then all bits between
-      // the last change and now must have been LOW.
-      // back fill previous bits with 1's (inverse logic - LOW = 1)
-      while (bitsThisFrame-- > 0) {
-        // for each of the bits that happened in this frame
-
-        rxValue |= rxMask;     // Add a 1 to the LSB/right-most place of our character
-                               // value from the mask
-        rxMask = rxMask << 1;  // Shift the 1 in the mask up by one position
-      }
-      // And shift the 1 in the mask up by one more position for the current bit.
-      // It's HIGH/0 now, so we don't use `|=` with the mask for this last one.
-      rxMask = rxMask << 1;
-    } else {
-      // If the current state is LOW (and it just became so), then this bit is LOW
-      // but all bits between the last change and now must have been HIGH
-
-      // pinLevel==LOW
-      // previous bits were 0's so only this bit is a 1 (inverse logic - LOW = 1)
-      rxMask = rxMask << (bitsThisFrame -
-                          1);  // Shift the 1 in the mask up by the number of bits past
-      rxValue |= rxMask;  //  And add that shifted one to the character being created
-    }
-
-    // If this was the 8th or more bit then the character and parity are complete.
-    if (rxState > 7) {
-      rxValue &= 0x7F;        // Throw away the parity bit (and with 0b01111111)
-      charToBuffer(rxValue);  // Put the finished character into the buffer
-
-
-      // if this is LOW, or we haven't exceeded the number of bits in a
-      // character (but have gotten all the data bits) then this should be a
-      // stop bit and we can start looking for a new start bit.
-      if ((pinLevel == LOW) || !nextCharStarted) {
-        rxState = WAITING-FOR-START-BIT;  // DISABLE STOP BIT TIMER
-      } else {
-        // If we just switched to HIGH, or we've exceeded the total number of
-        // bits in a character, then the character must have ended with 1's/LOW,
-        // and this new 0/HIGH is actually the start bit of the next character.
-        startChar();
-      }
-    }
-  }
-  prevBitTCNT = thisBitTCNT;  // finally remember time stamp of this change!
-}
-
-// Put a new character in the buffer
-void SDI12::charToBuffer(uint8-t c) {
-  // Check for a buffer overflow. If not, proceed.
-  if ((-rxBufferTail + 1) % SDI12-BUFFER-SIZE == -rxBufferHead) {
-    -bufferOverflow = true;
-  } else {
-    // Save the character, advance buffer tail.
-    -rxBuffer[-rxBufferTail] = c;
-    -rxBufferTail            = (-rxBufferTail + 1) % SDI12-BUFFER-SIZE;
-  }
-}
-```
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/Doxyfile b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/Doxyfile
deleted file mode 100644
index 7caadfccd0d2086c57264f7bf0c1d1e8a9ec1780..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/Doxyfile
+++ /dev/null
@@ -1,2617 +0,0 @@
-# Doxyfile 1.8.19
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project.
-#
-# All text after a double hash (##) is considered a comment and is placed in
-# front of the TAG it is preceding.
-#
-# All text after a single hash (#) is considered a comment and will be ignored.
-# The format is:
-# TAG = value [value, ...]
-# For lists, items can also be appended using:
-# TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (\" \").
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the configuration
-# file that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
-# The default value is: UTF-8.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
-# double-quotes, unless you are using Doxywizard) that should identify the
-# project for which the documentation is generated. This name is used in the
-# title of most generated pages and in a few other places.
-# The default value is: My Project.
-
-PROJECT_NAME           = "SDI-12 for Arduino"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
-# could be handy for archiving the generated documentation or if some version
-# control system is used.
-
-PROJECT_NUMBER         = 2.1.4
-
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
-# for a project that appears at the top of each page and should give viewer a
-# quick idea about the purpose of the project. Keep the description short.
-
-PROJECT_BRIEF          = "An Arduino library for SDI-12 communication without requiring any additional hardware."
-
-# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
-# in the documentation. The maximum height of the logo should not exceed 55
-# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
-# the logo to the output directory.
-
-PROJECT_LOGO           = SDI-12Text.png
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
-# into which the generated documentation will be written. If a relative path is
-# entered, it will be relative to the location where doxygen was started. If
-# left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = ../../Arduino-SDI-12Doxygen
-
-# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
-# directories (in 2 levels) under the output directory of each output format and
-# will distribute the generated files over these directories. Enabling this
-# option can be useful when feeding doxygen a huge amount of source files, where
-# putting all generated files in the same directory would otherwise causes
-# performance problems for the file system.
-# The default value is: NO.
-
-CREATE_SUBDIRS         = NO
-
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
-# characters to appear in the names of generated files. If set to NO, non-ASCII
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
-# U+3044.
-# The default value is: NO.
-
-ALLOW_UNICODE_NAMES    = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
-# Ukrainian and Vietnamese.
-# The default value is: English.
-
-OUTPUT_LANGUAGE        = English
-
-# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all generated output in the proper direction.
-# Possible values are: None, LTR, RTL and Context.
-# The default value is: None.
-
-OUTPUT_TEXT_DIRECTION  = None
-
-# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
-# descriptions after the members that are listed in the file and class
-# documentation (similar to Javadoc). Set to NO to disable this.
-# The default value is: YES.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
-# description of a member or function before the detailed description
-#
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-# The default value is: YES.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator that is
-# used to form the text in various listings. Each string in this list, if found
-# as the leading text of the brief description, will be stripped from the text
-# and the result, after processing the whole list, is used as the annotated
-# text. Otherwise, the brief description is used as-is. If left blank, the
-# following values are used ($name is automatically replaced with the name of
-# the entity):The $name class, The $name widget, The $name file, is, provides,
-# specifies, contains, represents, a, an and the.
-
-ABBREVIATE_BRIEF       = "The $name class" \
-                         "The $name widget" \
-                         "The $name file" \
-                         is \
-                         provides \
-                         specifies \
-                         contains \
-                         represents \
-                         a \
-                         an \
-                         the
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# doxygen will generate a detailed section even if there is only a brief
-# description.
-# The default value is: NO.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-# The default value is: NO.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
-# before files name in the file list and in the header files. If set to NO the
-# shortest path that makes the file name unique will be used
-# The default value is: YES.
-
-FULL_PATH_NAMES        = YES
-
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
-# Stripping is only done if one of the specified strings matches the left-hand
-# part of the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the path to
-# strip.
-#
-# Note that you can specify absolute paths here, but also relative paths, which
-# will be relative from the directory where doxygen is started.
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
-
-STRIP_FROM_PATH        = ../src
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
-# path mentioned in the documentation of a class, which tells the reader which
-# header file to include in order to use a class. If left blank only the name of
-# the header file containing the class definition is used. Otherwise one should
-# specify the list of include paths that are normally passed to the compiler
-# using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
-# less readable) file names. This can be useful is your file systems doesn't
-# support long names like on DOS, Mac, or CD-ROM.
-# The default value is: NO.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
-# first line (until the first dot) of a Javadoc-style comment as the brief
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
-# style comments (thus requiring an explicit @brief command for a brief
-# description.)
-# The default value is: NO.
-
-JAVADOC_AUTOBRIEF      = NO
-
-# If the JAVADOC_BANNER tag is set to YES then doxygen will interpret a line
-# such as
-# /***************
-# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
-# Javadoc-style will behave just like regular comments and it will not be
-# interpreted by doxygen.
-# The default value is: NO.
-
-JAVADOC_BANNER         = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
-# line (until the first dot) of a Qt-style comment as the brief description. If
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
-# requiring an explicit \brief command for a brief description.)
-# The default value is: NO.
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
-# a brief description. This used to be the default behavior. The new default is
-# to treat a multi-line C++ comment block as a detailed description. Set this
-# tag to YES if you prefer the old behavior instead.
-#
-# Note that setting this tag to YES also means that rational rose comments are
-# not recognized any more.
-# The default value is: NO.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
-# documentation from any documented member that it re-implements.
-# The default value is: YES.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
-# page for each member. If set to NO, the documentation of a member will be part
-# of the file/class/namespace that contains it.
-# The default value is: NO.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
-# uses this value to replace tabs by spaces in code fragments.
-# Minimum value: 1, maximum value: 16, default value: 4.
-
-TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that act as commands in
-# the documentation. An alias has the form:
-# name=value
-# For example adding
-# "sideeffect=@par Side Effects:\n"
-# will allow you to put the command \sideeffect (or @sideeffect) in the
-# documentation, which will result in a user-defined paragraph with heading
-# "Side Effects:". You can put \n's in the value part of an alias to insert
-# newlines (in the resulting output). You can put ^^ in the value part of an
-# alias to insert a newline as if a physical newline was in the original file.
-# When you need a literal { or } or , in the value part of an alias you have to
-# escape them by means of a backslash (\), this can lead to conflicts with the
-# commands \{ and \} for these it is advised to use the version @{ and @} or use
-# a double escape (\\{ and \\})
-
-ALIASES                = "license=@par License:\n" \
-                         "environment=@par Development Environment:\n" \
-                         "platform=@par Hardware Platform:\n" \
-                         "m_div{1}=@xmlonly<mcss:div xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-                         "m_enddiv=@xmlonly</mcss:div>@endxmlonly" \
-                         "m_span{1}=@xmlonly<mcss:span xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-                         "m_endspan=@xmlonly</mcss:span>@endxmlonly" \
-                         "m_class{1}=@xmlonly<mcss:class xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\" />@endxmlonly" \
-                         "m_footernavigation=@xmlonly<mcss:footernavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" />@endxmlonly" \
-                         "m_examplenavigation{2}=@xmlonly<mcss:examplenavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:page=\"\1\" mcss:prefix=\"\2\" />@endxmlonly" \
-                         "m_keywords{1}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keywords=\"\1\" />@endxmlonly" \
-                         "m_keyword{3}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keyword=\"\1\" mcss:title=\"\2\" mcss:suffix-length=\"\3\" />@endxmlonly" \
-                         "m_enum_values_as_keywords=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:enum-values-as-keywords=\"true\" />@endxmlonly" \
-                         "m_since{2}=@since @m_class{m-label m-success m-flat} @ref changelog-\1-\2 \"since v\1.\2\"" \
-                         "m_deprecated_since{2}=@since deprecated in v\1.\2 @deprecated"
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
-# only. Doxygen will then generate output that is more tailored for C. For
-# instance, some of the names that are used will be different. The list of all
-# members will be omitted, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
-# Python sources only. Doxygen will then generate output that is more tailored
-# for that language. For instance, namespaces will be presented as packages,
-# qualified scopes will look different, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources. Doxygen will then generate output that is tailored for Fortran.
-# The default value is: NO.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for VHDL.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
-# sources only. Doxygen will then generate output that is more tailored for that
-# language. For instance, namespaces will be presented as modules, types will be
-# separated into more groups, etc.
-# The default value is: NO.
-
-OPTIMIZE_OUTPUT_SLICE  = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it
-# parses. With this tag you can assign which parser to use for a given
-# extension. Doxygen has a built-in mapping, but you can override or extend it
-# using this tag. The format is ext=language, where ext is a file extension, and
-# language is one of the parsers supported by doxygen: IDL, Java, JavaScript,
-# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL,
-# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
-# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
-# tries to guess whether the code is fixed or free formatted code, this is the
-# default for Fortran type files). For instance to make doxygen treat .inc files
-# as Fortran files (default is PHP), and .f files as C (default is Fortran),
-# use: inc=Fortran f=C.
-#
-# Note: For files without extension you can use no_extension as a placeholder.
-#
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
-# the files are not read by doxygen.
-
-EXTENSION_MAPPING      = ino=C++
-
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
-# according to the Markdown format, which allows for more readable
-# documentation. See https://daringfireball.net/projects/markdown/ for details.
-# The output of markdown processing is further processed by doxygen, so you can
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
-# case of backward compatibilities issues.
-# The default value is: YES.
-
-MARKDOWN_SUPPORT       = YES
-
-# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
-# to that level are automatically included in the table of contents, even if
-# they do not have an id attribute.
-# Note: This feature currently applies only to Markdown headings.
-# Minimum value: 0, maximum value: 99, default value: 5.
-# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
-
-TOC_INCLUDE_HEADINGS   = 10
-
-# When enabled doxygen tries to link words that correspond to documented
-# classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by putting a % sign in front of the word or
-# globally by setting AUTOLINK_SUPPORT to NO.
-# The default value is: YES.
-
-AUTOLINK_SUPPORT       = YES
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should set this
-# tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string);
-# versus func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-# The default value is: NO.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-# The default value is: NO.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
-# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen
-# will parse them like normal C++ but will assume all classes use public instead
-# of private inheritance when no explicit protection keyword is present.
-# The default value is: NO.
-
-SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate
-# getter and setter methods for a property. Setting this option to YES will make
-# doxygen to replace the get and set methods by a property in the documentation.
-# This will only work if the methods are indeed getting or setting a simple
-# type. If this is not the case, or you want to show the methods anyway, you
-# should set this option to NO.
-# The default value is: YES.
-
-IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-# The default value is: NO.
-
-DISTRIBUTE_GROUP_DOC   = YES
-
-# If one adds a struct or class to a group and this option is enabled, then also
-# any nested class or struct is added to the same group. By default this option
-# is disabled and one has to add nested compounds explicitly via \ingroup.
-# The default value is: NO.
-
-GROUP_NESTED_COMPOUNDS = NO
-
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
-# (for instance a group of public functions) to be put as a subgroup of that
-# type (e.g. under the Public Functions section). Set it to NO to prevent
-# subgrouping. Alternatively, this can be done per class using the
-# \nosubgrouping command.
-# The default value is: YES.
-
-SUBGROUPING            = YES
-
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
-# are shown inside the group in which they are included (e.g. using \ingroup)
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
-# and RTF).
-#
-# Note that this feature does not work in combination with
-# SEPARATE_MEMBER_PAGES.
-# The default value is: NO.
-
-INLINE_GROUPED_CLASSES = NO
-
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
-# with only public data fields or simple typedef fields will be shown inline in
-# the documentation of the scope in which they are defined (i.e. file,
-# namespace, or group documentation), provided this scope is documented. If set
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
-# Man pages) or section (for LaTeX and RTF).
-# The default value is: NO.
-
-INLINE_SIMPLE_STRUCTS  = NO
-
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
-# enum is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically be
-# useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-# The default value is: NO.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
-# cache is used to resolve symbols given their name and scope. Since this can be
-# an expensive process and often the same symbol appears multiple times in the
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
-# doxygen will become slower. If the cache is too large, memory is wasted. The
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
-# symbols. At the end of a run doxygen will report the cache usage and suggest
-# the optimal cache size from a speed point of view.
-# Minimum value: 0, maximum value: 9, default value: 0.
-
-LOOKUP_CACHE_SIZE      = 0
-
-# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use
-# during processing. When set to 0 doxygen will based this on the number of
-# cores available in the system. You can set it explicitly to a value larger
-# than 0 to get more control over the balance between CPU load and processing
-# speed. At this moment only the input processing can be done using multiple
-# threads. Since this is still an experimental feature the default is set to 1,
-# which efficively disables parallel processing. Please report any issues you
-# encounter. Generating dot graphs in parallel is controlled by the
-# DOT_NUM_THREADS setting.
-# Minimum value: 0, maximum value: 32, default value: 1.
-
-NUM_PROC_THREADS       = 1
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
-# documentation are documented, even if no documentation was available. Private
-# class members and static file members will be hidden unless the
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
-# Note: This will also disable the warnings about undocumented members that are
-# normally produced when WARNINGS is set to YES.
-# The default value is: NO.
-
-EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
-# be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIVATE        = YES
-
-# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
-# methods of a class will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PRIV_VIRTUAL   = YES
-
-# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
-# scope will be included in the documentation.
-# The default value is: NO.
-
-EXTRACT_PACKAGE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
-# included in the documentation.
-# The default value is: NO.
-
-EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO,
-# only classes defined in header files are included. Does not have any effect
-# for Java sources.
-# The default value is: YES.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. If set to YES, local methods,
-# which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO, only methods in the interface are
-# included.
-# The default value is: NO.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
-# the file that contains the anonymous namespace. By default anonymous namespace
-# are hidden.
-# The default value is: NO.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
-# undocumented members inside documented classes or files. If set to NO these
-# members will be included in the various overviews, but no documentation
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy. If set
-# to NO, these classes will be included in the various overviews. This option
-# has no effect if EXTRACT_ALL is enabled.
-# The default value is: NO.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# declarations. If set to NO, these declarations will be included in the
-# documentation.
-# The default value is: NO.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO, these
-# blocks will be appended to the function's detailed documentation block.
-# The default value is: NO.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
-# \internal command is included. If the tag is set to NO then the documentation
-# will be excluded. Set it to YES to include the internal documentation.
-# The default value is: NO.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES, upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# (including Cygwin) and Mac users are advised to set this option to NO.
-# The default value is: system dependent.
-
-CASE_SENSE_NAMES       = NO
-
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES, the
-# scope will be hidden.
-# The default value is: NO.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
-# the files that are included by a file in the documentation of that file.
-# The default value is: YES.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
-# grouped member an include statement to the documentation, telling the reader
-# which file to include in order to use the member.
-# The default value is: NO.
-
-SHOW_GROUPED_MEMB_INC  = YES
-
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
-# files with double quotes in the documentation rather than with sharp brackets.
-# The default value is: NO.
-
-FORCE_LOCAL_INCLUDES   = NO
-
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
-# documentation for inline members.
-# The default value is: YES.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
-# (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order.
-# The default value is: YES.
-
-SORT_MEMBER_DOCS       = NO
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
-# descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO, the members will appear in declaration order. Note that
-# this will also influence the order of the classes in the class list.
-# The default value is: NO.
-
-SORT_BRIEF_DOCS        = NO
-
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
-# (brief and detailed) documentation of class members so that constructors and
-# destructors are listed first. If set to NO the constructors will appear in the
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
-# member documentation.
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
-# detailed member documentation.
-# The default value is: NO.
-
-SORT_MEMBERS_CTORS_1ST = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
-# of group names into alphabetical order. If set to NO the group names will
-# appear in their defined order.
-# The default value is: NO.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
-# fully-qualified names, including namespaces. If set to NO, the class list will
-# be sorted only by class name, not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the alphabetical
-# list.
-# The default value is: NO.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
-# type resolution of all parameters of a function it will reject a match between
-# the prototype and the implementation of a member function even if there is
-# only one candidate or it is obvious which candidate to choose by doing a
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
-# accept a match between prototype and implementation in such cases.
-# The default value is: NO.
-
-STRICT_PROTO_MATCHING  = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
-# list. This list is created by putting \todo commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
-# list. This list is created by putting \test commands in the documentation.
-# The default value is: YES.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
-# list. This list is created by putting \bug commands in the documentation.
-# The default value is: YES.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
-# the deprecated list. This list is created by putting \deprecated commands in
-# the documentation.
-# The default value is: YES.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
-# ... \endcond blocks.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
-# initial value of a variable or macro / define can have for it to appear in the
-# documentation. If the initializer consists of more lines than specified here
-# it will be hidden. Use a value of 0 to hide initializers completely. The
-# appearance of the value of individual variables and macros / defines can be
-# controlled using \showinitializer or \hideinitializer command in the
-# documentation regardless of this setting.
-# Minimum value: 0, maximum value: 10000, default value: 30.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES, the
-# list will mention the files that were used to generate the documentation.
-# The default value is: YES.
-
-SHOW_USED_FILES        = YES
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
-# will remove the Files entry from the Quick Index and from the Folder Tree View
-# (if specified).
-# The default value is: YES.
-
-SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
-# page. This will remove the Namespaces entry from the Quick Index and from the
-# Folder Tree View (if specified).
-# The default value is: YES.
-
-SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command command input-file, where command is the value of the
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
-# by doxygen. Whatever the program writes to standard output is used as the file
-# version. For an example see the documentation.
-
-FILE_VERSION_FILTER    =
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
-# by doxygen. The layout file controls the global structure of the generated
-# output files in an output format independent way. To create the layout file
-# that represents doxygen's defaults, run doxygen with the -l option. You can
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
-# will be used as the name of the layout file.
-#
-# Note that if you run doxygen from a directory containing a file called
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
-# tag is left empty.
-
-LAYOUT_FILE            = DoxygenLayout.xml
-
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
-# the reference definitions. This must be a list of .bib files. The .bib
-# extension is automatically appended if omitted. This requires the bibtex tool
-# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
-# For LaTeX the style of the bibliography can be controlled using
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. See also \cite for info how to create references.
-
-CITE_BIB_FILES         =
-
-#---------------------------------------------------------------------------
-# Configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated to
-# standard output by doxygen. If QUIET is set to YES this implies that the
-# messages are off.
-# The default value is: NO.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
-# this implies that the warnings are on.
-#
-# Tip: Turn warnings on while writing the documentation.
-# The default value is: YES.
-
-WARNINGS               = YES
-
-# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
-# will automatically be disabled.
-# The default value is: YES.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some parameters
-# in a documented function, or documenting parameters that don't exist or using
-# markup commands wrongly.
-# The default value is: YES.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
-# are documented, but have no documentation for their parameters or return
-# value. If set to NO, doxygen will only warn about wrong or incomplete
-# parameter documentation, but not about the absence of documentation. If
-# EXTRACT_ALL is set to YES then this flag will automatically be disabled.
-# The default value is: NO.
-
-WARN_NO_PARAMDOC       = YES
-
-# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
-# a warning is encountered.
-# The default value is: NO.
-
-WARN_AS_ERROR          = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
-# can produce. The string should contain the $file, $line, and $text tags, which
-# will be replaced by the file and line number from which the warning originated
-# and the warning text. Optionally the format may contain $version, which will
-# be replaced by the version of the file (if it could be obtained via
-# FILE_VERSION_FILTER)
-# The default value is: $file:$line: $text.
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
-# messages should be written. If left blank the output is written to standard
-# error (stderr).
-
-WARN_LOGFILE           = doxygenOutput.log
-
-#---------------------------------------------------------------------------
-# Configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag is used to specify the files and/or directories that contain
-# documented source files. You may enter file names like myfile.cpp or
-# directories like /usr/src/myproject. Separate the files or directories with
-# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
-# Note: If this tag is empty the current directory is searched.
-
-INPUT                  = ../README.md \
-                         ../src \
-                         ../docs
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
-# documentation (see: https://www.gnu.org/software/libiconv/) for the list of
-# possible encodings.
-# The default value is: UTF-8.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# read by doxygen.
-#
-# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
-# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
-# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
-# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment),
-# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen
-# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd,
-# *.vhdl, *.ucf, *.qsf and *.ice.
-
-FILE_PATTERNS          = *.c \
-                         *.cc \
-                         *.cxx \
-                         *.cpp \
-                         *.c++ \
-                         *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++ \
-                         *.inc \
-                         *.m \
-                         *.markdown \
-                         *.md \
-                         *.mm \
-                         *.dox \
-                         *.doc \
-                         *.txt \
-                         *.tpp
-
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
-# be searched for input files as well.
-# The default value is: NO.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should be
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-#
-# Note that relative paths are relative to the directory from which doxygen is
-# run.
-
-EXCLUDE                = ../src/ReadMe.md
-
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
-# directories that are symbolic links (a Unix file system feature) are excluded
-# from the input.
-# The default value is: NO.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories.
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       =
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-#
-# Note that the wildcards are matched against the file with absolute path, so to
-# exclude all test directories use the pattern */test/*
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
-# that contain example code fragments that are included (see the \include
-# command).
-
-EXAMPLE_PATH           = ../examples
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank all
-# files are included.
-
-EXAMPLE_PATTERNS       = * \
-                         *.ino \
-                         *.md \
-                         *.markdown \
-                         *.dox \
-                         *.doc \
-                         *.ini
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude commands
-# irrespective of the value of the RECURSIVE tag.
-# The default value is: NO.
-
-EXAMPLE_RECURSIVE      = YES
-
-# The IMAGE_PATH tag can be used to specify one or more files or directories
-# that contain images that are to be included in the documentation (see the
-# \image command).
-
-IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
-# name of an input file. Doxygen will then use the output that the filter
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
-# will be ignored.
-#
-# Note that the filter must not add or remove lines; it is applied before the
-# code is scanned, but not when the output code is generated. If lines are added
-# or removed, the anchors will not be placed correctly.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis. Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match. The filters are a list of the form: pattern=filter
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
-# patterns match the file name, INPUT_FILTER is applied.
-#
-# Note that for custom extensions or not directly supported extensions you also
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
-# properly processed by doxygen.
-
-FILTER_PATTERNS        = "*.md=python markdown_prefilter.py"
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will also be used to filter the input files that are used for
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
-# The default value is: NO.
-
-FILTER_SOURCE_FILES    = NO
-
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
-# it is also possible to disable source filtering for a specific pattern using
-# *.ext= (so without naming a filter).
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
-
-FILTER_SOURCE_PATTERNS =
-
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
-# is part of the input, its contents will be placed on the main page
-# (index.html). This can be useful if you have a project on for instance GitHub
-# and want to reuse the introduction page also for the doxygen output.
-
-USE_MDFILE_AS_MAINPAGE = README.md
-
-#---------------------------------------------------------------------------
-# Configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
-# generated. Documented entities will be cross-referenced with these sources.
-#
-# Note: To get rid of all source code in the generated output, make sure that
-# also VERBATIM_HEADERS is set to NO.
-# The default value is: NO.
-
-SOURCE_BROWSER         = YES
-
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
-# classes and enums directly into the documentation.
-# The default value is: NO.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
-# special comment blocks from generated source code fragments. Normal C, C++ and
-# Fortran comments will always remain visible.
-# The default value is: YES.
-
-STRIP_CODE_COMMENTS    = NO
-
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
-# entity all documented functions referencing it will be listed.
-# The default value is: NO.
-
-REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
-# all documented entities called/used by that function will be listed.
-# The default value is: NO.
-
-REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES then the hyperlinks from functions in REFERENCES_RELATION and
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
-# link to the documentation.
-# The default value is: YES.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
-# source code will show a tooltip with additional information such as prototype,
-# brief description and links to the definition and documentation. Since this
-# will make the HTML file larger and loading of large files a bit slower, you
-# can opt to disable this feature.
-# The default value is: YES.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-SOURCE_TOOLTIPS        = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code will
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
-# source browser. The htags tool is part of GNU's global source tagging system
-# (see https://www.gnu.org/software/global/global.html). You will need version
-# 4.8.6 or higher.
-#
-# To use it do the following:
-# - Install the latest version of global
-# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
-# - Make sure the INPUT points to the root of the source tree
-# - Run doxygen as normal
-#
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
-# tools must be available from the command line (i.e. in the search path).
-#
-# The result: instead of the source browser generated by doxygen, the links to
-# source code will now point to the output of htags.
-# The default value is: NO.
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
-# verbatim copy of the header file for each class for which an include is
-# specified. Set to NO to disable this.
-# See also: Section \class.
-# The default value is: YES.
-
-VERBATIM_HEADERS       = YES
-
-# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
-# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
-# cost of reduced performance. This can be particularly helpful with template
-# rich C++ code for which doxygen's built-in parser lacks the necessary type
-# information.
-# Note: The availability of this option depends on whether or not doxygen was
-# generated with the -Duse_libclang=ON option for CMake.
-# The default value is: NO.
-
-CLANG_ASSISTED_PARSING = NO
-
-# If clang assisted parsing is enabled you can provide the compiler with command
-# line options that you would normally use when invoking the compiler. Note that
-# the include paths will already be set by doxygen for the files and directories
-# specified with INPUT and INCLUDE_PATH.
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
-
-CLANG_OPTIONS          =
-
-# If clang assisted parsing is enabled you can provide the clang parser with the
-# path to the directory containing a file called compile_commands.json. This
-# file is the compilation database (see:
-# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the
-# options used when the source files were built. This is equivalent to
-# specifying the "-p" option to a clang tool, such as clang-check. These options
-# will then be passed to the parser. Any options specified with CLANG_OPTIONS
-# will be added as well.
-# Note: The availability of this option depends on whether or not doxygen was
-# generated with the -Duse_libclang=ON option for CMake.
-
-CLANG_DATABASE_PATH    =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
-# compounds will be generated. Enable this if the project contains a lot of
-# classes, structs, unions or interfaces.
-# The default value is: YES.
-
-ALPHABETICAL_INDEX     = NO
-
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
-# which the alphabetical index list will be split.
-# Minimum value: 1, maximum value: 20, default value: 5.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all classes will
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
-# while generating the index headers.
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
-# The default value is: YES.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
-# generated HTML page (for example: .htm, .php, .asp).
-# The default value is: .html.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
-# each generated HTML page. If the tag is left blank doxygen will generate a
-# standard header.
-#
-# To get valid HTML the header file that includes any scripts and style sheets
-# that doxygen needs, which is dependent on the configuration options used (e.g.
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
-# default header using
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
-# YourConfigFile
-# and then modify the file new_header.html. See also section "Doxygen usage"
-# for information on how to generate the default header that doxygen normally
-# uses.
-# Note: The header is subject to change so you typically have to regenerate the
-# default header when upgrading to a newer version of doxygen. For a description
-# of the possible markers and block names see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
-# generated HTML page. If the tag is left blank doxygen will generate a standard
-# footer. See HTML_HEADER for more information on how to generate a default
-# footer and what special commands can be used inside the footer. See also
-# section "Doxygen usage" for information on how to generate the default footer
-# that doxygen normally uses.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
-# the HTML output. If left blank doxygen will generate a default style sheet.
-# See also section "Doxygen usage" for information on how to generate the style
-# sheet that doxygen normally uses.
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
-# obsolete.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_STYLESHEET        =
-
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# cascading style sheets that are included after the standard style sheets
-# created by doxygen. Using this option one can overrule certain style aspects.
-# This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list). For an example see the documentation.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_STYLESHEET  =
-
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the HTML output directory. Note
-# that these files will be copied to the base HTML output directory. Use the
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
-# files will be copied as-is; there are no commands or markers available.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_EXTRA_FILES       =
-
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the style sheet and background images according to
-# this color. Hue is specified as an angle on a colorwheel, see
-# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
-# purple, and 360 is red again.
-# Minimum value: 0, maximum value: 359, default value: 220.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_HUE    = 198
-
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
-# in the HTML output. For a value of 0 the output will use grayscales only. A
-# value of 255 will produce the most vivid colors.
-# Minimum value: 0, maximum value: 255, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_SAT    = 83
-
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
-# luminance component of the colors in the HTML output. Values below 100
-# gradually make the output lighter, whereas values above 100 make the output
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
-# change the gamma.
-# Minimum value: 40, maximum value: 240, default value: 80.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_COLORSTYLE_GAMMA  = 88
-
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP         = YES
-
-# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
-# documentation will contain a main index with vertical navigation menus that
-# are dynamically created via JavaScript. If disabled, the navigation index will
-# consists of multiple levels of tabs that are statically embedded in every HTML
-# page. Disable this option to support browsers that do not have JavaScript,
-# like the Qt help browser.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_MENUS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_DYNAMIC_SECTIONS  = YES
-
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
-# shown in the various tree structured indices initially; the user can expand
-# and collapse entries dynamically later on. Doxygen will expand the tree to
-# such a level that at most the specified number of entries are visible (unless
-# a fully collapsed tree already exceeds this amount). So setting the number of
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
-# representing an infinite number of entries and will result in a full expanded
-# tree by default.
-# Minimum value: 0, maximum value: 9999, default value: 100.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_INDEX_NUM_ENTRIES = 500
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
-# generated that can be used as input for Apple's Xcode 3 integrated development
-# environment (see: https://developer.apple.com/xcode/), introduced with OSX
-# 10.5 (Leopard). To create a documentation set, doxygen will generate a
-# Makefile in the HTML output directory. Running make will produce the docset in
-# that directory and running make install will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
-# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
-# genXcode/_index.html for more information.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_DOCSET        = NO
-
-# This tag determines the name of the docset feed. A documentation feed provides
-# an umbrella under which multiple documentation sets from a single provider
-# (such as a company or product suite) can be grouped.
-# The default value is: Doxygen generated docs.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# This tag specifies a string that should uniquely identify the documentation
-# set bundle. This should be a reverse domain-name style string, e.g.
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
-# the documentation publisher. This should be a reverse domain-name style
-# string, e.g. com.mycompany.MyDocSet.documentation.
-# The default value is: org.doxygen.Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
-
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
-# The default value is: Publisher.
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
-
-DOCSET_PUBLISHER_NAME  = Publisher
-
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
-# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on
-# Windows.
-#
-# The HTML Help Workshop contains a compiler that can convert all HTML output
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
-# files are now used as the Windows 98 help format, and will replace the old
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
-# HTML files also contain an index, a table of contents, and you can search for
-# words in the documentation. The HTML workshop also contains a viewer for
-# compressed HTML files.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_HTMLHELP      = NO
-
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
-# file. You can add a path in front of the file if the result should not be
-# written to the html output directory.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_FILE               =
-
-# The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler (hhc.exe). If non-empty,
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
-# The file has to be specified with full path.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-HHC_LOCATION           =
-
-# The GENERATE_CHI flag controls if a separate .chi index file is generated
-# (YES) or that it should be included in the main .chm file (NO).
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-GENERATE_CHI           = NO
-
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
-# and project file content.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-CHM_INDEX_ENCODING     =
-
-# The BINARY_TOC flag controls whether a binary table of contents is generated
-# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
-# enables the Previous and Next buttons.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
-# the table of contents of the HTML help documentation and to the tree view.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
-
-TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
-# (.qch) of the generated HTML documentation.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
-# the file name of the resulting .qch file. The path specified is relative to
-# the HTML output folder.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QCH_FILE               =
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
-# Project output. For more information please see Qt Help Project / Namespace
-# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_NAMESPACE          = org.doxygen.Project
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
-# Help Project output. For more information please see Qt Help Project / Virtual
-# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-
-# folders).
-# The default value is: doc.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_VIRTUAL_FOLDER     = doc
-
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
-# filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_NAME   =
-
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
-# custom filter to add. For more information please see Qt Help Project / Custom
-# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-
-# filters).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_CUST_FILTER_ATTRS  =
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
-# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHP_SECT_FILTER_ATTRS  =
-
-# The QHG_LOCATION tag can be used to specify the location of Qt's
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
-# generated .qhp file.
-# This tag requires that the tag GENERATE_QHP is set to YES.
-
-QHG_LOCATION           =
-
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
-# generated, together with the HTML files, they form an Eclipse help plugin. To
-# install this plugin and make it available under the help contents menu in
-# Eclipse, the contents of the directory containing the HTML and XML files needs
-# to be copied into the plugins directory of eclipse. The name of the directory
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
-# After copying Eclipse needs to be restarted before the help appears.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_ECLIPSEHELP   = NO
-
-# A unique identifier for the Eclipse help plugin. When installing the plugin
-# the directory name containing the HTML and XML files should also have this
-# name. Each documentation set should have its own identifier.
-# The default value is: org.doxygen.Project.
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
-
-ECLIPSE_DOC_ID         = org.doxygen.Project
-
-# If you want full control over the layout of the generated HTML pages it might
-# be necessary to disable the index and replace it with your own. The
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
-# of each HTML page. A value of NO enables the index and the value YES disables
-# it. Since the tabs in the index contain the same information as the navigation
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-DISABLE_INDEX          = NO
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
-# structure should be generated to display hierarchical information. If the tag
-# value is set to YES, a side panel will be generated containing a tree-like
-# index structure (just like the one that is generated for HTML Help). For this
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
-# (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
-# further fine-tune the look of the index. As an example, the default style
-# sheet generated by doxygen has an example that shows how to put an image at
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
-# the same information as the tab index, you could consider setting
-# DISABLE_INDEX to YES when enabling this option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-GENERATE_TREEVIEW      = YES
-
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
-# doxygen will group on one line in the generated HTML documentation.
-#
-# Note that a value of 0 will completely suppress the enum values from appearing
-# in the overview section.
-# Minimum value: 0, maximum value: 20, default value: 4.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
-# to set the initial width (in pixels) of the frame in which the tree is shown.
-# Minimum value: 0, maximum value: 1500, default value: 250.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-TREEVIEW_WIDTH         = 200
-
-# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
-# external symbols imported via tag files in a separate window.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-EXT_LINKS_IN_WINDOW    = NO
-
-# If the HTML_FORMULA_FORMAT option is set to svg, doxygen will use the pdf2svg
-# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
-# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
-# the HTML output. These images will generally look nicer at scaled resolutions.
-# Possible values are: png (the default) and svg (looks nicer but requires the
-# pdf2svg or inkscape tool).
-# The default value is: png.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_FORMULA_FORMAT    = png
-
-# Use this tag to change the font size of LaTeX formulas included as images in
-# the HTML documentation. When you change the font size after a successful
-# doxygen run you need to manually remove any form_*.png images from the HTML
-# output directory to force them to be regenerated.
-# Minimum value: 8, maximum value: 50, default value: 10.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_FONTSIZE       = 10
-
-# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT    = YES
-
-# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
-# to create new LaTeX commands to be used in formulas as building blocks. See
-# the section "Including formulas" for details.
-
-FORMULA_MACROFILE      =
-
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
-# https://www.mathjax.org) which uses client side JavaScript for the rendering
-# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
-# installed or if you want to formulas look prettier in the HTML output. When
-# enabled you may also need to install MathJax separately and configure the path
-# to it using the MATHJAX_RELPATH option.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-USE_MATHJAX            = NO
-
-# When MathJax is enabled you can set the default output format to be used for
-# the MathJax output. See the MathJax site (see:
-# http://docs.mathjax.org/en/latest/output.html) for more details.
-# Possible values are: HTML-CSS (which is slower, but has the best
-# compatibility), NativeMML (i.e. MathML) and SVG.
-# The default value is: HTML-CSS.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_FORMAT         = HTML-CSS
-
-# When MathJax is enabled you need to specify the location relative to the HTML
-# output directory using the MATHJAX_RELPATH option. The destination directory
-# should contain the MathJax.js script. For instance, if the mathjax directory
-# is located at the same level as the HTML output directory, then
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
-# Content Delivery Network so you can quickly see the result without installing
-# MathJax. However, it is strongly recommended to install a local copy of
-# MathJax from https://www.mathjax.org before deployment.
-# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_RELPATH        = https://cdn.jsdelivr.net/npm/mathjax@2
-
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
-# extension names that should be enabled during MathJax rendering. For example
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_EXTENSIONS     =
-
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
-# of code that will be used on startup of the MathJax code. See the MathJax site
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
-# example see the documentation.
-# This tag requires that the tag USE_MATHJAX is set to YES.
-
-MATHJAX_CODEFILE       =
-
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
-# the HTML output. The underlying search engine uses javascript and DHTML and
-# should work on any modern browser. Note that when using HTML help
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
-# there is already a search function so this one should typically be disabled.
-# For large projects the javascript based search engine can be slow, then
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
-# search using the keyboard; to jump to the search box use <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = YES
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using JavaScript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: https://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: https://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when not enabling USE_PDFLATEX the default is latex when enabling
-# USE_PDFLATEX the default is pdflatex and when in the later case latex is
-# chosen this is overwritten by pdflatex. For specific output languages the
-# default can have been set differently, this depends on the implementation of
-# the output language.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         =
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# Note: This tag is used in the Makefile / make.bat.
-# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
-# (.tex).
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
-# generate index for LaTeX. In case there is no backslash (\) as first character
-# it will be automatically added in the LaTeX code.
-# Note: This tag is used in the generated output file (.tex).
-# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
-# The default value is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_MAKEINDEX_CMD    = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. The package can be specified just
-# by its name or with the correct syntax as to be used with the LaTeX
-# \usepackage command. To get the times font for instance you can specify :
-# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
-# To use the option intlimits with the amsmath package you can specify:
-# EXTRA_PACKAGES=[intlimits]{amsmath}
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as
-# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
-# files. Set this option to YES, to get a higher quality PDF documentation.
-#
-# See also section LATEX_CMD_NAME for selecting the engine.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP        = NO
-
-# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
-# path from which the emoji images will be read. If a relative path is entered,
-# it will be relative to the LATEX_OUTPUT directory. If left blank the
-# LATEX_OUTPUT directory will be used.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EMOJI_DIRECTORY  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# configuration file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's configuration file. A template extensions file can be
-# generated using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = YES
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it.
-# The default directory is: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = NO
-
-# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, doxygen will include
-# namespace members in file scope as well, matching the HTML output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_NS_MEMB_FILE_SCOPE = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
-# front of it.
-# The default directory is: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures
-# the structure of the code including all documentation. Note that this feature
-# is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to Sqlite3 output
-#---------------------------------------------------------------------------
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  = *.c \
-                         *.cc \
-                         *.cxx \
-                         *.cpp \
-                         *.c++ \
-                         *.h \
-                         *.hh \
-                         *.hxx \
-                         *.hpp \
-                         *.h++ \
-                         *.md \
-                         *.markdown
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __attribute__((__progmem__))= \
-                         PLATFORMIO=40304 \
-                         ARDUINO_AVR_ENVIRODIY_MAYFLY \
-                         F_CPU=8000000L \
-                         ARDUINO_ARCH_AVR \
-                         ARDUINO=10808 \
-                         __AVR_ATmega1284P__ \
-                         SDI12_EXTERNAL_PCINT \
-                         ESP32
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = YES
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = YES
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           = Helvetica
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = YES
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = YES
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command. Disabling a call graph can be
-# accomplished by means of the command \hidecallgraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command. Disabling a caller graph can be
-# accomplished by means of the command \hidecallergraph.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. For an explanation of the image formats see the section
-# output formats in the documentation of the dot tool (Graphviz (see:
-# http://www.graphviz.org/)).
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
-# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
-# png:gdiplus:gdiplus.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = YES
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
-# configuration file for plantuml.
-
-PLANTUML_CFG_FILE      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 500
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/DoxygenLayout.xml b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/DoxygenLayout.xml
deleted file mode 100644
index 6de61a2d578ee77132503c32bf0d8319ca5235c7..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/DoxygenLayout.xml
+++ /dev/null
@@ -1,266 +0,0 @@
-<doxygenlayout version="1.0">
-  <!-- Generated by doxygen 1.8.18 -->
-  <!-- Navigation index tabs for HTML output -->
-  <navindex>
-    <tab type="mainpage" visible="yes" title="About">
-        <tab type="user" url="@ref specifications" title="The SDI-12 Specification"/>
-    </tab>
-
-    <tab type="pages" visible="no" title="" intro=""/>
-
-    <tab type="modules" visible="no" title="" intro=""/>
-
-    <tab type="usergroup" visible="yes" title="Functions" url="@ref SDI12">
-        <tab type="user" url="@ref ctor" title="Constructor, Destructor, Begins, and Setters"/>
-        <tab type="user" url="@ref communication" title="Waking Up and Talking To Sensors"/>
-        <tab type="user" url="@ref reading_buffer" title="Reading from the SDI-12 Buffer"/>
-        <tab type="user" url="@ref line_states" title="Data Line States"/>
-        <tab type="user" url="@ref multiple_objects" title="Using more than one SDI-12 Object"/>
-        <tab type="user" url="@ref interrupt_fxns" title="Interrupt Service Routine"/>
-    </tab>
-
-    <tab type="examples" visible="no" title="Examples" intro="Examples using the SDI-12 Library"/>
-
-    <tab type="usergroup" visible="yes" title="Examples" url="@ref examples_page">
-        <tab type="user" url="@ref example_a_page" title="Example A: Getting Sensor Information"/>
-        <tab type="user" url="@ref example_b_page" title="Example B: Address Change"/>
-        <tab type="user" url="@ref example_c_page" title="Example C: Checking all Addresses"/>
-        <tab type="user" url="@ref example_d_page" title="Example D: Logging Data"/>
-        <tab type="user" url="@ref example_e_page" title="Example E: Parsing Data"/>
-        <tab type="user" url="@ref example_f_page" title="Example F: Simple Data Request"/>
-        <tab type="user" url="@ref example_g_page" title="Example G: Terminal Emulator 1"/>
-        <tab type="user" url="@ref example_h_page" title="Example H: Slave Implementation"/>
-        <tab type="user" url="@ref example_i_page" title="Example I: Terminal Emulator 2"/>
-        <tab type="user" url="@ref example_j_page" title="Example J: External Interrupts"/>
-        <tab type="user" url="@ref example_k_page" title="Example K: Concurrent Measurements"/>
-    </tab>
-
-    <tab type="namespaces" visible="yes" title="">
-      <tab type="namespacelist" visible="yes" title="" intro=""/>
-      <tab type="namespacemembers" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="interfaces" visible="yes" title="">
-      <tab type="interfacelist" visible="yes" title="" intro=""/>
-      <tab type="interfaceindex" visible="$ALPHABETICAL_INDEX" title=""/>
-      <tab type="interfacehierarchy" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="classes" visible="yes" title="">
-      <tab type="classlist" visible="yes" title="" intro=""/>
-      <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
-      <tab type="hierarchy" visible="no" title="" intro=""/>
-      <tab type="classmembers" visible="no" title="" intro=""/>
-    </tab>
-
-    <tab type="structs" visible="yes" title="">
-      <tab type="structlist" visible="yes" title="" intro=""/>
-      <tab type="structindex" visible="$ALPHABETICAL_INDEX" title=""/>
-    </tab>
-
-    <tab type="exceptions" visible="yes" title="">
-      <tab type="exceptionlist" visible="yes" title="" intro=""/>
-      <tab type="exceptionindex" visible="$ALPHABETICAL_INDEX" title=""/>
-      <tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="files" visible="yes" title="">
-      <tab type="filelist" visible="yes" title="" intro=""/>
-      <tab type="globals" visible="yes" title="" intro=""/>
-    </tab>
-
-    <tab type="usergroup" visible="yes" title="Other Reading">
-        <tab type="user" url="@ref interrupts_page" title="Overview of Pin Change Interrupts"/>
-        <tab type="user" url="@ref rx_page" title="Stepping through the Rx ISR"/>
-    </tab>
-
-  </navindex>
-
-  <!-- Layout definition for a class page -->
-  <class>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <inheritancegraph visible="$CLASS_GRAPH"/>
-    <collaborationgraph visible="$COLLABORATION_GRAPH"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestedclasses visible="yes" title=""/>
-      <publictypes title=""/>
-      <services title=""/>
-      <interfaces title=""/>
-      <publicslots title=""/>
-      <signals title=""/>
-      <publicmethods title=""/>
-      <publicstaticmethods title=""/>
-      <publicattributes title=""/>
-      <publicstaticattributes title=""/>
-      <protectedtypes title=""/>
-      <protectedslots title=""/>
-      <protectedmethods title=""/>
-      <protectedstaticmethods title=""/>
-      <protectedattributes title=""/>
-      <protectedstaticattributes title=""/>
-      <packagetypes title=""/>
-      <packagemethods title=""/>
-      <packagestaticmethods title=""/>
-      <packageattributes title=""/>
-      <packagestaticattributes title=""/>
-      <properties title=""/>
-      <events title=""/>
-      <privatetypes title=""/>
-      <privateslots title=""/>
-      <privatemethods title=""/>
-      <privatestaticmethods title=""/>
-      <privateattributes title=""/>
-      <privatestaticattributes title=""/>
-      <friends title=""/>
-      <related title="" subtitle=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <typedefs title=""/>
-      <enums title=""/>
-      <services title=""/>
-      <interfaces title=""/>
-      <constructors title=""/>
-      <functions title=""/>
-      <related title=""/>
-      <variables title=""/>
-      <properties title=""/>
-      <events title=""/>
-    </memberdef>
-    <allmemberslink visible="yes"/>
-    <usedfiles visible="$SHOW_USED_FILES"/>
-    <authorsection visible="yes"/>
-  </class>
-
-  <!-- Layout definition for a namespace page -->
-  <namespace>
-    <briefdescription visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestednamespaces visible="yes" title=""/>
-      <constantgroups visible="yes" title=""/>
-      <interfaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <structs visible="yes" title=""/>
-      <exceptions visible="yes" title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </namespace>
-
-  <!-- Layout definition for a file page -->
-  <file>
-    <briefdescription visible="yes"/>
-    <includes visible="$SHOW_INCLUDE_FILES"/>
-    <includegraph visible="$INCLUDE_GRAPH"/>
-    <includedbygraph visible="$INCLUDED_BY_GRAPH"/>
-    <sourcelink visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <interfaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <structs visible="yes" title=""/>
-      <exceptions visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <constantgroups visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <inlineclasses title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <functions title=""/>
-      <variables title=""/>
-    </memberdef>
-    <authorsection/>
-  </file>
-
-  <!-- Layout definition for a group page -->
-  <group>
-    <briefdescription visible="yes"/>
-    <groupgraph visible="$GROUP_GRAPHS"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <nestedgroups visible="yes" title=""/>
-      <dirs visible="yes" title=""/>
-      <files visible="yes" title=""/>
-      <namespaces visible="yes" title=""/>
-      <classes visible="yes" title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-      <membergroups visible="yes"/>
-    </memberdecl>
-    <memberdef>
-      <pagedocs/>
-      <inlineclasses title=""/>
-      <defines title=""/>
-      <typedefs title=""/>
-      <sequences title=""/>
-      <dictionaries title=""/>
-      <enums title=""/>
-      <enumvalues title=""/>
-      <functions title=""/>
-      <variables title=""/>
-      <signals title=""/>
-      <publicslots title=""/>
-      <protectedslots title=""/>
-      <privateslots title=""/>
-      <events title=""/>
-      <properties title=""/>
-      <friends title=""/>
-    </memberdef>
-    <authorsection visible="yes"/>
-  </group>
-
-  <!-- Layout definition for a directory page -->
-  <directory>
-    <briefdescription visible="yes"/>
-    <directorygraph visible="yes"/>
-    <detaileddescription title=""/>
-    <memberdecl>
-      <dirs visible="yes"/>
-      <files visible="yes"/>
-    </memberdecl>
-  </directory>
-</doxygenlayout>
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/OverviewOfInterrupts.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/OverviewOfInterrupts.md
deleted file mode 100644
index c6c3edb40958dff5cabc4300728ac4421bdcc95f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/OverviewOfInterrupts.md
+++ /dev/null
@@ -1,186 +0,0 @@
-[//]: # ( @page interrupts_page Overview of Interrupts )
-# Overview of Interrupts
-
-[//]: # ( @tableofcontents )
-
-[//]: # ( Start GitHub Only )
-- [Overview of Interrupts](#overview-of-interrupts)
-  - [What is an Interrupt?](#what-is-an-interrupt)
-  - [Directly Controlling Interrupts on an AVR Board](#directly-controlling-interrupts-on-an-avr-board)
-    - [Some Vocabulary:](#some-vocabulary)
-    - [Enabling an Interrupt](#enabling-an-interrupt)
-    - [Disabling an Interrupt](#disabling-an-interrupt)
-
-[//]: # ( End GitHub Only )
-
-[//]: # ( @section interrupts_what What is an Interrupt? )
-## What is an Interrupt?
-An interrupt is a signal that causes the microcontroller to halt execution of the program, and perform a subroutine known as an interrupt handler or Interrupt Service Routine (ISR).
-After the ISR, program execution continues where it left off.
-This allows the microcontroller to efficiently handle a time-sensitive function such as receiving a burst of data on one of its pins, by not forcing the microcontroller to wait for the data.
-It can perform other tasks until the interrupt is called.
-
-All processors running some sort of Arduino core can support multiple type of interrupts.
-This library specifically makes us of pin change interrupts - interrupts that trigger an ISR on any change of state detected for a specified pin.
-
-Obviously, we don't want the processor to be halting operation every time any pin changes voltage, so we can disable or enable interrupts on a pin-by-pin basis.
-For Atmel SAMD or Espressif processors the processor has dedicated control registers for each pin and the Arduino core provides us with a handy "attachInterrupt" function to use to tie our ISR to that pin.
-For AVR processors, like the Arduino Uno or the EnviroDIY Mayfly, we have to use a get a bit fancier to control the interrupts.
-
-[//]: # ( @section interrupts_avr Directly Controlling Interrupts on an AVR Board )
-## Directly Controlling Interrupts on an AVR Board
-
-[//]: # ( @subsection interrupts_vocab Some Vocabulary )
-### Some Vocabulary:
-
-**Registers**: small 1-byte (8-bit) stores of memory directly accessible by processor
-PCMSK0, PCMSK1, PCMSK2, PCMSK3
-
-**PCICRx**: a register where the three least significant bits enable or disable pin change interrupts on a range of pins
-- i.e. {0,0,0,0,0,PCIE2,PCIE1,PCIE0}, where PCIE2 maps to PCMSK2, PCIE1 maps to PCMSK1, and PCIE0 maps to PCMSK0.
-
-**PCMSKx**: a register that stores the state (enabled/disabled) of pin change interrupts on a single pin
-- Each bit stores a 1 (enabled) or 0 (disabled).
-
-On an Arduino Uno:
-- There is on PCICR register controlling three ranges of pins
-- There are three mask registers (PCMSK0, PCMSK1, and PCMSK2) controlling individual pins.
-- Looking at one mask register, PCMSK0:
-    - the 8 bits represent: PCMSK0 {PCINT7, PCINT6, PCINT5, PCINT4, PCINT3, PCINT2, PCINT1, PCINT0}
-    - these map to:         PCMSK0 {XTAL2,  XTAL1,  Pin 13, Pin 12, Pin 11, Pin 10, Pin 9,  Pin 8}
-
-**noInterrupts()**: a function to globally disable interrupts (of all types)
-
-**interrupts()**: a function to globally enable interrupts (of all types)
-- interrupts will only occur if the requisite registers are set (e.g. PCMSK and PCICR).
-
-[//]: # ( @subsection interrupts_enable Enabling an Interrupt )
-### Enabling an Interrupt
-
-Initially, no interrupts are enabled, so PCMSK0 looks like: `{00000000}`.
-If we were to use pin 9 as the data pin, we would set the bit in the pin 9 position to 1, like so: `{00000010}`.
-
-To accomplish this, we can make use of some predefined macros.
-
-One macro `digitalPinToPCMSK` is defined in "pins_arduino.h" which allows us to quickly get the proper register (PCMSK0, PCMSK1, or PCMSK2) given the number of the Arduino pin.
-So when we write: `digitalPinToPCMSK(9)`, the address of PCMSK0 is returned.
-We can use the dereferencing operator '\*' to get the value of the address.
-
-That is, `*digitalPinToPCMSK(9)` returns: `{00000000}`.
-
-Another macro , `digitalPinToPCMSKbit` is also defined in "pins_arduino.h" and returns the position of the bit of interest within the PCMSK of interest.
-
-So when we write: `digitalPinToPCMSKbit(9)`, the value returned is 1, because pin 9 is represented by the "1st bit" within PCMSK0, which has a zero-based index.
-That is: PCMSK { 7th bit, 6th bit, 5th bit, 4th bit, 3rd bit, 2nd bit, 1st bit, 0th bit }
-
-The leftward bit shift operator `<<` can then used to create a "mask".
-Masks are data that are used during bitwise operations to manipulate (enable / disable) one or more individual bits simultaneously.
-
-The syntax for the operator is (variable << number_of_bits).
-Some examples:
-
-```cpp
-byte a = 5;       // binary: a =  00000101
-
-byte b = a << 4;  // binary: b =  01010000
-```
-
-So when we write: `(1<<digitalPinToPCMSKbit(9))`, we get: `{00000010}`.
-
-Or equivalently:  `(1<<1)`, we get: `{00000010}`.
-
-To use the mask to set the bit of interest we use the bitwise or operator `|`.
-We will use the compact `|=` notation which does the operation and then stores the result back into the left hand side.
-
-
-So the operation:
-
-```cpp
-*digitalPinToPCMSK(_dataPin) |= (1<<digitalPinToPCMSKbit(9));
-```
-Accomplishes:
-
-```
-    (1<<digitalPinToPCMSKbit(9))              {00000010}
-
-    PCMSK0                               |    {00000000}
-
-                                             -------------
-
-                                              {00000010}
-```
-
-
-We must also enable the global control for the interrupt. This is done in a similar fashion:
-
-`*digitalPinToPCICR(_dataPin) |= (1<<digitalPinToPCICRbit(_dataPin));`
-
-
-Now let's assume that part of your Arduino sketch outside of SDI-12 had set a pin change interrupt on pin 13.
-Pin 9 and pin 13 are on the same PCMSK in the case of the Arduino Uno.
-
-This time before we set the bit for pin nine,
-
-`*digitalPinToPCMSK(9)` returns: `{00100000}`.
-
-So now:
-
-```
-    (1<<digitalPinToPCMSKbit(9))              {00000010}
-
-    PCMSK0                               |    {00100000}
-
-                                            -------------
-
-                                              {00100010}
-```
-
-By using a bitmask and bitwise operation, we have successfully enabled pin 9 without effecting the state of pin 13.
-
-
-[//]: # ( @subsection interrupts_disable Disabling an Interrupt )
-### Disabling an Interrupt
-
-When the we would like to put the SDI-12 object in the DISABLED state, (e.g. the destructor is called), we need to make sure the bit corresponding to the data pin is unset.
-
-Let us consider again the case of where an interrupt has been enabled on pin 13: {00100010}.
-We want to be sure not to disturb this interrupt when disabling the interrupt on pin 9.
-
-We will make use of similar macros, but this time we will use an inverted bit mask and the AND operation.
-The `&=` operator is equivalent to a bitwise AND operation between the PCMSK register of interest and the previous result, which is then stored back into the PCMSK of interest.
-The `*` is the dereferencing operator, which is equivalently translated to "value pointed by", and allows us to store the result back into the proper PCMSK.
-
-Again `1<<digitalPinToPCMSKbit(9)` returns `{00000010}`
-
-The inversion symbol `~` modifies the result to `{11111101}`
-
-So to finish our example:
-
-```
-    ~(1<<digitalPinToPCMSKbit(9))             {11111101}
-
-    PCMSK0                               &    {00100010}
-
-                                            -------------
-
-                                              {00100000}
-```
-
-So only the interrupt on pin 13 remains set.
-As a matter of book keeping, if we unset the last bit in the PCMSK, we ought to also unset the respective bit in the PCICR.
-
-    `!(*digitalPinToPCMSK(9)`
-
-        will evaluate TRUE if PCMSK {00000000}
-
-        will evaluate FALSE if PCMSK != {00000000}
-
-In this case, pin 13 is set, so the expression would be FALSE.
-If we go back to the original case without pin 13, the expression after disabling pin 9 would evaluate to TRUE.
-
-Therefore if we evaluate to TRUE, we should tidy up:
-```cpp
-if(!*digitalPinToPCMSK(_dataPin)){
-      *digitalPinToPCICR(_dataPin) &= ~(1<<digitalPinToPCICRbit(_dataPin));
-  }
-```
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text-Cropped.png b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text-Cropped.png
deleted file mode 100644
index e89852bf99eed5d298497996e90a4c7eaf1b5c5d..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text-Cropped.png and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text.png b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text.png
deleted file mode 100644
index 2ebe081ab7904214b34a17d742e74d7e704557fd..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12Text.png and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version-1_4-Dec-1-2017.pdf b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version-1_4-Dec-1-2017.pdf
deleted file mode 100644
index 162fd79fa22aacf5bc3c3a787afc9dbad1ec7516..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version-1_4-Dec-1-2017.pdf and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version1_3 January 28, 2016.pdf b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version1_3 January 28, 2016.pdf
deleted file mode 100644
index 7e945a86a961cdb723211e78ffeb1837212972ed..0000000000000000000000000000000000000000
Binary files a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/SDI-12_version1_3 January 28, 2016.pdf and /dev/null differ
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/css/m-EnviroDIY+documentation.compiled.css b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/css/m-EnviroDIY+documentation.compiled.css
deleted file mode 100644
index 100852273f7c1c0e0be8fddcf7082b4bb0f1c217..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/css/m-EnviroDIY+documentation.compiled.css
+++ /dev/null
@@ -1,4316 +0,0 @@
-/* Generated using `./postprocess.py m-EnviroDIY.css m-documentation.css -o m-EnviroDIY+documentation.compiled.css`. Do not edit. */
-
-/*
-    This file is part of m.css.
-
-    Copyright © 2017, 2018, 2019, 2020 Vladimír Vondruš <mosra@centrum.cz>
-
-    Permission is hereby granted, free of charge, to any person obtaining a
-    copy of this software and associated documentation files (the "Software"),
-    to deal in the Software without restriction, including without limitation
-    the rights to use, copy, modify, merge, publish, distribute, sublicense,
-    and/or sell copies of the Software, and to permit persons to whom the
-    Software is furnished to do so, subject to the following conditions:
-
-    The above copyright notice and this permission notice shall be included
-    in all copies or substantial portions of the Software.
-
-    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-    DEALINGS IN THE SOFTWARE.
-*/
-
-*, ::before, ::after { box-sizing: border-box; }
-body { margin: 0; }
-.m-container {
-  width: 100%;
-  margin: auto;
-  padding-left: 1rem;
-  padding-right: 1rem;
-}
-.m-row {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-.m-row:after {
-  content: ' ';
-  clear: both;
-  display: table;
-}
-.m-row > [class*='m-col-'] {
-  position: relative;
-  padding: 1rem;
-}
-[class*='m-clearfix-']::after {
-  display: block;
-  content: ' ';
-  clear: both;
-}
-[class*='m-show-'] {
-  display: none;
-}
-.m-container-inflate, :not(.m-row) > [class*='m-col-'] {
-  margin-bottom: 1rem;
-}
-.m-container-inflate:last-child, :not(.m-row) > [class*='m-col-']:last-child {
-  margin-bottom: 0;
-}
-.m-container.m-nopad, [class*='m-col-'].m-nopad,
-.m-container.m-nopadx, [class*='m-col-'].m-nopadx,
-.m-container.m-nopadl, [class*='m-col-'].m-nopadl {
-  padding-left: 0;
-}
-.m-container.m-nopad, [class*='m-col-'].m-nopad,
-.m-container.m-nopadx, [class*='m-col-'].m-nopadx,
-.m-container.m-nopadr, [class*='m-col-'].m-nopadr {
-  padding-right: 0;
-}
-[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadt {
-  padding-top: 0;
-}
-[class*='m-col-'].m-nopad, [class*='m-col-'].m-nopady, [class*='m-col-'].m-nopadb,
-.m-container-inflate.m-nopadb {
-  padding-bottom: 0;
-}
-[class*='m-col-t-'] { float: left; }
-.m-left-t {
-  padding-right: 1rem;
-  float: left;
-}
-.m-right-t, [class*='m-col-t-'].m-right-t {
-  padding-left: 1rem;
-  float: right;
-}
-.m-center-t, [class*='m-col-t-'].m-center-t {
-  float: none;
-}
-.m-center-t, [class*='m-col-t-'].m-center-t {
-  margin-left: auto;
-  margin-right: auto;
-  float: none;
-}
-.m-col-t-1  { width: calc(1  * 100% / 12); }
-.m-col-t-2  { width: calc(2  * 100% / 12); }
-.m-col-t-3  { width: calc(3  * 100% / 12); }
-.m-col-t-4  { width: calc(4  * 100% / 12); }
-.m-col-t-5  { width: calc(5  * 100% / 12); }
-.m-col-t-6  { width: calc(6  * 100% / 12); }
-.m-col-t-7  { width: calc(7  * 100% / 12); }
-.m-col-t-8  { width: calc(8  * 100% / 12); }
-.m-col-t-9  { width: calc(9  * 100% / 12); }
-.m-col-t-10 { width: calc(10 * 100% / 12); }
-.m-col-t-11 { width: calc(11 * 100% / 12); }
-.m-col-t-12 { width: calc(12 * 100% / 12); }
-.m-push-t-1  { left: calc(1  * 100% / 12); }
-.m-push-t-2  { left: calc(2  * 100% / 12); }
-.m-push-t-3  { left: calc(3  * 100% / 12); }
-.m-push-t-4  { left: calc(4  * 100% / 12); }
-.m-push-t-5  { left: calc(5  * 100% / 12); }
-.m-push-t-6  { left: calc(6  * 100% / 12); }
-.m-push-t-7  { left: calc(7  * 100% / 12); }
-.m-push-t-8  { left: calc(8  * 100% / 12); }
-.m-push-t-9  { left: calc(9  * 100% / 12); }
-.m-push-t-10 { left: calc(10 * 100% / 12); }
-.m-push-t-11 { left: calc(11 * 100% / 12); }
-.m-pull-t-1  { right: calc(1  * 100% / 12); }
-.m-pull-t-2  { right: calc(2  * 100% / 12); }
-.m-pull-t-3  { right: calc(3  * 100% / 12); }
-.m-pull-t-4  { right: calc(4  * 100% / 12); }
-.m-pull-t-5  { right: calc(5  * 100% / 12); }
-.m-pull-t-6  { right: calc(6  * 100% / 12); }
-.m-pull-t-7  { right: calc(7  * 100% / 12); }
-.m-pull-t-8  { right: calc(8  * 100% / 12); }
-.m-pull-t-9  { right: calc(9  * 100% / 12); }
-.m-pull-t-10 { right: calc(10 * 100% / 12); }
-.m-pull-t-11 { right: calc(11 * 100% / 12); }
-@media screen and (min-width: 576px) {
-  .m-container { width: 560px; }
-  .m-container-inflatable .m-col-s-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-  .m-container-inflatable .m-col-s-10 .m-container-inflate.m-left-s {
-    margin-left: -10%;
-  }
-  .m-container-inflatable .m-col-s-10 .m-container-inflate.m-right-s {
-    margin-right: -10%;
-  }
-  [class*='m-col-s-'] { float: left; }
-  .m-left-s {
-    padding-right: 1rem;
-    float: left;
-  }
-  .m-right-s, [class*='m-col-s-'].m-right-s {
-    padding-left: 1rem;
-    float: right;
-  }
-  .m-center-s, [class*='m-col-s-'].m-center-s {
-    margin-left: auto;
-    margin-right: auto;
-    float: none;
-  }
-  .m-col-s-1  { width: calc(1  * 100% / 12); }
-  .m-col-s-2  { width: calc(2  * 100% / 12); }
-  .m-col-s-3  { width: calc(3  * 100% / 12); }
-  .m-col-s-4  { width: calc(4  * 100% / 12); }
-  .m-col-s-5  { width: calc(5  * 100% / 12); }
-  .m-col-s-6  { width: calc(6  * 100% / 12); }
-  .m-col-s-7  { width: calc(7  * 100% / 12); }
-  .m-col-s-8  { width: calc(8  * 100% / 12); }
-  .m-col-s-9  { width: calc(9  * 100% / 12); }
-  .m-col-s-10 { width: calc(10 * 100% / 12); }
-  .m-col-s-11 { width: calc(11 * 100% / 12); }
-  .m-col-s-12 { width: calc(12 * 100% / 12); }
-  .m-push-s-0  { left: calc(0  * 100% / 12); }
-  .m-push-s-1  { left: calc(1  * 100% / 12); }
-  .m-push-s-2  { left: calc(2  * 100% / 12); }
-  .m-push-s-3  { left: calc(3  * 100% / 12); }
-  .m-push-s-4  { left: calc(4  * 100% / 12); }
-  .m-push-s-5  { left: calc(5  * 100% / 12); }
-  .m-push-s-6  { left: calc(6  * 100% / 12); }
-  .m-push-s-7  { left: calc(7  * 100% / 12); }
-  .m-push-s-8  { left: calc(8  * 100% / 12); }
-  .m-push-s-9  { left: calc(9  * 100% / 12); }
-  .m-push-s-10 { left: calc(10 * 100% / 12); }
-  .m-push-s-11 { left: calc(11 * 100% / 12); }
-  .m-pull-s-0  { right: calc(0  * 100% / 12); }
-  .m-pull-s-1  { right: calc(1  * 100% / 12); }
-  .m-pull-s-2  { right: calc(2  * 100% / 12); }
-  .m-pull-s-3  { right: calc(3  * 100% / 12); }
-  .m-pull-s-4  { right: calc(4  * 100% / 12); }
-  .m-pull-s-5  { right: calc(5  * 100% / 12); }
-  .m-pull-s-6  { right: calc(6  * 100% / 12); }
-  .m-pull-s-7  { right: calc(7  * 100% / 12); }
-  .m-pull-s-8  { right: calc(8  * 100% / 12); }
-  .m-pull-s-9  { right: calc(9  * 100% / 12); }
-  .m-pull-s-10 { right: calc(10 * 100% / 12); }
-  .m-pull-s-11 { right: calc(11 * 100% / 12); }
-  .m-clearfix-t::after { display: none; }
-  .m-hide-s { display: none; }
-  .m-show-s { display: block; }
-  .m-col-s-none {
-    width: auto;
-    float: none;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container { width: 750px; }
-  .m-container-inflatable .m-col-m-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-  .m-container-inflatable .m-col-m-10 .m-container-inflate.m-left-m {
-    margin-left: -10%;
-  }
-  .m-container-inflatable .m-col-m-10 .m-container-inflate.m-right-m {
-    margin-right: -10%;
-  }
-  [class*='m-col-m-'] { float: left; }
-  .m-left-m {
-    padding-right: 1rem;
-    float: left;
-  }
-  .m-right-m, [class*='m-col-m-'].m-right-m {
-    padding-left: 1rem;
-    float: right;
-  }
-  .m-center-m, [class*='m-col-m-'].m-center-m {
-    margin-left: auto;
-    margin-right: auto;
-    float: none;
-  }
-  .m-col-m-1  { width: calc(1  * 100% / 12); }
-  .m-col-m-2  { width: calc(2  * 100% / 12); }
-  .m-col-m-3  { width: calc(3  * 100% / 12); }
-  .m-col-m-4  { width: calc(4  * 100% / 12); }
-  .m-col-m-5  { width: calc(5  * 100% / 12); }
-  .m-col-m-6  { width: calc(6  * 100% / 12); }
-  .m-col-m-7  { width: calc(7  * 100% / 12); }
-  .m-col-m-8  { width: calc(8  * 100% / 12); }
-  .m-col-m-9  { width: calc(9  * 100% / 12); }
-  .m-col-m-10 { width: calc(10 * 100% / 12); }
-  .m-col-m-11 { width: calc(11 * 100% / 12); }
-  .m-col-m-12 { width: calc(12 * 100% / 12); }
-  .m-push-m-0  { left: calc(0  * 100% / 12); }
-  .m-push-m-1  { left: calc(1  * 100% / 12); }
-  .m-push-m-2  { left: calc(2  * 100% / 12); }
-  .m-push-m-3  { left: calc(3  * 100% / 12); }
-  .m-push-m-4  { left: calc(4  * 100% / 12); }
-  .m-push-m-5  { left: calc(5  * 100% / 12); }
-  .m-push-m-6  { left: calc(6  * 100% / 12); }
-  .m-push-m-7  { left: calc(7  * 100% / 12); }
-  .m-push-m-8  { left: calc(8  * 100% / 12); }
-  .m-push-m-9  { left: calc(9  * 100% / 12); }
-  .m-push-m-10 { left: calc(10 * 100% / 12); }
-  .m-push-m-11 { left: calc(11 * 100% / 12); }
-  .m-pull-m-0  { right: calc(0  * 100% / 12); }
-  .m-pull-m-1  { right: calc(1  * 100% / 12); }
-  .m-pull-m-2  { right: calc(2  * 100% / 12); }
-  .m-pull-m-3  { right: calc(3  * 100% / 12); }
-  .m-pull-m-4  { right: calc(4  * 100% / 12); }
-  .m-pull-m-5  { right: calc(5  * 100% / 12); }
-  .m-pull-m-6  { right: calc(6  * 100% / 12); }
-  .m-pull-m-7  { right: calc(7  * 100% / 12); }
-  .m-pull-m-8  { right: calc(8  * 100% / 12); }
-  .m-pull-m-9  { right: calc(9  * 100% / 12); }
-  .m-pull-m-10 { right: calc(10 * 100% / 12); }
-  .m-pull-m-11 { right: calc(11 * 100% / 12); }
-  .m-clearfix-s::after { display: none; }
-  .m-hide-m { display: none; }
-  .m-show-m { display: block; }
-  .m-col-m-none {
-    width: auto;
-    float: none;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container { width: 960px; }
-  .m-container-inflatable .m-col-l-10 .m-container-inflate:not([class*='m-left-']):not([class*='m-right-']) {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-  .m-container-inflatable .m-col-l-10 .m-container-inflate.m-left-l {
-    margin-left: -10%;
-  }
-  .m-container-inflatable .m-col-l-10 .m-container-inflate.m-right-l {
-    margin-right: -10%;
-  }
-  [class*='m-col-l-'] { float: left; }
-  .m-left-l {
-    padding-right: 1rem;
-    float: left;
-  }
-  .m-right-l, [class*='m-col-l-'].m-right-l {
-    padding-left: 1rem;
-    float: right;
-  }
-  .m-center-l, [class*='m-col-l-'].m-center-l {
-    margin-left: auto;
-    margin-right: auto;
-    float: none;
-  }
-  .m-col-l-1  { width: calc(1  * 100% / 12); }
-  .m-col-l-2  { width: calc(2  * 100% / 12); }
-  .m-col-l-3  { width: calc(3  * 100% / 12); }
-  .m-col-l-4  { width: calc(4  * 100% / 12); }
-  .m-col-l-5  { width: calc(5  * 100% / 12); }
-  .m-col-l-6  { width: calc(6  * 100% / 12); }
-  .m-col-l-7  { width: calc(7  * 100% / 12); }
-  .m-col-l-8  { width: calc(8  * 100% / 12); }
-  .m-col-l-9  { width: calc(9  * 100% / 12); }
-  .m-col-l-10 { width: calc(10 * 100% / 12); }
-  .m-col-l-11 { width: calc(11 * 100% / 12); }
-  .m-col-l-12 { width: calc(12 * 100% / 12); }
-  .m-push-l-0  { left: calc(0  * 100% / 12); }
-  .m-push-l-1  { left: calc(1  * 100% / 12); }
-  .m-push-l-2  { left: calc(2  * 100% / 12); }
-  .m-push-l-3  { left: calc(3  * 100% / 12); }
-  .m-push-l-4  { left: calc(4  * 100% / 12); }
-  .m-push-l-5  { left: calc(5  * 100% / 12); }
-  .m-push-l-6  { left: calc(6  * 100% / 12); }
-  .m-push-l-7  { left: calc(7  * 100% / 12); }
-  .m-push-l-8  { left: calc(8  * 100% / 12); }
-  .m-push-l-9  { left: calc(9  * 100% / 12); }
-  .m-push-l-10 { left: calc(10 * 100% / 12); }
-  .m-push-l-11 { left: calc(11 * 100% / 12); }
-  .m-pull-l-0  { right: calc(0  * 100% / 12); }
-  .m-pull-l-1  { right: calc(1  * 100% / 12); }
-  .m-pull-l-2  { right: calc(2  * 100% / 12); }
-  .m-pull-l-3  { right: calc(3  * 100% / 12); }
-  .m-pull-l-4  { right: calc(4  * 100% / 12); }
-  .m-pull-l-5  { right: calc(5  * 100% / 12); }
-  .m-pull-l-6  { right: calc(6  * 100% / 12); }
-  .m-pull-l-7  { right: calc(7  * 100% / 12); }
-  .m-pull-l-8  { right: calc(8  * 100% / 12); }
-  .m-pull-l-9  { right: calc(9  * 100% / 12); }
-  .m-pull-l-10 { right: calc(10 * 100% / 12); }
-  .m-pull-l-11 { right: calc(11 * 100% / 12); }
-  .m-clearfix-m::after { display: none; }
-  .m-hide-l { display: none; }
-  .m-show-l { display: block; }
-  .m-col-l-none {
-    width: auto;
-    float: none;
-  }
-}
-
-html {
-  font-size: 14px;
-  background-color: #e8e8e8;
-}
-body {
-  font-family: 'Roboto', sans-serif;
-  font-size: 14px;
-  line-height: normal;
-  color: #000000;
-}
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin-top: 0;
-  font-weight: 300;
-}
-h1 {
-  margin-bottom: 1rem;
-}
-h2,
-h3,
-h4,
-h5,
-h6 {
-  margin-bottom: 0.5rem;
-}
-p,
-ul,
-ol,
-dl {
-  margin-top: 0;
-}
-ul,
-ol {
-  padding-left: 2rem;
-}
-ul ol,
-ul ul,
-ol ol,
-ol ul {
-  margin-bottom: 0;
-}
-main p {
-  text-indent: 1.5rem;
-  text-align: justify;
-}
-main p.m-noindent,
-li > p,
-dd > p,
-table.m-table td > p {
-  text-indent: 0;
-  text-align: left;
-}
-blockquote {
-  margin-top: 0;
-  margin-left: 1rem;
-  margin-right: 1rem;
-  padding: 1rem;
-  border-left-style: solid;
-  border-left-width: 0.25rem;
-}
-hr {
-  width: 75%;
-  border-width: 0.0625rem;
-  border-style: solid;
-}
-blockquote,
-hr {
-  border-color: #92d050;
-}
-strong,
-.m-text.m-strong {
-  font-weight: bold;
-}
-em,
-.m-text.m-em {
-  font-style: italic;
-}
-s,
-.m-text.m-s {
-  text-decoration: line-through;
-}
-sub,
-sup,
-.m-text.m-sub,
-.m-text.m-sup {
-  font-size: 0.75rem;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-sup,
-.m-text.m-sup {
-  top: -0.35rem;
-}
-sub,
-.m-text.m-sub {
-  bottom: -0.2rem;
-}
-abbr {
-  cursor: help;
-  text-decoration: underline dotted;
-}
-a {
-  color: #26a9e0;
-}
-a.m-flat {
-  text-decoration: none;
-}
-a:hover,
-a:focus,
-a:active {
-  color: #26a9e0;
-}
-a img {
-  border: 0;
-}
-svg a {
-  cursor: pointer;
-}
-mark {
-  padding: 0.0625rem;
-  background-color: #e6e69c;
-  color: #4c93d3;
-}
-.m-link-wrap {
-  word-break: break-all;
-}
-pre,
-code {
-  font-family: 'Monaco', monospace, monospace, monospace;
-  font-size: 1em;
-  color: #000000;
-  background-color: #f7f7f7;
-}
-pre.m-console,
-code.m-console {
-  color: #000000;
-  background-color: #f7f7f7;
-}
-pre {
-  padding: 0.5rem 1rem;
-  border-radius: 0px;
-  overflow-x: auto;
-  margin-top: 0;
-}
-pre.m-console-wrap {
-  white-space: pre-wrap;
-  word-break: break-all;
-}
-code {
-  padding: 0.125rem;
-}
-*:focus {
-  outline-color: #ffffff;
-}
-div.m-scroll {
-  max-width: 100%;
-  overflow-x: auto;
-}
-.m-fullwidth {
-  width: 100%;
-}
-.m-spacing-150 {
-  line-height: 1.5rem;
-}
-.m-text-center,
-.m-text-center.m-noindent,
-table.m-table th.m-text-center,
-.m-text-center p {
-  text-align: center;
-}
-.m-text-left,
-.m-text-left.m-noindent,
-table.m-table th.m-text-left,
-.m-text-right p {
-  text-align: left;
-}
-.m-text-right,
-.m-text-right.m-noindent,
-table.m-table th.m-text-right,
-.m-text-right p {
-  text-align: right;
-}
-.m-text-top,
-table.m-table th.m-text-top,
-table.m-table td.m-text-top {
-  vertical-align: top;
-}
-.m-text-middle,
-table.m-table th.m-text-middle,
-table.m-table td.m-text-middle {
-  vertical-align: middle;
-}
-.m-text-bottom,
-table.m-table th.m-text-bottom,
-table.m-table td.m-text-bottom {
-  vertical-align: bottom;
-}
-.m-text.m-tiny {
-  font-size: 50%;
-}
-.m-text.m-small {
-  font-size: 85.4%;
-}
-.m-text.m-big {
-  font-size: 117%;
-}
-h1 .m-thin,
-h2 .m-thin,
-h3 .m-thin,
-h4 .m-thin,
-h5 .m-thin,
-h6 .m-thin {
-  font-weight: normal;
-  font-size: 75%;
-  color: #bdbdbd;
-}
-ul.m-unstyled,
-ol.m-unstyled {
-  list-style-type: none;
-  padding-left: 0;
-}
-ul[class*="m-block-"],
-ol[class*="m-block-"] {
-  padding-left: 0;
-}
-ul[class*="m-block-"] li,
-ol[class*="m-block-"] li {
-  display: inline;
-}
-ul[class*="m-block-bar-"] li:not(:last-child)::after,
-ol[class*="m-block-bar-"] li:not(:last-child)::after {
-  content: " | ";
-}
-ul[class*="m-block-dot-"] li:not(:last-child)::after,
-ol[class*="m-block-dot-"] li:not(:last-child)::after {
-  content: " • ";
-}
-@media screen and (min-width: 576px) {
-  ul.m-block-bar-s,
-  ol.m-block-bar-s,
-  ul.m-block-dot-s,
-  ol.m-block-dot-s {
-    padding-left: 2rem;
-  }
-  ul.m-block-bar-s li,
-  ol.m-block-bar-s li,
-  ul.m-block-dot-s li,
-  ol.m-block-dot-s li {
-    display: list-item;
-  }
-  ul.m-block-bar-s li:not(:last-child)::after,
-  ol.m-block-bar-s li:not(:last-child)::after,
-  ul.m-block-dot-s li:not(:last-child)::after,
-  ol.m-block-dot-s li:not(:last-child)::after {
-    content: "";
-  }
-}
-@media screen and (min-width: 768px) {
-  ul.m-block-bar-m,
-  ol.m-block-bar-m,
-  ul.m-block-dot-m,
-  ol.m-block-dot-m {
-    padding-left: 2rem;
-  }
-  ul.m-block-bar-m li,
-  ol.m-block-bar-m li,
-  ul.m-block-dot-m li,
-  ol.m-block-dot-m li {
-    display: list-item;
-  }
-  ul.m-block-bar-m li:not(:last-child)::after,
-  ol.m-block-bar-m li:not(:last-child)::after,
-  ul.m-block-dot-m li:not(:last-child)::after,
-  ol.m-block-dot-m li:not(:last-child)::after {
-    content: "";
-  }
-}
-@media screen and (min-width: 992px) {
-  ul.m-block-bar-l,
-  ol.m-block-bar-l,
-  ul.m-block-dot-l,
-  ol.m-block-dot-l {
-    padding-left: 2rem;
-  }
-  ul.m-block-bar-l li,
-  ol.m-block-bar-l li,
-  ul.m-block-dot-l li,
-  ol.m-block-dot-l li {
-    display: list-item;
-  }
-  ul.m-block-bar-l li:not(:last-child)::after,
-  ol.m-block-bar-l li:not(:last-child)::after,
-  ul.m-block-dot-l li:not(:last-child)::after,
-  ol.m-block-dot-l li:not(:last-child)::after {
-    content: "";
-  }
-}
-p.m-poem {
-  text-indent: 0;
-  text-align: left;
-  margin-left: 1.5rem;
-}
-p.m-transition {
-  color: #ddd;
-  text-indent: 0;
-  text-align: center;
-  font-size: 2rem;
-}
-dl.m-diary {
-  margin-bottom: 1.25rem;
-}
-dl.m-diary:last-child {
-  margin-bottom: 0.25rem;
-}
-dl.m-diary dt {
-  font-weight: bold;
-  width: 6rem;
-  float: left;
-  clear: both;
-  padding-top: 0.25rem;
-}
-dl.m-diary dd {
-  padding-top: 0.25rem;
-  padding-left: 6rem;
-  margin-left: 0;
-}
-a.m-footnote,
-dl.m-footnote dd span.m-footnote {
-  top: -0.35rem;
-  font-size: 0.75rem;
-  line-height: 0;
-  position: relative;
-  vertical-align: baseline;
-}
-a.m-footnote,
-dl.m-footnote dd span.m-footnote a {
-  text-decoration: none;
-}
-a.m-footnote::before {
-  content: "[";
-}
-a.m-footnote::after {
-  content: "]";
-}
-dl.m-footnote dt {
-  width: 1.5rem;
-  float: left;
-  clear: both;
-}
-dl.m-footnote dd {
-  margin-left: 1.5rem;
-}
-dl.m-footnote {
-  font-size: 85.4%;
-}
-dl.m-footnote dd span.m-footnote a {
-  font-weight: bold;
-  font-style: italic;
-}
-.m-container-inflatable {
-  background-color: #ffffff;
-}
-.m-note {
-  border-radius: 0px;
-  padding: 1rem;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-frame {
-  background-color: #e8e8e8;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-  border-color: #ddd;
-  padding: 0.875rem;
-}
-.m-block {
-  border-style: solid;
-  border-width: 0.0625rem;
-  border-left-width: 0.25rem;
-  border-radius: 0px;
-  border-color: #ddd;
-  padding: 0.9375rem 0.9375rem 0.9375rem 0.75rem;
-}
-.m-block.hr {
-  width: 75%;
-  border-width: 0.0625rem;
-  border-style: solid;
-  border-color: #92d050;
-}
-.m-block.m-row.hr {
-  width: 75%;
-  border-width: 0.0625rem;
-  border-style: solid;
-  border-color: #92d050;
-}
-.m-block.m-badge::after {
-  content: " ";
-  display: block;
-  clear: both;
-}
-.m-block.m-badge h3 {
-  margin-left: 5rem;
-}
-.m-block.m-badge p {
-  margin-left: 5rem;
-  text-indent: 0;
-}
-.m-block.m-badge img {
-  width: 4rem;
-  height: 4rem;
-  border-radius: 0.5rem;
-  float: left;
-}
-div.m-button {
-  text-align: center;
-}
-div.m-button a {
-  display: inline-block;
-  border-radius: 0.5rem;
-  padding-top: 0.75rem;
-  padding-bottom: 0.75rem;
-  padding-left: 1.5rem;
-  padding-right: 1.5rem;
-  text-decoration: none;
-  font-size: 1.17rem;
-}
-div.m-button.m-fullwidth a {
-  display: block;
-  padding-left: 0.5rem;
-  padding-right: 0.5rem;
-}
-div.m-button a .m-big:first-child {
-  font-size: 1.37rem;
-  font-weight: bold;
-}
-div.m-button a .m-small:last-child {
-  font-size: 0.854rem;
-}
-.m-label {
-  border-radius: 0.5rem;
-  font-size: 75%;
-  font-weight: normal;
-  padding: 0.125rem 0.25rem;
-  vertical-align: 7.5%;
-}
-.m-label.m-flat {
-  border-width: 0.0625rem;
-  border-style: solid;
-  border-color: #bdbdbd;
-  padding: 0.0625rem 0.1875rem;
-}
-table.m-table {
-  border-collapse: collapse;
-  margin-left: auto;
-  margin-right: auto;
-}
-table.m-table.m-big {
-  margin-top: 1.75rem;
-}
-div.m-scroll > table.m-table:last-child {
-  margin-bottom: 0.0625rem;
-}
-table.m-table:not(.m-flat) tbody tr:hover {
-  background-color: #ddd;
-}
-table.m-table tr,
-table.m-table th,
-table.m-table td {
-  vertical-align: top;
-  border-style: solid;
-  border-top-width: 0.0625rem;
-  border-left-width: 0;
-  border-right-width: 0;
-  border-bottom-width: 0;
-  border-color: #ddd;
-}
-table.m-table tr:first-child th,
-table.m-table tr:first-child td {
-  vertical-align: top;
-  border-style: solid;
-  border-top-width: 0.0625rem;
-  border-left-width: 0;
-  border-right-width: 0;
-  border-bottom-width: 0;
-  border-color: #ddd;
-}
-table.m-table tr:last-child th,
-table.m-table tr:last-child td {
-  vertical-align: top;
-  border-style: solid;
-  border-top-width: 0.0625rem;
-  border-bottom-width: 0.0625rem;
-  border-left-width: 0;
-  border-right-width: 0;
-  border-color: #ddd;
-}
-table.m-table caption {
-  padding-bottom: 0.5rem;
-}
-table.m-table thead tr:first-child th,
-table.m-table thead tr:first-child td {
-  border-top-width: 0.125rem;
-  border-left-width: 0;
-  border-right-width: 0;
-}
-table.m-table thead th,
-table.m-table thead td {
-  border-bottom-width: 0.125rem;
-  vertical-align: bottom;
-  border-left-width: 0;
-  border-right-width: 0;
-}
-table.m-table tfoot th,
-table.m-table tfoot td {
-  border-top-width: 0.125rem;
-}
-table.m-table th,
-table.m-table td {
-  padding: 0.5rem;
-}
-table.m-table.m-big th,
-table.m-table.m-big td {
-  padding: 0.75rem 1rem;
-}
-table.m-table th {
-  text-align: left;
-}
-table.m-table th.m-thin {
-  font-weight: normal;
-}
-table.m-table td.m-default,
-table.m-table th.m-default,
-table.m-table td.m-primary,
-table.m-table th.m-primary,
-table.m-table td.m-success,
-table.m-table th.m-success,
-table.m-table td.m-warning,
-table.m-table th.m-warning,
-table.m-table td.m-danger,
-table.m-table th.m-danger,
-table.m-table td.m-info,
-table.m-table th.m-info,
-table.m-table td.m-dim,
-table.m-table th.m-dim,
-table.m-table td.m-type,
-table.m-table th.m-type {
-  padding-left: 0.4375rem;
-  padding-right: 0.4375rem;
-  border-left-width: 0.0625rem;
-}
-table.m-table.m-big td.m-default,
-table.m-table.m-big th.m-default,
-table.m-table.m-big td.m-primary,
-table.m-table.m-big th.m-primary,
-table.m-table.m-big td.m-success,
-table.m-table.m-big th.m-success,
-table.m-table.m-big td.m-warning,
-table.m-table.m-big th.m-warning,
-table.m-table.m-big td.m-danger,
-table.m-table.m-big th.m-danger,
-table.m-table.m-big td.m-info,
-table.m-table.m-big th.m-info,
-table.m-table.m-big td.m-dim,
-table.m-table.m-big th.m-dim,
-table.m-table.m-big td.m-type,
-table.m-table.m-big th.m-type {
-  padding-left: 0.9375rem;
-  padding-right: 0.9375rem;
-  border-left-width: 0.0625rem;
-}
-table.m-table tr.m-default td,
-table.m-table td.m-default,
-table.m-table tr.m-default th,
-table.m-table th.m-default,
-table.m-table tr.m-primary td,
-table.m-table td.m-primary,
-table.m-table tr.m-primary th,
-table.m-table th.m-primary,
-table.m-table tr.m-success td,
-table.m-table td.m-success,
-table.m-table tr.m-success th,
-table.m-table th.m-success,
-table.m-table tr.m-warning td,
-table.m-table td.m-warning,
-table.m-table tr.m-warning th,
-table.m-table th.m-warning,
-table.m-table tr.m-danger td,
-table.m-table td.m-danger,
-table.m-table tr.m-danger th,
-table.m-table th.m-danger,
-table.m-table tr.m-info td,
-table.m-table td.m-info,
-table.m-table tr.m-info th,
-table.m-table th.m-info,
-table.m-table tr.m-dim td,
-table.m-table td.m-dim,
-table.m-table tr.m-dim th,
-table.m-table th.m-dim,
-table.m-table tr.m-type td,
-table.m-table td.m-type,
-table.m-table tr.m-type th,
-table.m-table th.m-type {
-  border-color: #e8e8e8;
-}
-.m-note pre,
-.m-note code,
-table.m-table tr.m-default pre,
-table.m-table tr.m-default code,
-table.m-table td.m-default pre,
-table.m-table td.m-default code,
-table.m-table th.m-default pre,
-table.m-table th.m-default code,
-table.m-table tr.m-primary pre,
-table.m-table tr.m-primary code,
-table.m-table td.m-primary pre,
-table.m-table td.m-primary code,
-table.m-table th.m-primary pre,
-table.m-table th.m-primary code,
-table.m-table tr.m-success pre,
-table.m-table tr.m-success code,
-table.m-table td.m-success pre,
-table.m-table td.m-success code,
-table.m-table th.m-success pre,
-table.m-table th.m-success code,
-table.m-table tr.m-warning pre,
-table.m-table tr.m-warning code,
-table.m-table td.m-warning pre,
-table.m-table td.m-warning code,
-table.m-table th.m-warning pre,
-table.m-table th.m-warning code,
-table.m-table tr.m-danger pre,
-table.m-table tr.m-danger code,
-table.m-table td.m-danger pre,
-table.m-table td.m-danger code,
-table.m-table th.m-danger pre,
-table.m-table th.m-danger code,
-table.m-table tr.m-info pre,
-table.m-table tr.m-info code,
-table.m-table td.m-info pre,
-table.m-table td.m-info code,
-table.m-table th.m-info pre,
-table.m-table th.m-info code,
-table.m-table tr.m-dim pre,
-table.m-table tr.m-dim code,
-table.m-table td.m-dim pre,
-table.m-table td.m-dim code,
-table.m-table th.m-dim pre,
-table.m-table th.m-dim code,
-table.m-table tr.m-type pre,
-table.m-table tr.m-type code,
-table.m-table td.m-type pre,
-table.m-table td.m-type code,
-table.m-table th.m-type pre,
-table.m-table th.m-type code {
-  background-color: rgba(251, 240, 236, 0.5);
-}
-img.m-image,
-svg.m-image {
-  display: block;
-  margin-left: auto;
-  margin-right: auto;
-}
-div.m-image {
-  text-align: center;
-}
-img.m-image,
-svg.m-image,
-div.m-image img,
-div.m-image svg {
-  max-width: 100%;
-  border-radius: 0px;
-}
-div.m-image.m-fullwidth img,
-div.m-image.m-fullwidth svg {
-  width: 100%;
-}
-img.m-image.m-badge,
-div.m-image.m-badge img {
-  border-radius: 50%;
-}
-figure.m-figure {
-  max-width: 100%;
-  margin-top: 0;
-  margin-left: auto;
-  margin-right: auto;
-  position: relative;
-  display: table;
-}
-figure.m-figure:before {
-  position: absolute;
-  content: " ";
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  z-index: -1;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-  border-color: #ddd;
-}
-figure.m-figure.m-flat:before {
-  border-color: transparent;
-}
-figure.m-figure > * {
-  margin-left: 1rem;
-  margin-right: 1rem;
-  display: table-caption;
-  caption-side: bottom;
-}
-figure.m-figure > *:first-child {
-  display: inline;
-}
-figure.m-figure > *:last-child {
-  margin-bottom: 1rem !important;
-}
-figure.m-figure img,
-figure.m-figure svg {
-  position: relative;
-  margin-left: 0;
-  margin-right: 0;
-  margin-bottom: 0;
-  border-top-left-radius: 0px;
-  border-top-right-radius: 0px;
-  max-width: 100%;
-}
-figure.m-figure.m-flat img,
-figure.m-figure.m-flat svg {
-  border-bottom-left-radius: 0px;
-  border-bottom-right-radius: 0px;
-}
-figure.m-figure a img,
-figure.m-figure a svg {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-figure.m-figure.m-fullwidth,
-figure.m-figure.m-fullwidth > * {
-  display: block;
-}
-figure.m-figure.m-fullwidth > *:first-child {
-  display: inline;
-}
-figure.m-figure.m-fullwidth img,
-figure.m-figure.m-fullwidth svg {
-  width: 100%;
-}
-figure.m-figure.m-fullwidth:after {
-  content: " ";
-  display: block;
-  margin-top: 1rem;
-  height: 1px;
-}
-.m-code-figure,
-.m-console-figure {
-  margin-top: 0;
-  margin-left: 0;
-  margin-right: 0;
-  position: relative;
-  padding: 1rem;
-}
-.m-code-figure:before,
-.m-console-figure:before {
-  position: absolute;
-  content: " ";
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  z-index: -1;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-}
-.m-code-figure:before {
-  border-color: #f7f7f7;
-}
-.m-console-figure:before {
-  border-color: #f7f7f7;
-}
-.m-code-figure.m-flat:before,
-.m-console-figure.m-flat:before {
-  border-color: transparent;
-}
-.m-code-figure > pre:first-child,
-.m-console-figure > pre:first-child {
-  position: relative;
-  margin: -1rem -1rem 1rem -1rem;
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-}
-.m-code-figure > pre.m-nopad,
-.m-console-figure > pre.m-nopad {
-  margin-left: -0.875rem;
-  margin-right: -0.875rem;
-  margin-top: -1rem;
-  margin-bottom: -0.875rem;
-  padding-left: 0.875rem;
-}
-figure.m-figure figcaption,
-.m-code-figure figcaption,
-.m-console-figure figcaption {
-  margin-top: 0.5rem;
-  margin-bottom: 0.5rem;
-  font-weight: 300;
-  font-size: 1.17rem;
-}
-.m-imagegrid > div {
-  background-color: var(
-    --background-color
-  );
-}
-.m-imagegrid > div > figure {
-  display: block;
-  float: left;
-  position: relative;
-  margin: 0;
-}
-.m-imagegrid > div > figure > div,
-.m-imagegrid > div > figure > figcaption,
-.m-imagegrid > div > figure > a > div,
-.m-imagegrid > div > figure > a > figcaption {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 100%;
-  height: 100%;
-  border-color: #e8e8e8;
-  border-style: solid;
-  border-width: 0.25rem;
-  padding: 0.5rem;
-}
-.m-imagegrid > div > figure:first-child > div,
-.m-imagegrid > div > figure:first-child > figcaption,
-.m-imagegrid > div > figure:first-child > a > div,
-.m-imagegrid > div > figure:first-child > a > figcaption {
-  border-left-width: 0;
-}
-.m-imagegrid > div > figure:last-child > div,
-.m-imagegrid > div > figure:last-child > figcaption,
-.m-imagegrid > div > figure:last-child > a > div,
-.m-imagegrid > div > figure:last-child > a > figcaption {
-  border-right-width: 0;
-}
-.m-imagegrid > div > figure > figcaption,
-.m-imagegrid > div > figure > a > figcaption {
-  color: transparent;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  font-size: 0.75rem;
-}
-.m-imagegrid > div > figure > div::before,
-.m-imagegrid > div > figure > figcaption::before,
-.m-imagegrid > div > figure > a > div::before,
-.m-imagegrid > div > figure > a > figcaption::before {
-  content: "";
-  display: inline-block;
-  height: 100%;
-  vertical-align: bottom;
-  width: 0;
-}
-.m-imagegrid > div > figure:hover > figcaption,
-.m-imagegrid > div > figure:hover > a > figcaption {
-  background: linear-gradient(
-    transparent 0%,
-    transparent 75%,
-    rgba(0, 0, 0, 0.85) 100%
-  );
-  color: #ffffff;
-}
-.m-imagegrid > div > figure > img,
-.m-imagegrid > div > figure > a > img {
-  width: 100%;
-  height: 100%;
-}
-.m-imagegrid > div::after {
-  display: block;
-  content: " ";
-  clear: both;
-}
-@media screen and (max-width: 767px) {
-  .m-imagegrid > div > figure {
-    float: none;
-    width: 100% !important;
-  }
-  .m-imagegrid > div > figure > div,
-  .m-imagegrid > div > figure > figcaption,
-  .m-imagegrid > div > figure > a > div,
-  .m-imagegrid > div > figure > a > figcaption {
-    border-left-width: 0;
-    border-right-width: 0;
-  }
-}
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-note,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-frame,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-block,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-imagegrid,
-.m-container-inflatable > .m-row > [class*="m-col-"] > pre,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-code-figure,
-.m-container-inflatable > .m-row > [class*="m-col-"] > .m-console-figure,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-note,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-frame,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-block,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-imagegrid,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > pre,
-.m-container-inflatable > .m-row > [class*="m-col-"] section > .m-code-figure,
-.m-container-inflatable
-  > .m-row
-  > [class*="m-col-"]
-  section
-  > .m-console-figure,
-.m-container-inflatable [class*="m-center-"] > .m-note,
-.m-container-inflatable [class*="m-center-"] > .m-frame,
-.m-container-inflatable [class*="m-center-"] > .m-block,
-.m-container-inflatable [class*="m-center-"] > .m-imagegrid,
-.m-container-inflatable [class*="m-center-"] > pre,
-.m-container-inflatable [class*="m-center-"] > .m-code-figure,
-.m-container-inflatable [class*="m-center-"] > .m-console-figure,
-.m-container-inflatable [class*="m-left-"] > .m-note,
-.m-container-inflatable [class*="m-left-"] > .m-frame,
-.m-container-inflatable [class*="m-left-"] > .m-block,
-.m-container-inflatable [class*="m-left-"] > .m-imagegrid,
-.m-container-inflatable [class*="m-left-"] > pre,
-.m-container-inflatable [class*="m-left-"] > .m-code-figure,
-.m-container-inflatable [class*="m-left-"] > .m-console-figure,
-.m-container-inflatable [class*="m-right-"] > .m-note,
-.m-container-inflatable [class*="m-right-"] > .m-frame,
-.m-container-inflatable [class*="m-right-"] > .m-block,
-.m-container-inflatable [class*="m-right-"] > .m-imagegrid,
-.m-container-inflatable [class*="m-right-"] > pre,
-.m-container-inflatable [class*="m-right-"] > .m-code-figure,
-.m-container-inflatable [class*="m-right-"] > .m-console-figure,
-.m-container-inflatable .m-container-inflate > .m-note,
-.m-container-inflatable .m-container-inflate > .m-frame,
-.m-container-inflatable .m-container-inflate > .m-block,
-.m-container-inflatable .m-container-inflate > .m-imagegrid,
-.m-container-inflatable .m-container-inflate > pre,
-.m-container-inflatable .m-container-inflate > .m-code-figure,
-.m-container-inflatable .m-container-inflate > .m-console-figure {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-@media screen and (min-width: 576px) {
-  .m-container-inflatable .m-center-s > .m-note,
-  .m-container-inflatable .m-center-s > .m-frame,
-  .m-container-inflatable .m-center-s > .m-block,
-  .m-container-inflatable .m-center-s > .m-imagegrid,
-  .m-container-inflatable .m-center-s > pre,
-  .m-container-inflatable .m-center-s > .m-code-figure,
-  .m-container-inflatable .m-center-s > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable .m-left-s > .m-note,
-  .m-container-inflatable .m-left-s > .m-frame,
-  .m-container-inflatable .m-left-s > .m-block,
-  .m-container-inflatable .m-left-s > .m-imagegrid,
-  .m-container-inflatable .m-left-s > pre,
-  .m-container-inflatable .m-left-s > .m-code-figure,
-  .m-container-inflatable .m-left-s > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: 0;
-  }
-  .m-container-inflatable .m-right-s > .m-note,
-  .m-container-inflatable .m-right-s > .m-frame,
-  .m-container-inflatable .m-right-s > .m-block,
-  .m-container-inflatable .m-right-s > .m-imagegrid,
-  .m-container-inflatable .m-right-s > pre,
-  .m-container-inflatable .m-right-s > .m-code-figure,
-  .m-container-inflatable .m-right-s > .m-console-figure {
-    margin-left: 0;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable
-    > .m-row
-    > .m-col-s-10
-    > .m-imagegrid.m-container-inflate,
-  .m-container-inflatable
-    > .m-row
-    > .m-col-s-10
-    section
-    > .m-imagegrid.m-container-inflate {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container-inflatable .m-center-m > .m-note,
-  .m-container-inflatable .m-center-m > .m-frame,
-  .m-container-inflatable .m-center-m > .m-block,
-  .m-container-inflatable .m-center-m > .m-imagegrid,
-  .m-container-inflatable .m-center-m > pre,
-  .m-container-inflatable .m-center-m > .m-code-figure,
-  .m-container-inflatable .m-center-m > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable .m-left-m > .m-note,
-  .m-container-inflatable .m-left-m > .m-frame,
-  .m-container-inflatable .m-left-m > .m-block,
-  .m-container-inflatable .m-left-m > .m-imagegrid,
-  .m-container-inflatable .m-left-m > pre,
-  .m-container-inflatable .m-left-m > .m-code-figure,
-  .m-container-inflatable .m-left-m > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: 0;
-  }
-  .m-container-inflatable .m-right-m > .m-note,
-  .m-container-inflatable .m-right-m > .m-frame,
-  .m-container-inflatable .m-right-m > .m-block,
-  .m-container-inflatable .m-right-m > .m-imagegrid,
-  .m-container-inflatable .m-right-m > pre,
-  .m-container-inflatable .m-right-m > .m-code-figure,
-  .m-container-inflatable .m-right-m > .m-console-figure {
-    margin-left: 0;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable
-    > .m-row
-    > .m-col-m-10
-    > .m-imagegrid.m-container-inflate,
-  .m-container-inflatable
-    > .m-row
-    > .m-col-m-10
-    section
-    > .m-imagegrid.m-container-inflate {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container-inflatable .m-center-l > .m-note,
-  .m-container-inflatable .m-center-l > .m-frame,
-  .m-container-inflatable .m-center-l > .m-block,
-  .m-container-inflatable .m-center-l > .m-imagegrid,
-  .m-container-inflatable .m-center-l > pre,
-  .m-container-inflatable .m-center-l > .m-code-figure,
-  .m-container-inflatable .m-center-l > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable .m-left-l > .m-note,
-  .m-container-inflatable .m-left-l > .m-frame,
-  .m-container-inflatable .m-left-l > .m-block,
-  .m-container-inflatable .m-left-l > .m-imagegrid,
-  .m-container-inflatable .m-left-l > pre,
-  .m-container-inflatable .m-left-l > .m-code-figure,
-  .m-container-inflatable .m-left-l > .m-console-figure {
-    margin-left: -1rem;
-    margin-right: 0;
-  }
-  .m-container-inflatable .m-right-l > .m-note,
-  .m-container-inflatable .m-right-l > .m-frame,
-  .m-container-inflatable .m-right-l > .m-block,
-  .m-container-inflatable .m-right-l > .m-imagegrid,
-  .m-container-inflatable .m-right-l > pre,
-  .m-container-inflatable .m-right-l > .m-code-figure,
-  .m-container-inflatable .m-right-l > .m-console-figure {
-    margin-left: 0;
-    margin-right: -1rem;
-  }
-  .m-container-inflatable
-    > .m-row
-    > .m-col-l-10
-    > .m-imagegrid.m-container-inflate,
-  .m-container-inflatable
-    > .m-row
-    > .m-col-l-10
-    section
-    > .m-imagegrid.m-container-inflate {
-    margin-left: -10%;
-    margin-right: -10%;
-  }
-}
-pre.m-code span.hll {
-  margin-left: -1rem;
-  margin-right: -1rem;
-  padding-left: 1rem;
-}
-.m-code.m-inverted > span,
-.m-console.m-inverted > span {
-  opacity: 0.3333;
-}
-.m-code.m-inverted > span.hll,
-.m-console.m-inverted > span.hll {
-  opacity: 1;
-  background-color: transparent;
-  border-color: transparent;
-}
-.m-code.m-inverted {
-  color: rgba(91, 91, 91, 0.33);
-}
-.m-console.m-inverted {
-  color: rgba(91, 91, 91, 0.33);
-}
-.m-code.m-inverted > span.hll {
-  color: #000000;
-}
-.m-cosole.m-inverted > span.hll {
-  color: #000000;
-}
-.m-code-color {
-  display: inline-block;
-  width: 0.75rem;
-  height: 0.75rem;
-  vertical-align: -0.05rem;
-  margin-left: 0.2rem;
-  margin-right: 0.1rem;
-  border-radius: 0px;
-}
-div.m-math {
-  overflow-x: auto;
-  overflow-y: hidden;
-}
-div.m-math svg {
-  margin-left: auto;
-  margin-right: auto;
-  display: block;
-}
-div.m-button a svg.m-math {
-  fill: #ffffff;
-}
-div.m-button.m-flat a svg.m-math {
-  fill: #000000;
-}
-div.m-button.m-flat a:hover svg.m-math,
-div.m-button.m-default a:focus svg.m-math,
-div.m-button.m-default a:active svg.m-math {
-  fill: #26a9e0;
-}
-.m-graph {
-  font-size: 14px;
-}
-div.m-plot svg,
-div.m-graph svg {
-  max-width: 100%;
-  margin-left: auto;
-  margin-right: auto;
-  display: block;
-}
-div.m-plot .m-background {
-  fill: #fbf0ec;
-}
-div.m-plot svg .m-label {
-  font-size: 11px;
-}
-div.m-plot svg .m-title {
-  font-size: 13px;
-}
-div.m-plot svg .m-label,
-div.m-plot svg .m-title {
-  fill: #000000;
-}
-div.m-plot svg .m-line {
-  stroke: #000000;
-  stroke-width: 0.8;
-}
-div.m-plot svg .m-error {
-  stroke: #000000;
-  stroke-width: 1.5;
-}
-div.m-plot svg .m-label.m-dim {
-  fill: #bdbdbd;
-}
-.m-graph g.m-edge path,
-.m-graph g.m-node.m-flat ellipse,
-.m-graph g.m-node.m-flat polygon {
-  fill: none;
-}
-.m-graph g.m-node:not(.m-flat) text {
-  fill: #ffffff;
-}
-figure.m-figure > svg.m-math:first-child,
-figure.m-figure > svg.m-graph:first-child {
-  padding: 1rem;
-  box-sizing: content-box;
-}
-figure.m-figure:not(.m-flat) > svg.m-math:first-child,
-figure.m-figure:not(.m-flat) > svg.m-graph:first-child {
-  background-color: #ddd;
-}
-.m-block.m-default {
-  border-left-color: #ddd;
-}
-.m-block.m-default h3,
-.m-block.m-default h4,
-.m-block.m-default h5,
-.m-block.m-default h6,
-.m-text.m-default,
-.m-label.m-flat.m-default {
-  color: #000000;
-}
-.m-block.m-default h3 a,
-.m-block.m-default h4 a,
-.m-block.m-default h5 a,
-.m-block.m-default h6 a {
-  color: #26a9e0;
-}
-.m-block.m-primary {
-  border-left-color: #31708f;
-}
-.m-block.m-primary h3,
-.m-block.m-primary h4,
-.m-block.m-primary h5,
-.m-block.m-primary h6,
-.m-block.m-primary h3 a,
-.m-block.m-primary h4 a,
-.m-block.m-primary h5 a,
-.m-block.m-primary h6 a,
-.m-text.m-primary,
-.m-label.m-flat.m-primary {
-  color: #31708f;
-}
-.m-block.m-success {
-  border-left-color: #9ad36a;
-}
-.m-block.m-success h3,
-.m-block.m-success h4,
-.m-block.m-success h5,
-.m-block.m-success h6,
-.m-block.m-success h3 a,
-.m-block.m-success h4 a,
-.m-block.m-success h5 a,
-.m-block.m-success h6 a,
-.m-text.m-success,
-.m-label.m-flat.m-success {
-  color: #9ad36a;
-}
-.m-block.m-warning {
-  border-left-color: #f9cf79;
-}
-.m-block.m-warning h3,
-.m-block.m-warning h4,
-.m-block.m-warning h5,
-.m-block.m-warning h6,
-.m-block.m-warning h3 a,
-.m-block.m-warning h4 a,
-.m-block.m-warning h5 a,
-.m-block.m-warning h6 a,
-.m-text.m-warning,
-.m-label.m-flat.m-warning {
-  color: #f9cf79;
-}
-.m-block.m-danger {
-  border-left-color: #f60000;
-}
-.m-block.m-danger h3,
-.m-block.m-danger h4,
-.m-block.m-danger h5,
-.m-block.m-danger h6,
-.m-block.m-danger h3 a,
-.m-block.m-danger h4 a,
-.m-block.m-danger h5 a,
-.m-block.m-danger h6 a,
-.m-text.m-danger,
-.m-label.m-flat.m-danger {
-  color: #f60000;
-}
-.m-block.m-info {
-  border-left-color: #31708f;
-}
-.m-block.m-info h3,
-.m-block.m-info h4,
-.m-block.m-info h5,
-.m-block.m-info h6,
-.m-block.m-info h3 a,
-.m-block.m-info h4 a,
-.m-block.m-info h5 a,
-.m-block.m-info h6 a,
-.m-text.m-info,
-.m-label.m-flat.m-info {
-  color: #31708f;
-}
-.m-block.m-type h3,
-.m-block.m-type h4,
-.m-block.m-type h5,
-.m-block.m-type h6,
-.m-block.m-type h3 a,
-.m-block.m-type h4 a,
-.m-block.m-type h5 a,
-.m-block.m-type h6 a,
-.m-text.m-type,
-.m-label.m-flat.m-type {
-  color: #9ad36a;
-}
-.m-block.m-dim {
-  border-left-color: #bdbdbd;
-}
-span.m-default {
-  color: #000000;
-  background-color: transparent;
-}
-span.m-default a {
-  color: var(--default-link-color);
-  background-color: transparent;
-}
-span.m-default a:hover,
-span.m-default a:focus,
-span.m-default a:active {
-  color: #26a9e0;
-  background-color: transparent;
-}
-span.m-primary {
-  color: #31708f;
-  background-color: transparent;
-}
-span.m-primary a {
-  color: var(--primary-link-color);
-  background-color: transparent;
-}
-span.m-primary a:hover,
-span.m-primary a:focus,
-span.m-primary a:active {
-  color: #31708f;
-  background-color: transparent;
-}
-span.m-success {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-success a {
-  color: var(--success-link-color);
-  background-color: transparent;
-}
-span.m-success a:hover,
-span.m-success a:focus,
-span.m-success a:active {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-warning {
-  color: #f9cf79;
-  background-color: transparent;
-}
-span.m-warning a {
-  color: var(--warning-link-color);
-  background-color: transparent;
-}
-span.m-warning a:hover,
-span.m-warning a:focus,
-span.m-warning a:active {
-  color: #f9cf79;
-  background-color: transparent;
-}
-span.m-danger {
-  color: #f60000;
-  background-color: transparent;
-}
-span.m-danger a {
-  color: var(--danger-link-color);
-  background-color: transparent;
-}
-span.m-danger a:hover,
-span.m-danger a:focus,
-span.m-danger a:active {
-  color: #f60000;
-  background-color: transparent;
-}
-span.m-info {
-  color: #31708f;
-  background-color: transparent;
-}
-span.m-info a {
-  color: var(--info-link-color);
-  background-color: transparent;
-}
-span.m-info a:hover,
-span.m-info a:focus,
-span.m-info a:active {
-  color: #67cce0;
-  background-color: transparent;
-}
-span.m-type {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-type a {
-  color: var(--type-link-color);
-  background-color: transparent;
-}
-span.m-type a:hover,
-span.m-type a:focus,
-span.m-type a:active {
-  color: #9ad36a;
-  background-color: transparent;
-}
-span.m-dim {
-  color: #bdbdbd;
-  background-color: transparent;
-}
-span.m-dim a {
-  color: #c0c0c0;
-  background-color: transparent;
-}
-span.m-dim a:hover,
-span.m-dim a:focus,
-span.m-dim a:active {
-  color: #949494;
-  background-color: transparent;
-}
-.m-block.m-dim,
-.m-text.m-dim,
-.m-label.m-flat.m-dim {
-  color: #bdbdbd;
-}
-.m-block.m-dim a,
-.m-text.m-dim a {
-  color: #c0c0c0;
-}
-.m-block.m-dim a:hover,
-.m-block.m-dim a:focus,
-.m-block.m-dim a:active,
-.m-text.m-dim a:hover,
-.m-text.m-dim a:focus,
-.m-text.m-dim a:active {
-  color: #949494;
-}
-.m-block.m-type {
-  border-left-color: #9ad36a;
-}
-.m-block.m-type h3,
-.m-block.m-type h4,
-.m-block.m-type h5,
-.m-block.m-type h6,
-.m-block.m-type h3 a,
-.m-block.m-type h4 a,
-.m-block.m-type h5 a,
-.m-block.m-type h6 a,
-.m-text.m-type,
-.m-label.m-flat.m-type {
-  color: #9ad36a;
-}
-.m-block.m-flat {
-  border-color: transparent;
-}
-.m-block.m-flat h3,
-.m-block.m-flat h4,
-.m-block.m-flat h5,
-.m-block.m-flat h6 {
-  color: #000000;
-}
-.m-block.m-default h3 a:hover,
-.m-block.m-default h3 a:focus,
-.m-block.m-default h3 a:active,
-.m-block.m-default h4 a:hover,
-.m-block.m-default h4 a:focus,
-.m-block.m-default h4 a:active,
-.m-block.m-default h5 a:hover,
-.m-block.m-default h5 a:focus,
-.m-block.m-default h5 a:active,
-.m-block.m-default h6 a:hover,
-.m-block.m-default h6 a:focus,
-.m-block.m-default h6 a:active {
-  color: #26a9e0;
-}
-.m-block.m-primary h3 a:hover,
-.m-block.m-primary h3 a:focus,
-.m-block.m-primary h3 a:active,
-.m-block.m-primary h4 a:hover,
-.m-block.m-primary h4 a:focus,
-.m-block.m-primary h4 a:active,
-.m-block.m-primary h5 a:hover,
-.m-block.m-primary h5 a:focus,
-.m-block.m-primary h5 a:active,
-.m-block.m-primary h6 a:hover,
-.m-block.m-primary h6 a:focus,
-.m-block.m-primary h6 a:active {
-  color: #31708f;
-}
-.m-block.m-success h3 a:hover,
-.m-block.m-success h3 a:focus,
-.m-block.m-success h3 a:active,
-.m-block.m-success h4 a:hover,
-.m-block.m-success h4 a:focus,
-.m-block.m-success h4 a:active,
-.m-block.m-success h5 a:hover,
-.m-block.m-success h5 a:focus,
-.m-block.m-success h5 a:active,
-.m-block.m-success h6 a:hover,
-.m-block.m-success h6 a:focus,
-.m-block.m-success h6 a:active {
-  color: #9ad36a;
-}
-.m-block.m-warning h3 a:hover,
-.m-block.m-warning h3 a:focus,
-.m-block.m-warning h3 a:active,
-.m-block.m-warning h4 a:hover,
-.m-block.m-warning h4 a:focus,
-.m-block.m-warning h4 a:active,
-.m-block.m-warning h5 a:hover,
-.m-block.m-warning h5 a:focus,
-.m-block.m-warning h5 a:active,
-.m-block.m-warning h6 a:hover,
-.m-block.m-warning h6 a:focus,
-.m-block.m-warning h6 a:active {
-  color: #f9cf79;
-}
-.m-block.m-danger h3 a:hover,
-.m-block.m-danger h3 a:focus,
-.m-block.m-danger h3 a:active,
-.m-block.m-danger h4 a:hover,
-.m-block.m-danger h4 a:focus,
-.m-block.m-danger h4 a:active,
-.m-block.m-danger h5 a:hover,
-.m-block.m-danger h5 a:focus,
-.m-block.m-danger h5 a:active,
-.m-block.m-danger h6 a:hover,
-.m-block.m-danger h6 a:focus,
-.m-block.m-danger h6 a:active {
-  color: #f60000;
-}
-.m-block.m-info h3 a:hover,
-.m-block.m-info h3 a:focus,
-.m-block.m-info h3 a:active,
-.m-block.m-info h4 a:hover,
-.m-block.m-info h4 a:focus,
-.m-block.m-info h4 a:active,
-.m-block.m-info h5 a:hover,
-.m-block.m-info h5 a:focus,
-.m-block.m-info h5 a:active,
-.m-block.m-info h6 a:hover,
-.m-block.m-info h6 a:focus,
-.m-block.m-info h6 a:active {
-  color: #67cce0;
-}
-.m-block.m-type h3 a:hover,
-.m-block.m-type h3 a:focus,
-.m-block.m-type h3 a:active,
-.m-block.m-type h4 a:hover,
-.m-block.m-type h4 a:focus,
-.m-block.m-type h4 a:active,
-.m-block.m-type h5 a:hover,
-.m-block.m-type h5 a:focus,
-.m-block.m-type h5 a:active,
-.m-block.m-type h6 a:hover,
-.m-block.m-type h6 a:focus,
-.m-block.m-type h6 a:active {
-  color: #9ad36a;
-}
-div.m-button a,
-.m-label {
-  color: #ffffff;
-}
-div.m-button.m-flat a {
-  color: #000000;
-}
-div.m-button.m-flat a:hover,
-div.m-button.m-default a:focus,
-div.m-button.m-default a:active {
-  color: #26a9e0;
-}
-div.m-button.m-default a,
-.m-label:not(.m-flat).m-default {
-  background-color: #000000;
-  color: #000000;
-}
-div.m-button.m-primary a,
-.m-label:not(.m-flat).m-primary {
-  background-color: #31708f;
-  color: #67cce0;
-}
-div.m-button.m-success a,
-.m-label:not(.m-flat).m-success {
-  background-color: #9ad36a;
-  color: #3c763d;
-}
-div.m-button.m-warning a,
-.m-label:not(.m-flat).m-warning {
-  background-color: #f9cf79;
-  color: #8a6d3b;
-}
-div.m-button.m-danger a,
-.m-label:not(.m-flat).m-danger {
-  background-color: #f60000;
-  color: #920000;
-}
-div.m-button.m-info a,
-.m-label:not(.m-flat).m-info {
-  background-color: #31708f;
-  color: #81bcda;
-}
-div.m-button.m-dim a,
-.m-label:not(.m-flat).m-dim {
-  background-color: #bdbdbd;
-  color: #7c7c7c;
-}
-div.m-button.m-type a,
-.m-label:not(.m-flat).m-type {
-  background-color: #9ad36a;
-  color: #3c763d;
-}
-div.m-button.m-default a:hover,
-div.m-button.m-default a:focus,
-div.m-button.m-default a:active {
-  background-color: #26a9e0;
-}
-div.m-button.m-primary a:hover,
-div.m-button.m-primary a:focus,
-div.m-button.m-primary a:active {
-  background-color: #31708f;
-}
-div.m-button.m-success a:hover,
-div.m-button.m-success a:focus,
-div.m-button.m-success a:active {
-  background-color: #9ad36a;
-}
-div.m-button.m-warning a:hover,
-div.m-button.m-warning a:focus,
-div.m-button.m-warning a:active {
-  background-color: #f9cf79;
-}
-div.m-button.m-danger a:hover,
-div.m-button.m-danger a:focus,
-div.m-button.m-danger a:active {
-  background-color: #f60000;
-}
-div.m-button.m-info a:hover,
-div.m-button.m-info a:focus,
-div.m-button.m-info a:active {
-  background-color: #67cce0;
-}
-div.m-button.m-dim a:hover,
-div.m-button.m-dim a:focus,
-div.m-button.m-dim a:active {
-  background-color: #c0c0c0;
-}
-div.m-button.m-type a:hover,
-div.m-button.m-type a:focus,
-div.m-button.m-type a:active {
-  background-color: #9ad36a;
-}
-.m-note.m-default {
-  background-color: transparent;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-default,
-table.m-table tr.m-default td,
-table.m-table td.m-default,
-table.m-table tr.m-default th,
-table.m-table th.m-default,
-table.m-table tr.m-default strong,
-table.m-table strong.m-default,
-table.m-table tr.m-default em,
-table.m-table em.m-default {
-  color: #000000;
-}
-.m-note.m-default a:hover,
-table.m-table tr.m-default td a:hover,
-table.m-table td.m-default a:hover,
-table.m-table tr.m-default th a:hover,
-table.m-table th.m-default a:hover,
-.m-note.m-default a:focus,
-table.m-table tr.m-default td a:focus,
-table.m-table td.m-default a:focus,
-table.m-table tr.m-default th a:focus,
-table.m-table th.m-default a:focus,
-.m-note.m-default a:active,
-table.m-table tr.m-default td a:active,
-table.m-table td.m-default a:active,
-table.m-table tr.m-default th a:active,
-table.m-table th.m-default a:active {
-  color: #26a9e0;
-}
-.m-note.m-primary {
-  border-color: #31708f;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-primary a,
-table.m-table tr.m-primary td a,
-table.m-table td.m-primary a,
-table.m-table tr.m-primary th a,
-table.m-table th.m-primary a {
-  color: #26a9e0;
-}
-.m-note.m-primary,
-table.m-table tr.m-primary td,
-table.m-table td.m-primary,
-table.m-table tr.m-primary th,
-table.m-table th.m-primary,
-table.m-table tr.m-primary strong,
-table.m-table strong.m-primary,
-table.m-table tr.m-primary em,
-table.m-table em.m-primary {
-  background-color: transparent;
-  color: #67cce0;
-}
-.m-note.m-primary a,
-table.m-table tr.m-primary td a,
-table.m-table td.m-primary a,
-table.m-table tr.m-primary th a,
-table.m-table th.m-primary a {
-  color: #31708f;
-}
-.m-note.m-primary a:hover,
-table.m-table tr.m-primary td a:hover,
-table.m-table td.m-primary a:hover,
-table.m-table tr.m-primary th a:hover,
-table.m-table th.m-primary a:hover,
-.m-note.m-primary a:focus,
-table.m-table tr.m-primary td a:focus,
-table.m-table td.m-primary a:focus,
-table.m-table tr.m-primary th a:focus,
-table.m-table th.m-primary a:focus,
-.m-note.m-primary a:active,
-table.m-table tr.m-primary td a:active,
-table.m-table td.m-primary a:active,
-table.m-table tr.m-primary th a:active,
-table.m-table th.m-primary a:active {
-  color: #31708f;
-}
-.m-note.m-success {
-  border-color: #9ad36a;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-success,
-table.m-table tr.m-success td,
-table.m-table td.m-success,
-table.m-table tr.m-success th,
-table.m-table th.m-success,
-table.m-table tr.m-success strong,
-table.m-table strong.m-success,
-table.m-table tr.m-success em,
-table.m-table em.m-success {
-  background-color: transparent;
-  color: #3c763d;
-}
-.m-note.m-success a,
-table.m-table tr.m-success td a,
-table.m-table td.m-success a,
-table.m-table tr.m-success th a,
-table.m-table th.m-success a {
-  color: #9ad36a;
-}
-.m-note.m-success a:hover,
-table.m-table tr.m-success td a:hover,
-table.m-table td.m-success a:hover,
-table.m-table tr.m-success th a:hover,
-table.m-table th.m-success a:hover,
-.m-note.m-success a:focus,
-table.m-table tr.m-success td a:focus,
-table.m-table td.m-success a:focus,
-table.m-table tr.m-success th a:focus,
-table.m-table th.m-success a:focus,
-.m-note.m-success a:active,
-table.m-table tr.m-success td a:active,
-table.m-table td.m-success a:active,
-table.m-table tr.m-success th a:active,
-table.m-table th.m-success a:active {
-  color: #9ad36a;
-}
-.m-note.m-warning {
-  border-color: #f9cf79;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-warning,
-table.m-table tr.m-warning td,
-table.m-table td.m-warning,
-table.m-table tr.m-warning th,
-table.m-table th.m-warning,
-table.m-table tr.m-warning strong,
-table.m-table strong.m-warning,
-table.m-table tr.m-warning em,
-table.m-table em.m-warning {
-  background-color: transparent;
-  color: #8a6d3b;
-}
-.m-note.m-warning a,
-table.m-table tr.m-warning td a,
-table.m-table td.m-warning a,
-table.m-table tr.m-warning th a,
-table.m-table th.m-warning a {
-  color: #f9cf79;
-}
-.m-note.m-warning a:hover,
-table.m-table tr.m-warning td a:hover,
-table.m-table td.m-warning a:hover,
-table.m-table tr.m-warning th a:hover,
-table.m-table th.m-warning a:hover,
-.m-note.m-warning a:focus,
-table.m-table tr.m-warning td a:focus,
-table.m-table td.m-warning a:focus,
-table.m-table tr.m-warning th a:focus,
-table.m-table th.m-warning a:focus,
-.m-note.m-warning a:active,
-table.m-table tr.m-warning td a:active,
-table.m-table td.m-warning a:active,
-table.m-table tr.m-warning th a:active,
-table.m-table th.m-warning a:active {
-  color: #f9cf79;
-}
-.m-note.m-danger {
-  border-color: #f60000;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-danger,
-table.m-table tr.m-danger td,
-table.m-table td.m-danger,
-table.m-table tr.m-danger th,
-table.m-table th.m-danger,
-table.m-table tr.m-danger strong,
-table.m-table strong.m-danger,
-table.m-table tr.m-danger em,
-table.m-table em.m-danger {
-  background-color: transparent;
-  color: #920000;
-}
-.m-note.m-danger a,
-table.m-table tr.m-danger td a,
-table.m-table td.m-danger a,
-table.m-table tr.m-danger th a,
-table.m-table th.m-danger a {
-  color: #f60000;
-}
-.m-note.m-danger a:hover,
-table.m-table tr.m-danger td a:hover,
-table.m-table td.m-danger a:hover,
-table.m-table tr.m-danger th a:hover,
-table.m-table th.m-danger a:hover,
-.m-note.m-danger a:focus,
-table.m-table tr.m-danger td a:focus,
-table.m-table td.m-danger a:focus,
-table.m-table tr.m-danger th a:focus,
-table.m-table th.m-danger a:focus,
-.m-note.m-danger a:active,
-table.m-table tr.m-danger td a:active,
-table.m-table td.m-danger a:active,
-table.m-table tr.m-danger th a:active,
-table.m-table th.m-danger a:active {
-  color: #f60000;
-}
-.m-note.m-info {
-  border-color: #31708f;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-info,
-table.m-table tr.m-info td,
-table.m-table td.m-info,
-table.m-table tr.m-info th,
-table.m-table th.m-info,
-table.m-table tr.m-info strong,
-table.m-table strong.m-info,
-table.m-table tr.m-info em,
-table.m-table em.m-info {
-  background-color: transparent;
-  color: #81bcda;
-}
-.m-note.m-info a,
-table.m-table tr.m-info td a,
-table.m-table td.m-info a,
-table.m-table tr.m-info th a,
-table.m-table th.m-info a {
-  color: #67cce0;
-}
-.m-note.m-info a:hover,
-table.m-table tr.m-info td a:hover,
-table.m-table td.m-info a:hover,
-table.m-table tr.m-info th a:hover,
-table.m-table th.m-info a:hover,
-.m-note.m-info a:focus,
-table.m-table tr.m-info td a:focus,
-table.m-table td.m-info a:focus,
-table.m-table tr.m-info th a:focus,
-table.m-table th.m-info a:focus,
-.m-note.m-info a:active,
-table.m-table tr.m-info td a:active,
-table.m-table td.m-info a:active,
-table.m-table tr.m-info th a:active,
-table.m-table th.m-info a:active {
-  color: #67cce0;
-}
-.m-note.m-dim {
-  border-color: #bdbdbd;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-dim,
-table.m-table tr.m-dim td,
-table.m-table td.m-dim,
-table.m-table tr.m-dim th,
-table.m-table th.m-dim,
-table.m-table tr.m-dim strong,
-table.m-table strong.m-dim,
-table.m-table tr.m-dim em,
-table.m-table em.m-dim {
-  background-color: transparent;
-  color: #7c7c7c;
-}
-.m-note.m-dim a,
-table.m-table tr.m-dim td a,
-table.m-table td.m-dim a,
-table.m-table tr.m-dim th a,
-table.m-table th.m-dim a {
-  color: #c0c0c0;
-}
-.m-note.m-dim a:hover,
-table.m-table tr.m-dim td a:hover,
-table.m-table td.m-dim a:hover,
-table.m-table tr.m-dim th a:hover,
-table.m-table th.m-dim a:hover,
-.m-note.m-dim a:focus,
-table.m-table tr.m-dim td a:focus,
-table.m-table td.m-dim a:focus,
-table.m-table tr.m-dim th a:focus,
-table.m-table th.m-dim a:focus,
-.m-note.m-dim a:active,
-table.m-table tr.m-dim td a:active,
-table.m-table td.m-dim a:active,
-table.m-table tr.m-dim th a:active,
-table.m-table th.m-dim a:active {
-  color: #949494;
-}
-.m-note.m-type {
-  border-color: #9ad36a;
-  border-width: 2px;
-  border-style: solid;
-  padding-top: 0;
-}
-.m-note.m-type,
-table.m-table tr.m-type td,
-table.m-table td.m-type,
-table.m-table tr.m-type th,
-table.m-table th.m-type,
-table.m-table tr.m-type strong,
-table.m-table strong.m-type,
-table.m-table tr.m-type em,
-table.m-table em.m-type {
-  background-color: transparent;
-  color: #3c763d;
-}
-.m-note.m-type a,
-table.m-table tr.m-type td a,
-table.m-table td.m-type a,
-table.m-table tr.m-type th a,
-table.m-table th.m-type a {
-  color: #9ad36a;
-}
-.m-note.m-type a:hover,
-table.m-table tr.m-type td a:hover,
-table.m-table td.m-type a:hover,
-table.m-table tr.m-type th a:hover,
-table.m-table th.m-type a:hover,
-.m-note.m-type a:focus,
-table.m-table tr.m-type td a:focus,
-table.m-table td.m-type a:focus,
-table.m-table tr.m-type th a:focus,
-table.m-table th.m-type a:focus,
-.m-note.m-type a:active,
-table.m-table tr.m-type td a:active,
-table.m-table td.m-type a:active,
-table.m-table tr.m-type th a:active,
-table.m-table th.m-type a:active {
-  color: #9ad36a;
-}
-figure.m-figure.m-default:before {
-  border-color: transparent;
-}
-figure.m-figure.m-default figcaption {
-  color: #000000;
-}
-figure.m-figure.m-primary:before {
-  border-color: transparent;
-}
-figure.m-figure.m-primary figcaption {
-  color: #31708f;
-}
-figure.m-figure.m-success:before {
-  border-color: transparent;
-}
-figure.m-figure.m-success figcaption {
-  color: #9ad36a;
-}
-figure.m-figure.m-warning:before {
-  border-color: transparent;
-}
-figure.m-figure.m-warning figcaption {
-  color: #f9cf79;
-}
-figure.m-figure.m-danger:before {
-  border-color: transparent;
-}
-figure.m-figure.m-danger figcaption {
-  color: #f60000;
-}
-figure.m-figure.m-info:before {
-  border-color: transparent;
-}
-figure.m-figure.m-info figcaption {
-  color: #31708f;
-}
-figure.m-figure.m-type:before {
-  border-color: transparent;
-}
-figure.m-figure.m-type figcaption {
-  color: #9ad36a;
-}
-figure.m-figure.m-dim:before {
-  border-color: transparent;
-}
-figure.m-figure.m-dim {
-  color: #bdbdbd;
-}
-figure.m-figure.m-dim a {
-  color: #c0c0c0;
-}
-figure.m-figure.m-dim a:hover,
-figure.m-figure.m-dim a:focus,
-figure.m-figure.m-dim a:active {
-  color: #949494;
-}
-.m-math {
-  fill: #000000;
-}
-.m-math.m-default,
-.m-math g.m-default,
-.m-math rect.m-default,
-div.m-plot svg .m-bar.m-default,
-.m-graph g.m-edge polygon,
-.m-graph g.m-node:not(.m-flat) ellipse,
-.m-graph g.m-node:not(.m-flat) polygon,
-.m-graph g.m-edge text,
-.m-graph g.m-node.m-flat text,
-.m-graph.m-default g.m-edge polygon,
-.m-graph.m-default g.m-node:not(.m-flat) ellipse,
-.m-graph.m-default g.m-node:not(.m-flat) polygon,
-.m-graph.m-default g.m-edge text,
-.m-graph.m-default g.m-node.m-flat text {
-  fill: #000000;
-}
-.m-graph g.m-edge polygon,
-.m-graph g.m-edge path,
-.m-graph g.m-node ellipse,
-.m-graph g.m-node polygon,
-.m-graph g.m-node polyline,
-.m-graph.m-default g.m-edge polygon,
-.m-graph.m-default g.m-edge path,
-.m-graph.m-default g.m-node ellipse,
-.m-graph.m-default g.m-node polygon,
-.m-graph.m-default g.m-node polyline {
-  stroke: #000000;
-}
-.m-math.m-primary,
-.m-math g.m-primary,
-.m-math rect.m-primary,
-div.m-plot svg .m-bar.m-primary,
-.m-graph.m-primary g.m-edge polygon,
-.m-graph.m-primary g.m-node:not(.m-flat) ellipse,
-.m-graph.m-primary g.m-node:not(.m-flat) polygon,
-.m-graph.m-primary g.m-edge text,
-.m-graph.m-primary g.m-node.m-flat text {
-  fill: #31708f;
-}
-.m-graph.m-primary g.m-edge polygon,
-.m-graph.m-primary g.m-edge path,
-.m-graph.m-primary g.m-node ellipse,
-.m-graph.m-primary g.m-node polygon,
-.m-graph.m-primary g.m-node polyline {
-  stroke: #31708f;
-}
-.m-math.m-success,
-.m-math g.m-success,
-.m-math rect.m-success,
-div.m-plot svg .m-bar.m-success,
-.m-graph.m-success g.m-edge polygon,
-.m-graph.m-success g.m-node:not(.m-flat) ellipse,
-.m-graph.m-success g.m-node:not(.m-flat) polygon,
-.m-graph.m-success g.m-edge text,
-.m-graph.m-success g.m-node.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph.m-success g.m-edge polygon,
-.m-graph.m-success g.m-edge path,
-.m-graph.m-success g.m-node ellipse,
-.m-graph.m-success g.m-node polygon,
-.m-graph.m-success g.m-node polyline {
-  stroke: #9ad36a;
-}
-.m-math.m-warning,
-.m-math g.m-warning,
-.m-math rect.m-warning,
-div.m-plot svg .m-bar.m-warning,
-.m-graph.m-warning g.m-edge polygon,
-.m-graph.m-warning g.m-node:not(.m-flat) ellipse,
-.m-graph.m-warning g.m-node:not(.m-flat) polygon,
-.m-graph.m-warning g.m-edge text,
-.m-graph.m-warning g.m-node.m-flat text {
-  fill: #f9cf79;
-}
-.m-graph.m-warning g.m-edge polygon,
-.m-graph.m-warning g.m-edge path,
-.m-graph.m-warning g.m-node ellipse,
-.m-graph.m-warning g.m-node polygon,
-.m-graph.m-warning g.m-node polyline {
-  stroke: #f9cf79;
-}
-.m-math.m-danger,
-.m-math g.m-danger,
-.m-math rect.m-danger,
-div.m-plot svg .m-bar.m-danger,
-.m-graph.m-danger g.m-edge polygon,
-.m-graph.m-danger g.m-node:not(.m-flat) ellipse,
-.m-graph.m-danger g.m-node:not(.m-flat) polygon,
-.m-graph.m-danger g.m-edge text,
-.m-graph.m-danger g.m-node.m-flat text {
-  fill: #f60000;
-}
-.m-graph.m-danger g.m-edge polygon,
-.m-graph.m-danger g.m-edge path,
-.m-graph.m-danger g.m-node ellipse,
-.m-graph.m-danger g.m-node polygon,
-.m-graph.m-danger g.m-node polyline {
-  stroke: #f60000;
-}
-.m-math.m-info,
-.m-math g.m-info,
-.m-math rect.m-info,
-div.m-plot svg .m-bar.m-info,
-.m-graph.m-info g.m-edge polygon,
-.m-graph.m-info g.m-node:not(.m-flat) ellipse,
-.m-graph.m-info g.m-node:not(.m-flat) polygon,
-.m-graph.m-info g.m-edge text,
-.m-graph.m-info g.m-node.m-flat text {
-  fill: #31708f;
-}
-.m-graph.m-info g.m-edge polygon,
-.m-graph.m-info g.m-edge path,
-.m-graph.m-info g.m-node ellipse,
-.m-graph.m-info g.m-node polygon,
-.m-graph.m-info g.m-node polyline {
-  stroke: #31708f;
-}
-.m-math.m-dim,
-.m-math g.m-dim,
-.m-math rect.m-dim,
-div.m-plot svg .m-bar.m-dim,
-.m-graph.m-dim g.m-edge polygon,
-.m-graph.m-dim g.m-node:not(.m-flat) ellipse,
-.m-graph.m-dim g.m-node:not(.m-flat) polygon,
-.m-graph.m-dim g.m-edge text,
-.m-graph.m-dim g.m-node.m-flat text {
-  fill: #bdbdbd;
-}
-.m-graph.m-dim g.m-edge polygon,
-.m-graph.m-dim g.m-edge path,
-.m-graph.m-dim g.m-node ellipse,
-.m-graph.m-dim g.m-node polygon,
-.m-graph.m-dim g.m-node polyline {
-  stroke: #bdbdbd;
-}
-.m-math.m-type,
-.m-math g.m-type,
-.m-math rect.m-type,
-div.m-plot svg .m-bar.m-type,
-.m-graph.m-type g.m-edge polygon,
-.m-graph.m-type g.m-node:not(.m-flat) ellipse,
-.m-graph.m-type g.m-node:not(.m-flat) polygon,
-.m-graph.m-type g.m-edge text,
-.m-graph.m-type g.m-node.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph.m-type g.m-edge polygon,
-.m-graph.m-type g.m-edge path,
-.m-graph.m-type g.m-node ellipse,
-.m-graph.m-type g.m-node polygon,
-.m-graph.m-type g.m-node polyline {
-  stroke: #9ad36a;
-}
-.m-graph g.m-edge.m-default polygon,
-.m-graph g.m-node.m-default:not(.m-flat) ellipse,
-.m-graph g.m-node.m-default:not(.m-flat) polygon,
-.m-graph g.m-edge.m-default text,
-.m-graph g.m-node.m-default.m-flat text {
-  fill: #000000;
-}
-.m-graph g.m-edge.m-default polygon,
-.m-graph g.m-edge.m-default path,
-.m-graph g.m-node.m-default ellipse,
-.m-graph g.m-node.m-default polygon,
-.m-graph g.m-node.m-default polyline {
-  stroke: #000000;
-}
-.m-graph g.m-edge.m-primary polygon,
-.m-graph g.m-node.m-primary:not(.m-flat) ellipse,
-.m-graph g.m-node.m-primary:not(.m-flat) polygon,
-.m-graph g.m-edge.m-primary text,
-.m-graph g.m-node.m-primary.m-flat text {
-  fill: #31708f;
-}
-.m-graph g.m-edge.m-primary polygon,
-.m-graph g.m-edge.m-primary path,
-.m-graph g.m-node.m-primary ellipse,
-.m-graph g.m-node.m-primary polygon,
-.m-graph g.m-node.m-primary polyline {
-  stroke: #31708f;
-}
-.m-graph g.m-edge.m-success polygon,
-.m-graph g.m-node.m-success:not(.m-flat) ellipse,
-.m-graph g.m-node.m-success:not(.m-flat) polygon,
-.m-graph g.m-edge.m-success text,
-.m-graph g.m-node.m-success.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph g.m-edge.m-success polygon,
-.m-graph g.m-edge.m-success path,
-.m-graph g.m-node.m-success ellipse,
-.m-graph g.m-node.m-success polygon,
-.m-graph g.m-node.m-success polyline {
-  stroke: #9ad36a;
-}
-.m-graph g.m-edge.m-warning polygon,
-.m-graph g.m-node.m-warning:not(.m-flat) ellipse,
-.m-graph g.m-node.m-warning:not(.m-flat) polygon,
-.m-graph g.m-edge.m-warning text,
-.m-graph g.m-node.m-warning.m-flat text {
-  fill: #f9cf79;
-}
-.m-graph g.m-edge.m-warning polygon,
-.m-graph g.m-edge.m-warning path,
-.m-graph g.m-node.m-warning ellipse,
-.m-graph g.m-node.m-warning polygon,
-.m-graph g.m-node.m-warning polyline {
-  stroke: #f9cf79;
-}
-.m-graph g.m-edge.m-danger polygon,
-.m-graph g.m-node.m-danger:not(.m-flat) ellipse,
-.m-graph g.m-node.m-danger:not(.m-flat) polygon,
-.m-graph g.m-edge.m-danger text,
-.m-graph g.m-node.m-danger.m-flat text {
-  fill: #f60000;
-}
-.m-graph g.m-edge.m-danger polygon,
-.m-graph g.m-edge.m-danger path,
-.m-graph g.m-node.m-danger ellipse,
-.m-graph g.m-node.m-danger polygon,
-.m-graph g.m-node.m-danger polyline {
-  stroke: #f60000;
-}
-.m-graph g.m-edge.m-info polygon,
-.m-graph g.m-node.m-info:not(.m-flat) ellipse,
-.m-graph g.m-node.m-info:not(.m-flat) polygon,
-.m-graph g.m-edge.m-info text,
-.m-graph g.m-node.m-info.m-flat text {
-  fill: #31708f;
-}
-.m-graph g.m-edge.m-info polygon,
-.m-graph g.m-edge.m-info path,
-.m-graph g.m-node.m-info ellipse,
-.m-graph g.m-node.m-info polygon,
-.m-graph g.m-node.m-info polyline {
-  stroke: #31708f;
-}
-.m-graph g.m-edge.m-dim polygon,
-.m-graph g.m-node.m-dim:not(.m-flat) ellipse,
-.m-graph g.m-node.m-dim:not(.m-flat) polygon,
-.m-graph g.m-edge.m-dim text,
-.m-graph g.m-node.m-dim.m-flat text {
-  fill: #bdbdbd;
-}
-.m-graph g.m-edge.m-dim polygon,
-.m-graph g.m-edge.m-dim path,
-.m-graph g.m-node.m-dim ellipse,
-.m-graph g.m-node.m-dim polygon,
-.m-graph g.m-node.m-dim polyline {
-  stroke: #bdbdbd;
-}
-.m-graph g.m-edge.m-type polygon,
-.m-graph g.m-node.m-type:not(.m-flat) ellipse,
-.m-graph g.m-node.m-type:not(.m-flat) polygon,
-.m-graph g.m-edge.m-type text,
-.m-graph g.m-node.m-type.m-flat text {
-  fill: #9ad36a;
-}
-.m-graph g.m-edge.m-type polygon,
-.m-graph g.m-edge.m-type path,
-.m-graph g.m-node.m-type ellipse,
-.m-graph g.m-node.m-type polygon,
-.m-graph g.m-node.m-type polyline {
-  stroke: #9ad36a;
-}
-p,
-ul,
-ol,
-dl,
-blockquote,
-pre,
-.m-code-figure,
-.m-console-figure,
-hr,
-.m-note,
-.m-frame,
-.m-block,
-div.m-button,
-div.m-scroll,
-table.m-table,
-div.m-image,
-img.m-image,
-svg.m-image,
-figure.m-figure,
-.m-imagegrid,
-div.m-math,
-div.m-graph,
-div.m-plot {
-  margin-bottom: 1rem;
-}
-p:last-child,
-p.m-nopadb,
-ul:last-child,
-ul.m-nopadb,
-ol:last-child,
-ol.m-nopadb,
-dl:last-child,
-dl.m-nopadb,
-blockquote:last-child,
-blockquote.m-nopadb,
-pre:last-child,
-pre.m-nopadb,
-.m-code-figure:last-child,
-.m-code-figure.m-nopadb,
-.m-console-figure:last-child,
-.m-console-figure.m-nopadb,
-hr:last-child,
-hr.m-nopadb,
-.m-note:last-child,
-.m-note.m-nopadb,
-.m-frame:last-child,
-.m-frame.m-nopadb,
-.m-block:last-child,
-.m-block.m-nopadb,
-div.m-button:last-child,
-div.m-button.m-nopadb,
-div.m-scroll:last-child,
-div.m-scroll.m-nopadb,
-table.m-table:last-child,
-table.m-table.m-nopadb,
-img.m-image:last-child,
-img.m-image.m-nopadb,
-svg.m-image:last-child,
-svg.m-image.m-nopadb,
-div.m-image:last-child,
-div.m-image.m-nopadb,
-figure.m-figure:last-child,
-figure.m-figure.m-nopadb,
-.m-imagegrid:last-child,
-.m-imagegrid.m-nopadb,
-div.m-math:last-child,
-div.m-math.m-nopadb,
-div.m-graph:last-child,
-div.m-graph.m-nopadb,
-div.m-plot:last-child,
-div.m-plot.m-nopadb {
-  margin-bottom: 0;
-}
-li > p:last-child,
-li > blockquote:last-child,
-li > pre:last-child,
-li > .m-code-figure:last-child,
-li > .m-console-figure:last-child,
-li > .m-note:last-child,
-li > .m-frame:last-child,
-li > .m-block:last-child,
-li > div.m-button:last-child,
-li > div.m-scroll:last-child,
-li > table.m-table:last-child,
-li > img.m-image:last-child,
-li > svg.m-image:last-child,
-li > div.m-image:last-child,
-li > figure.m-figure:last-child,
-li > div.m-math:last-child,
-li > div.m-graph:last-child,
-li > div.m-plot:last-child {
-  margin-bottom: 1rem;
-}
-li:last-child > p:last-child,
-li:last-child > p.m-nopadb,
-li:last-child > blockquote:last-child,
-li:last-child > blockquote.m-nopadb,
-li:last-child > pre:last-child,
-li:last-child > pre.m-nopadb,
-li:last-child > .m-code-figure:last-child,
-li:last-child > .m-code-figure.m-nopadb,
-li:last-child > .m-console-figure:last-child,
-li:last-child > .m-console-figure.m-nopadb,
-li:last-child > .m-note:last-child,
-li:last-child > .m-note.m-nopadb,
-li:last-child > .m-frame:last-child,
-li:last-child > .m-frame.m-nopadb,
-li:last-child > .m-block:last-child,
-li:last-child > .m-block.m-nopadb,
-li:last-child > div.m-button:last-child,
-li:last-child > div.m-button.m-nopadb,
-li:last-child > div.m-scroll:last-child,
-li:last-child > div.m-scroll.m-nopadb,
-li:last-child > table.m-table:last-child,
-li:last-child > table.m-table.m-nopadb,
-li:last-child > img.m-image:last-child,
-li:last-child > img.m-image.m-nopadb,
-li:last-child > svg.m-image:last-child,
-li:last-child > svg.m-image.m-nopadb,
-li:last-child > div.m-image:last-child,
-li:last-child > div.m-image.m-nopadb,
-li:last-child > figure.m-figure:last-child,
-li:last-child > figure.m-figure.m-nopadb,
-li:last-child > div.m-math:last-child,
-li:last-child > div.m-math.m-nopadb,
-li:last-child > div.m-graph:last-child,
-li:last-child > div.m-graph.m-nopadb,
-li:last-child > div.m-plot:last-child,
-li:last-child > div.m-plot.m-nopadb {
-  margin-bottom: 0;
-}
-
-body > header > nav {
-  width: 100%;
-  background-color: #000000;
-  min-height: 3rem;
-  font-size: 16px;
-}
-body > header > nav.m-navbar-landing,
-body > header > nav.m-navbar-cover {
-  background-color: transparent;
-  position: relative;
-}
-body > header > nav.m-navbar-landing {
-  opacity: 0.8;
-}
-body > header > nav.m-navbar-cover {
-  background-color: #000000;
-  opacity: 1;
-}
-body > header > nav.m-navbar-landing:hover,
-body > header > nav.m-navbar-cover:hover {
-  background-color: #000000;
-  opacity: 1;
-}
-body > header > nav.m-navbar-landing:target,
-body > header > nav.m-navbar-cover:target {
-  background-color: #000000;
-  opacity: 1;
-}
-body > header > nav.m-navbar-landing #m-navbar-brand.m-navbar-brand-hidden {
-  visibility: hidden;
-}
-body
-  > header
-  > nav.m-navbar-landing:target
-  #m-navbar-brand.m-navbar-brand-hidden {
-  visibility: visible;
-}
-body > header > nav {
-  margin-left: auto;
-  margin-right: auto;
-  color: #ffffff;
-}
-body > header > nav a {
-  text-decoration: none;
-  text-transform: none;
-  display: inline-block;
-  vertical-align: middle;
-  line-height: 2.75rem;
-  color: #ffffff;
-}
-body > header > nav #m-navbar-brand,
-body > header > nav a#m-navbar-show,
-body > header > nav a#m-navbar-hide {
-  font-weight: 300;
-  font-size: 1.125rem;
-  padding-left: 1rem;
-  padding-right: 1rem;
-}
-body > header > nav a#m-navbar-brand,
-body > header > nav #m-navbar-brand a {
-  text-transform: none;
-}
-body > header > nav a#m-navbar-brand img,
-body > header > nav #m-navbar-brand a img {
-  height: 5rem;
-  vertical-align: -22.5%;
-  margin-right: 0.5rem;
-}
-body > header > nav #m-navbar-brand a {
-  padding-left: 0;
-  padding-right: 0;
-}
-body > header > nav #m-navbar-brand .m-thin {
-  font-weight: normal;
-}
-body > header > nav #m-navbar-brand .m-breadcrumb {
-  color: #bdbdbd;
-}
-body > header > nav a#m-navbar-show:before,
-body > header > nav a#m-navbar-hide:before {
-  content: "\2630";
-}
-body > header > nav #m-navbar-collapse {
-  padding-bottom: 1rem;
-}
-body > header > nav #m-navbar-collapse li {
-  border-style: solid;
-  border-color: transparent;
-  border-width: 0 0 0 0.25rem;
-  margin-left: -1rem;
-}
-body > header > nav #m-navbar-collapse li a {
-  border-style: solid;
-  border-color: transparent;
-  line-height: 1.5rem;
-  margin-left: -0.25rem;
-  padding-left: 0.75rem;
-  border-width: 0 1px 1px 1px;
-  width: 100%;
-}
-body > header > nav #m-navbar-collapse li ol {
-  border-color: #ddd;
-}
-body > header > nav #m-navbar-collapse li a#m-navbar-current {
-  color: #ffffff;
-  background-color: #000000;
-  border-color: #000000;
-}
-body > header > nav #m-navbar-collapse li ol li a#m-navbar-current {
-  color: #000000;
-  background-color: #ffffff;
-  border-color: #ddd;
-}
-body > header > nav ol {
-  list-style-type: none;
-  margin: 0;
-}
-body > header > nav ol ol {
-  padding-left: 1.5rem;
-}
-body > header > nav .m-row > [class*="m-col-"] {
-  padding-top: 0;
-  padding-bottom: 0;
-}
-body > header > nav a:hover,
-body > header > nav a:focus,
-body > header > nav a:active {
-  color: #ffffff;
-}
-body > header > nav #m-navbar-collapse li:hover {
-  border-color: #ffffff;
-}
-body > header > nav #m-navbar-collapse li a:hover,
-body > header > nav #m-navbar-collapse li a:focus,
-body > header > nav #m-navbar-collapse li a:active {
-  border-color: #ffffff;
-  background-color: #000000;
-}
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:hover,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:hover,
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:focus,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:focus,
-body > header > nav.m-navbar-landing #m-navbar-collapse li a:active,
-body > header > nav.m-navbar-cover #m-navbar-collapse li a:active {
-  background-color: var(--header-link-active-background-color-semi);
-}
-body > header > nav #m-navbar-hide {
-  display: none;
-}
-body > header > nav:target #m-navbar-collapse {
-  display: block;
-}
-body > header > nav:target #m-navbar-show {
-  display: none;
-}
-body > header > nav:target #m-navbar-hide {
-  display: inline-block;
-}
-@media screen and (min-width: 768px) {
-  body > header > nav #m-navbar-show,
-  body > header > nav #m-navbar-hide,
-  body > header > nav:target #m-navbar-show,
-  body > header > nav:target #m-navbar-hide {
-    display: none;
-  }
-  body > header > nav #m-navbar-collapse li a {
-    line-height: 2.75rem;
-  }
-  body > header > nav a,
-  body > header > nav #m-navbar-collapse li a {
-    margin-left: 0;
-    padding-left: 1rem;
-    padding-right: 1rem;
-    white-space: nowrap;
-  }
-  body > header > nav #m-navbar-collapse {
-    padding-bottom: 0;
-  }
-  body > header > nav #m-navbar-collapse li ol {
-    background-color: #000000;
-  }
-  body > header > nav #m-navbar-collapse ol ol li {
-    margin-left: 0;
-    padding-left: 0;
-    border-left-width: 0;
-  }
-  body > header > nav #m-navbar-collapse ol ol li a {
-    padding-left: 0.75rem;
-    color: #000000;
-    background-color: #ffffff;
-    border-color: #ddd;
-  }
-  body > header > nav #m-navbar-collapse ol ol li a:active {
-    padding-left: 0.75rem;
-    color: #ffffff;
-    background-color: #353535;
-    border-color: #ddd;
-  }
-  body > header > nav #m-navbar-collapse ol ol li a:hover {
-    padding-left: 0.75rem;
-    color: #ffffff;
-    background-color: #353535;
-    border-color: #ddd;
-  }
-  body > header > nav #m-navbar-collapse > .m-row > ol > li {
-    margin-left: 0;
-    border-left-width: 0;
-  }
-  body > header > nav #m-navbar-collapse > .m-row > ol > li > a {
-    border-width: 0.25rem 0 0 0;
-  }
-  body > header > nav #m-navbar-collapse ol {
-    padding-left: 0;
-    padding-right: 0;
-  }
-  body > header > nav #m-navbar-collapse > .m-row > ol,
-  body > header > nav #m-navbar-collapse > .m-row > ol > li {
-    float: left;
-  }
-  body > header > nav #m-navbar-collapse ol ol {
-    z-index: 99999;
-    position: absolute;
-    visibility: hidden;
-  }
-  body > header > nav #m-navbar-collapse li:hover ol {
-    visibility: visible;
-  }
-}
-body > footer {
-  width: 100%;
-}
-body > footer > nav {
-  padding-top: 1rem;
-  padding-bottom: 1rem;
-  font-size: 0.85rem;
-  text-align: center;
-  color: #777777;
-  background-color: #353535;
-}
-body > footer > nav h3,
-body > footer > nav h3 a {
-  text-transform: capitalize;
-  font-weight: normal;
-}
-body > footer > nav ul {
-  list-style-type: none;
-  padding: 0;
-  margin: 0;
-}
-body > footer > nav a {
-  text-decoration: none;
-  text-transform: none;
-  color: #999;
-}
-body > footer > nav a:hover,
-body > footer > nav a:focus,
-body > footer > nav a:active {
-  color: #494949;
-}
-body > main {
-  padding-top: 1rem;
-  padding-bottom: 1rem;
-}
-article h1 {
-  font-size: 1.75rem;
-}
-article h1 .m-breadcrumb {
-  color: #bdbdbd;
-  font-weight: normal;
-  font-size: 16px;
-}
-article h1 .m-breadcrumb a {
-  color: #26a9e0;
-}
-article h1 .m-breadcrumb a:hover,
-article h1 a:focus,
-article h1 a:active {
-  color: #26a9e0;
-}
-article hr {
-  width: 75%;
-  border-width: 2px 0 0 0 ;
-  border-style: solid;
-  border-color: #92d050;
-  margin: auto;
-}
-article section hr {
-  width: 50%;
-  border-width: 1px 0 0 0;
-  border-style: solid;
-  border-color: #ddd;
-  margin: auto;
-  padding-top: 5px;
-  padding-bottom: 10px;
-}
-article > header h1 {
-  font-size: 2rem;
-  margin-bottom: 0.5rem;
-}
-article h1 a,
-article > header h1,
-article > header h1 a,
-article section > h2,
-article section > h2 a,
-article section > h3,
-article section > h3 a,
-article section > h4,
-article section > h4 a,
-article section > h5,
-article section > h5 a,
-article section > h6,
-article section > h6 a {
-  color: #000000;
-}
-article h1 a:hover,
-article > header h1 a:hover,
-article > header h1 a:focus,
-article > header h1 a:active,
-article section > h2 a:hover,
-article section > h2 a:focus,
-article section > h2 a:active,
-article section > h3 a:hover,
-article section > h3 a:focus,
-article section > h3 a:active,
-article section > h4 a:hover,
-article section > h4 a:focus,
-article section > h4 a:active,
-article section > h5 a:hover,
-article section > h5 a:focus,
-article section > h5 a:active,
-article section > h6 a:hover,
-article section > h6 a:focus,
-article section > h6 a:active {
-  color: #000000;
-}
-article > header .m-date {
-  display: block;
-  width: 2.5rem;
-  float: left;
-  text-align: center;
-  line-height: 95%;
-  font-size: 0.75rem;
-  font-weight: normal;
-  white-space: nowrap;
-  border-right-style: solid;
-  border-right-width: 0.125rem;
-  border-color: #000000;
-  padding-right: 0.75rem;
-  margin-top: -0.1rem;
-  margin-right: 0.75rem;
-  margin-bottom: 0.25rem;
-}
-article > header .m-date-day {
-  display: block;
-  font-weight: bold;
-  padding-top: 0.2rem;
-  padding-bottom: 0.15rem;
-  font-size: 1.25rem;
-}
-article > header p {
-  color: #7a7a7a;
-  font-size: 1.125rem;
-}
-article > header h1::after {
-  content: " ";
-  clear: both;
-  display: table;
-}
-article > footer {
-  color: #969696;
-}
-article > footer p {
-  font-style: italic;
-  font-size: 0.85rem;
-  text-indent: 0;
-}
-article h1 a,
-article > header h1 a,
-article section > h2 a,
-article section > h3 a,
-article section > h4 a,
-article section > h5 a,
-article section > h6 a {
-  text-decoration: none;
-}
-#m-landing-image,
-#m-cover-image,
-article#m-jumbo > header #m-jumbo-image {
-  background-size: cover;
-  background-color: #666666;
-  background-position: center center;
-  background-repeat: no-repeat;
-  margin-top: -4rem;
-  padding-top: 5rem;
-}
-#m-landing-image {
-  color: #ffffff;
-}
-#m-cover-image {
-  height: 30rem;
-  margin-bottom: -26rem;
-}
-#m-landing-cover h1 {
-  font-size: 2.8rem;
-  margin-top: -0.5rem;
-  padding-left: 1.5rem;
-  padding-bottom: 1rem;
-  text-transform: capitalize;
-}
-#m-landing-cover {
-  padding-bottom: 10rem;
-  margin-bottom: -6rem;
-}
-article#m-jumbo {
-  margin-top: -1rem;
-}
-#m-landing-cover,
-#m-cover-image > div,
-article#m-jumbo > header #m-jumbo-cover {
-  background: linear-gradient(
-    transparent 0%,
-    transparent 50%,
-    #e8e8e8 100%
-  );
-  width: 100%;
-  height: 100%;
-}
-article#m-jumbo > header h1,
-article#m-jumbo > header h2 {
-  text-align: center;
-  font-weight: bold;
-}
-article#m-jumbo > header a {
-  text-decoration: none;
-}
-article#m-jumbo > header #m-jumbo-cover {
-  padding-bottom: 5rem;
-}
-article#m-jumbo > header #m-jumbo-image {
-  font-size: 2.5vmin;
-  margin-bottom: -3rem;
-}
-article#m-jumbo > header h1 {
-  font-size: 10vmin;
-}
-article#m-jumbo > header h2 {
-  font-size: 3vmin;
-}
-@media screen and (max-height: 640px), screen and (max-width: 640px) {
-  article#m-jumbo > header h1 {
-    font-size: 3rem;
-  }
-  article#m-jumbo > header #m-jumbo-image,
-  article#m-jumbo > header h2 {
-    font-size: 1rem;
-  }
-}
-article#m-jumbo > header,
-article#m-jumbo > header h1,
-article#m-jumbo > header a {
-  color: #ffffff;
-}
-article#m-jumbo > header a:hover,
-article#m-jumbo > header a:focus,
-article#m-jumbo > header a:active {
-  color: #f0f0f0;
-}
-article#m-jumbo.m-inverted > header,
-article#m-jumbo.m-inverted > header h1,
-article#m-jumbo.m-inverted > header a {
-  color: #000000;
-}
-article#m-jumbo.m-inverted > header a:hover,
-article#m-jumbo.m-inverted > header a:focus,
-article#m-jumbo.m-inverted > header a:active {
-  color: #0f0f0f;
-}
-.m-landing-news h3 a {
-  color: #000000;
-  text-decoration: none;
-  text-transform: capitalize;
-}
-.m-landing-news h3 a:hover,
-.m-landing-news h3 a:hover,
-.m-landing-news h3 a:focus,
-.m-landing-news h3 a:active {
-  color: #000000;
-}
-.m-landing-news time {
-  display: inline-block;
-  margin-left: 1rem;
-  float: right;
-}
-.m-article-pagination {
-  text-align: center;
-  padding: 1rem;
-}
-nav.m-navpanel {
-  text-align: center;
-}
-nav.m-navpanel h3 {
-  text-transform: capitalize;
-  font-weight: normal;
-}
-nav.m-navpanel ol {
-  text-transform: capitalize;
-}
-nav.m-navpanel ol,
-nav.m-navpanel ul {
-  list-style-type: none;
-  padding: 0;
-}
-nav.m-navpanel a {
-  color: #292929;
-  text-decoration: none;
-}
-nav.m-navpanel a:hover,
-nav.m-navpanel a:focus,
-nav.m-navpanel a:active {
-  color: #cb4b16;
-}
-ul.m-tagcloud li {
-  display: inline;
-}
-ul.m-tagcloud li.m-tag-1 {
-  font-size: 0.75rem;
-}
-ul.m-tagcloud li.m-tag-2 {
-  font-size: 0.825rem;
-}
-ul.m-tagcloud li.m-tag-3 {
-  font-size: 1rem;
-}
-ul.m-tagcloud li.m-tag-4 {
-  font-size: 1.25rem;
-}
-ul.m-tagcloud li.m-tag-5 {
-  font-size: 1.5rem;
-}
-article section:target figure.m-code-figure,
-article section:target figure.m-console-figure {
-  z-index: 1;
-}
-article,
-article > header,
-article section {
-  margin-bottom: 1rem;
-}
-article:last-child,
-article section:last-child {
-  margin-bottom: 0;
-}
-.m-container-inflatable section:target > .m-note,
-.m-container-inflatable section:target > .m-frame,
-.m-container-inflatable section:target > .m-block,
-.m-container-inflatable section:target > pre,
-.m-container-inflatable section:target > .m-code-figure > pre:first-child,
-.m-container-inflatable section:target > .m-console-figure > pre:first-child,
-.m-container-inflatable section:target section > .m-note,
-.m-container-inflatable section:target section > .m-frame,
-.m-container-inflatable section:target section > .m-block,
-.m-container-inflatable section:target section > pre,
-.m-container-inflatable
-  section:target
-  section
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  section
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target [class*="m-center-"] > .m-note,
-.m-container-inflatable section:target [class*="m-center-"] > .m-frame,
-.m-container-inflatable section:target [class*="m-center-"] > .m-block,
-.m-container-inflatable section:target [class*="m-center-"] > pre,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target [class*="m-left-"] > .m-note,
-.m-container-inflatable section:target [class*="m-left-"] > .m-frame,
-.m-container-inflatable section:target [class*="m-left-"] > .m-block,
-.m-container-inflatable section:target [class*="m-left-"] > pre,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target [class*="m-right-"] > .m-note,
-.m-container-inflatable section:target [class*="m-right-"] > .m-frame,
-.m-container-inflatable section:target [class*="m-right-"] > .m-block,
-.m-container-inflatable section:target [class*="m-right-"] > pre,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-console-figure
-  > pre:first-child,
-.m-container-inflatable section:target .m-container-inflate > .m-note,
-.m-container-inflatable section:target .m-container-inflate > .m-frame,
-.m-container-inflatable section:target .m-container-inflate > .m-block,
-.m-container-inflatable section:target .m-container-inflate > pre,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-code-figure
-  > pre:first-child,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-console-figure
-  > pre:first-child {
-  margin-left: -1rem;
-  border-left-style: solid;
-  border-left-width: 0.25rem;
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-  padding-left: 0.75rem;
-}
-.m-container-inflatable section:target > .m-code-figure::before,
-.m-container-inflatable section:target > .m-console-figure::before,
-.m-container-inflatable section:target section > .m-code-figure::before,
-.m-container-inflatable section:target section > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > .m-console-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-code-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflate
-  > .m-console-figure::before {
-  border-top-left-radius: 0;
-  border-bottom-left-radius: 0;
-  border-left-width: 0.25rem;
-}
-.m-container-inflatable section:target > .m-code-figure > pre.m-nopad,
-.m-container-inflatable section:target > .m-console-figure > pre.m-nopad {
-  margin-left: -0.75rem;
-  padding-left: -0.75rem;
-}
-@media screen and (min-width: 576px) {
-  .m-container-inflatable section:target .m-center-s > .m-note,
-  .m-container-inflatable section:target .m-center-s > pre,
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-console-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-console-figure
-    > pre:first-child {
-    border-left-width: 0;
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable section:target .m-center-s > .m-block,
-  .m-container-inflatable section:target .m-right-s > .m-block {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-  }
-  .m-container-inflatable section:target .m-center-s > .m-frame,
-  .m-container-inflatable section:target .m-right-s > .m-frame {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-    padding-left: 0.875rem;
-  }
-  .m-container-inflatable section:target .m-right-s > .m-block,
-  .m-container-inflatable section:target .m-right-s > .m-frame {
-    margin-left: 0;
-  }
-  .m-container-inflatable section:target .m-right-s > .m-note,
-  .m-container-inflatable section:target .m-right-s > pre {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    margin-left: 0;
-    border-left-width: 0;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-console-figure::before {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container-inflatable section:target .m-center-m > .m-note,
-  .m-container-inflatable section:target .m-center-m > pre,
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-console-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-console-figure
-    > pre:first-child {
-    border-left-width: 0;
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable section:target .m-center-m > .m-block,
-  .m-container-inflatable section:target .m-right-m > .m-block {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-  }
-  .m-container-inflatable section:target .m-center-m > .m-frame,
-  .m-container-inflatable section:target .m-right-m > .m-frame {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-    padding-left: 0.875rem;
-  }
-  .m-container-inflatable section:target .m-right-m > .m-block,
-  .m-container-inflatable section:target .m-right-m > .m-frame {
-    margin-left: 0;
-  }
-  .m-container-inflatable section:target .m-right-m > .m-note,
-  .m-container-inflatable section:target .m-right-m > pre {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    margin-left: 0;
-    border-left-width: 0;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-console-figure::before {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container-inflatable section:target .m-center-l > .m-note,
-  .m-container-inflatable section:target .m-center-l > pre,
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-console-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-code-figure
-    > pre:first-child,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-console-figure
-    > pre:first-child {
-    border-left-width: 0;
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable section:target .m-center-l > .m-block,
-  .m-container-inflatable section:target .m-right-l > .m-block {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-  }
-  .m-container-inflatable section:target .m-center-l > .m-frame,
-  .m-container-inflatable section:target .m-right-l > .m-frame {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-    padding-left: 0.875rem;
-  }
-  .m-container-inflatable section:target .m-right-l > .m-block,
-  .m-container-inflatable section:target .m-right-l > .m-frame {
-    margin-left: 0;
-  }
-  .m-container-inflatable section:target .m-right-l > .m-note,
-  .m-container-inflatable section:target .m-right-l > pre {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    margin-left: 0;
-    border-left-width: 0;
-    padding-left: 1rem;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-console-figure::before {
-    border-top-left-radius: 0px;
-    border-bottom-left-radius: 0px;
-    border-left-width: 0.125rem;
-  }
-}
-.m-container-inflatable section:target > figure.m-code-figure::before,
-.m-container-inflatable section:target > figure.m-console-figure::before,
-.m-container-inflatable section:target section > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  section
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-center-"]
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-left-"]
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  [class*="m-right-"]
-  > figure.m-console-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflatable
-  > figure.m-code-figure::before,
-.m-container-inflatable
-  section:target
-  .m-container-inflatable
-  > figure.m-console-figure::before {
-  border-left-color: #ddd;
-}
-@media screen and (min-width: 576px) {
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-code-figure::before {
-    border-color: #f7f7f7;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-s
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-s
-    > figure.m-console-figure::before {
-    border-color: #f7f7f7;
-  }
-}
-@media screen and (min-width: 768px) {
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-code-figure::before {
-    border-color: #f7f7f7;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-m
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-m
-    > figure.m-console-figure::before {
-    border-color: #f7f7f7;
-  }
-}
-@media screen and (min-width: 992px) {
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-code-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-code-figure::before {
-    border-color: #f7f7f7;
-  }
-  .m-container-inflatable
-    section:target
-    .m-center-l
-    > figure.m-console-figure::before,
-  .m-container-inflatable
-    section:target
-    .m-right-l
-    > figure.m-console-figure::before {
-    border-color: #f7f7f7;
-  }
-}
-.m-container-inflatable section:target pre,
-.m-container-inflatable section:target figure.m-code-figure > pre:first-child,
-.m-container-inflatable
-  section:target
-  figure.m-console-figure
-  > pre:first-child {
-  border-color: #ddd;
-}
-.m-container-inflatable section:target .m-note.m-default {
-  border-color: #ddd;
-}
-.m-container-inflatable section:target .m-note.m-primary {
-  border-color: #31708f;
-}
-.m-container-inflatable section:target .m-note.m-success {
-  border-color: #9ad36a;
-}
-.m-container-inflatable section:target .m-note.m-warning {
-  border-color: #f9cf79;
-}
-.m-container-inflatable section:target .m-note.m-danger {
-  border-color: #f60000;
-}
-.m-container-inflatable section:target .m-note.m-info {
-  border-color: #31708f;
-}
-.m-container-inflatable section:target .m-note.m-dim {
-  border-color: #bdbdbd;
-}
-
-.m-code .c {
-  color: #95a5a6;
-}
-.m-code .err {
-  color: #a61717;
-}
-.m-code .k {
-  color: #728e00;
-}
-.m-code .n {
-  color: #434f54;
-}
-.m-code .o {
-  color: #728e00;
-}
-.m-code .ch {
-  color: #95a5a6;
-}
-.m-code .cm {
-  color: #95a5a6;
-}
-.m-code .cp {
-  color: #728e00;
-}
-.m-code .cpf {
-  color: #95a5a6;
-}
-.m-code .c1 {
-  color: #95a5a6;
-}
-.m-code .cs {
-  color: #95a5a6;
-}
-.m-code .kc {
-  color: #00979d;
-}
-.m-code .kd {
-  color: #728e00;
-}
-.m-code .kn {
-  color: #728e00;
-}
-.m-code .kp {
-  color: #00979d;
-}
-.m-code .kr {
-  color: #00979d;
-}
-.m-code .kt {
-  color: #00979d;
-}
-.m-code .m {
-  color: #8a7b52;
-}
-.m-code .s {
-  color: #7f8c8d;
-}
-.m-code .na {
-  color: #434f54;
-}
-.m-code .nb {
-  color: #728e00;
-}
-.m-code .nc {
-  color: #434f54;
-}
-.m-code .no {
-  color: #434f54;
-}
-.m-code .nd {
-  color: #434f54;
-}
-.m-code .ni {
-  color: #434f54;
-}
-.m-code .ne {
-  color: #434f54;
-}
-.m-code .nf {
-  color: #d35400;
-}
-.m-code .nl {
-  color: #434f54;
-}
-.m-code .nn {
-  color: #434f54;
-}
-.m-code .nx {
-  color: #728e00;
-}
-.m-code .py {
-  color: #434f54;
-}
-.m-code .nt {
-  color: #434f54;
-}
-.m-code .nv {
-  color: #434f54;
-}
-.m-code .ow {
-  color: #728e00;
-}
-.m-code .mb {
-  color: #8a7b52;
-}
-.m-code .mf {
-  color: #8a7b52;
-}
-.m-code .mh {
-  color: #8a7b52;
-}
-.m-code .mi {
-  color: #8a7b52;
-}
-.m-code .mo {
-  color: #8a7b52;
-}
-.m-code .sa {
-  color: #7f8c8d;
-}
-.m-code .sb {
-  color: #7f8c8d;
-}
-.m-code .sc {
-  color: #7f8c8d;
-}
-.m-code .dl {
-  color: #7f8c8d;
-}
-.m-code .sd {
-  color: #7f8c8d;
-}
-.m-code .s2 {
-  color: #7f8c8d;
-}
-.m-code .se {
-  color: #7f8c8d;
-}
-.m-code .sh {
-  color: #7f8c8d;
-}
-.m-code .si {
-  color: #7f8c8d;
-}
-.m-code .sx {
-  color: #7f8c8d;
-}
-.m-code .sr {
-  color: #7f8c8d;
-}
-.m-code .s1 {
-  color: #7f8c8d;
-}
-.m-code .ss {
-  color: #7f8c8d;
-}
-.m-code .bp {
-  color: #728e00;
-}
-.m-code .fm {
-  color: #d35400;
-}
-.m-code .vc {
-  color: #434f54;
-}
-.m-code .vg {
-  color: #434f54;
-}
-.m-code .vi {
-  color: #434f54;
-}
-.m-code .vm {
-  color: #434f54;
-}
-.m-code .il {
-  color: #8a7b52;
-}
-
-.m-console .hll { background-color: #ffffcc }
-.m-console .g-AnsiBackgroundBlack { background-color: #232627 }
-.m-console .g-AnsiBackgroundBlue { background-color: #1d99f3 }
-.m-console .g-AnsiBackgroundBrightBlack { background-color: #7f8c8d }
-.m-console .g-AnsiBackgroundBrightBlue { background-color: #3daee9 }
-.m-console .g-AnsiBackgroundBrightCyan { background-color: #16a085 }
-.m-console .g-AnsiBackgroundBrightGreen { background-color: #1cdc9a }
-.m-console .g-AnsiBackgroundBrightMagenta { background-color: #8e44ad }
-.m-console .g-AnsiBackgroundBrightRed { background-color: #c0392b }
-.m-console .g-AnsiBackgroundBrightWhite { background-color: #ffffff }
-.m-console .g-AnsiBackgroundBrightYellow { background-color: #fdbc4b }
-.m-console .g-AnsiBackgroundCyan { background-color: #1abc9c }
-.m-console .g-AnsiBackgroundDefault { background-color: #fcfcfc }
-.m-console .g-AnsiBackgroundGreen { background-color: #11d116 }
-.m-console .g-AnsiBackgroundMagenta { background-color: #9b59b6 }
-.m-console .g-AnsiBackgroundRed { background-color: #ed1515 }
-.m-console .g-AnsiBackgroundWhite { background-color: #fcfcfc }
-.m-console .g-AnsiBackgroundYellow { background-color: #f67400 }
-.m-console .g-AnsiBlack { color: #232627 }
-.m-console .g-AnsiBlue { color: #1d99f3 }
-.m-console .g-AnsiBrightBlack { color: #7f8c8d; font-weight: bold }
-.m-console .g-AnsiBrightBlue { color: #3daee9; font-weight: bold }
-.m-console .g-AnsiBrightCyan { color: #16a085; font-weight: bold }
-.m-console .g-AnsiBrightDefault { color: #ffffff; font-weight: bold }
-.m-console .g-AnsiBrightGreen { color: #1cdc9a; font-weight: bold }
-.m-console .g-AnsiBrightMagenta { color: #8e44ad; font-weight: bold }
-.m-console .g-AnsiBrightRed { color: #c0392b; font-weight: bold }
-.m-console .g-AnsiBrightWhite { color: #ffffff; font-weight: bold }
-.m-console .g-AnsiBrightYellow { color: #fdbc4b; font-weight: bold }
-.m-console .g-AnsiCyan { color: #1abc9c }
-.m-console .g-AnsiDefault { color: #fcfcfc }
-.m-console .g-AnsiGreen { color: #11d116 }
-.m-console .g-AnsiMagenta { color: #9b59b6 }
-.m-console .g-AnsiRed { color: #ed1515 }
-.m-console .g-AnsiWhite { color: #fcfcfc }
-.m-console .g-AnsiYellow { color: #f67400 }
-.m-console .go { color: #fcfcfc }
-.m-console .gp { color: #16a085; font-weight: bold }
-.m-console .w { color: #fcfcfc }
-
-a.m-doc, a.m-doc-self, a.m-doc-external,
-ul.m-doc li.m-doc-expansible > a:first-child, ul.m-doc li.m-doc-collapsible > a:first-child,
-.m-code.m-inverted.m-doc-include > a {
-  text-decoration: none;
-}
-a.m-doc, a.m-doc-self {
-  font-weight: bold;
-}
-.m-thin a.m-doc, .m-thin a.m-doc-self {
-  font-weight: normal;
-}
-ul.m-doc li.m-doc-expansible > a:first-child,
-ul.m-doc li.m-doc-collapsible > a:first-child,
-ul.m-doc li.m-doc-expansible > a:first-child:hover,
-ul.m-doc li.m-doc-expansible > a:first-child:focus,
-ul.m-doc li.m-doc-expansible > a:first-child:active,
-ul.m-doc li.m-doc-collapsible > a:first-child:hover,
-ul.m-doc li.m-doc-collapsible > a:first-child:focus,
-ul.m-doc li.m-doc-collapsible > a:first-child:active {
-  color: #000000;
-}
-a.m-doc-self,
-ul.m-doc li.m-doc-expansible > a:first-child:before,
-ul.m-doc li.m-doc-collapsible > a:first-child:before {
-  color: #26a9e0;
-}
-a.m-doc-self:hover, a.m-doc-self:focus, a.m-doc-self:active,
-ul.m-doc li.m-doc-expansible > a:first-child:hover::before,
-ul.m-doc li.m-doc-expansible > a:first-child:focus::before,
-ul.m-doc li.m-doc-expansible > a:first-child:active::before,
-ul.m-doc li.m-doc-collapsible > a:first-child:hover::before,
-ul.m-doc li.m-doc-collapsible > a:first-child:focus::before,
-ul.m-doc li.m-doc-collapsible > a:first-child:active::before {
-  color: #26a9e0;
-}
-h3 a.m-doc-external {
-  font-weight: normal;
-}
-span.m-doc-wrap-bumper {
-  margin-right: -1rem;
-  display: inline-block;
-  vertical-align: text-top;
-}
-span.m-doc-wrap {
-  padding-left: 1rem;
-  display: inline-block;
-  vertical-align: text-top;
-  white-space: pre-line;
-  max-width: 100%;
-}
-dl.m-doc dd {
-  margin-bottom: 0.5rem;
-}
-dl.m-doc dd {
-  margin-left: 0;
-  padding-left: 2.5rem;
-}
-dl.m-doc dt:target, dl.m-doc dt:target + dd {
-  margin-left: -1.0rem;
-  border-left-style: solid;
-  border-left-width: 0.25rem;
-  border-color: #000000;
-}
-dl.m-doc dt:target { padding-left: 0.75rem; }
-dl.m-doc dt:target + dd { padding-left: 3.25rem; }
-ul.m-doc {
-  list-style: none;
-  margin-left:  1.0375rem;
-  padding-left: 0.9rem;
-  border-left-color: #ddd;
-  border-left-width: 0.0625rem;
-  border-left-style: solid;
-}
-ul.m-doc li {
-  text-indent: -1rem;
-  padding-left: 1rem;
-}
-ul.m-doc li.m-doc-expansible > ul {
-  display: none;
-}
-ul.m-doc li.m-doc-expansible, ul.m-doc li.m-doc-collapsible {
-  padding-left: 0.6rem;
-}
-ul.m-doc li.m-doc-expansible > ul.m-doc, ul.m-doc li.m-doc-collapsible > ul.m-doc {
-  margin-left: 0.5rem;
-}
-ul.m-doc li.m-doc-expansible > a:first-child:before, ul.m-doc li.m-doc-collapsible > a:first-child:before {
-  background-color: #e8e8e8;
-  display: inline-block;
-  width: 0.4rem;
-  font-weight: bold;
-}
-ul.m-doc li.m-doc-expansible > a:first-child:before { content: '⊕'; }
-ul.m-doc li.m-doc-collapsible > a:first-child:before { content: '⊖'; }
-h1 .m-doc-template, h1 .m-doc-include {
-  font-size: 1.3rem;
-  font-weight: normal;
-  float: right;
-}
-h1 .m-doc-include:last-child {
-  margin-bottom: -0.5rem;
-}
-h3 .m-doc-template, h3 .m-doc-include {
-  font-size: 1rem;
-  font-weight: normal;
-}
-.m-doc-template, dl.m-doc dd, ul.m-doc li > span.m-doc {
-  color: #bdbdbd;
-}
-dl.m-doc dd svg.m-math, ul.m-doc li > span.m-doc svg.m-math {
-  fill: #bdbdbd;
-}
-.m-doc-template a, dl.m-doc dd a, ul.m-doc li > span.m-doc a {
-  color: #c0c0c0;
-}
-.m-doc-template a:hover, .m-doc-template a:focus, .m-doc-template a:active,
-dl.m-doc dd a:hover, dl.m-doc dd a:focus, dl.m-doc dd a:active,
-ul.m-doc li > span.m-doc a:hover, ul.m-doc li > span.m-doc a:focus, ul.m-doc li > span.m-doc a:active {
-  color: #949494;
-}
-.m-code.m-inverted.m-doc-include > a:link,
-.m-code.m-inverted.m-doc-include > a:visited {
-  opacity: 0.6666;
-}
-.m-code.m-inverted.m-doc-include > a:hover,
-.m-code.m-inverted.m-doc-include > a:focus,
-.m-code.m-inverted.m-doc-include > a:active {
-  opacity: 1;
-}
-article section.m-doc-details > div {
-  margin-top: 0;
-  margin-left: 0;
-  margin-right: 0;
-  position: relative;
-  padding: 1rem;
-}
-article section.m-doc-details > div::before {
-  position: absolute;
-  content: ' ';
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  z-index: -1;
-  border-style: solid;
-  border-width: 0.125rem;
-  border-radius: 0px;
-  border-color: #f7f7f7;
-}
-article section.m-doc-details > div > h3:first-child {
-  position: relative;
-  margin: -1rem -1rem 1rem -1rem;
-  padding: 0.5rem 1rem;
-  background-color: #f7f7f7;
-  border-top-left-radius: 0px;
-  border-top-right-radius: 0px;
-  border-bottom-left-radius: 0;
-  border-bottom-right-radius: 0;
-}
-article section.m-doc-details:target {
-  border-color: transparent;
-}
-article section.m-doc-details:target > div {
-  z-index: 1;
-}
-.m-container-inflatable > .m-row > [class*='m-col-'] section.m-doc-details > div {
-  margin-left: -1rem;
-  margin-right: -1rem;
-}
-.m-container-inflatable section.m-doc-details:target > div > h3:first-child,
-.m-container-inflatable section.m-doc-details:target section > div > h3:first-child {
-  margin-left: -1.0rem;
-  border-left-style: solid;
-  border-left-color: #000000;
-  border-left-width: 0.25rem;
-  padding-left: 0.75rem;
-}
-.m-container-inflatable section.m-doc-details:target > div::before,
-.m-container-inflatable section-dox-details:target section > div.m::before {
-  border-left-width: 0.25rem;
-  border-left-color: #000000;
-}
-a.m-doc-search-icon {
-  padding-left: 1rem;
-  padding-right: 1rem;
-}
-a.m-doc-search-icon svg {
-  fill: #ffffff;
-}
-body > header > nav #m-navbar-collapse a.m-doc-search-icon svg {
-  vertical-align: -5%;
-}
-a.m-doc-search-icon:focus svg, a.m-doc-search-icon:hover svg, a.m-doc-search-icon:active svg {
-  fill: #ffffff;
-}
-.m-doc-search {
-  display: none;
-  z-index: 10;
-  position: fixed;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-  background-color: #000000;
-}
-.m-doc-search:target {
-  display: block;
-}
-.m-doc-search > a {
-  display: block;
-  position: absolute;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-}
-.m-doc-search-header {
-  margin-top: 2.5rem;
-  padding: 0.5rem 1rem;
-  height: 2rem;
-}
-.m-doc-search-header > div:first-child {
-  float: right;
-}
-.m-doc-search-content {
-  background-color: #000000;
-  border-radius: 0px;
-  padding: 1rem;
-}
-.m-doc-search input {
-  width: 100%;
-  height: 3rem;
-  font-size: 1.2rem;
-  border-width: 0;
-  color: #000000;
-  background-color: transparent;
-  border-radius: 0px;
-  margin-bottom: 1rem;
-  padding: 0 1rem;
-}
-.m-doc-search #search-notfound {
-  display: none;
-}
-.m-doc-search ul#search-results {
-  list-style-type: none;
-  padding-left: 0;
-  max-height: calc(100vh - 12.5rem);
-  overflow-y: auto;
-  display: none;
-}
-.m-doc-search ul#search-results li a {
-  display: block;
-  padding-left: 1rem;
-  padding-right: 1rem;
-  text-decoration: none;
-  width: 100%;
-  line-height: 1.5rem;
-  color: #000000;
-}
-.m-doc-search ul#search-results li a > div {
-  white-space: nowrap;
-  overflow: hidden;
-}
-.m-doc-search ul#search-results li a > div:not(.m-doc-search-alias) {
-  direction: rtl;
-}
-.m-doc-search ul#search-results li a .m-label {
-  float: right;
-  line-height: 1rem;
-  margin-top: 0.1rem;
-  margin-left: 0.25rem;
-}
-.m-doc-search ul#search-results li a .m-label.m-flat {
-  margin-right: -0.75rem;
-}
-.m-doc-search ul#search-results li#search-current a {
-  background-color: transparent;
-}
-.m-doc-search ul#search-results li#search-current.m-doc-search-copied a {
-  background-color: transparent;
-}
-.m-doc-search-typed {
-  color: #26a9e0;
-}
-.m-doc-search input[type="search"] { -webkit-appearance: textfield; }
-.m-doc-search input[type="search"]::-webkit-search-decoration,
-.m-doc-search input[type="search"]::-webkit-search-cancel-button,
-.m-doc-search input[type="search"]::-webkit-search-results-button,
-.m-doc-search input[type="search"]::-webkit-search-results-decoration {
-  display: none;
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/documentExamples.py b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/documentExamples.py
deleted file mode 100644
index ddce97120318aa1f460e404bc040a2ce8a855ebc..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/documentExamples.py
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/env python
-import fileinput
-import re
-import os
-import glob
-
-fileDir = os.path.dirname(os.path.realpath("__file__"))
-# print(fileDir)
-
-output_file = "examples.dox"
-read_mes = [
-    "../examples/ReadMe.md",
-    "../examples/a_wild_card/ReadMe.md",
-    "../examples/b_address_change/ReadMe.md",
-    "../examples/c_check_all_addresses/ReadMe.md",
-    "../examples/d_simple_logger/ReadMe.md",
-    "../examples/e_continuous_measurement/ReadMe.md",
-    "../examples/f_basic_data_request/ReadMe.md",
-    "../examples/g_terminal_window/ReadMe.md",
-    "../examples/h_SDI-12_slave_implementation/ReadMe.md",
-    "../examples/i_SDI-12_interface/ReadMe.md",
-    "../examples/j_external_pcint_library/ReadMe.md",
-    "../examples/k_concurrent_logger/ReadMe.md",
-]
-
-if not os.path.exists(os.path.join(fileDir, "examples")):
-    os.makedirs(os.path.join(fileDir, "examples"))
-
-for filename in read_mes:
-    out_path = os.path.join(fileDir, "examples")
-    out_dir = filename.split("/")[2]
-    out_name = out_dir + ".dox"
-    if out_name == "ReadMe.md.dox":
-        out_name = "examples.dox"
-    abs_out = os.path.join(out_path, out_name)
-    # print(abs_out)
-    # with open(output_file, 'w+') as out_file:
-    with open(abs_out, "w+") as out_file:
-
-        abs_file_path = os.path.join(fileDir, filename)
-        abs_file_path = os.path.abspath(os.path.realpath(abs_file_path))
-        # print(abs_file_path)
-
-        with open(abs_file_path, "r") as in_file:  # open in readonly mode
-            out_file.write("/**\n")
-            if out_name != "examples.dox":
-                # out_file.write(
-                #     "@example{{lineno}} {} @m_examplenavigation{{examples_page,{}/}} @m_footernavigation \n\n".format(
-                #         filename.replace("..\\examples\\", "").replace(
-                #             "\\ReadMe.md", ".ino"
-                #         ), out_dir
-                #     )
-                # )
-                out_file.write(
-                    "@example{{lineno}} {} @m_examplenavigation{{examples_page,}} @m_footernavigation \n\n".format(
-                        filename.replace("../examples/", "").replace(
-                            "/ReadMe.md", ".ino"
-                        )
-                    )
-                )
-                # out_file.write(
-                #     "@example{{lineno}} {} \n\n".format(
-                #         filename.replace("..\\examples\\", "").replace(
-                #             "\\ReadMe.md", ".ino"
-                #         )
-                #     )
-                # )
-            # out_file.write('\n@tableofcontents\n\n')
-
-            print_me = True
-            skip_me = False
-            i = 1
-            lines = in_file.readlines()
-            for line in lines:
-                # print(i, print_me, skip_me, line)
-
-                # Remove markdown comment tags from doxygen commands within the markdown
-                if print_me and not skip_me:
-                    new_line = (
-                        re.sub(r"\[//\]: # \( @(\w+?.*) \)", r"@\1", line)
-                        .replace("```ini", "@code{.ini}")
-                        .replace("```cpp", "@code{.cpp}")
-                        .replace("```", "@endcode")
-                    )
-                    if out_name != "examples.dox":
-                        new_line = new_line.replace("@page", "@section")
-                        #    .replace('@section', '')
-                        #    .replace('@subsection', '')
-                        #    .replace('@subsubsection', '')
-                        #    .replace('@paragraph', '')
-                        #    .replace('@par', '')
-                    out_file.write(new_line)
-
-                # using skip_me to skip single lines, so unset it after reading a line
-                if skip_me:
-                    skip_me = False
-
-                # a page, section, subsection, or subsubsection commands followed
-                # immediately with by a markdown header leads to that section appearing
-                # twice in the doxygen html table of contents.
-                # I'm putting the section markers right above the header and then will skip the header.
-                if re.match(r"\[//\]: # \( @mainpage", line) is not None:
-                    skip_me = True
-                if re.match(r"\[//\]: # \( @page", line) is not None:
-                    skip_me = True
-                if re.match(r"\[//\]: # \( @.*section", line) is not None:
-                    skip_me = True
-                if re.match(r"\[//\]: # \( @paragraph", line) is not None:
-                    skip_me = True
-
-                # I'm using these comments to fence off content that is only intended for
-                # github mardown rendering
-                if "[//]: # ( Start GitHub Only )" in line:
-                    print_me = False
-
-                if "[//]: # ( End GitHub Only )" in line:
-                    print_me = True
-
-                i += 1
-
-            out_file.write("\n*/\n\n")
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/fixXmlExampleSections.py b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/fixXmlExampleSections.py
deleted file mode 100644
index 539bdc86be73fbdbbfc27a86a85d37342248a75a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/fixXmlExampleSections.py
+++ /dev/null
@@ -1,58 +0,0 @@
-#!/usr/bin/env python
-import fileinput
-import re
-import os
-import glob
-import xml.etree.ElementTree as ET
-
-fileDir = os.path.dirname(os.path.realpath("__file__"))
-# print("Program Directory: {}".format(fileDir))
-relative_dir = "../../Arduino-SDI-12Doxygen/xml/"
-abs_file_path = os.path.join(fileDir, relative_dir)
-abs_file_path = os.path.abspath(os.path.realpath(abs_file_path))
-# print("XML Directory: {}".format(fileDir))
-
-all_files = [
-    f
-    for f in os.listdir(abs_file_path)
-    if os.path.isfile(os.path.join(abs_file_path, f)) and f.endswith("8ino-example.xml")
-]
-
-for filename in all_files:
-    print(filename)
-
-    tree = ET.parse(os.path.join(abs_file_path, filename))
-    root = tree.getroot()
-
-    needs_to_be_fixed = False
-    for definition in root.iter("compounddef"):
-        # print(definition.attrib)
-        compound_id = definition.attrib["id"]
-        # print(compound_id)
-        # print("---")
-
-        for i in range(6):
-            for section in definition.iter("sect" + str(i)):
-                # print(section.attrib)
-                section_id = section.attrib["id"]
-                if not section_id.startswith(compound_id):
-                    # print("problem!")
-                    needs_to_be_fixed = True
-                    dox_loc = section_id.find(".dox_")
-                    section_suffix = section_id[dox_loc + 6 :]
-                    # print(section_suffix)
-                    corrected_id = compound_id + "_" + section_suffix
-                    # print(corrected_id)
-                    section.attrib["id"] = corrected_id
-
-    if needs_to_be_fixed:
-        tree.write(os.path.join(abs_file_path, filename + "_fixed"))
-        os.rename(
-            os.path.join(abs_file_path, filename),
-            os.path.join(abs_file_path, filename + "_original"),
-        )
-        os.rename(
-            os.path.join(abs_file_path, filename + "_fixed"),
-            os.path.join(abs_file_path, filename),
-        )
-    # print()
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/markdown_prefilter.py b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/markdown_prefilter.py
deleted file mode 100644
index 6c2b4eef278e67628f42d141ff1e700d99bb4995..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/markdown_prefilter.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-import fileinput, re
-
-print_me = True
-skip_me = False
-i = 1
-# for line in fileinput.input(openhook=fileinput.hook_encoded("utf-8", "surrogateescape")):
-for line in fileinput.input():
-    # print(i, print_me, skip_me, line)
-
-    # Remove markdown comment tags from doxygen commands within the markdown
-    if print_me and not skip_me:
-        print(re.sub(r'\[//\]: # \( @(\w+?.*) \)', r'@\1', line), end="")
-
-    # using skip_me to skip single lines, so unset it after reading a line
-    if skip_me:
-        skip_me = False;
-
-    # a page, section, subsection, or subsubsection commands followed
-    # immediately with by a markdown header leads to that section appearing
-    # twice in the doxygen html table of contents.
-    # I'm putting the section markers right above the header and then will skip the header.
-    if re.match(r'\[//\]: # \( @mainpage', line) is not None:
-        skip_me = True;
-    if re.match(r'\[//\]: # \( @page', line) is not None:
-        skip_me = True;
-    if re.match(r'\[//\]: # \( @.*section', line) is not None:
-        skip_me = True;
-    if re.match(r'\[//\]: # \( @paragraph', line) is not None:
-        skip_me = True;
-
-    # I'm using these comments to fence off content that is only intended for
-    # github mardown rendering
-    if "[//]: # ( Start GitHub Only )" in line:
-        print_me = False
-
-    if "[//]: # ( End GitHub Only )" in line:
-        print_me = True
-
-    i += 1
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-Doxyfile b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-Doxyfile
deleted file mode 100644
index 107316aa1ac533655cf3bbd41306e1fb81c55b34..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-Doxyfile
+++ /dev/null
@@ -1,21 +0,0 @@
-@INCLUDE                = Doxyfile
-GENERATE_HTML           = NO
-GENERATE_XML            = YES
-XML_PROGRAMLISTING      = NO
-HTML_OUTPUT             = ../Arduino-SDI-12Doxygen/m.css
-SHOW_INCLUDE_FILES = YES
-WARN_LOGFILE           = mcssDoxygenOutput.log
-PROJECT_REPOSITORY = https://github.com/EnviroDIY/Arduino-SDI-12
-ALIASES += \
-    "m_div{1}=@xmlonly<mcss:div xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-    "m_enddiv=@xmlonly</mcss:div>@endxmlonly" \
-    "m_span{1}=@xmlonly<mcss:span xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\">@endxmlonly" \
-    "m_endspan=@xmlonly</mcss:span>@endxmlonly" \
-    "m_class{1}=@xmlonly<mcss:class xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:class=\"\1\" />@endxmlonly" \
-    "m_footernavigation=@xmlonly<mcss:footernavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" />@endxmlonly" \
-    "m_examplenavigation{2}=@xmlonly<mcss:examplenavigation xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:page=\"\1\" mcss:prefix=\"\2\" />@endxmlonly" \
-    "m_keywords{1}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keywords=\"\1\" />@endxmlonly" \
-    "m_keyword{3}=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:keyword=\"\1\" mcss:title=\"\2\" mcss:suffix-length=\"\3\" />@endxmlonly" \
-    "m_enum_values_as_keywords=@xmlonly<mcss:search xmlns:mcss=\"http://mcss.mosra.cz/doxygen/\" mcss:enum-values-as-keywords=\"true\" />@endxmlonly" \
-    "m_since{2}=@since @m_class{m-label m-success m-flat} @ref changelog-\1-\2 \"since v\1.\2\"" \
-    "m_deprecated_since{2}=@since deprecated in v\1.\2 @deprecated"
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-conf.py b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-conf.py
deleted file mode 100644
index df2343a5a4c5f034fc56d0ec5309ff249c157848..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/docs/mcss-conf.py
+++ /dev/null
@@ -1,54 +0,0 @@
-DOXYFILE = "mcss-Doxyfile"
-THEME_COLOR = "#cb4b16"
-# FAVICON = "https://3qzcxr28gq9vutx8scdn91zq-wpengine.netdna-ssl.com/wp-content/uploads/2016/05/cropped-EnviroDIY_LogoMaster_TrueSquare_V5_TwoTree_Trans_notext-192x192.png"
-FAVICON = "SDI-12Text-Cropped.png"
-LINKS_NAVBAR1 = [
-    (
-        "Functions",
-        "class_s_d_i12",
-        [
-            ('<a href="class_s_d_i12.html#constructor-destructor-begins-and-setters">Constructor, Destructor, Begins, and Setters</a>', ),
-            ('<a href="class_s_d_i12.html#waking-up-and-talking-to-sensors">Waking Up and Talking To Sensors</a>', ),
-            ('<a href="class_s_d_i12.html#reading-from-the-sdi-12-buffer">Reading from the SDI-12 Buffer</a>', ),
-            ('<a href="class_s_d_i12.html#data-line-states">Data Line States</a>', ),
-            ('<a href="class_s_d_i12.html#using-more-than-one-sdi-12-object">Using more than one SDI-12 Object</a>', ),
-            ('<a href="class_s_d_i12.html#interrupt-service-routine">Interrupt Service Routine</a>', ),
-        ],
-    ),
-    (
-        "Examples",
-        "examples_page",
-        [
-            ('<a href="a_wild_card_8ino-example.html">Getting Sensor Information</a>', ),
-            ('<a href="b_address_change_8ino-example.html">Address Change</a>', ),
-            ('<a href="c_check_all_addresses_8ino-example.html">Checking all Addresses</a>', ),
-            ('<a href="d_simple_logger_8ino-example.html">Logging Data</a>', ),
-            ('<a href="e_simple_parsing_8ino-example.html">Parsing Data</a>', ),
-            ('<a href="f_basic_data_request_8ino-example.html">Simple Data Request</a>', ),
-            ('<a href="g_terminal_window_8ino-example.html">Terminal Emulator 1</a>', ),
-            ('<a href="h__s_d_i-12_slave_implementation_8ino-example.html">Slave Implementation</a>',),
-            ('<a href="i__s_d_i-12_interface_8ino-example.html">Terminal Emulator 2</a>', ),
-            ('<a href="j_external_pcint_library_8ino-example.html">External Interrupts</a>', ),
-            ('<a href="k_concurrent_logger_8ino-example.html">Concurrent Measurements</a>', ),
-        ],
-    ),
-    ("Classes", "annotated", [],),
-    # ("Files", "files", []),
-    (
-        "Notes",
-        "pages",
-        [
-            ("The SDI-12 Specification", "specifications"),
-            ("Overview of Pin Change Interrupts", "interrupts_page"),
-            ("Stepping through the Rx ISR", "rx_page"),
-        ],
-    ),
-]
-LINKS_NAVBAR2 = [
-]
-VERSION_LABELS = True
-CLASS_INDEX_EXPAND_LEVELS = 2
-
-STYLESHEETS = [
-    "css/m-EnviroDIY+documentation.compiled.css",
-]
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/ReadMe.md
deleted file mode 100644
index b6acefc8c0e42428275c71941e6a70dacd5bdea7..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/ReadMe.md
+++ /dev/null
@@ -1,75 +0,0 @@
-[//]: # ( @page examples_page Examples )
-# Examples using the SDI-12 Library
-
-[//]: # ( @brief Examples using the SDI-12 Library )
-
-[//]: # ( Start GitHub Only )
-- [Example A](@ref a_wild_card.ino):
-  - Gets sensor information from a single attached sensor and prints it to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/a_wild_card)
-- [Example B](@ref b_address_change.ino):
-  - Allows you to change the address of your SDI-12 Sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/b_address_change)
-- [Example C](@ref c_check_all_addresses.ino):
-  - Checks all addresses for active sensors, and prints their status to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/c_check_all_addresses)
-- [Example D](@ref d_simple_logger.ino):
-  - Checks all addresses for active sensors, and logs data for each sensor every minute
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/d_simple_logger)
-- [Example E](@ref e_simple_parsing.ino):
-  - Demonstrates the ability to parse integers and floats from the buffer.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/e_simple_parsing)
-- [Example F](@ref f_basic_data_request.ino):
-  - Issues a data request to a single specified sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/f_basic_data_request)
-- [Example G](@ref g_terminal_window.ino):
-  - Demonstrates using the Arduino as a command terminal for SDI-12 sensors.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/g_terminal_window)
-- [Example H](@ref h_SDI-12_slave_implementation.ino):
-  - Demonstrates using SDI-12 in slave mode
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/h_SDI-12_slave_implementation)
-- [Example I](@ref i_SDI-12_interface.ino):
-  - Shows code for an Arduino-based USB dongle to translate between SDI-12 and a PC
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/i_SDI-12_interface)
-- [Example J](@ref j_external_pcint_library.ino):
-  - Shows how to use an external PCInt library to call the interrupts for this library.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/j_external_pcint_library)
-- [Example K](@ref k_concurrent_logger.ino):
-  -  Shows how to request concurrent measurements
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/k_concurrent_logger)
-
-[//]: # ( End GitHub Only )
-
-- [Example A](@ref a_wild_card.ino):
-  - Gets sensor information from a single attached sensor and prints it to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/a_wild_card)
-- [Example B](@ref b_address_change.ino):
-  - Allows you to change the address of your SDI-12 Sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/b_address_change)
-- [Example C](@ref c_check_all_addresses.ino):
-  - Checks all addresses for active sensors, and prints their status to the serial port
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/c_check_all_addresses)
-- [Example D](@ref d_simple_logger.ino):
-  - Checks all addresses for active sensors, and logs data for each sensor every minute
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/d_simple_logger)
-- [Example E](@ref e_simple_parsing.ino):
-  - Demonstrates the ability to parse integers and floats from the buffer.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/e_simple_parsing)
-- [Example F](@ref f_basic_data_request.ino):
-  - Issues a data request to a single specified sensor
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/f_basic_data_request)
-- [Example G](@ref g_terminal_window.ino):
-  - Demonstrates using the Arduino as a command terminal for SDI-12 sensors.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/g_terminal_window)
-- [Example H](@ref h_SDI-12_slave_implementation.ino):
-  - Demonstrates using SDI-12 in slave mode
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/h_SDI-12_slave_implementation)
-- [Example I](@ref i_SDI-12_interface.ino):
-  - Shows code for an Arduino-based USB dongle to translate between SDI-12 and a PC
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/i_SDI-12_interface)
-- [Example J](@ref j_external_pcint_library.ino):
-  - Shows how to use an external PCInt library to call the interrupts for this library.
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/j_external_pcint_library)
-- [Example K](@ref k_concurrent_logger.ino):
-  -  Shows how to request concurrent measurements
-  - [GitHub](https://github.com/EnviroDIY/Arduino-SDI-12/tree/master/examples/k_concurrent_logger)
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/ReadMe.md
deleted file mode 100644
index f8f87caaa5e400211a2121cb190bacff773071c0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/ReadMe.md
+++ /dev/null
@@ -1,11 +0,0 @@
-[//]: # ( @page example_a_page Example A: Using the Wildcard - Getting Single Sensor Information )
-# Example A: Using the Wildcard - Getting Single Sensor Information
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-It requests information about a single attached sensor, including its address and manufacturer info, and prints it to the serial port
-
-[//]: # ( @section a_wild_card_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} a_wild_card/platformio.ini )
-
-[//]: # ( @section a_wild_card_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/a_wild_card.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/a_wild_card.ino
deleted file mode 100644
index 8add10a36ee902eebeaa8306c2539fdc4f2099b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/a_wild_card/a_wild_card.ino
+++ /dev/null
@@ -1,59 +0,0 @@
-
-/**
- * @file a_wild_card.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example A: Using the Wildcard - Getting Single Sensor Information
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It requests information about the attached sensor, including its address and
- * manufacturer info.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-/**
-  '?' is a wildcard character which asks any and all sensors to respond
-  'I' indicates that the command wants information about the sensor
-  '!' finishes the command
-*/
-String myCommand = "?I!";
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  mySDI12.sendCommand(myCommand);
-  delay(300);                    // wait a while for a response
-  while (mySDI12.available()) {  // write the response to the screen
-    Serial.write(mySDI12.read());
-  }
-  delay(3000);  // print again in three seconds
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/ReadMe.md
deleted file mode 100644
index f220b9b2ecd793b61f870458cb9fe891f600ea6e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/ReadMe.md
+++ /dev/null
@@ -1,24 +0,0 @@
-[//]: # ( @page example_b_page Example B: Changing the Address of your SDI-12 Sensor )
-# Example B: Changing the Address of your SDI-12 Sensor
-
-Communication with an SDI-12 sensor depends on its 1-character alphanumeric address (1-9, A-Z, a-z).  A sensor can also be programmed with an address of 0, but that address cannot always be used to get measurements from the sensor.  This sketch enables you to find and change the address of your sensor.
-
-First, physically connect your SDI-12 sensor to your device.  Some helpful hits for connecting it can be found here:  https://envirodiy.org/topic/logging-mayfly-with-decagon-sdi-12-sensor/#post-2129.
-
-Once your sensor is physically connected to your board, download this library and open this sketch.
-
-Scroll to line 54 of the sketch (`#define DATA_PIN 7`).  Change the `7` to the pin number that your sensor is attached to.
-
-Set the pin to provide power to your sensor in line 55 (`#define POWER_PIN 22`).  If your sensor is continuously powered, set the power pin to -1.
-
-Upload the sketch to your board.  After the upload finishes, open up the serial port monitor at a baud rate of 115200 on line 53.
-
-In the serial monitor you will see it begin scanning through all possible SDI-12 addresses.  Once it has found an occupied address, it will stop and ask you to enter a new address.  Send your desired address to the serial port.  On the screen you should see "Readdressing Sensor." followed by "Success.  Rescanning for verification."  The scan will begin again, stopping at your new address.  If you are now happy with the address you've selected, smile and close the serial port monitor.
-
-If you are using a Meter Group Hydros 21 CTD sensor, change the channel to 1 in the serial monitor where prompted.
-
-[//]: # ( @section b_address_change_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} b_address_change/platformio.ini )
-
-[//]: # ( @section b_address_change_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/b_address_change.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/b_address_change.ino
deleted file mode 100644
index c3af7e42d723c457871870b5039f25303547e4c5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/b_address_change/b_address_change.ino
+++ /dev/null
@@ -1,143 +0,0 @@
-/**
- * @file b_address_change.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example B: Changing the Address of your SDI-12 Sensor
- *
- * This is a simple demonstration of the SDI-12 library for arduino.
- * It discovers the address of the attached sensor and allows you to change it.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-String myCommand  = "";   // empty to start
-char   oldAddress = '!';  // invalid address as placeholder
-
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(byte i) {  // this checks for activity at a particular address
-  Serial.print("Checking address ");
-  Serial.print((char)i);
-  Serial.print("...");
-  myCommand = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(30);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      Serial.println("Occupied");
-      mySDI12.clearBuffer();
-      return true;
-    } else {
-      Serial.println("Vacant");  // otherwise it is vacant.
-      mySDI12.clearBuffer();
-    }
-  }
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  boolean found = false;  // have we identified the sensor yet?
-
-  for (byte i = '0'; i <= '9'; i++) {  // scan address space 0-9
-    if (found) break;
-    if (checkActive(i)) {
-      found      = true;
-      oldAddress = i;
-    }
-  }
-
-  for (byte i = 'a'; i <= 'z'; i++) {  // scan address space a-z
-    if (found) break;
-    if (checkActive(i)) {
-      found      = true;
-      oldAddress = i;
-    }
-  }
-
-  for (byte i = 'A'; i <= 'Z'; i++) {  // scan address space A-Z
-    if (found) break;
-    if (checkActive(i)) {
-      found      = true;
-      oldAddress = i;
-    }
-  }
-
-  if (!found) {
-    Serial.println(
-      "No sensor detected. Check physical connections.");  // couldn't find a sensor.
-                                                           // check connections..
-  } else {
-    Serial.print("Sensor active at address ");  // found a sensor!
-    Serial.print(oldAddress);
-    Serial.println(".");
-
-    Serial.println("Enter new address.");  // prompt for a new address
-    while (!Serial.available())
-      ;
-    char newAdd = Serial.read();
-
-    // wait for valid response
-    while (((newAdd < '0') || (newAdd > '9')) && ((newAdd < 'a') || (newAdd > 'z')) &&
-           ((newAdd < 'A') || (newAdd > 'Z'))) {
-      if (!(newAdd == '\n') || (newAdd == '\r') || (newAdd == ' ')) {
-        Serial.println(
-          "Not a valid address. Please enter '0'-'9', 'a'-'A', or 'z'-'Z'.");
-      }
-      while (!Serial.available())
-        ;
-      newAdd = Serial.read();
-    }
-
-    /* the syntax of the change address command is:
-    [currentAddress]A[newAddress]! */
-
-    Serial.println("Readdressing sensor.");
-    myCommand = "";
-    myCommand += (char)oldAddress;
-    myCommand += "A";
-    myCommand += (char)newAdd;
-    myCommand += "!";
-    mySDI12.sendCommand(myCommand);
-
-    /* wait for the response then throw it away by
-    clearing the buffer with clearBuffer()  */
-    delay(300);
-    mySDI12.clearBuffer();
-
-    Serial.println("Success. Rescanning for verification.");
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/ReadMe.md
deleted file mode 100644
index ed0247a258b0048d64841523b6a8a622b7ccb8e5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/ReadMe.md
+++ /dev/null
@@ -1,16 +0,0 @@
-[//]: # ( @page example_c_page Example C: Check all Addresses for Active Sensors and Print Status )
-# Example C: Check all Addresses for Active Sensors and Print Status
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It discovers the address of all sensors active on any pin on your board.
-
-Each sensor should have a unique address already - if not, multiple sensors may respond simultaenously to the same request and the output will not be readable by the Arduino.
-
-To address a sensor, please see Example B: b_address_change.ino
-
-[//]: # ( @section c_check_all_addresses_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} c_check_all_addresses/platformio.ini )
-
-[//]: # ( @section c_check_all_addresses_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/c_check_all_addresses.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/c_check_all_addresses.ino
deleted file mode 100644
index 8ee179041938718c28ce8e857dc9bdeda3fb754c..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/c_check_all_addresses/c_check_all_addresses.ino
+++ /dev/null
@@ -1,120 +0,0 @@
-/**
- * @file c_check_all_addresses.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example C: Check all Addresses for Active Sensors and Print Status
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active and attached to the board.
- * THIS CAN BE *REALLY* SLOW TO RUN!!!
- *
- * Each sensor should have a unique address already - if not, multiple sensors may
- * respond simultaenously to the same request and the output will not be readable
- * by the Arduino.
- *
- * To address a sensor, please see Example B: b_address_change.ino
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define FirstPin 5         /*! change to lowest pin number on your board */
-#define LastPin 24         /*! change to highest pin number on your board */
-
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port expects
- *
- * @param sdi the SDI-12 instance
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'
- */
-void printInfo(SDI12 sdi, char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  sdi.sendCommand(command);
-  sdi.clearBuffer();
-  delay(30);
-
-  Serial.print("  --");
-  Serial.print(i);
-  Serial.print("--  ");
-
-  while (sdi.available()) {
-    Serial.write(sdi.read());
-    delay(10);  // 1 character ~ 7.5ms
-  }
-}
-
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(SDI12 sdi, char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    sdi.sendCommand(myCommand);
-    sdi.clearBuffer();
-    delay(30);
-    if (sdi.available()) {  // If we here anything, assume we have an active sensor
-      return true;
-    }
-  }
-  sdi.clearBuffer();
-  return false;
-}
-
-void scanAddressSpace(SDI12 sdi) {
-  // scan address space 0-9
-  for (char i = '0'; i <= '9'; i++)
-    if (checkActive(sdi, i)) { printInfo(sdi, i); }
-  // scan address space a-z
-  for (char i = 'a'; i <= 'z'; i++)
-    if (checkActive(sdi, i)) { printInfo(sdi, i); }
-  // scan address space A-Z
-  for (char i = 'A'; i <= 'Z'; i++)
-    if (checkActive(sdi, i)) { printInfo(sdi, i); };
-}
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  Serial.println("//\n// Start Search for SDI-12 Devices \n// -----------------------");
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  for (uint8_t pin = FirstPin; pin <= LastPin; pin++) {
-    if (pin != POWER_PIN) {
-      pinMode(pin, INPUT);
-      SDI12 mySDI12(pin);
-      mySDI12.begin();
-      Serial.print("Checking pin ");
-      Serial.print(pin);
-      Serial.println("...");
-      scanAddressSpace(mySDI12);
-      mySDI12.end();
-    }
-  }
-
-  Serial.println("\n//\n// End Search for SDI-12 Devices \n// ---------------------");
-
-  // Cut power
-  digitalWrite(POWER_PIN, LOW);
-}
-
-void loop() {}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/ReadMe.md
deleted file mode 100644
index 5606c43c95bddb63ae07775272255299c9835bb8..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/ReadMe.md
+++ /dev/null
@@ -1,18 +0,0 @@
-[//]: # ( @page example_d_page Example D: Check all Addresses for Active Sensors and Log Data )
-## Example D: Check all Addresses for Active Sensors and Log Data
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It discovers the address of all sensors active on a single bus and takes measurements from them.
-
-Every SDI-12 device is different in the time it takes to take a measurement, and the amount of data it returns.  This sketch will not serve every sensor type, but it will likely be helpful in getting you started.
-
-Each sensor should have a unique address already - if not, multiple sensors may respond simultaneously to the same request and the output will not be readable by the Arduino.
-
-To address a sensor, please see Example B: b_address_change.ino
-
-[//]: # ( @section d_simple_logger_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} d_simple_logger/platformio.ini )
-
-[//]: # ( @section d_simple_logger_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/d_simple_logger.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/d_simple_logger.ino
deleted file mode 100644
index 61375f427d65a72dfd5080aa918dfc25fbfdcb4f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/d_simple_logger/d_simple_logger.ino
+++ /dev/null
@@ -1,281 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example D: Check all Addresses for Active Sensors and Log Data
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active on a single bus and takes measurements
- * from them.
- *
- * Every SDI-12 device is different in the time it takes to take a
- * measurement, and the amount of data it returns. This sketch will not serve every
- * sensor type, but it will likely be helpful in getting you started.
- *
- * Each sensor should have a unique address already - if not, multiple sensors may
- * respond simultaenously to the same request and the output will not be readable by the
- * Arduino.
- *
- * To address a sensor, please see Example B: b_address_change.ino
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-bool takeMeasurement(char i, String meas_type = "") {
-  mySDI12.clearBuffer();
-  String command = "";
-  command += i;
-  command += "M";
-  command += meas_type;
-  command += "!";  // SDI-12 measurement command format  [address]['M'][!]
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-
-  String addr = sdiResponse.substring(0, 1);
-  Serial.print(addr);
-  Serial.print(", ");
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  Serial.print(wait);
-  Serial.print(", ");
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  Serial.print(numResults);
-  Serial.print(", ");
-
-  unsigned long timerStart = millis();
-  while ((millis() - timerStart) < (1000 * (wait + 1))) {
-    if (mySDI12.available())  // sensor can interrupt us to let us know it is done early
-    {
-      Serial.print(millis() - timerStart);
-      Serial.print(", ");
-      mySDI12.clearBuffer();
-      break;
-    }
-  }
-  // Wait for anything else and clear it out
-  delay(30);
-  mySDI12.clearBuffer();
-
-  if (numResults > 0) { return getResults(i, numResults); }
-
-  return true;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Sensor Address, Protocol Version, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println(
-    "Time Elapsed (s), Sensor Address, Est Measurement Time (s), Number Measurements, "
-    "Real Measurement Time (ms), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  String commands[] = {"", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
-  for (uint8_t a = 0; a < 3; a++) {
-    // measure one at a time
-    for (byte i = 0; i < 62; i++) {
-      char addr = decToChar(i);
-      if (isActive[i]) {
-        // Serial.print(millis() / 1000);
-        Serial.print(millis());
-        Serial.print(", ");
-        takeMeasurement(addr, commands[a]);
-        Serial.println();
-      }
-    }
-  }
-
-  delay(10000L);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/ReadMe.md
deleted file mode 100644
index 43653d2fc6f80ad574ead9b1741ffa3cab8d7b63..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/ReadMe.md
+++ /dev/null
@@ -1,18 +0,0 @@
-[//]: # ( @page example_e_page Example E: Check all Addresses for Active Sensors and Start Continuous Measurements )
-## Example E: Check all Addresses for Active Sensors and Start Continuous Measurements
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It discovers the address of all sensors active on a single bus and takes continuous measurements from them.
-
-Every SDI-12 device is different in the time it takes to take a measurement, and the amount of data it returns.  This sketch will not serve every sensor type, but it will likely be helpful in getting you started.
-
-Each sensor should have a unique address already - if not, multiple sensors may respond simultaneously to the same request and the output will not be readable by the Arduino.
-
-To address a sensor, please see Example B: b_address_change.ino
-
-[//]: # ( @section e_continuous_measurement_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} e_continuous_measurement/platformio.ini )
-
-[//]: # ( @section e_continuous_measurement_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/e_continuous_measurement.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/e_continuous_measurement.ino
deleted file mode 100644
index d3be64dabe64526e1f1841c2ee40bc988cd4b925..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/e_continuous_measurement/e_continuous_measurement.ino
+++ /dev/null
@@ -1,220 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example D: Check all Addresses for Active Sensors and Log Data
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active on a single bus and takes continuous
- * measurements from them.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getContinuousResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "R";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Sensor Address, Protocol Version, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println(
-    "Time Elapsed (s), Sensor Address, Est Measurement Time (s), Number Measurements, "
-    "Real Measurement Time (ms), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  // measure one at a time
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (isActive[i]) {
-      // Serial.print(millis() / 1000);
-      Serial.print(millis());
-      Serial.print(", ");
-      getContinuousResults(addr, 4);
-      Serial.println();
-    }
-  }
-
-  delay(5000L);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/ReadMe.md
deleted file mode 100644
index b8572a1073a431b7de44f511ce18d9b51469ca48..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_f_page Example F: Basic Data Request to a Single Sensor )
-# Example F: Basic Data Request to a Single Sensor
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-This is a very basic (stripped down) example where the user initiates a measurement and receives the results to a terminal window without typing numerous commands into the terminal.
-
-[//]: # ( @section f_basic_data_request_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} f_basic_data_request/platformio.ini )
-
-[//]: # ( @section f_basic_data_request_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/f_basic_data_request.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/f_basic_data_request.ino
deleted file mode 100644
index 8f66b6556cfad1eeed972d2ef03f8832eb4ccf04..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/f_basic_data_request/f_basic_data_request.ino
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * @file f_basic_data_request.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Ruben Kertesz <github@emnet.net> or @rinnamon on twitter
- * @date 2/10/2016
- *
- * @brief Example F: Basic Data Request to a Single Sensor
- *
- * This is a very basic (stripped down) example where the user initiates a measurement
- * and receives the results to a terminal window without typing numerous commands into
- * the terminal.
- *
- * Edited by Ruben Kertesz for ISCO Nile 502 2/10/2016
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define SENSOR_ADDRESS 1
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-String sdiResponse = "";
-String myCommand   = "";
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  do {  // wait for a response from the serial terminal to do anything
-    delay(30);
-  } while (!Serial.available());
-  char nogo =
-    Serial.read();  // simply hit enter in the terminal window or press send and the
-                    // characters get discarded but now the rest of the loop continues
-
-  // first command to take a measurement
-  myCommand = String(SENSOR_ADDRESS) + "M!";
-  Serial.println(myCommand);  // echo command to terminal
-
-  mySDI12.sendCommand(myCommand);
-  delay(30);  // wait a while for a response
-
-  while (mySDI12.available()) {  // build response string
-    char c = mySDI12.read();
-    if ((c != '\n') && (c != '\r')) {
-      sdiResponse += c;
-      delay(10);  // 1 character ~ 7.5ms
-    }
-  }
-  if (sdiResponse.length() > 1)
-    Serial.println(sdiResponse);  // write the response to the screen
-  mySDI12.clearBuffer();
-
-
-  delay(1000);       // delay between taking reading and requesting data
-  sdiResponse = "";  // clear the response string
-
-
-  // next command to request data from last measurement
-  myCommand = String(SENSOR_ADDRESS) + "D0!";
-  Serial.println(myCommand);  // echo command to terminal
-
-  mySDI12.sendCommand(myCommand);
-  delay(30);  // wait a while for a response
-
-  while (mySDI12.available()) {  // build string from response
-    char c = mySDI12.read();
-    if ((c != '\n') && (c != '\r')) {
-      sdiResponse += c;
-      delay(10);  // 1 character ~ 7.5ms
-    }
-  }
-  if (sdiResponse.length() > 1)
-    Serial.println(sdiResponse);  // write the response to the screen
-  mySDI12.clearBuffer();
-
-  // now go back to top and wait until user hits enter on terminal window
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/ReadMe.md
deleted file mode 100644
index c222be674f8beb6e45b727c00ae451972bdf6ed1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_g_page Example G: Using the Arduino as a Command Terminal for SDI-12 Sensors )
-# Example G: Using the Arduino as a Command Terminal for SDI-12 Sensors
-
-This is a simple demonstration of the SDI-12 library for Arduino.
-
-It's purpose is to allow a user to interact with an SDI-12 sensor directly, issuing commands through a serial terminal window.
-
-[//]: # ( @section g_terminal_window_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} g_terminal_window/platformio.ini )
-
-[//]: # ( @section g_terminal_window_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/g_terminal_window.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/g_terminal_window.ino
deleted file mode 100644
index 9957e7a9b440b5cf7dc56201af35958286081cbe..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/g_terminal_window/g_terminal_window.ino
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * @file g_terminal_window.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- * @author Ruben Kertesz <github@emnet.net> or @rinnamon on twitter
- * @date 2016
- *
- * @brief Example G: Using the Arduino as a Command Terminal for SDI-12 Sensors
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.  It's purpose is to
- * allow a user to interact with an SDI-12 sensor directly, issuing commands through a
- * serial terminal window.
- *
- * Edited by Ruben Kertesz for ISCO Nile 502 2/10/2016
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-char   inByte      = 0;
-String sdiResponse = "";
-String myCommand   = "";
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-}
-
-void loop() {
-  if (Serial.available()) {
-    inByte = Serial.read();
-    if ((inByte != '\n') &&
-        (inByte != '\r')) {  // read all values entered in terminal window before enter
-      myCommand += inByte;
-      delay(10);  // 1 character ~ 7.5ms
-    }
-  }
-
-  if (inByte == '\r') {  // once we press enter, send string to SDI sensor/probe
-    inByte = 0;
-    Serial.println(myCommand);
-    mySDI12.sendCommand(myCommand);
-    delay(30);  // wait a while for a response
-
-    while (mySDI12.available()) {  // build a string of the response
-      char c = mySDI12.read();
-      if ((c != '\n') && (c != '\r')) {
-        sdiResponse += c;
-        delay(10);  // 1 character ~ 7.5ms
-      }
-    }
-    if (sdiResponse.length() >= 1)
-      Serial.println(sdiResponse);  // write the response to the screen
-
-    mySDI12.clearBuffer();  // clear the line
-    myCommand   = "";
-    sdiResponse = "";
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/ReadMe.md
deleted file mode 100644
index 950d64da6e16661d3309affaa64b5cdf5dc9e20e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_h_page Example H: Using SDI-12 in Slave Mode )
-# Example H: Using SDI-12 in Slave Mode
-
-Example sketch demonstrating how to implement an Arduino as a slave on an SDI-12 bus. This may be used, for example, as a middleman between an I2C sensor and an SDI-12 datalogger.
-
-Note that an SDI-12 slave must respond to M! or C! with the number of values it will report and the max time until these values will be available.  This example uses 9 values available in 21 s, but references to these numbers and the output array size and datatype should be changed for your specific application.
-
-[//]: # ( @section h_SDI-12_slave_implementation_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} h_SDI-12_slave_implementation/platformio.ini )
-
-[//]: # ( @section h_SDI-12_slave_implementation_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino
deleted file mode 100644
index f91e72ebed69fff4ea1b43abdbab3307554b1276..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/h_SDI-12_slave_implementation/h_SDI-12_slave_implementation.ino
+++ /dev/null
@@ -1,253 +0,0 @@
-/**
- * @file h_SDI-12_slave_implementation.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @date 2016
- * @author D. Wasielewski
- *
- * @brief Example H:  Using SDI-12 in Slave Mode
- *
- * Example sketch demonstrating how to implement an arduino as a slave on an SDI-12 bus.
- * This may be used, for example, as a middleman between an I2C sensor and an SDI-12
- * datalogger.
- *
- * Note that an SDI-12 slave must respond to M! or C! with the number of values it will
- * report and the max time until these values will be available.  This example uses 9
- * values available in 21 s, but references to these numbers and the output array size
- * and datatype should be changed for your specific application.
- *
- * D. Wasielewski, 2016
- * Builds upon work started by:
- * https://github.com/jrzondagh/AgriApps-SDI-12-Arduino-Sensor
- * https://github.com/Jorge-Mendes/Agro-Shield/tree/master/SDI-12ArduinoSensor
- *
- * Suggested improvements:
- *  - Get away from memory-hungry arduino String objects in favor of char buffers
- *  - Make an int variable for the "number of values to report" instead of the
- *    hard-coded 9s interspersed throughout the code
- */
-
-#include <SDI12.h>
-
-#define DATA_PIN 7   /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22 /*!< The sensor power pin (or -1 if not switching power) */
-
-char sensorAddress = '5';
-int  state         = 0;
-
-#define WAIT 0
-#define INITIATE_CONCURRENT 1
-#define INITIATE_MEASUREMENT 2
-
-// Create object by which to communicate with the SDI-12 bus on SDIPIN
-SDI12 slaveSDI12(DATA_PIN);
-
-
-void pollSensor(float* measurementValues) {
-  measurementValues[0] = 1.111111;
-  measurementValues[1] = -2.222222;
-  measurementValues[2] = 3.333333;
-  measurementValues[3] = -4.444444;
-  measurementValues[4] = 5.555555;
-  measurementValues[5] = -6.666666;
-  measurementValues[6] = 7.777777;
-  measurementValues[7] = -8.888888;
-  measurementValues[8] = -9.999999;
-}
-
-void parseSdi12Cmd(String command, String* dValues) {
-  /* Ingests a command from an SDI-12 master, sends the applicable response, and
-   * (when applicable) sets a flag to initiate a measurement
-   */
-
-  // First char of command is always either (a) the address of the device being
-  // probed OR (b) a '?' for address query.
-  // Do nothing if this command is addressed to a different device
-  if (command.charAt(0) != sensorAddress && command.charAt(0) != '?') { return; }
-
-  // If execution reaches this point, the slave should respond with something in
-  // the form:   <address><responseStr><Carriage Return><Line Feed>
-  // The following if-switch-case block determines what to put into <responseStr>,
-  // and the full response will be constructed afterward. For '?!' (address query)
-  // or 'a!' (acknowledge active) commands, responseStr is blank so section is skipped
-  String responseStr = "";
-  if (command.length() > 1) {
-    switch (command.charAt(1)) {
-      case 'I':
-        // Identify command
-        // Slave should respond with ID message: 2-char SDI-12 version + 8-char
-        // company name + 6-char sensor model + 3-char sensor version + 0-13 char S/N
-        responseStr = "13COMPNAME0000011.0001";  // Substitute proper ID String here
-        break;
-      case 'C':
-        // Initiate concurrent measurement command
-        // Slave should immediately respond with: "tttnn":
-        //    3-digit (seconds until measurement is available) +
-        //    2-digit (number of values that will be available)
-        // Slave should also start a measurment and relinquish control of the data line
-        responseStr =
-          "02109";  // 9 values ready in 21 sec; Substitue sensor-specific values here
-        // It is not preferred for the actual measurement to occur in this subfunction,
-        // because doing to would hold the main program hostage until the measurement
-        // is complete.  Instead, we'll just set a flag and handle the measurement
-        // elsewhere.
-        state = INITIATE_CONCURRENT;
-        break;
-        // NOTE: "aC1...9!" commands may be added by duplicating this case and adding
-        //       additional states to the state flag
-      case 'M':
-        // Initiate measurement command
-        // Slave should immediately respond with: "tttnn":
-        //    3-digit (seconds until measurement is available) +
-        //    1-digit (number of values that will be available)
-        // Slave should also start a measurment but may keep control of the data line
-        // until advertised time elapsed OR measurement is complete and service request
-        // sent
-        responseStr =
-          "0219";  // 9 values ready in 21 sec; Substitue sensor-specific values here
-        // It is not preferred for the actual measurement to occur in this subfunction,
-        // because doing to would hold the main program hostage until the measurement is
-        // complete.  Instead, we'll just set a flag and handle the measurement
-        // elsewhere. It is preferred though not required that the slave send a service
-        // request upon completion of the measurement.  This should be handled in the
-        // main loop().
-        state = INITIATE_MEASUREMENT;
-        break;
-        // NOTE: "aM1...9!" commands may be added by duplicating this case and adding
-        //       additional states to the state flag
-
-      case 'D':
-        // Send data command
-        // Slave should respond with a String of values
-        // Values to be returned must be split into Strings of 35 characters or fewer
-        // (75 or fewer for concurrent).  The number following "D" in the SDI-12 command
-        // specifies which String to send
-        responseStr = dValues[(int)command.charAt(2) - 48];
-        break;
-      case 'A':
-        // Change address command
-        // Slave should respond with blank message (just the [new] address + <CR> +
-        // <LF>)
-        sensorAddress = command.charAt(2);
-        break;
-      default:
-        // Mostly for debugging; send back UNKN if unexpected command received
-        responseStr = "UNKN";
-        break;
-    }
-  }
-
-  // Issue the response speficied in the switch-case structure above.
-  slaveSDI12.sendResponse(String(sensorAddress) + responseStr + "\r\n");
-}
-
-
-void formatOutputSDI(float* measurementValues, String* dValues, unsigned int maxChar) {
-  /* Ingests an array of floats and produces Strings in SDI-12 output format */
-
-  dValues[0] = "";
-  int j      = 0;
-
-  // upper limit on i should be number of elements in measurementValues
-  for (int i = 0; i < 9; i++) {
-    // Read float value "i" as a String with 6 deceimal digits
-    // (NOTE: SDI-12 specifies max of 7 digits per value; we can only use 6
-    //  decimal place precision if integer part is one digit)
-    String valStr = String(measurementValues[i], 6);
-    // Explictly add implied + sign if non-negative
-    if (valStr.charAt(0) != '-') { valStr = '+' + valStr; }
-    // Append dValues[j] if it will not exceed 35 (aM!) or 75 (aC!) characters
-    if (dValues[j].length() + valStr.length() < maxChar) {
-      dValues[j] += valStr;
-    }
-    // Start a new dValues "line" if appending would exceed 35/75 characters
-    else {
-      dValues[++j] = valStr;
-    }
-  }
-
-  // Fill rest of dValues with blank strings
-  while (j < 9) { dValues[++j] = ""; }
-}
-
-
-void setup() {
-  slaveSDI12.begin();
-  delay(500);
-  slaveSDI12.forceListen();  // sets SDIPIN as input to prepare for incoming message
-}
-
-void loop() {
-  static float measurementValues[9];  // 9 floats to hold simulated sensor data
-  static String
-                dValues[10];  // 10 String objects to hold the responses to aD0!-aD9! commands
-  static String commandReceived = "";  // String object to hold the incoming command
-
-
-  // If a byte is available, an SDI message is queued up. Read in the entire message
-  // before proceding.  It may be more robust to add a single character per loop()
-  // iteration to a static char buffer; however, the SDI-12 spec requires a precise
-  // response time, and this method is invariant to the remaining loop() contents.
-  int avail = slaveSDI12.available();
-  if (avail < 0) {
-    slaveSDI12.clearBuffer();
-  }  // Buffer is full; clear
-  else if (avail > 0) {
-    for (int a = 0; a < avail; a++) {
-      char charReceived = slaveSDI12.read();
-      // Character '!' indicates the end of an SDI-12 command; if the current
-      // character is '!', stop listening and respond to the command
-      if (charReceived == '!') {
-        // Command string is completed; do something with it
-        parseSdi12Cmd(commandReceived, dValues);
-        // Clear command string to reset for next command
-        commandReceived = "";
-        // '!' should be the last available character anyway, but exit the "for" loop
-        // just in case there are any stray characters
-        slaveSDI12.clearBuffer();
-        // eliminate the chance of getting anything else after the '!'
-        slaveSDI12.forceHold();
-        break;
-      }
-      // If the current character is anything but '!', it is part of the command
-      // string.  Append the commandReceived String object.
-      else {
-        // Append command string with new character
-        commandReceived += String(charReceived);
-      }
-    }
-  }
-
-  // For aM! and aC! commands, parseSdi12Cmd will modify "state" to indicate that
-  // a measurement should be taken
-  switch (state) {
-    case WAIT: break;
-    case INITIATE_CONCURRENT:
-      // Do whatever the sensor is supposed to do here
-      // For this example, we will just create arbitrary "simulated" sensor data
-      // NOTE: Your application might have a different data type (e.g. int) and
-      //       number of values to report!
-      pollSensor(measurementValues);
-      // Populate the "dValues" String array with the values in SDI-12 format
-      formatOutputSDI(measurementValues, dValues, 75);
-      state = WAIT;
-      slaveSDI12.forceListen();  // sets SDI-12 pin as input to prepare for incoming
-                                 // message AGAIN
-      break;
-    case INITIATE_MEASUREMENT:
-      // Do whatever the sensor is supposed to do here
-      // For this example, we will just create arbitrary "simulated" sensor data
-      // NOTE: Your application might have a different data type (e.g. int) and
-      //       number of values to report!
-      pollSensor(measurementValues);
-      // Populate the "dValues" String array with the values in SDI-12 format
-      formatOutputSDI(measurementValues, dValues, 35);
-      // For aM!, Send "service request" (<address><CR><LF>) when data is ready
-      slaveSDI12.sendResponse(String(sensorAddress) + "\r\n");
-      state = WAIT;
-      slaveSDI12.forceListen();  // sets SDI-12 pin as input to prepare for incoming
-                                 // message AGAIN
-      break;
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/ReadMe.md
deleted file mode 100644
index 9b7dd5a16a2849a7fa80120bc59aa42de4b80c5d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/ReadMe.md
+++ /dev/null
@@ -1,15 +0,0 @@
-[//]: # ( @page example_i_page Example I: SDI-12 PC Interface )
-# Example I:  SDI-12 PC Interface
-
-Code for an Arduino-based USB dongle translates serial comm from PC to SDI-12 (electrical and timing)
-1. Allows user to communicate to SDI-12 devices from a serial terminal emulator (e.g. PuTTY).
-2. Able to spy on an SDI-12 bus for troubleshooting comm between datalogger and sensors.
-3. Can also be used as a hardware middleman for interfacing software to an SDI-12 sensor.  For example, implementing an SDI-12 datalogger in Python on a PC.  Use verbatim mode with feedback off in this case.
-
-Note: "translation" means timing and electrical interface.  It does not ensure SDI-12 compliance of commands sent via it.
-
-[//]: # ( @section i_SDI-12_interface_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} i_SDI-12_interface/platformio.ini )
-
-[//]: # ( @section i_SDI-12_interface_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/i_SDI-12_interface.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/i_SDI-12_interface.ino
deleted file mode 100644
index 8fc6b393d5eb6e4f6eb211ca9858040257eb76c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/i_SDI-12_interface/i_SDI-12_interface.ino
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- * @file h_SDI-12_slave_implementation.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @date 2016
- * @author D. Wasielewski
- *
- * @brief Example I:  SDI-12 PC Interface
- *
- *  Arduino-based USB dongle translates serial comm from PC to SDI-12 (electrical and
- * timing)
- *  1. Allows user to communicate to SDI-12 devices from a serial terminal emulator
- * (e.g. PuTTY).
- *  2. Able to spy on an SDI-12 bus for troubleshooting comm between datalogger and
- * sensors.
- *  3. Can also be used as a hardware middleman for interfacing software to an SDI-12
- * sensor. For example, implementing an SDI-12 datalogger in Python on a PC.  Use
- * verbatim mode with feedback off in this case.
- *
- *  Note: "translation" means timing and electrical interface.  It does not ensure
- * SDI-12 compliance of commands sent via it.
- *
- * D. Wasielewski, 2016
- * Builds upon work started by:
- * https://github.com/jrzondagh/AgriApps-SDI-12-Arduino-Sensor
- * https://github.com/Jorge-Mendes/Agro-Shield/tree/master/SDI-12ArduinoSensor
- *
- * Known issues:
- *  - Backspace adds a "backspace character" into the serialMsgStr (which gets sent
- *    out on the SDI-12 interface) instead of removing the previous char from it
- *  - Suceptible to noise on the SDI-12 data line; consider hardware filtering or
- *    software error-checking
- */
-
-#define HELPTEXT                                                                    \
-  "OPTIONS:\r\n"                                                                    \
-  "help   : Print this message\r\n"                                                 \
-  "mode s : SDI-12 command mode (uppercase and ! automatically corrected) "         \
-  "[default]\r\n"                                                                   \
-  "mode v : verbatim mode (text will be sent verbatim)\r\n"                         \
-  "fb on  : Enable feedback (characters visible while typing) [default]\r\n"        \
-  "fb off : Disable feedback (characters not visible while typing; may be desired " \
-  "for developers)\r\n"                                                             \
-  "(else) : send command to SDI-12 bus"
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define SENSOR_ADDRESS 1
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Initiate serial connection to SDI-12 bus
-  mySDI12.begin();
-  delay(500);
-  mySDI12.forceListen();
-
-  // Print help text (may wish to comment out if used for communicating to software)
-  Serial.println(HELPTEXT);
-}
-
-void loop() {
-  static String  serialMsgStr;
-  static boolean serialMsgReady = false;
-
-  static String  sdiMsgStr;
-  static boolean sdiMsgReady = false;
-
-  static boolean verbatim = false;
-  static boolean feedback = true;
-
-
-  // -- READ SERIAL (PC COMMS) DATA --
-  // If serial data is available, read in a single byte and add it to
-  // a String on each iteration
-  if (Serial.available()) {
-    char inByte1 = Serial.read();
-    if (feedback) { Serial.print(inByte1); }
-    if (inByte1 == '\r' || inByte1 == '\n') {
-      serialMsgReady = true;
-    } else {
-      serialMsgStr += inByte1;
-    }
-  }
-
-  // -- READ SDI-12 DATA --
-  // If SDI-12 data is available, keep reading until full message consumed
-  // (Normally I would prefer to allow the loop() to keep executing while the string
-  //  is being read in--as the serial example above--but SDI-12 depends on very precise
-  //  timing, so it is probably best to let it hold up loop() until the string is
-  //  complete)
-  int avail = mySDI12.available();
-  if (avail < 0) {
-    mySDI12.clearBuffer();
-  }  // Buffer is full; clear
-  else if (avail > 0) {
-    for (int a = 0; a < avail; a++) {
-      char inByte2 = mySDI12.read();
-      Serial.println(inByte2);
-      if (inByte2 == '\n') {
-        sdiMsgReady = true;
-      } else if (inByte2 == '!') {
-        sdiMsgStr += "!";
-        sdiMsgReady = true;
-      } else {
-        sdiMsgStr += String(inByte2);
-      }
-    }
-  }
-
-
-  // Report completed SDI-12 messages back to serial interface
-  if (sdiMsgReady) {
-    Serial.println(sdiMsgStr);
-    // Reset String for next SDI-12 message
-    sdiMsgReady = false;
-    sdiMsgStr   = "";
-  }
-
-  // Send completed Serial message as SDI-12 command
-  if (serialMsgReady) {
-    Serial.println();
-    // Check if the serial message is a known command to the SDI-12 interface program
-    String lowerMsgStr = serialMsgStr;
-    lowerMsgStr.toLowerCase();
-    if (lowerMsgStr == "mode v") {
-      verbatim = true;
-      Serial.println("Verbatim mode; exact text will be sent.  Enter \"mode s\" for "
-                     "SDI-12 command mode.");
-    } else if (lowerMsgStr == "mode s") {
-      verbatim = false;
-      Serial.println("SDI-12 command mode; uppercase and ! suffix optional.  Enter "
-                     "\"mode v\" for verbatim mode.");
-    } else if (lowerMsgStr == "help") {
-      Serial.println(HELPTEXT);
-    } else if (lowerMsgStr == "fb off") {
-      feedback = false;
-      Serial.println("Feedback off; typed commands will not be visible.  Enter \"fb "
-                     "on\" to enable feedback.");
-    } else if (lowerMsgStr == "fb on") {
-      feedback = true;
-      Serial.println("Feedback on; typed commands will be visible.  Enter \"fb off\" "
-                     "to disable feedback.");
-    }
-    // If not a known command to the SDI-12 interface program, send out on SDI-12 data
-    // pin
-    else {
-      if (verbatim) {
-        mySDI12.sendCommand(serialMsgStr);
-      } else {
-        serialMsgStr.toUpperCase();
-        mySDI12.sendCommand(serialMsgStr + "!");
-      }
-    }
-    // Reset String for next serial message
-    serialMsgReady = false;
-    serialMsgStr   = "";
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/ReadMe.md
deleted file mode 100644
index 9d6daf1fe0d8f4520936129821ffd5d8e2d4e9d5..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_j_page Example J: Using External Interrupts )
-# Example J: Using External Interrupts
-
-This is identical to example D, except that instead of using internal definitions of pin change interrupt vectors, it depends on another library to define them for it.
-
-To use this example, you must remove the comment braces around `#define SDI12_EXTERNAL_PCINT` in the library and re-compile it.
-
-[//]: # ( @section j_external_pcint_library_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} j_external_pcint_library/platformio.ini )
-
-[//]: # ( @section j_external_pcint_library_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/j_external_pcint_library.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/j_external_pcint_library.ino
deleted file mode 100644
index 7700ecaa314be932268c7c606bb85ecd1e6e2a51..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/j_external_pcint_library/j_external_pcint_library.ino
+++ /dev/null
@@ -1,273 +0,0 @@
-/**
- * @file j_external_pcint_library.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- *
- * @brief Example J: Using External Interrupts
- *
- * This is identical to example B, except that it uses the library
- * [EnableInterrupt](https://github.com/GreyGnome/EnableInterrupt) to define the
- * interrupt vector. This allows it to play nicely with any other libraries which define
- * interrupt vectors.
- *
- * For this to work, you must remove the comment braces around
- * `#define SDI12_EXTERNAL_PCINT` in the library and re-compile it.
- */
-
-#include <EnableInterrupt.h>
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-bool takeMeasurement(char i, String meas_type = "") {
-  mySDI12.clearBuffer();
-  String command = "";
-  command += i;
-  command += "M";
-  command += meas_type;
-  command += "!";  // SDI-12 measurement command format  [address]['M'][!]
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-
-  String addr = sdiResponse.substring(0, 1);
-  Serial.print(addr);
-  Serial.print(", ");
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  Serial.print(wait);
-  Serial.print(", ");
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  Serial.print(numResults);
-  Serial.print(", ");
-
-  unsigned long timerStart = millis();
-  while ((millis() - timerStart) < (1000 * (wait + 1))) {
-    if (mySDI12.available())  // sensor can interrupt us to let us know it is done early
-    {
-      Serial.print(millis() - timerStart);
-      Serial.print(", ");
-      mySDI12.clearBuffer();
-      break;
-    }
-  }
-  // Wait for anything else and clear it out
-  delay(30);
-  mySDI12.clearBuffer();
-
-  if (numResults > 0) { return getResults(i, numResults); }
-
-  return true;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Enable interrupts for the recieve pin
-  pinMode(DATA_PIN, INPUT_PULLUP);
-  enableInterrupt(DATA_PIN, SDI12::handleInterrupt, CHANGE);
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Protocol Version, Sensor Address, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println("Time Elapsed (s), Est Measurement Time (s), Number Measurements, "
-                 "Real Measurement Time (ms), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  // measure one at a time
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (isActive[i]) {
-      Serial.print(millis() / 1000);
-      Serial.print(", ");
-      takeMeasurement(addr);
-      Serial.println();
-    }
-  }
-
-  delay(10000);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/ReadMe.md
deleted file mode 100644
index 3025222cc1c8874e8a74c1279fd42800eb03c62f..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/ReadMe.md
+++ /dev/null
@@ -1,12 +0,0 @@
-[//]: # ( @page example_k_page Example K: Concurrent Measurements )
-# Example K: Concurrent Measurements
-
-This is very similar to example D - finding all attached sensors and logging data from them.
-Unlike example D, however, which waits for each sensor to complete a measurement, this asks all sensors to take measurements concurrently and then waits until each is finished to query for results.
-This can be much faster than waiting for each sensor when you have multiple sensor attached.
-
-[//]: # ( @section k_concurrent_logger_pio PlatformIO Configuration )
-
-[//]: # ( @include{lineno} k_concurrent_logger/platformio.ini )
-
-[//]: # ( @section k_concurrent_logger_code The Complete Example )
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/k_concurrent_logger.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/k_concurrent_logger.ino
deleted file mode 100644
index 24f72760019f5181554e3afdc24b1d4dac5ab09a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/examples/k_concurrent_logger/k_concurrent_logger.ino
+++ /dev/null
@@ -1,287 +0,0 @@
-/**
- * @file k_concurrent_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Sara Geleskie Damiano <sdamiano@stroudcenter.org>
- *
- * @brief Example K:  Concurrent Measurements
- *
- * This is very similar to example B - finding all attached sensors and logging data
- * from them. Unlike example B, however, which waits for each sensor to complete a
- * measurement, this asks all sensors to take measurements concurrently and then waits
- * until each is finished to query for results. This can be much faster than waiting for
- * each sensor when you have multiple sensor attached.
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-// keeps track of active addresses
-bool isActive[64] = {
-  0,
-};
-
-// keeps track of the wait time for each active addresses
-uint8_t waitTime[64] = {
-  0,
-};
-
-// keeps track of the time each sensor was started
-uint32_t millisStarted[64] = {
-  0,
-};
-
-// keeps track of the time each sensor will be ready
-uint32_t millisReady[64] = {
-  0,
-};
-
-// keeps track of the number of results expected
-uint8_t returnedResults[64] = {
-  0,
-};
-
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command);
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.print(", ");
-}
-
-bool getResults(char i, int resultsExpected) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command);
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    mySDI12.read();           // ignore the repeated SDI12 address
-    char c = mySDI12.peek();  // check if there's a '+' and toss if so
-    if (c == '+') { mySDI12.read(); }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c == '+') {
-        mySDI12.read();
-        Serial.print(", ");
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (resultsReceived < resultsExpected) { Serial.print(", "); }
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-int startConcurrentMeasurement(char i, String meas_type = "") {
-  mySDI12.clearBuffer();
-  String command = "";
-  command += i;
-  command += "C";
-  command += meas_type;
-  command += "!";  // SDI-12 concurrent measurement command format  [address]['C'][!]
-  mySDI12.sendCommand(command);
-  delay(30);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-
-  uint8_t sensorNum   = charToDec(i);  // e.g. convert '0' to 0, 'a' to 10, 'Z' to 61.
-  waitTime[sensorNum] = wait;
-  millisStarted[sensorNum] = millis();
-  if (wait == 0) {
-    millisReady[sensorNum] = millis();
-  } else {
-    millisReady[sensorNum] = millis() + wait * 1000;
-  }
-  returnedResults[sensorNum] = numResults;
-
-  return numResults;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i) {
-  String myCommand = "";
-  myCommand        = "";
-  myCommand += (char)i;  // sends basic 'acknowledge' command [address][!]
-  myCommand += "!";
-
-  for (int j = 0; j < 3; j++) {  // goes through three rapid contact attempts
-    mySDI12.sendCommand(myCommand);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      mySDI12.clearBuffer();
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(200);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-  Serial.println("Protocol Version, Sensor Address, Sensor Vendor, Sensor Model, "
-                 "Sensor Version, Sensor ID");
-
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (checkActive(addr)) {
-      numSensors++;
-      isActive[i] = 1;
-      printInfo(addr);
-      Serial.println();
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println("Time Elapsed (s), Measurement 1, Measurement 2, ... etc.");
-  Serial.println(
-    "-------------------------------------------------------------------------------");
-}
-
-void loop() {
-  // start all sensors measuring concurrently
-  for (byte i = 0; i < 62; i++) {
-    char addr = decToChar(i);
-    if (isActive[i]) { startConcurrentMeasurement(addr); }
-  }
-
-  // get all readings
-  uint8_t numReadingsRecorded = 0;
-  while (numReadingsRecorded < numSensors) {
-    for (byte i = 0; i < 62; i++) {
-      char addr = decToChar(i);
-      if (isActive[i]) {
-        if (millis() > millisReady[i]) {
-          if (returnedResults[i] > 0) {
-            Serial.print(millis() / 1000);
-            Serial.print(", ");
-            Serial.print(addr);
-            Serial.print(", ");
-            getResults(addr, returnedResults[i]);
-            Serial.println();
-          }
-          numReadingsRecorded++;
-        }
-      }
-    }
-  }
-
-  delay(10000);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/keywords.txt b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/keywords.txt
deleted file mode 100644
index 4f30b8e6f56f637090db332fe4a7207781e3c460..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/keywords.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-
-# Syntax Coloring Map for SDI12 when
-# using the Arduino IDE.
-
-### Classes (KEYWORD1)
-
-SDI12	KEYWORD1
-
-### Methods and Functions (KEYWORD2)
-
-begin	KEYWORD2
-end	KEYWORD2
-forceHold	KEYWORD2
-forceListen	KEYWORD2
-sendCommand	KEYWORD2
-sendResponse	KEYWORD2
-available	KEYWORD2
-peek		KEYWORD2
-read		KEYWORD2
-clearBuffer		KEYWORD2
-flush		KEYWORD2
-setActive	KEYWORD2
-isActive	KEYWORD2
-handleInterrupt	KEYWORD2
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.json b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.json
deleted file mode 100644
index 95b25f7653495896e9af2afb03dda75a9aa1c995..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
-  "name": "SDI-12",
-  "version": "2.1.4",
-  "keywords": "SDI-12, sdi12, communication, bus, sensor, Decagon",
-  "description": "An Arduino library for SDI-12 communication with a wide variety of environmental sensors.",
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/EnviroDIY/Arduino-SDI-12.git"
-  },
-  "authors": [
-    {
-      "name": "Kevin M. Smith",
-      "email": "Kevin@elite-education.org"
-    },
-    {
-      "name": "Shannon Hicks",
-      "email": "shicks@stroudcenter.org"
-    },
-    {
-      "name": "Sara Damiano",
-      "email": "sdamiano@stroudcenter.org",
-      "maintainer": true
-    }
-  ],
-  "license": "BSD-3-Clause",
-  "frameworks": "arduino",
-  "platforms": [
-      "atmelavr",
-      "atmelsam"
-  ],
-  "export": {
-    "exclude": ["doc/*"]
-  },
-  "examples": ["examples/*/*.ino"]
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.properties b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.properties
deleted file mode 100644
index 83a2da9623b2109f2dde9376d605d163e3b2adf1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/library.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-name=SDI-12
-version=2.1.4
-author=Kevin M. Smith <Kevin@elite-education.org>, Shannon Hicks <shicks@stroudcenter.org>
-maintainer=Sara Damiano <sdamiano@stroudcenter.org>
-sentence=An Arduino library for SDI-12 communication with a wide variety of environmental sensors.
-paragraph=This library provides a general software solution, without requiring any additional hardware.
-category=Communication
-url=https://github.com/EnviroDIY/Arduino-SDI-12
-architectures=avr,sam,samd,espressif
-includes=SDI12.h
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/ReadMe.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/ReadMe.md
deleted file mode 100644
index 8d315f78de0ccb3908b0bde9266a180dfb92423b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/ReadMe.md
+++ /dev/null
@@ -1 +0,0 @@
-These are the library source files.
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.cpp b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.cpp
deleted file mode 100644
index c71e998e91c2eeed083e0e9a4dacc4bc66a4d652..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.cpp
+++ /dev/null
@@ -1,726 +0,0 @@
-/**
- * @file SDI12.cpp
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @date August 2013
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- *
- * @brief This file implements the main class for the SDI-12 implementation.
- *
- * ========================== Arduino SDI-12 ==================================
- *
- * An Arduino library for SDI-12 communication with a wide variety of environmental
- * sensors. This library provides a general software solution, without requiring any
- * additional hardware.
- *
- * ======================== Attribution & License =============================
- *
- * Copyright (C) 2013  Stroud Water Research Center
- * Available at https://github.com/EnviroDIY/Arduino-SDI-12
- *
- * Authored initially in August 2013 by:
- *          Kevin M. Smith (http://ethosengineering.org)
- *          Inquiries: SDI12@ethosengineering.org
- *
- * Modified 2017 by Manuel Jimenez Buendia to work with ARM based processors (Arduino
- * Zero)
- *
- * Maintenance and merging 2017 by Sara Damiano
- *
- * based on the SoftwareSerial library (formerly NewSoftSerial), authored by:
- *         ladyada (http://ladyada.net)
- *         Mikal Hart (http://www.arduiniana.org)
- *         Paul Stoffregen (http://www.pjrc.com)
- *         Garrett Mace (http://www.macetech.com)
- *         Brett Hagman (http://www.roguerobotics.com/)
- *
- * This library is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation; either version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with
- * this library; if not, write to the Free Software Foundation, Inc., 51 Franklin
- * Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-
-
-#include "SDI12.h"  //  Header file for this library
-
-/* ================  Set static constants ===========================================*/
-
-// Pointer to active SDI12 object
-SDI12* SDI12::_activeObject = NULL;
-// Timer functions
-SDI12Timer SDI12::sdi12timer;
-
-// The size of a bit in microseconds
-// 1200 baud = 1200 bits/second ~ 833.333 µs/bit
-const uint16_t SDI12::bitWidth_micros = (uint16_t)833;
-// The required "break" before sending commands, >= 12ms
-const uint16_t SDI12::lineBreak_micros = (uint16_t)12300;
-// The required mark before a command or response, >= 8.33ms
-const uint16_t SDI12::marking_micros = (uint16_t)8500;
-
-// the width of a single bit in "ticks" of the cpu clock.
-const uint8_t SDI12::txBitWidth = TICKS_PER_BIT;
-// A fudge factor to make things work
-const uint8_t SDI12::rxWindowWidth = RX_WINDOW_FUDGE;
-// The number of bits per tick, shifted by 2^10.
-const uint8_t SDI12::bitsPerTick_Q10 = BITS_PER_TICK_Q10;
-// A mask waiting for a start bit; 0b11111111
-const uint8_t SDI12::WAITING_FOR_START_BIT = 0xFF;
-
-uint16_t SDI12::prevBitTCNT;  // previous RX transition in micros
-uint8_t  SDI12::rxState;      // 0: got start bit; >0: bits rcvd
-uint8_t  SDI12::rxMask;       // bit mask for building received character
-uint8_t  SDI12::rxValue;      // character being built
-
-uint16_t SDI12::mul8x8to16(uint8_t x, uint8_t y) {
-  return x * y;
-}
-
-uint16_t SDI12::bitTimes(uint8_t dt) {
-  return mul8x8to16(dt + rxWindowWidth, bitsPerTick_Q10) >> 10;
-}
-
-
-/* ================ Buffer Setup ====================================================*/
-uint8_t          SDI12::_rxBuffer[SDI12_BUFFER_SIZE];  // The Rx buffer
-volatile uint8_t SDI12::_rxBufferTail = 0;             // index of buff tail
-volatile uint8_t SDI12::_rxBufferHead = 0;             // index of buff head
-
-
-/* ================ Reading from the SDI-12 Buffer ==================================*/
-
-// reveals the number of characters available in the buffer
-int SDI12::available() {
-  if (_bufferOverflow) return -1;
-  return (_rxBufferTail + SDI12_BUFFER_SIZE - _rxBufferHead) % SDI12_BUFFER_SIZE;
-}
-
-// reveals the next character in the buffer without consuming
-int SDI12::peek() {
-  if (_rxBufferHead == _rxBufferTail) return -1;  // Empty buffer? If yes, -1
-  return _rxBuffer[_rxBufferHead];                // Otherwise, read from "head"
-}
-
-// a public function that clears the buffer contents and resets the status of the buffer
-// overflow.
-void SDI12::clearBuffer() {
-  _rxBufferHead = _rxBufferTail = 0;
-  _bufferOverflow               = false;
-}
-
-// reads in the next character from the buffer (and moves the index ahead)
-int SDI12::read() {
-  _bufferOverflow = false;                        // Reading makes room in the buffer
-  if (_rxBufferHead == _rxBufferTail) return -1;  // Empty buffer? If yes, -1
-  uint8_t nextChar = _rxBuffer[_rxBufferHead];    // Otherwise, grab char at head
-  _rxBufferHead    = (_rxBufferHead + 1) % SDI12_BUFFER_SIZE;  // increment head
-  return nextChar;                                             // return the char
-}
-
-// these functions hide the stream equivalents to return a custom timeout value
-int SDI12::peekNextDigit(LookaheadMode lookahead, bool detectDecimal) {
-  int c;
-  while (1) {
-    c = timedPeek();
-
-    if (c < 0 || c == '-' || (c >= '0' && c <= '9') || (detectDecimal && c == '.'))
-      return c;
-
-    switch (lookahead) {
-      case SKIP_NONE: return -1;  // Fail code.
-      case SKIP_WHITESPACE:
-        switch (c) {
-          case ' ':
-          case '\t':
-          case '\r':
-          case '\n': break;
-          default: return -1;  // Fail code.
-        }
-      case SKIP_ALL: break;
-    }
-    read();  // discard non-numeric
-  }
-}
-
-long SDI12::parseInt(LookaheadMode lookahead, char ignore) {
-  bool     isNegative = false;
-  uint16_t value      = 0;
-  int      c;
-
-  c = peekNextDigit(lookahead, false);
-  // ignore non numeric leading characters
-  if (c < 0) return TIMEOUT;  // TIMEOUT returned if timeout
-  //  THIS IS THE ONLY DIFFERENCE BETWEEN THIS FUNCTION AND THE STREAM DEFAULT!
-
-  do {
-    if (c == ignore) {  // ignore this character
-    } else if (c == '-') {
-      isNegative = true;
-    } else if (c >= '0' && c <= '9') {  // is c a digit?
-      value = value * 10 + c - '0';
-    }
-    read();  // consume the character we got with peek
-    c = timedPeek();
-  } while ((c >= '0' && c <= '9') || c == ignore);
-
-  if (isNegative) value = -value;
-  return value;
-}
-
-// the same as parseInt but returns a floating point value
-float SDI12::parseFloat(LookaheadMode lookahead, char ignore) {
-  bool  isNegative = false;
-  bool  isFraction = false;
-  long  value      = 0;
-  int   c;
-  float fraction = 1.0;
-
-  c = peekNextDigit(lookahead, true);
-  // ignore non numeric leading characters
-  if (c < 0) return TIMEOUT;  // TIMEOUT returned if timeout
-  //  THIS IS THE ONLY DIFFERENCE BETWEEN THIS FUNCTION AND THE STREAM DEFAULT!
-
-  do {
-    if (c == ignore) {  // ignore
-    } else if (c == '-') {
-      isNegative = true;
-    } else if (c == '.') {
-      isFraction = true;
-    } else if (c >= '0' && c <= '9') {  // is c a digit?
-      value = value * 10 + c - '0';
-      if (isFraction) fraction *= 0.1;
-    }
-    read();  // consume the character we got with peek
-    c = timedPeek();
-  } while ((c >= '0' && c <= '9') || (c == '.' && !isFraction) || c == ignore);
-
-  if (isNegative) value = -value;
-  if (isFraction)
-    return value * fraction;
-  else
-    return value;
-}
-
-/* ================ Constructor, Destructor, begin(), end(), and timeout ============*/
-// Constructor
-SDI12::SDI12() {
-  _dataPin        = -1;
-  _bufferOverflow = false;
-  // SDI-12 protocol says sensors must respond within 15 milliseconds
-  // We'll bump that up to 150, just for good measure, but we don't want to
-  // wait the whole stream default of 1s for a response.
-  setTimeout(150);
-  // Because SDI-12 is mostly used for environmental sensors, we want to be able
-  // to distinguish between the '0' that parseInt and parseFloat usually return
-  // on timeouts and a real measured 0 value.  So we force the timeout response
-  // to be -9999, which is not a common value for most variables measured by
-  // in-site environmental sensors.
-  setTimeoutValue(-9999);
-}
-SDI12::SDI12(int8_t dataPin) {
-  _dataPin        = dataPin;
-  _bufferOverflow = false;
-  // SDI-12 protocol says sensors must respond within 15 milliseconds
-  // We'll bump that up to 150, just for good measure, but we don't want to
-  // wait the whole stream default of 1s for a response.
-  setTimeout(150);
-  // Because SDI-12 is mostly used for environmental sensors, we want to be able
-  // to distinguish between the '0' that parseInt and parseFloat usually return
-  // on timeouts and a real measured 0 value.  So we force the timeout response
-  // to be -9999, which is not a common value for most variables measured by
-  // in-site environmental sensors.
-  setTimeoutValue(-9999);
-}
-
-// Destructor
-SDI12::~SDI12() {
-  setState(SDI12_DISABLED);
-  if (isActive()) { _activeObject = NULL; }
-  // Set the timer prescalers back to original values
-  // NOTE:  This does NOT reset SAMD board pre-scalers!
-  sdi12timer.resetSDI12TimerPrescale();
-}
-
-// Begin
-void SDI12::begin() {
-  // setState(SDI12_HOLDING);
-  setActive();
-  // Set up the prescaler as needed for timers
-  // This function is defined in SDI12_boards.h
-  sdi12timer.configSDI12TimerPrescale();
-}
-void SDI12::begin(int8_t dataPin) {
-  _dataPin = dataPin;
-  begin();
-}
-
-// End
-void SDI12::end() {
-  setState(SDI12_DISABLED);
-  _activeObject = NULL;
-  // Set the timer prescalers back to original values
-  // NOTE:  This does NOT reset SAMD board pre-scalers!
-  sdi12timer.resetSDI12TimerPrescale();
-}
-
-// Set the timeout return
-void SDI12::setTimeoutValue(int16_t value) {
-  TIMEOUT = value;
-}
-
-// Set the data pin for the SDI-12 instance
-void SDI12::setDataPin(int8_t dataPin) {
-  _dataPin = dataPin;
-}
-
-// Return the data pin for the SDI-12 instance
-int8_t SDI12::getDataPin() {
-  return _dataPin;
-}
-
-
-/* ================ Using more than one SDI-12 object ===============================*/
-// a method for setting the current object as the active object
-bool SDI12::setActive() {
-  if (_activeObject != this) {
-    setState(SDI12_HOLDING);
-    _activeObject = this;
-    return true;
-  }
-  return false;
-}
-
-// a method for checking if this object is the active object
-bool SDI12::isActive() {
-  return this == _activeObject;
-}
-
-
-/* ================ Data Line States ================================================*/
-// Processor specific parity and interrupts
-#if defined __AVR__
-#include <avr/interrupt.h>  // interrupt handling
-#include <util/parity.h>    // optimized parity bit handling
-#else
-// Added MJB: parity function to replace the one specific for AVR from util/parity.h
-// http://graphics.stanford.edu/~seander/bithacks.html#ParityNaive
-uint8_t SDI12::parity_even_bit(uint8_t v) {
-  uint8_t parity = 0;
-  while (v) {
-    parity = !parity;
-    v      = v & (v - 1);
-  }
-  return parity;
-}
-#endif
-
-// a helper function to switch pin interrupts on or off
-void SDI12::setPinInterrupts(bool enable) {
-#if defined(ARDUINO_ARCH_SAMD) || defined(ESP32) || defined(ESP8266)
-  // Merely need to attach the interrupt function to the pin
-  if (enable) attachInterrupt(digitalPinToInterrupt(_dataPin), handleInterrupt, CHANGE);
-  // Merely need to detach the interrupt function from the pin
-  else
-    detachInterrupt(digitalPinToInterrupt(_dataPin));
-
-#elif defined(__AVR__) && not defined(SDI12_EXTERNAL_PCINT)
-  if (enable) {
-    // Enable interrupts on the register with the pin of interest
-    *digitalPinToPCICR(_dataPin) |= (1 << digitalPinToPCICRbit(_dataPin));
-    // Enable interrupts on the specific pin of interest
-    // The interrupt function is actually attached to the interrupt way down in
-    // section 7.5
-    *digitalPinToPCMSK(_dataPin) |= (1 << digitalPinToPCMSKbit(_dataPin));
-  } else {
-    // Disable interrupts on the specific pin of interest
-    *digitalPinToPCMSK(_dataPin) &= ~(1 << digitalPinToPCMSKbit(_dataPin));
-    if (!*digitalPinToPCMSK(_dataPin)) {
-      // If there are no other pins on the register left with enabled interrupts,
-      // disable the whole register
-      *digitalPinToPCICR(_dataPin) &= ~(1 << digitalPinToPCICRbit(_dataPin));
-    }
-    // We don't detach the function from the interrupt for AVR processors
-  }
-#else
-  if (enable) {
-    return;
-  } else {
-    return;
-  }
-#endif
-}
-
-// sets the state of the SDI-12 object.
-void SDI12::setState(SDI12_STATES state) {
-  switch (state) {
-    case SDI12_HOLDING: {
-      pinMode(_dataPin, INPUT);     // Turn off the pull-up resistor
-      pinMode(_dataPin, OUTPUT);    // Pin mode = output
-      digitalWrite(_dataPin, LOW);  // Pin state = low - marking
-      setPinInterrupts(false);      // Interrupts disabled on data pin
-      break;
-    }
-    case SDI12_TRANSMITTING: {
-      pinMode(_dataPin, INPUT);   // Turn off the pull-up resistor
-      pinMode(_dataPin, OUTPUT);  // Pin mode = output
-      setPinInterrupts(false);    // Interrupts disabled on data pin
-      break;
-    }
-    case SDI12_LISTENING: {
-      digitalWrite(_dataPin, LOW);  // Pin state = low (turns off pull-up)
-      pinMode(_dataPin, INPUT);     // Pin mode = input, pull-up resistor off
-      interrupts();                 // Enable general interrupts
-      setPinInterrupts(true);       // Enable Rx interrupts on data pin
-      rxState = WAITING_FOR_START_BIT;
-      break;
-    }
-    default:  // SDI12_DISABLED or SDI12_ENABLED
-    {
-      digitalWrite(_dataPin, LOW);  // Pin state = low (turns off pull-up)
-      pinMode(_dataPin, INPUT);     // Pin mode = input, pull-up resistor off
-      setPinInterrupts(false);      // Interrupts disabled on data pin
-      break;
-    }
-  }
-}
-
-// forces a SDI12_HOLDING state.
-void SDI12::forceHold() {
-  setState(SDI12_HOLDING);
-}
-
-// forces a SDI12_LISTENING state.
-void SDI12::forceListen() {
-  setState(SDI12_LISTENING);
-}
-
-
-/* ================ Waking Up and Talking To Sensors ================================*/
-// this function wakes up the entire sensor bus
-void SDI12::wakeSensors(int8_t extraWakeTime) {
-  setState(SDI12_TRANSMITTING);
-  // Universal interrupts can be on while the break and marking happen because
-  // timings for break and from the recorder are not critical.
-  // Interrupts on the pin are disabled for the entire transmitting state
-  digitalWrite(_dataPin, HIGH);         // break is HIGH
-  delayMicroseconds(lineBreak_micros);  // Required break of 12 milliseconds (12,000 µs)
-  delay(extraWakeTime);                 // allow the sensors to wake
-  digitalWrite(_dataPin, LOW);          // marking is LOW
-  delayMicroseconds(marking_micros);  // Required marking of 8.33 milliseconds(8,333 µs)
-}
-
-// this function writes a character out on the data line
-void SDI12::writeChar(uint8_t outChar) {
-  uint8_t currentTxBitNum = 0;  // first bit is start bit
-  uint8_t bitValue        = 1;  // start bit is HIGH (inverse parity...)
-
-  noInterrupts();  // _ALL_ interrupts disabled so timing can't be shifted
-
-  sdi12timer_t t0 = READTIME;  // start time
-
-  digitalWrite(
-    _dataPin,
-    HIGH);  // immediately get going on the start bit
-            // this gives us 833µs to calculate parity and position of last high bit
-  currentTxBitNum++;
-
-  uint8_t parityBit = parity_even_bit(outChar);  // Calculate the parity bit
-  outChar |= (parityBit << 7);  // Add parity bit to the outgoing character
-
-  // Calculate the position of the last bit that is a 0/HIGH (ie, HIGH, not marking)
-  // That bit will be the last time-critical bit.  All bits after that can be
-  // sent with interrupts enabled.
-
-  uint8_t lastHighBit =
-    9;  // The position of the last bit that is a 0 (ie, HIGH, not marking)
-  uint8_t msbMask = 0x80;  // A mask with all bits at 1
-  while (msbMask & outChar) {
-    lastHighBit--;
-    msbMask >>= 1;
-  }
-
-  // Hold the line for the rest of the start bit duration
-
-  while ((uint8_t)(READTIME - t0) < txBitWidth) {}
-  t0 = READTIME;  // advance start time
-
-  // repeat for all data bits until the last bit different from marking
-  while (currentTxBitNum++ < lastHighBit) {
-    bitValue = outChar & 0x01;  // get next bit in the character to send
-    if (bitValue) {
-      digitalWrite(_dataPin, LOW);  // set the pin state to LOW for 1's
-    } else {
-      digitalWrite(_dataPin, HIGH);  // set the pin state to HIGH for 0's
-    }
-    // Hold the line for this bit duration
-    while ((uint8_t)(READTIME - t0) < txBitWidth) {}
-    t0 = READTIME;  // start time
-
-    outChar = outChar >> 1;  // shift character to expose the following bit
-  }
-
-  // Set the line low for the all remaining 1's and the stop bit
-  digitalWrite(_dataPin, LOW);
-
-  interrupts();  // Re-enable universal interrupts as soon as critical timing is past
-
-  // Hold the line low until the end of the 10th bit
-  uint8_t bitTimeRemaining = txBitWidth * (10 - lastHighBit);
-  while ((uint8_t)(READTIME - t0) < bitTimeRemaining) {}
-}
-
-// The typical write functionality for a stream object
-// This allows you to use the stream print functions to send commands out on
-// the SDI-12, line, but it will not wake the sensors in advance of the command.
-size_t SDI12::write(uint8_t byte) {
-  setState(SDI12_TRANSMITTING);
-  writeChar(byte);            // write the character/byte
-  setState(SDI12_LISTENING);  // listen for reply
-  return 1;                   // 1 character sent
-}
-
-// this function sends out the characters of the String cmd, one by one
-void SDI12::sendCommand(String& cmd, int8_t extraWakeTime) {
-  wakeSensors(extraWakeTime);  // wake up sensors
-  for (int unsigned i = 0; i < cmd.length(); i++) {
-    writeChar(cmd[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // listen for reply
-}
-
-void SDI12::sendCommand(const char* cmd, int8_t extraWakeTime) {
-  wakeSensors(extraWakeTime);  // wake up sensors
-  for (int unsigned i = 0; i < strlen(cmd); i++) {
-    writeChar(cmd[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // listen for reply
-}
-
-void SDI12::sendCommand(FlashString cmd, int8_t extraWakeTime) {
-  wakeSensors(extraWakeTime);  // wake up sensors
-  for (int unsigned i = 0; i < strlen_P((PGM_P)cmd); i++) {
-    // write each character
-    writeChar(static_cast<char>(pgm_read_byte((const char*)cmd + i)));
-  }
-  setState(SDI12_LISTENING);  // listen for reply
-}
-
-// This function sets up for a response to a separate data recorder by sending out a
-// marking and then sending out the characters of resp one by one (for slave-side use,
-// that is, when the Arduino itself is acting as an SDI-12 device rather than a
-// recorder).
-void SDI12::sendResponse(String& resp) {
-  setState(SDI12_TRANSMITTING);       // Get ready to send data to the recorder
-  digitalWrite(_dataPin, LOW);        // marking is LOW
-  delayMicroseconds(marking_micros);  // 8.33 ms marking before response
-  for (int unsigned i = 0; i < resp.length(); i++) {
-    writeChar(resp[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // return to listening state
-}
-
-void SDI12::sendResponse(const char* resp) {
-  setState(SDI12_TRANSMITTING);       // Get ready to send data to the recorder
-  digitalWrite(_dataPin, LOW);        // marking is LOW
-  delayMicroseconds(marking_micros);  // 8.33 ms marking before response
-  for (int unsigned i = 0; i < strlen(resp); i++) {
-    writeChar(resp[i]);  // write each character
-  }
-  setState(SDI12_LISTENING);  // return to listening state
-}
-
-void SDI12::sendResponse(FlashString resp) {
-  setState(SDI12_TRANSMITTING);       // Get ready to send data to the recorder
-  digitalWrite(_dataPin, LOW);        // marking is LOW
-  delayMicroseconds(marking_micros);  // 8.33 ms marking before response
-  for (int unsigned i = 0; i < strlen_P((PGM_P)resp); i++) {
-    // write each character
-    writeChar(static_cast<char>(pgm_read_byte((const char*)resp + i)));
-  }
-  setState(SDI12_LISTENING);  // return to listening state
-}
-
-
-/* ================ Interrupt Service Routine =======================================*/
-
-// Passes off responsibility for the interrupt to the active object.
-// On espressif boards (ESP8266 and ESP32), the ISR must be stored in IRAM
-#if defined(ESP32) || defined(ESP8266)
-void ICACHE_RAM_ATTR SDI12::handleInterrupt() {
-  if (_activeObject) _activeObject->receiveISR();
-}
-#else
-void SDI12::handleInterrupt() {
-  if (_activeObject) _activeObject->receiveISR();
-}
-#endif
-
-// Creates a blank slate of bits for an incoming character
-void SDI12::startChar() {
-  rxState = 0x00;  // 0b00000000, got a start bit
-  rxMask  = 0x01;  // 0b00000001, bit mask, lsb first
-  rxValue = 0x00;  // 0b00000000, RX character to be, a blank slate
-}  // startChar
-
-// The actual interrupt service routine
-void SDI12::receiveISR() {
-  // time of this data transition (plus ISR latency)
-  sdi12timer_t thisBitTCNT = READTIME;
-
-  uint8_t pinLevel = digitalRead(_dataPin);  // current RX data level
-
-  // Check if we're ready for a start bit, and if this could possibly be it.
-  if (rxState == WAITING_FOR_START_BIT) {
-    // If we are waiting for a start bit and the pin is low it's not a start bit, exit
-    // Inverse logic start bit = HIGH
-    if (pinLevel == LOW) { return; }
-    // If the pin is HIGH, this should be a start bit.
-    // Thus startChar(), which sets the rxState to 0, create an empty character, and a
-    // new mask with a 1 in the lowest place
-    startChar();
-  } else {
-    // If we're not waiting for a start bit, it's because we're in the middle of an
-    // incomplete character and therefore this change in the pin state must be from a
-    // data, parity, or stop bit.
-
-    // Check how many bit times have passed since the last change
-    uint16_t rxBits = bitTimes((uint8_t)(thisBitTCNT - prevBitTCNT));
-    // Calculate how many *data+parity* bits should be left in the current character
-    //      - Each character has a total of 10 bits, 1 start bit, 7 data bits, 1 parity
-    // bit, and 1 stop bit
-    //      - The #rxState holds record of how many of the data + parity bits we've
-    // gotten (up to 8)
-    //      - We have to treat the parity bit as a data bit because we don't know its
-    // state
-    //      - Since we're mid character, we know the start bit is past which knocks us
-    // down to 9
-    //      - There will always be one left over for the stop bit, which will be LOW/1
-    uint8_t bitsLeft = 9 - rxState;
-    // If the number of bits passed since the last transition is more than then number
-    // of bits left on the character we were working on, a new character must have
-    // started.
-    // This will happen if the parity bit is 1 or the last bit(s) of the character and
-    // the parity bit are all 1's.
-    bool nextCharStarted = (rxBits > bitsLeft);
-
-    // Check how many data+parity bits have been sent in this frame.  This will be
-    // different from the rxBits if a new character has started because of the start
-    // and stop bits.
-    //      - If the total number of bits in this frame is more than the number of
-    // data+parity bits remaining in the character, then the number of data+parity bits
-    // is equal to the number of bits remaining for the character and partiy.
-    //      - If the total number of bits in this frame is less than the number of data
-    // bits left for the character and parity, then the number of data+parity bits
-    // received in this frame is equal to the total number of bits received in this
-    // frame.
-    // translation:
-    //    if nextCharStarted then bitsThisFrame = bitsLeft
-    //                       else bitsThisFrame = rxBits
-    uint8_t bitsThisFrame = nextCharStarted ? bitsLeft : rxBits;
-    // Tick up the rxState by the number of data+parity bits received in the frame
-    rxState += bitsThisFrame;
-
-    // Set all the bits received between the last change and this change
-    if (pinLevel == HIGH) {
-      // If the current state is HIGH (and it just became so), then all bits between
-      // the last change and now must have been LOW.
-      // back fill previous bits with 1's (inverse logic - LOW = 1)
-      while (bitsThisFrame-- > 0) {
-        // for each of the bits that happened in this frame
-
-        rxValue |= rxMask;     // Add a 1 to the LSB/right-most place of our character
-                               // value from the mask
-        rxMask = rxMask << 1;  // Shift the 1 in the mask up by one position
-      }
-      // And shift the 1 in the mask up by one more position for the current bit.
-      // It's HIGH/0 now, so we don't use `|=` with the mask for this last one.
-      rxMask = rxMask << 1;
-    } else {
-      // If the current state is LOW (and it just became so), then this bit is LOW
-      // but all bits between the last change and now must have been HIGH
-
-      // pinLevel==LOW
-      // previous bits were 0's so only this bit is a 1 (inverse logic - LOW = 1)
-      rxMask = rxMask << (bitsThisFrame -
-                          1);  // Shift the 1 in the mask up by the number of bits past
-      rxValue |= rxMask;  //  And add that shifted one to the character being created
-    }
-
-    // If this was the 8th or more bit then the character and parity are complete.
-    if (rxState > 7) {
-      rxValue &= 0x7F;        // Throw away the parity bit (and with 0b01111111)
-      charToBuffer(rxValue);  // Put the finished character into the buffer
-
-
-      // if this is LOW, or we haven't exceeded the number of bits in a
-      // character (but have gotten all the data bits) then this should be a
-      // stop bit and we can start looking for a new start bit.
-      if ((pinLevel == LOW) || !nextCharStarted) {
-        rxState = WAITING_FOR_START_BIT;  // DISABLE STOP BIT TIMER
-      } else {
-        // If we just switched to HIGH, or we've exceeded the total number of
-        // bits in a character, then the character must have ended with 1's/LOW,
-        // and this new 0/HIGH is actually the start bit of the next character.
-        startChar();
-      }
-    }
-  }
-  prevBitTCNT = thisBitTCNT;  // finally remember time stamp of this change!
-}
-
-// Put a new character in the buffer
-void SDI12::charToBuffer(uint8_t c) {
-  // Check for a buffer overflow. If not, proceed.
-  if ((_rxBufferTail + 1) % SDI12_BUFFER_SIZE == _rxBufferHead) {
-    _bufferOverflow = true;
-  } else {
-    // Save the character, advance buffer tail.
-    _rxBuffer[_rxBufferTail] = c;
-    _rxBufferTail            = (_rxBufferTail + 1) % SDI12_BUFFER_SIZE;
-  }
-}
-
-// Define AVR interrupts
-// Check if the various interrupt vectors are defined.  If they are the ISR is
-// instructed to call handleInterrupt() when they trigger.
-
-#if defined __AVR__  // Only AVR processors use interrupts like this
-
-#ifdef SDI12_EXTERNAL_PCINT
-// Client code must call SDI12::handleInterrupt() in PCINT handler for the data pin
-#else
-
-#if defined(PCINT0_vect)
-ISR(PCINT0_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#if defined(PCINT1_vect)
-ISR(PCINT1_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#if defined(PCINT2_vect)
-ISR(PCINT2_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#if defined(PCINT3_vect)
-ISR(PCINT3_vect) {
-  SDI12::handleInterrupt();
-}
-#endif
-
-#endif  // SDI12_EXTERNAL_PCINT
-
-#endif  // __AVR__
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.h b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.h
deleted file mode 100644
index ec949e3452b8204528d4d52ed56c0fd0f6362d5d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12.h
+++ /dev/null
@@ -1,981 +0,0 @@
-/**
- * @file SDI12.h
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @date August 2013
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- *
- * @brief This file contains the main class for the SDI-12 implementation.
- *
- * ========================== Arduino SDI-12 ==================================
- *
- * An Arduino library for SDI-12 communication with a wide variety of environmental
- * sensors. This library provides a general software solution, without requiring any
- * additional hardware.
- *
- * ======================== Attribution & License =============================
- *
- * Copyright (C) 2013  Stroud Water Research Center
- * Available at https://github.com/EnviroDIY/Arduino-SDI-12
- *
- * Authored initially in August 2013 by:
- *          Kevin M. Smith (http://ethosengineering.org)
- *          Inquiries: SDI12@ethosengineering.org
- *
- * Modified 2017 by Manuel Jimenez Buendia to work with ARM based processors (Arduino
- * Zero)
- *
- * Maintenance and merging 2017 by Sara Damiano
- *
- * based on the SoftwareSerial library (formerly NewSoftSerial), authored by:
- *         ladyada (http://ladyada.net)
- *         Mikal Hart (http://www.arduiniana.org)
- *         Paul Stoffregen (http://www.pjrc.com)
- *         Garrett Mace (http://www.macetech.com)
- *         Brett Hagman (http://www.roguerobotics.com/)
- *
- * This library is free software; you can redistribute it and/or modify it under the
- * terms of the GNU Lesser General Public License as published by the Free Software
- * Foundation; either version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful, but WITHOUT ANY
- * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
- * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License along with
- * this library; if not, write to the Free Software Foundation, Inc., 51 Franklin
- * Street, Fifth Floor, Boston, MA  02110-1301  USA
- */
-/**
- * @page specifications Notes on SDI-12, Specification v1.4
- *
- * @tableofcontents
- *
- * @section overview Overview
- *
- * SDI-12 is a communications protocol that uses a single data wire to communicate with
- * up to 62 uniquely addressed sensors.  So long as each sensor supports SDI-12, mixed
- * sensor types can appear on the same data bus.  Each address is a single character.
- * The valid ranges are 0-9, a-z, and A-Z. Only the datalogger can initiate
- * communications on the data bus.
- *
- * It does so by pulling the data line into a 5v state for at least 12 milliseconds to
- * wake up all the sensors, before returning the line into a 0v state for 8 milliseconds
- * announce an outgoing command.  The command contains both the action to be taken, and
- * the address of the device who should respond.  If there is a sensor on the bus with
- * that address, it is responsible for responding to the command.  Sensors should ignore
- * commands that were not issued to them, and should return to a sleep state until the
- * datalogger again issues the wakeup sequence.
- *
- * @section connection_details Connection Details
- *
- * **Physical Connections:**
- *   - 1 data line (0v - 5.5v)
- *   - 1 12v power line (9.6v - 16v)
- *   - 1 ground line
- *
- * **Baud Rate:**
- *   - 1200 bits per second
- *
- * **Data Frame Format:**
- *   - 10 bits per data frame
- *   - 1 start bit
- *   - 7 data bits (least significant bit first)
- *   - 1 even parity bit
- *   - 1 stop bit
- *
- * Data Line:  SDI-12 communication uses a single bi-directional data line with
- * three-state, inverse logic.
- *
- * | LINE CONDITION | BINARY STATE | VOLTAGE RANGE     |
- * |----------------|--------------|-------------------|
- * | marking        |      1       | -0.5 to 1.0 volts |
- * | spacing        |      0       | 3.5 to 5.5 volts  |
- * | transition     |  undefined   | 1.0 to 3.5 volts  |
- *
- * While a series of bits is being transmitted on the dataline, the voltage level on
- * that line might look something like this:
- *
- * @code
- *       _____       _____       _____       _____       _____     spacing
- * 5v   |     |     |     |     |     |     |     |     |     |
- *      |  0  |  1  |  0  |  1  |  0  |  1  |  0  |  1  |  0  | transition
- * Ov___|     |_____|     |_____|     |_____|     |_____|     |___ marking
- * @endcode
- *
- * @note Although the specification gives these voltages, some manufacturers chose to
- * implement SDI-12 at other logic levels - ie, with spacing voltages lower or higher
- * than the specified ~5V.
- *
- * For more information, and for a list of commands and responses, please see
- * SDI-12.org, official site of the SDI-12 Support Group.
- */
-/*** ==================== Code Organization ======================
- * - Includes, Defines, & Variable Declarations
- * - Buffer Setup
- * - Reading from the SDI-12 Buffer
- * - Constructor, Destructor, Begins, and Setters
- * - Using more than one SDI-12 object, isActive() and setActive()
- * - Setting Proper Data Line States
- * - Waking up and Talking to the Sensors
- * - Interrupt Service Routine (getting the data into the buffer)
- */
-
-
-#ifndef SRC_SDI12_H_
-#define SRC_SDI12_H_
-
-//  Import Required Libraries
-#include <inttypes.h>      // integer types library
-#include <Arduino.h>       // Arduino core library
-#include <Stream.h>        // Arduino Stream library
-#include "SDI12_boards.h"  //  Include timer information
-
-/// Helper for strings stored in flash
-typedef const __FlashStringHelper* FlashString;
-
-/// a char not found in a valid ASCII numeric field
-#define NO_IGNORE_CHAR '\x01'
-
-#ifndef SDI12_WAKE_DELAY
-/**
- * @brief The amount of additional time in milliseconds that the sensor takes to wake
- * before being ready to receive a command.  Default is 0ms - meaning the sensor is
- * ready for a command by the end of the 12ms break.  Per protocol, the wake time must
- * be less than 100 ms.
- */
-#define SDI12_WAKE_DELAY 0
-#endif
-
-#ifndef SDI12_BUFFER_SIZE
-/**
- * @brief The buffer size for incoming SDI-12 data.
- *
- * All responses should be less than 81 characters:
- * - address is a single (1) character
- * - values has a maximum value of 75 characters
- * - CRC is 3 characters
- * - CR is a single character
- * - LF is a single character
- */
-#define SDI12_BUFFER_SIZE 81
-#endif
-
-#if defined(ESP32) || defined(ESP8266)
-/**
- * @brief This enumeration provides the lookahead options for parseInt(), parseFloat().
- *
- * The rules set out here are used until either the first valid character is found or a
- * time out occurs due to lack of input.
- *
- * This enum is part of the Stream parent class, but is missing from the ESP8266 and
- * ESP32 cores.
- */
-enum LookaheadMode {
-  /** All invalid characters are ignored. */
-  SKIP_ALL,
-  /** Nothing is skipped, and the stream is not touched unless the first waiting
-     character is valid. */
-  SKIP_NONE,
-  /** Only tabs, spaces, line feeds & carriage returns are skipped.*/
-  SKIP_WHITESPACE
-};
-/**
- * @brief The function or macro used to read the clock timer value.
- *
- * @note  The ESP32 and ESP8266 are fast enough processors that they can take the
- * time to read the core 'micros()' function still complete the other processing needed
- * on the serial bits.  All of the other processors using the Arduino core also have the
- * micros function, but the rest are not fast enough to waste the processor cycles to
- * use the micros function and must use the faster assembly macros to read the
- * processor timer directly.
- */
-#define READTIME sdi12timer.SDI12TimerRead()
-#else
-/**
- * @brief The function or macro used to read the clock timer value.
- */
-#define READTIME TCNTX
-#endif  // defined(ESP32) || defined(ESP8266)
-
-/**
- * @brief The main class for SDI 12 instances
- */
-class SDI12 : public Stream {
-  /**
-   * @anchor sdi12_statics
-   * @name Static member variables
-   *
-   * @brief These are constants that apply to all SDI-12 instances.
-   */
-  /**@{*/
- private:
-  /**
-   * @brief static pointer to active SDI12 instance
-   */
-  static SDI12* _activeObject;
-  /**
-   * @brief The SDI12Timer instance to use for checking bit reception times.
-   */
-  static SDI12Timer sdi12timer;
-  /**
-   * @brief The size of a bit in microseconds
-   *
-   * 1200 baud = 1200 bits/second ~ 833.333 µs/bit
-   */
-  static const uint16_t bitWidth_micros;
-  /**
-   * @brief The required "break" before sending commands, >= 12ms
-   *
-   */
-  static const uint16_t lineBreak_micros;
-  /**
-   * @brief The required mark before a command or response, >= 8.33ms
-   */
-  static const uint16_t marking_micros;
-
-  /**
-   * @brief the width of a single bit in "ticks" of the cpu clock.
-   */
-  static const uint8_t txBitWidth;
-  /**
-   * @brief A fudge factor to make things work
-   */
-  static const uint8_t rxWindowWidth;
-  /**
-   * @brief The number of bits per tick, shifted by 2^10.
-   */
-  static const uint8_t bitsPerTick_Q10;
-  /**
-   * @brief A mask for the #rxState while waiting for a start bit; 0b11111111
-   */
-  static const uint8_t WAITING_FOR_START_BIT;
-
-  /**
-   * @brief Stores the time of the previous RX transition in micros
-   */
-  static uint16_t prevBitTCNT;
-  /**
-   * @brief Tracks how many bits are accounted for on an incoming character.
-   *
-   * - if 0: indicates that we got a start bit
-   * - if >0: indicates the number of bits received
-   */
-  static uint8_t rxState;
-  /**
-   * @brief a bit mask for building a received character
-   *
-   * The mask has a single bit set, in the place of the active bit based on the
-   * #rxState.
-   */
-  static uint8_t rxMask;
-  /**
-   * @brief the value of the character being built
-   */
-  static uint8_t rxValue;
-
-  /**
-   * @brief static method for getting a 16-bit value from the multiplication of 2 8-bit
-   * values
-   *
-   * @param x The first 8 bit integer
-   * @param y The second 8 bit integer
-   * @return @m_span{m-type} uint16_t @m_endspan The result of the multiplication, as a
-   * 16 bit integer.
-   */
-  static uint16_t mul8x8to16(uint8_t x, uint8_t y);
-
-  /**
-   * @brief static method for calculating the number of bit-times that have elapsed
-   * given an 8-bit counter/timer timestamp.
-   *
-   * @param dt The current value of the 8-bit timer
-   * @return @m_span{m-type} uint16_t @m_endspan The number of bit times that have
-   * passed at 1200 baud.
-   *
-   * Adds a rxWindowWidth fudge factor to the time difference to get the number of
-   * ticks, and then multiplies the fudged ticks by the number of bits per tick.  Uses
-   * the number of bits per tick shifted up by 2^10 and then shifts the result down by
-   * the same amount to compensate for the fact that the number of bits per tick is a
-   * decimal the timestamp is only an 8-bit integer.
-   *
-   * @see https://github.com/SlashDevin/NeoSWSerial/pull/13#issuecomment-315463522
-   */
-  static uint16_t bitTimes(uint8_t dt);
-  /**@}*/
-
-
-  /**
-   * @anchor sdi12_buffer
-   * @name Buffer Setup
-   *
-   * @brief Creating a circular buffer for incoming data.
-   *
-   * The buffer is used to store characters from the SDI-12 data line.  Characters are
-   * read into the buffer when an interrupt is received on the data line. The buffer
-   * uses a circular implementation with pointers to both the head and the tail. All
-   * SDI-12 instances share the same buffer.
-   *
-   * The default buffer size is the maximum length of a response to a normal SDI-12
-   * command, which is 81 characters:
-   * - address is a single (1) character
-   * - values has a maximum value of 75 characters
-   * - CRC is 3 characters
-   * - CR is a single character
-   * - LF is a single character
-   *
-   * For more information on circular buffers:
-   * http://en.wikipedia.org/wiki/Circular_buffer
-   */
-  /**@{*/
- private:
-  /**
-   * @brief A single incoming character buffer for ALL SDI-12 objects (Rx buffer)
-   *
-   * Increasing the buffer size will use more RAM. If you exceed 256 characters, be sure
-   * to change the data type of the index to support the larger range of addresses.  To
-   * adjust the size of the buffer, change the value of `SDI12_BUFFER_SIZE` in the
-   * header file.
-   */
-  static uint8_t _rxBuffer[SDI12_BUFFER_SIZE];
-  /**
-   * @brief Index of buffer head. (unsigned 8-bit integer, can map from 0-255)
-   */
-  static volatile uint8_t _rxBufferTail;
-  /**
-   * @brief Index of buffer tail. (unsigned 8-bit integer, can map from 0-255)
-   */
-  static volatile uint8_t _rxBufferHead;
-  /**
-   * @brief The buffer overflow status
-   */
-  bool _bufferOverflow;
-  /**@}*/
-
-
-  /**
-   * @anchor reading_buffer
-   * @name Reading from the SDI-12 Buffer
-   *
-   * @brief These functions are for reading incoming data stored in the SDI-12 buffer.
-   *
-   * @see <a href="class_s_d_i12.html#buffer-setup">Buffer Setup</a>
-   *
-   * @note peakNextDigit(), parseInt() and parseFloat() are fully implemented in the
-   * parent Stream class but we don't want to them use as they are inherited.  Although
-   * they are not virtual and cannot be overridden, recreating them here hides the
-   * stream default versions to allow for a custom timeout return value.  The default
-   * value for the Stream class is to return 0.  This makes distinguishing timeouts from
-   * true zero readings impossible. Therefore the default value has been set to -9999 in
-   * the being function.  The value returned by a timeout (SDI12::TIMEOUT) is a public
-   * variable and can be changed dynamically within a program by calling
-   * `mySDI12.TIMEOUT = (int) newValue` or using SDI12::setTimeoutValue(int16_t value).
-   *
-   */
-  /**@{*/
- public:
-  /**
-   * @brief Return the number of bytes available in the Rx buffer
-   *
-   * @return @m_span{m-type} int @m_endspan The number of characters in the buffer
-   *
-   * available() is a public function that returns the number of characters available in
-   * the Rx buffer.
-   *
-   * To understand how:
-   * `_rxBufferTail + SDI12_BUFFER_SIZE - _rxBufferHead) % SDI12_BUFFER_SIZE;`
-   * accomplishes this task, we will use a few examples.
-   *
-   * To start take the buffer below that has `SDI12_BUFFER_SIZE = 10`. The message
-   * "abc" has been wrapped around (circular buffer).
-   *
-   * @code{.cpp}
-   *     _rxBufferTail = 1 // points to the '-' after c
-   *     _rxBufferHead = 8 // points to 'a'
-   * @endcode
-   *
-   * [ c ] [ - ] [ - ] [ - ] [ - ] [ - ] [ - ] [ - ]  [ a ] [ b ]
-   *
-   * The number of available characters is (1 + 10 - 8) % 10 = 3
-   *
-   * The '%' or modulo operator finds the remainder of division of one number by
-   * another. In integer arithmetic 3 / 10 = 0, but has a remainder of 3.  We can only
-   * get the remainder by using the the modulo '%'. 3 % 10 = 3.  This next case
-   * demonstrates more clearly why the modulo is used.
-   *
-   * @code{.cpp}
-   *     _rxBufferTail = 4 // points to the '-' after c
-   *     _rxBufferHead = 1 // points to 'a'
-   * @endcode
-   *
-   * [ a ] [ b ] [ c ] [ - ] [ - ] [ - ] [ - ] [ - ]  [ - ] [ - ]
-   *
-   * The number of available characters is (4 + 10 - 1) % 10 = 3
-   *
-   * If we did not use the modulo we would get either ( 4 + 10 - 1 ) = 13 characters or
-   * ( 4 + 10 - 1 ) / 10 = 1 character. Obviously neither is correct.
-   *
-   * If there has been a buffer overflow, available() will return -1.
-   */
-  int available() override;
-  /**
-   * @brief Reveal next byte in the Rx buffer without consuming it.
-   *
-   * @return @m_span{m-type} int @m_endspan The next byte in the character buffer.
-   *
-   * peek() is a public function that allows the user to look at the character that is
-   * at the head of the buffer. Unlike read() it does not consume the character (i.e.
-   * the index addressed by _rxBufferHead is not changed). peek() returns -1 if there
-   * are no characters to show.
-   */
-  int peek() override;
-  /**
-   * @brief Clear the Rx buffer by setting the head and tail pointers to the same value.
-   *
-   * clearBuffer() is a public function that clears the buffers contents by setting the
-   * index for both head and tail back to zero.
-   */
-  void clearBuffer();
-  /**
-   * @brief Return next byte in the Rx buffer, consuming it
-   *
-   * @return @m_span{m-type} int @m_endspan The next byte in the character buffer.
-   *
-   * read() returns the character at the current head in the buffer after incrementing
-   * the index of the buffer head. This action 'consumes' the character, meaning it can
-   * not be read from the buffer again. If you would rather see the character, but leave
-   * the index to head intact, you should use peek();
-   */
-  int read() override;
-  /**
-   * @brief Wait for sending to finish - because no TX buffering, does nothing
-   */
-  void flush() override {}
-
-  /**
-   * @brief Return the first valid (long) integer value from the current position.
-   *
-   * The value of lookahead determines how parseInt looks ahead in the stream.
-   * See LookaheadMode enumeration at the top of the file.
-   * Lookahead is terminated by the first character that is not a valid part of an
-   * integer.
-   * Once parsing commences, 'ignore' will be skipped in the stream.
-   *
-   * @param lookahead the mode to use to look ahead in the
-   * stream, default is LookaheadMode::SKIP_ALL
-   * @param ignore a character to ignore in the stream, default is '\\x01'
-   * @return @m_span{m-type} long @m_endspan The first valid integer in the stream
-   *
-   * @note This function _hides_ the Stream class function to allow a custom value to be
-   * returned on timeout.  It cannot overwrite the Stream function because it is not
-   * virtual.
-   * @see @ref SDI12::LookaheadMode
-   */
-  long parseInt(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR);
-
-  /**
-   * @brief Return the first valid float value from the current position.
-   *
-   * The value of lookahead determines how parseInt looks ahead in the stream.
-   * See LookaheadMode enumeration at the top of the file.
-   * Lookahead is terminated by the first character that is not a valid part of an
-   * integer.
-   * Once parsing commences, 'ignore' will be skipped in the stream.
-   *
-   * @param lookahead the mode to use to look ahead in the
-   * stream, default is LookaheadMode::SKIP_ALL
-   * @param ignore a character to ignore in the stream, default is '\\x01'
-   * @return @m_span{m-type} long @m_endspan The first valid float in the stream
-   *
-   * @note This function _hides_ the Stream class function to allow a custom value to be
-   * returned on timeout.  It cannot overwrite the Stream function because it is not
-   * virtual.
-   * @see @ref SDI12::LookaheadMode
-   */
-  float parseFloat(LookaheadMode lookahead = SKIP_ALL, char ignore = NO_IGNORE_CHAR);
-
- protected:
-  /**
-   * @brief Return the next numeric digit in the stream or -1 if timeout
-   *
-   * @param lookahead the mode to use to look ahead in the
-   * stream
-   * @param detectDecimal True to accept a decimal point ('.') as part of a
-   * number
-   * @return @m_span{m-type} int @m_endspan The next numeric digit in the stream
-   */
-  int peekNextDigit(LookaheadMode lookahead, bool detectDecimal);
-  /**@}*/
-
-
-  /**
-   * @anchor ctor
-   * @name Constructor, Destructor, Begins, and Setters
-   *
-   * @brief These functions set up the SDI-12 object and prepare it for use.
-   */
-  /**@{*/
- private:
-  /**
-   * @brief reference to the data pin
-   */
-  int8_t _dataPin;
-
- public:
-  /**
-   * @brief Construct a new SDI12 instance with no data pin set.
-   *
-   * Before using the SDI-12 instance, the data pin must be set with
-   * SDI12::setDataPin(dataPin) or SDI12::begin(dataPin). This empty constructor is
-   * provided for easier integration with other Arduino libraries.
-   *
-   * When the constructor is called it resets the buffer overflow status to FALSE.
-   */
-  SDI12();
-  /**
-   * @brief Construct a new SDI12 with the data pin set
-   *
-   * @param dataPin The data pin's digital pin number
-   *
-   * When the constructor is called it resets the buffer overflow status to FALSE and
-   * assigns the pin number "dataPin" to the private variable "_dataPin".
-   */
-  explicit SDI12(int8_t dataPin);
-  /**
-   * @brief Destroy the SDI12 object.
-   *
-   * When the destructor is called, it's main task is to disable any interrupts that had
-   * been previously assigned to the pin, so that the pin will behave as expected when
-   * used for other purposes. This is achieved by putting the SDI-12 object in the
-   * SDI12_DISABLED state.  After disabling interrupts, the pointer to the current
-   * active SDI-12 instance is set to null if it had pointed to the destroyed object.
-   * Finally, for AVR board, the timer prescaler is set back to whatever it had been
-   * prior to creating the SDI-12 object.
-   */
-  ~SDI12();
-  /**
-   * @brief Begin the SDI-12 object.
-   *
-   * This is called to begin the functionality of the SDI-12 object.  It sets the object
-   * as the active object, sets the stream timeout to 150ms to match SDI-12 specs, sets
-   * the timeout return value to SDI12::TIMEOUT, and configures the timer prescaler.
-   */
-  void begin();
-  /**
-   * @brief Set the SDI12::_datapin and begin the SDI-12 object.
-   *
-   * @copydetails SDI12::begin()
-   * If the SDI-12 instance is created using the empty constuctor, this must be used
-   * to set the data pin.
-   *
-   * @param dataPin The data pin's digital pin number
-   */
-  void begin(int8_t dataPin);
-  /**
-   * @brief Disable the SDI-12 object (but do not destroy it).
-   *
-   * Set the SDI-12 state to disabled, set the pointer to the current active instance
-   * to null, and then, for AVR boards, unset the timer prescaler.
-   *
-   * This can be called to temporarily cease all functionality of the SDI-12 object. It
-   * is not as harsh as destroying the object with the destructor, as it will maintain
-   * the memory buffer.
-   */
-  void end();
-  /**
-   * @brief The value to return if a parse or read times out with no return from the
-   * sensor.
-   *
-   * The timeout return for an Arduino stream object when no character is available in
-   * the Rx buffer is "0."  For enviromental sensors (the typical SDI-12 users) 0 is a
-   * common result value.  To better distinguish between a timeout because of no
-   * sensor response and a true zero return, the timeout should be set to some value
-   * that is NOT a possible return from that sensor.  If the timeout is not set, -9999
-   * is used.
-   */
-  int16_t TIMEOUT;
-  /**
-   * @brief Set the value to return if a parse int or parse float times out with no
-   * return from the sensor.
-   *
-   * The "standard" timeout return for an Arduino stream object when no character is
-   * available in the Rx buffer is "0."  For enviromental sensors (the typical SDI-12
-   * users) 0 is a common result value.  To better distinguish between a timeout because
-   * of no sensor response and a true zero return, the timeout should be set to some
-   * value that is NOT a possible return from that sensor.  If the timeout is not set,
-   * -9999 is used.
-   *
-   * @param value the value to return on timeout
-   */
-  void setTimeoutValue(int16_t value);
-  /**
-   * @brief Get the data pin for the current SDI-12 instance
-   *
-   * @return @m_span{m-type} int8_t @m_endspan the data pin number
-   */
-  int8_t getDataPin();
-  /**
-   * @brief Set the data pin for the current SDI-12 instance
-   *
-   * @param dataPin  The data pin's digital pin number
-   */
-  void setDataPin(int8_t dataPin);
-  /**@}*/
-
-
-  /**
-   * @anchor multiple_objects
-   * @name Using more than one SDI-12 Object
-   *
-   * @brief Functions needed for multiple instances of the SDI12 class.
-   *
-   * This library is allows for multiple instances of itself running on the same or
-   * different pins.  SDI-12 can support up to 62 sensors on a single pin/bus, so it is
-   * not necessary to use an instance for each sensor.
-   *
-   * Because we are using pin change interrupts there can only be one active object at a
-   * time (since this is the only reliable way to determine which pin the interrupt
-   * occurred on).  The active object is the only object that will respond properly to
-   * interrupts.  However promoting another instance to Active status does not
-   * automatically remove the interrupts on the other pin. For proper behavior it is
-   * recommended to use this pattern:
-   *
-   * @code{.cpp}
-   *     mySDI12.forceHold();
-   *     myOtherSDI12.setActive();
-   * @endcode
-   *
-   * @note
-   * - Promoting an object into the Active state will set it as `SDI12_HOLDING`.
-   * - Calling mySDI12.begin() will assert mySDI12 as the new active object, until
-   * another instance calls myOtherSDI12.begin() or myOtherSDI12.setActive().
-   * - Calling mySDI12.end() does NOT hand-off active status to another SDI-12 instance.
-   * - You can check on the active object by calling mySDI12.isActive(), which will
-   * return a boolean value TRUE if active or FALSE if inactive.
-   */
-  /**@{*/
- public:
-  /**
-   * @brief Set this instance as the active SDI-12 instance
-   *
-   * @return @m_span{m-type} bool @m_endspan True indicates that the current SDI-12
-   * instance was not formerly the active one and now is.  False indicates that the
-   * current SDI-12 instance *is already the active one* and the state was not changed.
-   *
-   * A method for setting the current object as the active object; returns TRUE if
-   * the object was not formerly the active object and now is.
-   * - Promoting an inactive to the active instance will start it in the SDI12_HOLDING
-   * state and return TRUE.
-   * - Otherwise, if the object is currently the active instance, it will remain
-   * unchanged and return FALSE.
-   */
-  bool setActive();
-
-  /**
-   * @brief Check if this instance is active
-   *
-   * @return @m_span{m-type} bool @m_endspan True indicates that the curren SDI-12
-   * instace is the active one.
-   *
-   * isActive() is a method for checking if the object is the active object.  Returns
-   * true if the object is currently the active object, false otherwise.
-   */
-  bool isActive();
-  /**@}*/
-
-
-  /**
-   * @anchor line_states
-   * @name Data Line States
-   *
-   * @brief Functions for maintaining the proper data line state.
-   *
-   * The Arduino is responsible for managing communication with the sensors.  Since all
-   * the data transfer happens on the same line, the state of the data line is very
-   * important.
-   *
-   * @section line_state_spec Specifications
-   *
-   * Per the SDI-12 specification, the voltage ranges for SDI-12 are:
-   *
-   * - When the pin is in the SDI12_HOLDING state, it is holding the line LOW so that
-   * interference does not unintentionally wake the sensors up.  The interrupt is
-   * disabled for the dataPin, because we are not expecting any SDI-12 traffic.
-   * - In the SDI12_TRANSMITTING state, we would like exclusive control of the Arduino,
-   * so we shut off all interrupts, and vary the voltage of the dataPin in order to wake
-   * up and send commands to the sensor.
-   * - In the SDI12_LISTENING state, we are waiting for a sensor to respond, so we drop
-   * the voltage level to LOW and relinquish control (INPUT).
-   * - If we would like to disable all SDI-12 functionality, then we set the system to
-   * the SDI12_DISABLED state, removing the interrupt associated with the dataPin.  For
-   * predictability, we set the pin to a LOW level high impedance state (INPUT).
-   *
-   * @section line_state_table As a Table
-   *
-   * Summarized in a table:
-   *
-   * | State               | Interrupts       | Pin Mode   | Pin Level |
-   * |---------------------|------------------|------------|-----------|
-   * | SDI12_DISABLED      | Pin Disable      | INPUT      | ---       |
-   * | SDI12_ENABLED       | Pin Disable      | INPUT      | ---       |
-   * | SDI12_HOLDING       | Pin Disable      | OUTPUT     | LOW       |
-   * | SDI12_TRANSMITTING  | All/Pin Disable  | OUTPUT     | VARYING   |
-   * | SDI12_LISTENING     | All Enable       | INPUT      | ---       |
-   *
-   *
-   * @section line_state_seq Sequencing
-   *
-   * Generally, this flow of line states is acceptable:
-   *
-   * `HOLDING --> TRANSMITTING --> LISTENING --> TRANSMITTING --> LISTENING`
-   *
-   * If you have interference, you should force a hold, using forceHold().
-   * The flow would then be:
-   *
-   * `HOLDING --> TRANSMITTING --> LISTENING -->` done reading, forceHold() `--->
-   * HOLDING`
-   *
-   * @see For a detailed explanation of interrupts see @ref interrupts_page
-   */
-  /**@{*/
- private:
-  /**
-   * @brief The various SDI-12 line states.
-   */
-  typedef enum SDI12_STATES {
-    /** SDI-12 is disabled, pin mode INPUT, interrupts disabled for the pin */
-    SDI12_DISABLED,
-    /** SDI-12 is enabled, pin mode INPUT, interrupts disabled for the pin */
-    SDI12_ENABLED,
-    /** The line is being held LOW, pin mode OUTPUT, interrupts disabled for the pin */
-    SDI12_HOLDING,
-    /** Data is being transmitted by the SDI-12 master, pin mode OUTPUT, interrupts
-       disabled for the pin */
-    SDI12_TRANSMITTING,
-    /** The SDI-12 master is listening for a response from the slave, pin mode INPUT,
-       interrupts enabled for the pin */
-    SDI12_LISTENING
-  } SDI12_STATES;
-
-#ifndef __AVR__
-  /**
-   * @brief Calculate the parity value for a character using even parity.
-   *
-   * @param v **uint8_t (char)** the character to calculate the parity of
-   * @return @m_span{m-type} uint8_t @m_endspan the input character with the 8th bit set
-   * to the even parity value for that character
-   *
-   * Sets up parity and interrupts for different processor types - that is, imports the
-   * interrupts and parity for the AVR processors where they exist.
-   *
-   * This function is defined in the Arduino core for AVR processors, but must be
-   * defined here for SAMD and ESP cores.
-   */
-  static uint8_t parity_even_bit(uint8_t v);
-#endif
-
-  /**
-   * @brief Set the pin interrupts to be on (enabled) or off (disabled)
-   *
-   * @param enable True to enable pin interrupts
-   *
-   * A private helper function to turn pin interupts on or off
-   */
-  void setPinInterrupts(bool enable);
-  /**
-   * @brief Set the the state of the SDI12 object[s]
-   *
-   * @param state The state the SDI-12 object should be set to, from
-   * the SDI12_STATES enum.
-   *
-   * This is a private function, and only used internally.
-   */
-  void setState(SDI12_STATES state);
-
- public:
-  /**
-   * @brief Set line state to SDI12_HOLDING
-   *
-   * A public function which forces the line into a "holding" state. This is generally
-   * unneeded, but for deployments where interference is an issue, it should be used
-   * after all expected bytes have been returned from the sensor.
-   */
-  void forceHold();
-  /**
-   * @brief Set line state to SDI12_LISTENING
-   *
-   * A public function which forces the line into a "listening" state.  This may be
-   * needed for implementing a slave-side device, which should relinquish control of the
-   * data line when not transmitting.
-   */
-  void forceListen();
-  /**@}*/
-
-
-  /**
-   * @anchor communication
-   * @name Waking Up and Talking To Sensors
-   *
-   * @brief These functions are needed to communicate with SDI-12 sensors (slaves) or an
-   * SDI-12 datalogger (master).
-   */
-  /**@{*/
- private:
-  /**
-   * @brief Used to wake up the SDI12 bus.
-   *
-   * @param extraWakeTime The amount of additional time in milliseconds that the sensor
-   * takes to wake before being ready to receive a command.  Default is 0ms - meaning
-   * the sensor is ready for a command by the end of the 12ms break.  Should be lower
-   * than 100.
-   *
-   * Wakes up all the sensors on the bus.  Set the SDI-12 state to transmitting, hold
-   * the data line high for the required break of 12 milliseconds plus any needed
-   * additional delay to allow the sensor to wake, then hold the line low for the
-   * required marking of 8.33 milliseconds.
-   *
-   * The SDI-12 protocol requires a pulse of HIGH voltage for at least 12 milliseconds
-   * (the break) followed immediately by a pulse of LOW voltage for at least 8.33, but
-   * not more than 100, milliseconds. Setting the SDI-12 object into the
-   * SDI12_TRANSMITTING allows us to assert control of the line without triggering any
-   * interrupts.
-   *
-   * Per specifications:
-   * > • A data recorder transmits a break by setting the data line to spacing for at
-   * > least 12 milliseconds.
-   * >
-   * > • The sensor will not recognize a break condition for a continuous spacing time
-   * > of less than 6.5 milliseconds and will always recognize a break when the line is
-   * > continuously spacing for more than 12 milliseconds.
-   *
-   * > • Upon receiving a break, a sensor must detect 8.33 milliseconds of marking on
-   * > the data line before it looks for an address.
-   * >
-   * > • A sensor must wake up from a low-power standby mode and be capable of detecting
-   * > a start bit from a valid command within 100 milliseconds after detecting a break
-   * >
-   * > • Sensors must return to a low-power standby mode after receiving an invalid
-   * > address or after detecting a marking state on the data line for 100 milliseconds.
-   * > (Tolerance:    +0.40 milliseconds.)
-   */
-  void wakeSensors(int8_t extraWakeTime = 0);
-  /**
-   * @brief Used to send a character out on the data line
-   *
-   * @param out **uint8_t (char)** the character to write
-   *
-   * This function writes a character out to the data line.  SDI-12 specifies the
-   * general transmission format of a single character as:
-   * - 10 bits per data frame
-   *     - 1 start bit
-   *     - 7 data bits (least significant bit first)
-   *     - 1 even parity bit
-   *     - 1 stop bit
-   *
-   * Recall that we are using inverse logic, so HIGH represents 0, and LOW represents
-   * a 1.
-   */
-  void writeChar(uint8_t out);
-
- public:
-  /**
-   * @brief Write out a byte on the SDI-12 line
-   *
-   * @param byte The character to write
-   * @return @m_span{m-type} size_t @m_endspan The number of characters written
-   *
-   * Sets the state to transmitting, writes a character, and then sets the state back to
-   * listening.  This function must be implemented as part of the Arduino Stream
-   * instance, but is *NOT* intenteded to be used for SDI-12 objects.  Instead, use the
-   * SDI12::sendCommand() or SDI12::sendResponse() functions.
-   */
-  virtual size_t write(uint8_t byte);
-
-  /**
-   * @brief Send a command out on the data line, acting as a datalogger (master)
-   *
-   * @param cmd the command to send
-   *
-   * A publicly accessible function that sends a break to wake sensors and sends out a
-   * command byte by byte on the data line.
-   *
-   * @param extraWakeTime The amount of additional time in milliseconds that the sensor
-   * takes to wake before being ready to receive a command.  Default is 0ms - meaning
-   * the sensor is ready for a command by the end of the 12ms break.  Per protocol, the
-   * wake time must be less than 100 ms.
-   */
-  void sendCommand(String& cmd, int8_t extraWakeTime = SDI12_WAKE_DELAY);
-  /// @copydoc SDI12::sendCommand(String&, int8_t)
-  void sendCommand(const char* cmd, int8_t extraWakeTime = SDI12_WAKE_DELAY);
-  /// @copydoc SDI12::sendCommand(String&, int8_t)
-  void sendCommand(FlashString cmd, int8_t extraWakeTime = SDI12_WAKE_DELAY);
-
-  /**
-   * @brief Send a response out on the data line (for slave use)
-   *
-   * @param resp the response to send
-   *
-   * A publicly accessible function that sends out an 8.33 ms marking and a response
-   * byte by byte on the data line.  This is needed if the Arduino is acting as an
-   * SDI-12 device itself, not as a recorder for another SDI-12 device.
-   */
-  void sendResponse(String& resp);
-  /// @copydoc SDI12::sendResponse(String& resp)
-  void sendResponse(const char* resp);
-  /// @copydoc SDI12::sendResponse(String& resp)
-  void sendResponse(FlashString resp);
-  ///@}
-
-
-  /**
-   * @anchor interrupt_fxns
-   * @name Interrupt Service Routine
-   *
-   * @brief Functions for handling interrupts - responding to changes on the data line
-   * and converting them to characters in the Rx buffer.
-   *
-   * @see For a detailed explanation of interrupts see @ref interrupts_page
-   */
-  /**@{*/
- private:
-  /**
-   * @brief Creates a blank slate for a new incoming character
-   */
-  void startChar();
-  /**
-   * @brief The interrupt service routine (ISR) - the function responding to changes in
-   * rx line state.
-   *
-   * This function checks which direction the change of the interrupt was and then uses
-   * that to populate the bits of the character. Unlike SoftwareSerial which listens for
-   * a start bit and then halts all program and other ISR execution until the end of the
-   * character, this library grabs the time of the interrupt, does some quick math, and
-   * lets the processor move on.  The logic of creating a character this way is harder
-   * for a person to follow, but it pays off because we're not tieing up the processor
-   * in an ISR that lasts for 8.33ms for each character. [10 bits @ 1200 bits/s] For a
-   * person, that 8.33ms is trivial, but for even a "slow" 8MHz processor, that's over
-   * 60,000 ticks sitting idle per character.
-   */
-  void receiveISR();
-  /**
-   * @brief Put a finished character into the SDI12 buffer
-   *
-   * @param c **uint8_t (char)** the character to add to the buffer
-   */
-  void charToBuffer(uint8_t c);
-
- public:
-  /**
-   * @brief Intermediary used by the ISR - passes off responsibility for the interrupt
-   * to the active object.
-   *
-   * On espressif boards (ESP8266 and ESP32), the ISR must be stored in IRAM
-   */
-  static void handleInterrupt();
-
-  /** on AVR boards, uncomment to use your own PCINT ISRs */
-  // #define SDI12_EXTERNAL_PCINT
-  /**@}*/
-};
-
-#endif  // SRC_SDI12_H_
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.cpp b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.cpp
deleted file mode 100644
index beb28e8610e0f122f009926498f708d78e0f39e3..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/**
- * @file SDI12_boards.cpp
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @author Sara Geleskie Damiano (sdamiano@stroudcenter.org)
- *
- * @brief This file implements the setting and unsetting of the proper prescalers for
- * the timers for SDI-12.
- *
- */
-
-/* ======================== Arduino SDI-12 =================================
-An Arduino library for SDI-12 communication with a wide variety of environmental
-sensors. This library provides a general software solution, without requiring
-   ======================== Arduino SDI-12 =================================*/
-
-#include "SDI12_boards.h"
-
-SDI12Timer::SDI12Timer() {}
-
-// Most 'standard' AVR boards
-//
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || \
-  defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) ||  \
-  defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) ||   \
-  defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284__)
-
-/**
- * @brief The value of timer control register 2A prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR2A;
-/**
- * @brief The value of timer control register 2B prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR2B;
-
-#if F_CPU == 16000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR2A = TCCR2A;
-  preSDI12_TCCR2B = TCCR2B;
-  TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation, OC2A &
-                  // OC2B disconnected
-  TCCR2B = 0x07;  // TCCR2B = 0x07 = 0b00000111 - Clock Select bits 22, 21, & 20 on -
-                  // prescaler set to CK/1024
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR2A = preSDI12_TCCR2A;
-  TCCR2B = preSDI12_TCCR2B;
-}
-
-#elif F_CPU == 12000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR2A = TCCR2A;
-  preSDI12_TCCR2B = TCCR2B;
-  TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation, OC2A &
-                  // OC2B disconnected
-  TCCR2B = 0x07;  // TCCR2B = 0x07 = 0b00000111 - Clock Select bits 22, 21, & 20 on -
-                  // prescaler set to CK/1024
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR2A = preSDI12_TCCR2A;
-  TCCR2B = preSDI12_TCCR2B;
-}
-
-#elif F_CPU == 8000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR2A = TCCR2A;
-  preSDI12_TCCR2B = TCCR2B;
-  TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation, OC2A &
-                  // OC2B disconnected
-  TCCR2B = 0x06;  // TCCR2B = 0x06 = 0b00000110 - Clock Select bits 22 & 20 on -
-                  // prescaler set to CK/256
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR2A = preSDI12_TCCR2A;
-  TCCR2B = preSDI12_TCCR2B;
-}
-
-// void SDI12Timer::configSDI12TimerPrescale(void)
-// {
-//     preSDI12_TCCR2A = TCCR2A;
-//     preSDI12_TCCR2B = TCCR2B;
-//     TCCR2A = 0x00;  // TCCR2A = 0x00 = "normal" operation - Normal port operation,
-//     OC2A & OC2B disconnected TCCR2B = 0x07;  // TCCR2B = 0x07 = 0b00000111 - Clock
-//     Select bits 22, 21, & 20 on - prescaler set to CK/1024
-// }
-// void SDI12Timer::resetSDI12TimerPrescale(void)
-// {
-//     TCCR2A = preSDI12_TCCR2A;
-//     TCCR2B = preSDI12_TCCR2B;
-// }
-#endif
-
-
-// ATtiny boards (ie, adafruit trinket)
-//
-#elif defined(__AVR_ATtiny25__) | defined(__AVR_ATtiny45__) | defined(__AVR_ATtiny85__)
-
-/**
- * @brief The value of timer control register 1A prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR1A;
-
-#if F_CPU == 16000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR1A = TCCR1;
-  TCCR1 = 0b00001011;  // Set the prescaler to 1024
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR1 = preSDI12_TCCR1A;
-}
-
-
-#elif F_CPU == 8000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR1A = TCCR1;
-  TCCR1 = 0b00001010;  // Set the prescaler to 512
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR1 = preSDI12_TCCR1A;
-}
-#endif
-
-
-// Arduino Leonardo & Yun and other 32U4 boards
-//
-#elif defined(ARDUINO_AVR_YUN) || defined(ARDUINO_AVR_LEONARDO) || \
-  defined(__AVR_ATmega32U4__)
-
-/**
- * @brief The value of timer control register 4A prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4A;
-/**
- * @brief The value of timer control register 4B prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4B;
-/**
- * @brief The value of timer control register 4C prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4C;
-/**
- * @brief The value of timer control register 4D prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4D;
-/**
- * @brief The value of timer control register 4E prior to being set for SDI-12.
- */
-static uint8_t preSDI12_TCCR4E;
-
-#if F_CPU == 16000000L
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR4A = TCCR4A;
-  preSDI12_TCCR4B = TCCR4B;
-  preSDI12_TCCR4C = TCCR4C;
-  preSDI12_TCCR4D = TCCR4D;
-  preSDI12_TCCR4E = TCCR4E;
-  TCCR4A = 0x00;  // TCCR4A = 0x00 = "normal" operation - Normal port operation, OC4A &
-                  // OC4B disconnected
-  TCCR4B = 0x0B;  // TCCR4B = 0x0B = 0b00001011 - Clock Select bits 43, 41, & 40 on -
-                  // prescaler set to CK/1024
-  TCCR4C = 0x00;  // TCCR4C = 0x00 = "normal" operation - Normal port operation, OC4D0
-                  // disconnected
-  TCCR4D = 0x00;  // TCCR4D = 0x00 = No fault protection
-  TCCR4E = 0x00;  // TCCR4E = 0x00 = No register locks or overrides
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR4A = preSDI12_TCCR4A;
-  TCCR4B = preSDI12_TCCR4B;
-  TCCR4C = preSDI12_TCCR4C;
-  TCCR4D = preSDI12_TCCR4D;
-  TCCR4E = preSDI12_TCCR4E;
-}
-
-#elif F_CPU == 8000000L
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  preSDI12_TCCR4A = TCCR4A;
-  preSDI12_TCCR4B = TCCR4B;
-  preSDI12_TCCR4C = TCCR4C;
-  preSDI12_TCCR4D = TCCR4D;
-  preSDI12_TCCR4E = TCCR4E;
-  TCCR4A = 0x00;  // TCCR4A = 0x00 = "normal" operation - Normal port operation, OC4A &
-                  // OC4B disconnected
-  TCCR4B = 0x0A;  // TCCR4B = 0x0A = 0b00001010 - Clock Select bits 43 & 41 on -
-                  // prescaler set to CK/512
-  TCCR4C = 0x00;  // TCCR4C = 0x00 = "normal" operation - Normal port operation, OC4D0
-                  // disconnected
-  TCCR4D = 0x00;  // TCCR4D = 0x00 = No fault protection
-  TCCR4E = 0x00;  // TCCR4E = 0x00 = No register locks or overrides
-}
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  TCCR4A = preSDI12_TCCR4A;
-  TCCR4B = preSDI12_TCCR4B;
-  TCCR4C = preSDI12_TCCR4C;
-  TCCR4D = preSDI12_TCCR4D;
-  TCCR4E = preSDI12_TCCR4E;
-}
-#endif
-
-
-// Arduino Zero other SAMD21 boards
-//
-#elif defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_ARCH_SAMD) || \
-  defined(__SAMD21G18A__) || defined(__SAMD21J18A__) || defined(__SAMD21E18A__)
-
-void SDI12Timer::configSDI12TimerPrescale(void) {
-  // Select generic clock generator 4 (Arduino core uses 0, 1, and 3.  RTCZero uses 2)
-  // Many examples use clock generator 4.. consider yourself warned!
-  // I would use a higher clock number, but some of the cores don't include them for
-  // some reason
-  REG_GCLK_GENDIV = GCLK_GENDIV_ID(4) |  // Select Generic Clock Generator 4
-    GCLK_GENDIV_DIV(3);                  // Divide the clock source by divisor 3
-  while (GCLK->STATUS.bit.SYNCBUSY) {}   // Wait for synchronization
-
-
-  // Write the generic clock generator 4 configuration
-  REG_GCLK_GENCTRL = (GCLK_GENCTRL_ID(4) |        // Select GCLK4
-                      GCLK_GENCTRL_SRC_DFLL48M |  // Select the 48MHz clock source
-                      GCLK_GENCTRL_IDC |     // Set the duty cycle to 50/50 HIGH/LOW
-                      GCLK_GENCTRL_GENEN) &  // Enable the generic clock clontrol
-    ~GCLK_GENCTRL_RUNSTDBY &                 // Do NOT run in stand by
-    ~GCLK_GENCTRL_DIVSEL;  // Divide clock source by GENDIV.DIV: 48MHz/3=16MHz
-                           // ^^ & ~ for DIVSEL because not not divided
-  while (GCLK->STATUS.bit.SYNCBUSY) {}  // Wait for synchronization
-
-  // Feed GCLK4 to TC3 (also feeds to TCC2, the two must have the same source)
-  // TC3 (and TCC2) seem to be free, so I'm using them
-  // TC4 is used by Tone, TC5 is tied to the same clock as TC4
-  // TC6 and TC7 are not available on all boards
-  REG_GCLK_CLKCTRL = GCLK_CLKCTRL_GEN_GCLK4 |  // Select Generic Clock Generator 4
-    GCLK_CLKCTRL_CLKEN |                       // Enable the generic clock generator
-    GCLK_CLKCTRL_ID_TCC2_TC3;  // Feed the Generic Clock Generator 4 to TCC2 and TC3
-  while (GCLK->STATUS.bit.SYNCBUSY) {}  // Wait for synchronization
-
-  REG_TC3_CTRLA |=
-    TC_CTRLA_PRESCALER_DIV1024 |  // Set prescaler to 1024, 16MHz/1024 = 15.625kHz
-    TC_CTRLA_WAVEGEN_NFRQ |       // Put the timer TC3 into normal frequency (NFRQ) mode
-    TC_CTRLA_MODE_COUNT8 |        // Put the timer TC3 into 8-bit mode
-    TC_CTRLA_ENABLE;              // Enable TC3
-  while (TC3->COUNT16.STATUS.bit.SYNCBUSY) {}  // Wait for synchronization
-}
-// NOT resetting the SAMD timer settings
-void SDI12Timer::resetSDI12TimerPrescale(void) {
-  // Disable TCx
-  TC3->COUNT16.CTRLA.reg &= ~TC_CTRLA_ENABLE;
-  while (TC3->COUNT16.STATUS.bit.SYNCBUSY) {}
-
-  // Reset TCx
-  TC3->COUNT16.CTRLA.reg = TC_CTRLA_SWRST;
-  while (TC3->COUNT16.STATUS.bit.SYNCBUSY) {}
-  while (TC3->COUNT16.CTRLA.bit.SWRST) {}
-
-  // Disable generic clock generator
-  REG_GCLK_GENCTRL = GCLK_GENCTRL_ID(4) &  // Select GCLK4
-    ~GCLK_GENCTRL_GENEN;                   // Disable the generic clock control
-  while (GCLK->STATUS.bit.SYNCBUSY) {}     // Wait for synchronization
-}
-
-// Espressif ESP32/ESP8266 boards
-//
-#elif defined(ESP32) || defined(ESP8266)
-
-void         SDI12Timer::configSDI12TimerPrescale(void) {}
-void         SDI12Timer::resetSDI12TimerPrescale(void) {}
-sdi12timer_t SDI12Timer::SDI12TimerRead(void) {
-  // Its a one microsecond clock but we want 64uS ticks so divide by 64 i.e. right shift
-  // 6
-  return ((sdi12timer_t)(micros() >> 6));
-}
-// Unknown board
-#else
-#error "Please define your board timer and pins"
-#endif
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.h b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.h
deleted file mode 100644
index a2a533e67aaba091f369ccd89d270ffc11b354ad..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/SDI12_boards.h
+++ /dev/null
@@ -1,394 +0,0 @@
-/**
- * @file SDI12_boards.h
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- * @author Sara Geleskie Damiano (sdamiano@stroudcenter.org)
- *
- * @brief This file defines the timing units needed for various Arduino boards.
- *
- */
-
-/* ======================== Arduino SDI-12 =================================
-An Arduino library for SDI-12 communication with a wide variety of environmental
-sensors. This library provides a general software solution, without requiring
-   ======================== Arduino SDI-12 =================================*/
-
-#ifndef SRC_SDI12_BOARDS_H_
-#define SRC_SDI12_BOARDS_H_
-
-#include <Arduino.h>
-
-#if defined(ESP32) || defined(ESP8266)
-/** The interger type (size) of the timer return value */
-typedef uint32_t sdi12timer_t;
-#else
-/** The interger type (size) of the timer return value */
-typedef uint8_t sdi12timer_t;
-#endif
-
-/**
- * @brief The class used to define the processor timer for the SDI-12 serial emulation.
- */
-class SDI12Timer {
- public:
-  /**
-   * @brief Construct a new SDI12Timer
-   */
-  SDI12Timer();
-  /**
-   * @brief Set the processor timer prescaler such that the 10 bits of an SDI-12
-   * character are divided into the rollover time of the timer.
-   *
-   * @note  The ESP32 and ESP8266 are fast enough processors that they can take the
-   * time to read the core 'micros()' function still complete the other processing
-   * needed on the serial bits.  All of the other processors using the Arduino core also
-   * have the micros function, but the rest are not fast enough to waste the processor
-   * cycles to use the micros function and must manually configure the processor timer
-   * and use the faster assembly macros to read that processor timer directly.
-   */
-  void configSDI12TimerPrescale(void);
-  /**
-   * @brief Reset the processor timer prescaler to whatever it was prior to being
-   * adjusted for this library.
-   *
-   * @note The prescaler is *NOT* set back to initial values for SAMD boards!  On those
-   * processors, generic clock generator 4 will remain configured for SDI-12 until it is
-   * reset outside of this library.
-   */
-  void resetSDI12TimerPrescale(void);
-
-// Most 'standard' AVR boards
-//
-#if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || \
-  defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) ||  \
-  defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) ||   \
-  defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "TCNT2"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX TCNT2  // Using Timer 2
-
-#if F_CPU == 16000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 12000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 12MHz / 1024 prescaler = 11719 'ticks'/sec = 85 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/85 µs) = 9.765625 ticks/bit
- */
-#define TICKS_PER_BIT 10
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(9.765625 ticks/bit) * 2^10 = 104.8576
- */
-#define BITS_PER_TICK_Q10 105
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 8000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "256"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 8MHz / 256 prescaler = 31250 'ticks'/sec = 32 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/32 µs) = 26.04166667 ticks/bit
- */
-#define TICKS_PER_BIT 26
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(26.04166667 ticks/bit) * 2^10 = 39.3216
- */
-#define BITS_PER_TICK_Q10 39
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 10
-
-  // #define PRESCALE_IN_USE_STR "1024"
-  // #define TICKS_PER_BIT 6
-  //     // 8MHz / 1024 prescaler = 31250 'ticks'/sec = 128 µs / 'tick'
-  //     // (1 sec/1200 bits) * (1 tick/128 µs) = 6.5104166667 ticks/bit
-  // #define BITS_PER_TICK_Q10 157
-  //     // 1/(6.5104166667 ticks/bit) * 2^10 = 157.2864
-  // #define RX_WINDOW_FUDGE 5
-
-#endif
-
-
-// ATtiny boards (ie, adafruit trinket)
-//
-#elif defined(__AVR_ATtiny25__) | defined(__AVR_ATtiny45__) | defined(__AVR_ATtiny85__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "TCNT1"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX TCNT1  // Using Timer 1
-
-#if F_CPU == 16000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 8000000L
-#define PRESCALE_IN_USE_STR "512"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 8MHz / 512 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 5
-
-#endif
-
-
-// Arduino Leonardo & Yun and other 32U4 boards
-//
-#elif defined(ARDUINO_AVR_YUN) || defined(ARDUINO_AVR_LEONARDO) || \
-  defined(__AVR_ATmega32U4__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "TCNT4"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX TCNT4  // Using Timer 4
-
-#if F_CPU == 16000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-#elif F_CPU == 8000000L
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "512"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit
- * at the SDI-12 baud rate of 1200 bits/second.
- *
- * 8MHz / 512 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 5
-
-#endif
-
-
-// Arduino Zero other SAMD21 boards
-//
-#elif defined(ARDUINO_SAMD_ZERO) || defined(ARDUINO_ARCH_SAMD) || \
-  defined(__SAMD21G18A__) || defined(__SAMD21J18A__) || defined(__SAMD21E18A__)
-
-/**
- * @brief A string description of the timer to use
- */
-#define TIMER_IN_USE_STR "GCLK4-TC3"
-/**
- * @brief The c macro name for the assembly timer to use
- */
-#define TCNTX REG_TC3_COUNT8_COUNT  // Using Timer 3 with generic clock 4
-
-/**
- * @brief A string description of the prescaler in use.
- */
-#define PRESCALE_IN_USE_STR "3x1024"
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit at
- * the SDI-12 baud rate of 1200 bits/second.
- *
- * 48MHz / 3 pre-prescaler = 16MHz
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-// Espressif ESP32/ESP8266 boards
-//
-#elif defined(ESP32) || defined(ESP8266)
-  /**
-   * @brief Read the processor micros and right shift 6 bits (ie, divide by 64) to get a
-   * 64µs tick.
-   *
-   * @note  The ESP32 and ESP8266 are fast enough processors that they can take the time
-   * to read the core 'micros()' function still complete the other processing needed on
-   * the serial bits.  All of the other processors using the Arduino core also have the
-   * micros function, but the rest are not fast enough to waste the processor cycles to
-   * use the micros function and must use the faster assembly macros to read the
-   * processor timer directly.
-   *
-   * @return **sdi12timer_t** The current processor micros
-   */
-  sdi12timer_t SDI12TimerRead(void);
-
-/**
- * @brief The number of "ticks" of the timer that occur within the timing of one bit
- * at the SDI-12 baud rate of 1200 bits/second.
- *
- * 48MHz / 3 pre-prescaler = 16MHz
- * 16MHz / 1024 prescaler = 15624 'ticks'/sec = 64 µs / 'tick'
- * (1 sec/1200 bits) * (1 tick/64 µs) = 13.0208 ticks/bit
- */
-#define TICKS_PER_BIT 13
-/**
- * @brief The number of "ticks" of the timer per SDI-12 bit, shifted by 2^10.
- *
- * 1/(13.0208 ticks/bit) * 2^10 = 78.6432
- */
-#define BITS_PER_TICK_Q10 79
-/**
- * @brief A "fudge factor" to get the Rx to work well.   It mostly works to ensure that
- * uneven tick increments get rounded up.
- *
- * @see https://github.com/SlashDevin/NeoSWSerial/pull/13
- */
-#define RX_WINDOW_FUDGE 2
-
-// Unknown board
-#else
-#error "Please define your board timer and pins"
-#endif
-};
-
-#endif  // SRC_SDI12_BOARDS_H_
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/src.dox b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/src.dox
deleted file mode 100644
index f4bbd274b985aff670c3f818951ce5f73ba6a2df..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src/src.dox
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * @dir src
- *
- * @brief Contains the source code for the SDI-12 library.
- */
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestCommands/TestCommands.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestCommands/TestCommands.ino
deleted file mode 100644
index 3a83f557387b4ae9a2e6405d52c420b49570d738..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestCommands/TestCommands.ino
+++ /dev/null
@@ -1,659 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Kevin M.Smith <SDI12@ethosengineering.org>
- * @date August 2013
- *
- * @brief Example D: Check all Addresses for Active Sensors and Log Data
- *
- * This is a simple demonstration of the SDI-12 library for Arduino.
- *
- * It discovers the address of all sensors active on a single bus and takes measurements
- * from them.
- *
- * Every SDI-12 device is different in the time it takes to take a
- * measurement, and the amount of data it returns. This sketch will not serve every
- * sensor type, but it will likely be helpful in getting you started.
- *
- * Each sensor should have a unique address already - if not, multiple sensors may
- * respond simultaenously to the same request and the output will not be readable by the
- * Arduino.
- *
- * To address a sensor, please see Example B: b_address_change.ino
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-#define FIRST_ADDRESS 0
-#define LAST_ADDRESS 6  // 62
-#define WAKE_DELAY 0    /*!< The extra time needed for the board to wake. */
-#define COMMANDS_TO_TEST \
-  2 /*!< The number of measurement commands to test, between 1 and 11. */
-
-/** Define the SDI-12 bus */
-SDI12 mySDI12(DATA_PIN);
-
-/// variable that alternates output type back and forth between parsed and raw
-boolean flip = 0;
-
-String commands[] = {"","0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
-
-// keeps track of active addresses
-bool isActive[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the wait time for each active addresses
-uint8_t waitTime[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the time each sensor was started
-uint32_t millisStarted[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the time each sensor will be ready
-uint32_t millisReady[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-// keeps track of the number of results expected
-uint8_t returnedResults[LAST_ADDRESS - FIRST_ADDRESS] = {
-  0,
-};
-
-
-String prev_result[LAST_ADDRESS - FIRST_ADDRESS] = {
-  "",
-};
-String this_result[LAST_ADDRESS - FIRST_ADDRESS] = {
-  "",
-};
-uint8_t numSensors = 0;
-
-
-/**
- * @brief converts allowable address characters ('0'-'9', 'a'-'z', 'A'-'Z') to a
- * decimal number between 0 and 61 (inclusive) to cover the 62 possible
- * addresses.
- */
-byte charToDec(char i) {
-  if ((i >= '0') && (i <= '9')) return i - '0';
-  if ((i >= 'a') && (i <= 'z')) return i - 'a' + 10;
-  if ((i >= 'A') && (i <= 'Z'))
-    return i - 'A' + 36;
-  else
-    return i;
-}
-
-/**
- * @brief maps a decimal number between 0 and 61 (inclusive) to allowable
- * address characters '0'-'9', 'a'-'z', 'A'-'Z',
- *
- * THIS METHOD IS UNUSED IN THIS EXAMPLE, BUT IT MAY BE HELPFUL.
- */
-char decToChar(byte i) {
-  if (i < 10) return i + '0';
-  if ((i >= 10) && (i < 36)) return i + 'a' - 10;
-  if ((i >= 36) && (i <= 62))
-    return i + 'A' - 36;
-  else
-    return i;
-}
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-void printInfo(char i, bool printCommands = true) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command, WAKE_DELAY);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-
-  Serial.print("Address: ");
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", SDI-12 Version: ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", Vendor ID: ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", Sensor Model: ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", Sensor Version: ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", Sensor ID: ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.println();
-}
-
-bool getResults(char i, int resultsExpected, bool printCommands = true) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  // while (resultsReceived < resultsExpected && cmd_number <= 9) {
-  while (resultsReceived < resultsExpected && cmd_number <= 1) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    if (printCommands) {
-      Serial.print("<<<");
-      Serial.write(mySDI12.read());  // ignore the repeated SDI12 address
-    } else {
-      mySDI12.read();
-    }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c >= 0 && c != '\r' && c != '\n') {
-        Serial.write(mySDI12.read());
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (printCommands) {
-      Serial.print("Total Results Received: ");
-      Serial.print(resultsReceived);
-      Serial.print(", Remaining: ");
-      Serial.println(resultsExpected - resultsReceived);
-    }
-    if (!resultsReceived) { break; }  // don't do another loop if we got nothing
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-String getStringResults(char i, int resultsExpected, bool printCommands = true) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  String  str_result      = "";
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    // while (resultsReceived < resultsExpected && cmd_number <= 1) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "D";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 150) {}
-    if (printCommands) {
-      Serial.print("<<<");
-      Serial.write(mySDI12.read());  // ignore the repeated SDI12 address
-    } else {
-      mySDI12.read();
-    }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        str_result += String(result, 8);
-        if (printCommands) { Serial.print(String(result, 8)); }
-        if (result != -9999) { resultsReceived++; }
-      } else if (c >= 0 && c != '\r' && c != '\n') {
-        str_result += String(c);
-        if (printCommands) {
-          Serial.write(mySDI12.read());
-        } else {
-          mySDI12.read();
-        }
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (printCommands) {
-      Serial.print("\nTotal Results Received: ");
-      Serial.print(resultsReceived);
-      Serial.print(", Remaining: ");
-      Serial.println(resultsExpected - resultsReceived);
-    }
-    if (!resultsReceived) { break; }  // don't do another loop if we got nothing
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return str_result;
-}
-
-bool getContinuousResults(char i, int resultsExpected, bool printCommands = true) {
-  uint8_t resultsReceived = 0;
-  uint8_t cmd_number      = 0;
-  while (resultsReceived < resultsExpected && cmd_number <= 9) {
-    String command = "";
-    // in this example we will only take the 'DO' measurement
-    command = "";
-    command += i;
-    command += "R";
-    command += cmd_number;
-    command += "!";  // SDI-12 command to get data [address][D][dataOption][!]
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-
-    uint32_t start = millis();
-    while (mySDI12.available() < 3 && (millis() - start) < 1500) {}
-    if (printCommands) {
-      Serial.print("<<<");
-      Serial.write(mySDI12.read());  // ignore the repeated SDI12 address
-    }
-
-    while (mySDI12.available()) {
-      char c = mySDI12.peek();
-      if (c == '-' || (c >= '0' && c <= '9') || c == '.') {
-        float result = mySDI12.parseFloat(SKIP_NONE);
-        Serial.print(String(result, 10));
-        if (result != -9999) { resultsReceived++; }
-      } else if (c >= 0 && c != '\r' && c != '\n') {
-        Serial.write(mySDI12.read());
-      } else {
-        mySDI12.read();
-      }
-      delay(10);  // 1 character ~ 7.5ms
-    }
-    if (printCommands) {
-      Serial.print("Total Results Received: ");
-      Serial.print(resultsReceived);
-      Serial.print(", Remaining: ");
-      Serial.println(resultsExpected - resultsReceived);
-    }
-    if (!resultsReceived) { break; }  // don't do another loop if we got nothing
-    cmd_number++;
-  }
-  mySDI12.clearBuffer();
-
-  return resultsReceived == resultsExpected;
-}
-
-int startConcurrentMeasurement(char i, String meas_type = "",
-                               bool printCommands = true) {
-  String command = "";
-  command += i;
-  command += "C";
-  command += meas_type;
-  command += "!";  // SDI-12 concurrent measurement command format  [address]['C'][!]
-  mySDI12.sendCommand(command, WAKE_DELAY);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-  mySDI12.clearBuffer();
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  if (printCommands) {
-    Serial.print("wait: ");
-    Serial.print(wait);
-    Serial.print(", ");
-  }
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  if (printCommands) {
-    Serial.print("Number Results: ");
-    Serial.println(numResults);
-  }
-
-  uint8_t sensorNum   = charToDec(i);  // e.g. convert '0' to 0, 'a' to 10, 'Z' to 61.
-  waitTime[sensorNum] = wait;
-  millisStarted[sensorNum] = millis();
-  if (wait == 0) {
-    millisReady[sensorNum] = millis();
-  } else {
-    millisReady[sensorNum] = millis() + (wait + 1 * 1000);
-  }
-  returnedResults[sensorNum] = numResults;
-
-  return numResults;
-}
-
-String takeMeasurement(char i, String meas_type = "", bool printCommands = true) {
-  String command = "";
-  command += i;
-  command += "M";
-  command += meas_type;
-  command += "!";  // SDI-12 measurement command format  [address]['M'][!]
-  mySDI12.sendCommand(command, WAKE_DELAY);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  // wait for acknowlegement with format [address][ttt (3 char, seconds)][number of
-  // measurments available, 0-9]
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-
-  // find out how long we have to wait (in seconds).
-  uint8_t wait = sdiResponse.substring(1, 4).toInt();
-  if (printCommands) {
-    Serial.print("Wait: ");
-    Serial.print(wait);
-    Serial.print(", ");
-  }
-
-  // Set up the number of results to expect
-  int numResults = sdiResponse.substring(4).toInt();
-  if (printCommands) {
-    Serial.print("Number Results: ");
-    Serial.println(numResults);
-  }
-  // if (numResults==0){return false;}
-  if (numResults == 0) { return ""; }
-
-  unsigned long timerStart = millis();
-  while ((millis() - timerStart) < ((uint16_t)1000 * (wait + 1))) {
-    if (mySDI12.available())  // sensor can interrupt us to let us know it is done early
-    {
-      unsigned long measTime = millis() - timerStart;
-      if (printCommands) {
-        Serial.print("<<<");
-        Serial.println(mySDI12.readStringUntil('\n'));
-        // mySDI12.clearBuffer();
-      }
-      Serial.print("Completed after ");
-      Serial.print(measTime);
-      Serial.println(" ms");
-      break;
-    }
-  }
-  // Wait for anything else and clear it out
-  delay(30);
-  mySDI12.clearBuffer();
-
-  // return getResults(i, numResults,printCommands);
-  String res = getStringResults(i, numResults, printCommands);
-  Serial.print("Result: ");
-  Serial.println(res);
-  return res;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i, int8_t numPings = 3, bool printCommands = false) {
-  String command = "";
-  command += (char)i;  // sends basic 'acknowledge' command [address][!]
-  command += "!";
-
-  for (int j = 0; j < numPings; j++) {  // goes through three rapid contact attempts
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-    mySDI12.sendCommand(command, WAKE_DELAY);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      if (printCommands) {
-        Serial.print("<<<");
-        while (mySDI12.available()) {
-          Serial.write(mySDI12.read());
-          delay(10);
-        }
-      } else {
-        mySDI12.clearBuffer();
-      }
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering down sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, LOW);
-    delay(2500L);
-  }
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(10000L);
-    // delay(125);
-  }
-
-  // Quickly Scan the Address Space
-  Serial.println("Scanning all addresses, please wait...");
-
-  for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-    char addr = decToChar(i);
-    Serial.print("i: ");
-    Serial.print(i);
-    Serial.print(", addr: ");
-    Serial.print(addr);
-    Serial.print(", rev: ");
-    Serial.print(charToDec(addr));
-    if (checkActive(addr, 5, true)) {
-      numSensors++;
-      isActive[i] = 1;
-      Serial.println(", +");
-      printInfo(addr);
-    } else {
-      Serial.println(", -");
-    }
-  }
-  Serial.print("Total number of sensors found:  ");
-  Serial.println(numSensors);
-
-  if (numSensors == 0) {
-    Serial.println(
-      "No sensors found, please check connections and restart the Arduino.");
-    while (true) { delay(10); }  // do nothing forever
-  }
-
-  Serial.println();
-  Serial.println("-------------------------------------------------------------------"
-                 "------------");
-
-  delay(1000);
-}
-
-void loop() {
-  // flip = !flip;  // flip the switch between concurrent and not
-  // flip = 1;
-  flip           = 0;
-  uint32_t start = millis();
-  Serial.print("Flip: ");
-  Serial.println(flip);
-
-  // // Power the sensors;
-  // if (POWER_PIN > 0) {
-  //   Serial.println("Powering down sensors...");
-  //   pinMode(POWER_PIN, OUTPUT);
-  //   digitalWrite(POWER_PIN, LOW);
-  //   delay(5000L);
-  // }
-
-  // // Power the sensors;
-  // if (POWER_PIN > 0) {
-  //   Serial.println("Powering up sensors...");
-  //   pinMode(POWER_PIN, OUTPUT);
-  //   digitalWrite(POWER_PIN, HIGH);
-  //   delay(125);
-  // }
-
-  if (flip) {
-    // measure one at a time
-    for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-      char addr = decToChar(i);
-      if (isActive[i]) {
-        for (uint8_t a = 0; a < COMMANDS_TO_TEST; a++) {
-          Serial.print("Command ");
-          Serial.print(i);
-          Serial.print("M");
-          Serial.print(commands[a]);
-          Serial.println('!');
-          this_result[i] = takeMeasurement(addr, commands[a], true);
-        }
-        // getContinuousResults(addr, 3);
-        Serial.println();
-      }
-    }
-    Serial.print("Total Time for Individual Measurements: ");
-    Serial.println(millis() - start);
-  } else {
-    for (uint8_t a = 0; a < COMMANDS_TO_TEST; a++) {
-      uint8_t  min_wait  = 127;
-      uint8_t  max_wait  = 0;
-      uint32_t for_start = millis();
-      // start all sensors measuring concurrently
-      for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-        char addr = decToChar(i);
-        if (isActive[i]) {
-          Serial.print("Command ");
-          Serial.print(i);
-          Serial.print("C");
-          Serial.print(commands[a]);
-          Serial.println('!');
-          startConcurrentMeasurement(addr, commands[a], true);
-        }
-        if (waitTime[i] < min_wait) { min_wait = waitTime[i]; }
-        if (waitTime[i] > max_wait) { max_wait = waitTime[i]; }
-      }
-      min_wait = max(1, (min_wait - 1) / 2);
-      max_wait = max(1, max_wait + 1);
-      // Serial.print("minimum expected wait: ");
-      // Serial.println(min_wait);
-      // Serial.print("maximum expected wait: ");
-      // Serial.println(max_wait);
-
-
-      uint8_t numReadingsRecorded = 0;
-      delay(min_wait * 1000);
-      while (millis() - for_start < max_wait * 1000 &&
-             numReadingsRecorded < numSensors) {
-        // get all readings
-        for (byte i = FIRST_ADDRESS; i < LAST_ADDRESS; i++) {
-          uint32_t timeWaited = millis() - millisStarted[i];
-          if (this_result[i] != "") { prev_result[i] = this_result[i]; }
-
-          char addr = decToChar(i);
-          if (isActive[i]) {
-            // if (millis() > millisReady[i]) {
-            // if (millis() > millisStarted[i] + a) {
-            if (returnedResults[i] > 0) {
-              this_result[i] = getStringResults(addr, returnedResults[i], true);
-              // if (this_result[i] != "") {
-              // Serial.print("timeWaited: ");
-              // Serial.print(timeWaited);
-              // Serial.print(", This result: ");
-              // Serial.println(this_result[i]);
-              // Serial.print("                 , prev result: ");
-              // Serial.println(prev_result[i]);
-              // } else {
-              //   Serial.print("timeWaited: ");
-              //   Serial.println(timeWaited);
-              // }
-              // this_result = getResults(addr, returnedResults[i]);
-              // Serial.print("Got results from ");
-              // Serial.print(numReadingsRecorded);
-              // Serial.print(" of ");
-              // Serial.print(numSensors);
-              // Serial.println(" sensors");
-            }
-            if (this_result[i] != prev_result[i] && this_result[i] != "") {
-              numReadingsRecorded++;
-              Serial.print("Time Waited: ");
-              Serial.println(timeWaited);
-              Serial.print("Result: ");
-              Serial.println(this_result[i]);
-            }
-            // } else {
-            //   Serial.print("Result from ");
-            //   Serial.print(addr);
-            //   Serial.print(" won't be ready for ");
-            //   Serial.print(millisReady[i] - millis());
-            //   Serial.println(" ms ");
-            // }
-          }
-        }
-      }
-    }
-    Serial.print("Total Time for Concurrent Measurements: ");
-    Serial.println(millis() - start);
-  }
-
-  Serial.println("-------------------------------------------------------------------"
-                 "------------");
-  // delay(1000);  // wait ten seconds between measurement attempts.
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestWarmUp/TestWarmUp.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestWarmUp/TestWarmUp.ino
deleted file mode 100644
index 072339dab637840884ec8fa729e7d7f6c9b1dc75..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/TestWarmUp/TestWarmUp.ino
+++ /dev/null
@@ -1,156 +0,0 @@
-/**
- * @file d_simple_logger.ino
- * @copyright (c) 2013-2020 Stroud Water Research Center (SWRC)
- *                          and the EnviroDIY Development Team
- *            This example is published under the BSD-3 license.
- * @author Sara Damiano <sdamiano@stroudcenter.org>
- * @date March 2021
- */
-
-#include <SDI12.h>
-
-#define SERIAL_BAUD 115200 /*!< The baud rate for the output serial port */
-#define DATA_PIN 7         /*!< The pin of the SDI-12 data bus */
-#define SENSOR_ADDRESS '0' /*!< The address of the SDI-12 sensor */
-#define POWER_PIN 22       /*!< The sensor power pin (or -1 if not switching power) */
-
-/** Define the SDI-12 bus */
-SDI12   mySDI12(DATA_PIN);
-int32_t wake_delay      = 0;  /*!< The time for the board to wake after a line break. */
-int32_t increment_wake  = 10; /*!< The time to lengthen waits between reps. */
-int32_t power_delay     = 5400;   /*!< The time for the board to wake after power on. */
-int32_t increment_power = 50;    /*!< The time to lengthen waits between reps. */
-int32_t max_power_delay = 10000L; /*!< The max time to test wake after power on. */
-
-/**
- * @brief gets identification information from a sensor, and prints it to the serial
- * port
- *
- * @param i a character between '0'-'9', 'a'-'z', or 'A'-'Z'.
- */
-bool printInfo(char i, bool printCommands = true) {
-  String command = "";
-  command += (char)i;
-  command += "I!";
-  mySDI12.sendCommand(command, wake_delay);
-  if (printCommands) {
-    Serial.print(">>>");
-    Serial.println(command);
-  }
-  delay(100);
-
-  String sdiResponse = mySDI12.readStringUntil('\n');
-  sdiResponse.trim();
-  // allccccccccmmmmmmvvvxxx...xx<CR><LF>
-  if (printCommands) {
-    Serial.print("<<<");
-    Serial.println(sdiResponse);
-  }
-
-  Serial.print("Address: ");
-  Serial.print(sdiResponse.substring(0, 1));  // address
-  Serial.print(", SDI-12 Version: ");
-  Serial.print(sdiResponse.substring(1, 3).toFloat() / 10);  // SDI-12 version number
-  Serial.print(", Vendor ID: ");
-  Serial.print(sdiResponse.substring(3, 11));  // vendor id
-  Serial.print(", Sensor Model: ");
-  Serial.print(sdiResponse.substring(11, 17));  // sensor model
-  Serial.print(", Sensor Version: ");
-  Serial.print(sdiResponse.substring(17, 20));  // sensor version
-  Serial.print(", Sensor ID: ");
-  Serial.print(sdiResponse.substring(20));  // sensor id
-  Serial.println();
-
-  if (sdiResponse.length() < 3) { return false; };
-  return true;
-}
-
-// this checks for activity at a particular address
-// expects a char, '0'-'9', 'a'-'z', or 'A'-'Z'
-boolean checkActive(char i, int8_t numPings = 3, bool printCommands = false) {
-  String command = "";
-  command += (char)i;  // sends basic 'acknowledge' command [address][!]
-  command += "!";
-
-  for (int j = 0; j < numPings; j++) {  // goes through three rapid contact attempts
-    if (printCommands) {
-      Serial.print(">>>");
-      Serial.println(command);
-    }
-    mySDI12.sendCommand(command, wake_delay);
-    delay(100);
-    if (mySDI12.available()) {  // If we here anything, assume we have an active sensor
-      if (printCommands) {
-        Serial.print("<<<");
-        while (mySDI12.available()) {
-          Serial.write(mySDI12.read());
-          delay(10);
-        }
-      } else {
-        mySDI12.clearBuffer();
-      }
-      return true;
-    }
-  }
-  mySDI12.clearBuffer();
-  return false;
-}
-
-
-void setup() {
-  Serial.begin(SERIAL_BAUD);
-  while (!Serial)
-    ;
-
-  Serial.println("Opening SDI-12 bus...");
-  mySDI12.begin();
-  delay(500);  // allow things to settle
-
-  Serial.println("Timeout value: ");
-  Serial.println(mySDI12.TIMEOUT);
-}
-
-void loop() {
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering down sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, LOW);
-    delay(2500L);
-  }
-
-  // Power the sensors;
-  if (POWER_PIN > 0) {
-    Serial.println("Powering up sensors...");
-    pinMode(POWER_PIN, OUTPUT);
-    digitalWrite(POWER_PIN, HIGH);
-    delay(power_delay);
-  }
-
-  if (checkActive(SENSOR_ADDRESS, 5, true)) {
-    Serial.print("Got response after ");
-    Serial.print(power_delay);
-    Serial.print("ms after power with ");
-    Serial.print(wake_delay);
-    Serial.println("ms with wake delay");
-    if (printInfo(SENSOR_ADDRESS, true)) {
-      // if we got sensor info, stop
-      while (1)
-        ;
-    }
-  } else {
-    Serial.print("No response after ");
-    Serial.print(power_delay);
-    Serial.print("ms after power with ");
-    Serial.print(wake_delay);
-    Serial.println("ms with wake delay");
-  }
-  Serial.println("-------------------------------------------------------------------"
-                 "------------");
-  if (power_delay > max_power_delay) {
-    power_delay = 0;
-    wake_delay  = wake_delay + increment_wake;
-  } else {
-    power_delay = power_delay + increment_power;
-  }
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/powerOn/powerOn.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/powerOn/powerOn.ino
deleted file mode 100644
index ae244aeaf400e73edb5458eb7febbb34530dcf37..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/tools/powerOn/powerOn.ino
+++ /dev/null
@@ -1,14 +0,0 @@
-#include <Arduino.h>
-
-int8_t powerPin = 22;
-
-void setup() {
-    pinMode(powerPin, OUTPUT);
-    digitalWrite(powerPin, HIGH);
-    pinMode(A5, OUTPUT);
-    digitalWrite(A5, HIGH);
-    pinMode(10, OUTPUT);
-    digitalWrite(10, HIGH);
-}
-
-void loop() {}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.gitattributes b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.gitattributes
deleted file mode 100644
index dfe0770424b2a19faf507a501ebfc23be8f54e7b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.gitattributes	
+++ /dev/null
@@ -1,2 +0,0 @@
-# Auto detect text files and perform LF normalization
-* text=auto
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.piopm b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.piopm
deleted file mode 100644
index a99115c881ba3f7a8ad56e7171c0b70c9ce49adf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/.piopm	
+++ /dev/null
@@ -1 +0,0 @@
-{"type": "library", "name": "SparkFun SCD30 Arduino Library", "version": "1.0.18", "spec": {"owner": "sparkfun", "id": 5449, "name": "SparkFun SCD30 Arduino Library", "requirements": null, "uri": null}}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/LICENSE.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/LICENSE.md
deleted file mode 100644
index 37238686da3d06815b45154961d5744d28516153..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/LICENSE.md	
+++ /dev/null
@@ -1,55 +0,0 @@
-SparkFun License Information
-============================
-
-SparkFun uses two different licenses for our files — one for hardware and one for code.
-
-Hardware
----------
-
-**SparkFun hardware is released under [Creative Commons Share-alike 4.0 International](http://creativecommons.org/licenses/by-sa/4.0/).**
-
-Note: This is a human-readable summary of (and not a substitute for) the [license](http://creativecommons.org/licenses/by-sa/4.0/legalcode).
-
-You are free to:
-
-Share — copy and redistribute the material in any medium or format
-Adapt — remix, transform, and build upon the material
-for any purpose, even commercially.
-The licensor cannot revoke these freedoms as long as you follow the license terms.
-Under the following terms:
-
-Attribution — You must give appropriate credit, provide a link to the license, and indicate if changes were made. You may do so in any reasonable manner, but not in any way that suggests the licensor endorses you or your use.
-ShareAlike — If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original.
-No additional restrictions — You may not apply legal terms or technological measures that legally restrict others from doing anything the license permits.
-Notices:
-
-You do not have to comply with the license for elements of the material in the public domain or where your use is permitted by an applicable exception or limitation.
-No warranties are given. The license may not give you all of the permissions necessary for your intended use. For example, other rights such as publicity, privacy, or moral rights may limit how you use the material.
-
-
-Code
---------
-
-**SparkFun code, firmware, and software is released under the MIT License(http://opensource.org/licenses/MIT).**
-
-The MIT License (MIT)
-
-Copyright (c) 2020 SparkFun Electronics
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/README.md b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/README.md
deleted file mode 100644
index 9be1a0eae22818145a733f66955603ef007c49a9..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/README.md	
+++ /dev/null
@@ -1,51 +0,0 @@
-SparkFun SCD30 COâ‚‚ Sensor Library
-===========================================================
-
-![SparkFun SCD30 COâ‚‚ Sensor](https://cdn.sparkfun.com//assets/parts/1/2/9/8/4/SparkFun_Sensirion_SCD30.jpg)
-
-[*SparkX COâ‚‚ Humidity and Temperature Sensor - SCD30 (SPX-14751)*](https://www.sparkfun.com/products/14751)
-
-The SCD30 from Sensirion is a high quality [NDIR](https://en.wikipedia.org/wiki/Nondispersive_infrared_sensor) based CO₂ sensor capable of detecting 400 to 10000ppm with an accuracy of ±(30ppm+3%). In order to improve accuracy the SCD30 has temperature and humidity sensing built-in, as well as commands to compensate for altitude.
-
-We've written an Arduino library to make reading the COâ‚‚, humidity, and temperature very easy. It can be downloaded through the Arduino Library manager: search for 'SparkFun SCD30'. We recommend using a [Qwiic Breadboard Cable](https://www.sparkfun.com/products/14425) to connect the SCD30 to a Qwiic compatible board. The Ye*LL*ow wire goes in the SC*L* pin. The SCD30 also supports a serial interface but we haven't worked with it.
-
-The COâ‚‚ sensor works very well and for additional accuracy the SCD30 accepts ambient pressure readings. We recommend using the SCD30 in conjunction with the [Qwiic Pressure Sensor - MS5637](https://www.sparkfun.com/products/14688) or the [Qwiic Environmental Sensor - BME680](https://www.sparkfun.com/products/14570) to obtain the current barometric pressure.
-
-Note: The SCD30 has an automatic self-calibration routine. Sensirion recommends 7 days of continuous readings with at least 1 hour a day of 'fresh air' for self-calibration to complete.
-
-Library written by Nathan Seidle ([SparkFun](http://www.sparkfun.com)).
-
-Thanks to!
-
-* [jobr97](https://github.com/jobr97) for adding the getTemperatureOffset() method
-* [bobobo1618](https://github.com/bobobo1618) for writing a CRC check and improving the return values of the library
-* [labeneator](https://github.com/labeneator) for adding method to disable calibrate at begin
-* [AndreasExner](https://github.com/AndreasExner) for adding [reset and getAutoSelfCalibration methods](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/17)
-* [awatterott](https://github.com/awatterott) for adding [getAltitudeCompensation()](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/18)
-* [jogi-k](https://github.com/jogi-k) for adding [teensy i2clib](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/19) support
-* [paulvha](https://github.com/paulvha) for the suggestions and corrections in [his version of the library](https://github.com/paulvha/scd30)
-* [yamamaya](https://github.com/yamamaya) for the [3ms delay](https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/pull/24)
-
-Repository Contents
--------------------
-
-* **/examples** - Example sketches for the library (.ino). Run these from the Arduino IDE.
-* **/src** - Source files for the library (.cpp, .h).
-* **keywords.txt** - Keywords from this library that will be highlighted in the Arduino IDE.
-* **library.properties** - General library properties for the Arduino package manager.
-
-Documentation
---------------
-
-* **[Installing an Arduino Library Guide](https://learn.sparkfun.com/tutorials/installing-an-arduino-library)** - Basic information on how to install an Arduino library.
-
-License Information
--------------------
-
-This product is _**open source**_!
-
-Please use, reuse, and modify these files as you see fit. Please maintain attribution to SparkFun Electronics and release anything derivative under the same license.
-
-Distributed as-is; no warranty is given.
-
-- Your friends at SparkFun.
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example1_BasicReadings/Example1_BasicReadings.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example1_BasicReadings/Example1_BasicReadings.ino
deleted file mode 100644
index 7493565b66fd9a25bf44e2208d656f22661cf1d1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example1_BasicReadings/Example1_BasicReadings.ino	
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example prints the current CO2 level, relative humidity, and temperature in C.
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-  Serial.begin(115200);
-  Serial.println("SCD30 Example");
-  Wire.begin();
-
-  if (airSensor.begin() == false)
-  {
-    Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-    while (1)
-      ;
-  }
-
-  //The SCD30 has data ready every two seconds
-}
-
-void loop()
-{
-  if (airSensor.dataAvailable())
-  {
-    Serial.print("co2(ppm):");
-    Serial.print(airSensor.getCO2());
-
-    Serial.print(" temp(C):");
-    Serial.print(airSensor.getTemperature(), 1);
-
-    Serial.print(" humidity(%):");
-    Serial.print(airSensor.getHumidity(), 1);
-
-    Serial.println();
-  }
-  else
-    Serial.println("Waiting for new data");
-
-  delay(500);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example2_SetOptions/Example2_SetOptions.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example2_SetOptions/Example2_SetOptions.ino
deleted file mode 100644
index 7e7f9036c8a3b2a7ddf34421fcaeffc59228e1c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example2_SetOptions/Example2_SetOptions.ino	
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example prints the current CO2 level, relative humidity, and temperature in C.
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-
-  Note: All settings (interval, altitude, etc) are saved to non-volatile memory and are
-  loaded by the SCD30 at power on. There's no damage in sending that at each power on.
-
-  Note: 100kHz I2C is fine, but according to the datasheet 400kHz I2C is not supported by the SCD30
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-  Serial.begin(115200);
-  Serial.println("SCD30 Example");
-  Wire.begin();
-
-  if (airSensor.begin() == false)
-  {
-    Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-    while (1)
-      ;
-  }
-
-  airSensor.setMeasurementInterval(16); //Change number of seconds between measurements: 2 to 1800 (30 minutes), stored in non-volatile memory of SCD30
-
-  //While the setting is recorded, it is not immediately available to be read.
-  delay(200);
-
-  int interval = airSensor.getMeasurementInterval();
-  Serial.print("Measurement Interval: ");
-  Serial.println(interval);
-
-  //My desk is ~1600m above sealevel
-  airSensor.setAltitudeCompensation(1600); //Set altitude of the sensor in m, stored in non-volatile memory of SCD30
-
-  //Read altitude compensation value
-  unsigned int altitude = airSensor.getAltitudeCompensation();
-  Serial.print("Current altitude: ");
-  Serial.print(altitude);
-  Serial.println("m");
-
-  //Pressure in Boulder, CO is 24.65inHg or 834.74mBar
-  airSensor.setAmbientPressure(835); //Current ambient pressure in mBar: 700 to 1200, will overwrite altitude compensation
-
-  airSensor.setTemperatureOffset(5); //Optionally we can set temperature offset to 5°C, stored in non-volatile memory of SCD30
-
-  //Read temperature offset
-  float offset = airSensor.getTemperatureOffset();
-  Serial.print("Current temp offset: ");
-  Serial.print(offset, 2);
-  Serial.println("C");
-}
-
-void loop()
-{
-  if (airSensor.dataAvailable())
-  {
-    Serial.print("co2(ppm):");
-    Serial.print(airSensor.getCO2());
-
-    Serial.print(" temp(C):");
-    Serial.print(airSensor.getTemperature(), 1);
-
-    Serial.print(" humidity(%):");
-    Serial.print(airSensor.getHumidity(), 1);
-
-    Serial.println();
-  }
-  else
-    Serial.print(".");
-
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example3_WireOptions/Example3_WireOptions.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example3_WireOptions/Example3_WireOptions.ino
deleted file mode 100644
index 3acdb3f60420a28e366269a4493f14a8ab637039..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example3_WireOptions/Example3_WireOptions.ino	
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example prints the current CO2 level, relative humidity, and temperature in C.
-
-  Hardware Connections:
-  This example requires a platform that has multiple I2C ports.
-  It will not compile on an Uno. Try an Artemis RedBoard or ATP.
-
-  Note: 100kHz I2C is fine, but according to the datasheet 400kHz I2C is not supported by the SCD30
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-  Serial.begin(115200);
-  Serial.println("SCD30 Example");
-
-  Wire1.begin(); //Start the wire hardware that may be supported by your platform
-
-  if (airSensor.begin(Wire1) == false) //Pass the Wire port to the .begin() function
-  {
-    Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-    while (1)
-      ;
-  }
-
-  //The library will now use Wire1 for all communication
-}
-
-void loop()
-{
-  if (airSensor.dataAvailable())
-  {
-    Serial.print("co2(ppm):");
-    Serial.print(airSensor.getCO2());
-
-    Serial.print(" temp(C):");
-    Serial.print(airSensor.getTemperature(), 1);
-
-    Serial.print(" humidity(%):");
-    Serial.print(airSensor.getHumidity(), 1);
-
-    Serial.println();
-  }
-  else
-    Serial.print(".");
-
-  delay(1000);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example4_EnableCalibrate/Example4_EnableCalibrate.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example4_EnableCalibrate/Example4_EnableCalibrate.ino
deleted file mode 100644
index 50ca661d90a1c0ec74673d06c24c0dc453c4a833..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example4_EnableCalibrate/Example4_EnableCalibrate.ino	
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example turns on the auto-calibrate function during .begin()
-  Please see section 1.3.6 of the SCD30 datasheet:
-
-  "When activated for the first time a
-    period of minimum 7 days is needed so that the algorithm can find its initial parameter set for ASC. The sensor has to be exposed
-    to fresh air for at least 1 hour every day. Also during that period, the sensor may not be disconnected from the power supply,
-    otherwise the procedure to find calibration parameters is aborted and has to be restarted from the beginning. The successfully
-    calculated parameters are stored in non-volatile memory of the SCD30 having the effect that after a restart the previously found
-    parameters for ASC are still present. "
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-    Serial.begin(115200);
-    Serial.println("SCD30 Example");
-    Wire.begin();
-
-    //Start sensor using the Wire port and enable the auto-calibration (ASC)
-    if (airSensor.begin(Wire, true) == false)
-    {
-        Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-        while (1)
-            ;
-    }
-
-    Serial.print("Auto calibration set to ");
-    if (airSensor.getAutoSelfCalibration() == true)
-        Serial.println("true");
-    else
-        Serial.println("false");
-
-    //The SCD30 has data ready every two seconds
-}
-
-void loop()
-{
-    if (airSensor.dataAvailable())
-    {
-        Serial.print("co2(ppm):");
-        Serial.print(airSensor.getCO2());
-
-        Serial.print(" temp(C):");
-        Serial.print(airSensor.getTemperature(), 1);
-
-        Serial.print(" humidity(%):");
-        Serial.print(airSensor.getHumidity(), 1);
-
-        Serial.println();
-    }
-    else
-        Serial.println("Waiting for new data");
-
-    delay(500);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example5_GetSettings/Example5_GetSettings.ino b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example5_GetSettings/Example5_GetSettings.ino
deleted file mode 100644
index bdfcf77057a5f15ac4774503e833c4f10fd006b2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/examples/Example5_GetSettings/Example5_GetSettings.ino	
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-  Reading CO2, humidity and temperature from the SCD30
-  By: Nathan Seidle
-  SparkFun Electronics
-  Date: May 22nd, 2018
-  License: MIT. See license file for more information but you can
-  basically do whatever you want with this code.
-
-  Feel like supporting open source hardware?
-  Buy a board from SparkFun! https://www.sparkfun.com/products/15112
-
-  This example gets the SCD30's settings using the new getSettingValue function (thank you paulvha)
-
-  Hardware Connections:
-  Attach RedBoard to computer using a USB cable.
-  Connect SCD30 to RedBoard using Qwiic cable.
-  Open Serial Monitor at 115200 baud.
-*/
-
-#include <Wire.h>
-
-#include "SparkFun_SCD30_Arduino_Library.h" //Click here to get the library: http://librarymanager/All#SparkFun_SCD30
-SCD30 airSensor;
-
-void setup()
-{
-    Serial.begin(115200);
-    Serial.println("SCD30 Example");
-    Wire.begin();
-
-    //Start sensor using the Wire port, but disable the auto-calibration
-    if (airSensor.begin(Wire, false) == false)
-    {
-        Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-        while (1)
-            ;
-    }
-
-    uint16_t settingVal; // The settings will be returned in settingVal
-    
-    if (airSensor.getForcedRecalibration(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Forced recalibration factor (ppm) is ");
-      Serial.println(settingVal);
-    }
-    else
-    {
-      Serial.print("getForcedRecalibration failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getMeasurementInterval(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Measurement interval (s) is ");
-      Serial.println(settingVal);
-    }
-    else
-    {
-      Serial.print("getMeasurementInterval failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getTemperatureOffset(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Temperature offset (C) is ");
-      Serial.println(((float)settingVal) / 100.0, 2);
-    }
-    else
-    {
-      Serial.print("getTemperatureOffset failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getAltitudeCompensation(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Altitude offset (m) is ");
-      Serial.println(settingVal);
-    }
-    else
-    {
-      Serial.print("getAltitudeCompensation failed! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    if (airSensor.getFirmwareVersion(&settingVal) == true) // Get the setting
-    {
-      Serial.print("Firmware version is 0x");
-      Serial.println(settingVal, HEX);
-    }
-    else
-    {
-      Serial.print("getFirmwareVersion! Freezing...");
-      while (1)
-        ; // Do nothing more
-    }
-
-    Serial.print("Auto calibration set to ");
-    if (airSensor.getAutoSelfCalibration() == true)
-        Serial.println("true");
-    else
-        Serial.println("false");
-
-    //The SCD30 has data ready every two seconds
-}
-
-void loop()
-{
-    if (airSensor.dataAvailable())
-    {
-        Serial.print("co2(ppm):");
-        Serial.print(airSensor.getCO2());
-
-        Serial.print(" temp(C):");
-        Serial.print(airSensor.getTemperature(), 1);
-
-        Serial.print(" humidity(%):");
-        Serial.print(airSensor.getHumidity(), 1);
-
-        Serial.println();
-    }
-    else
-        Serial.println("Waiting for new data");
-
-    delay(500);
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/keywords.txt b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/keywords.txt
deleted file mode 100644
index e1a66d76d114097d56bcaa2596420b5e835c272b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/keywords.txt	
+++ /dev/null
@@ -1,67 +0,0 @@
-#######################################
-# Syntax Coloring Map
-#######################################
-
-#######################################
-# Datatypes (KEYWORD1)
-#######################################
-
-SCD30	KEYWORD1
-
-#######################################
-# Methods and Functions (KEYWORD2)
-#######################################
-
-SCD30	KEYWORD2
-begin	KEYWORD2
-isConnected	KEYWORD2
-enableDebugging	KEYWORD2
-beginMeasuring	KEYWORD2
-StopMeasurement	KEYWORD2
-
-setAmbientPressure	KEYWORD2
-
-getSettingValue	KEYWORD2
-getFirmwareVersion	KEYWORD2
-getCO2	KEYWORD2
-getHumidity	KEYWORD2
-getTemperature	KEYWORD2
-
-getMeasurementInterval	KEYWORD2
-setMeasurementInterval	KEYWORD2
-
-getAltitudeCompensation	KEYWORD2
-setAltitudeCompensation	KEYWORD2
-
-getAutoSelfCalibration	KEYWORD2
-setAutoSelfCalibration	KEYWORD2
-
-getForcedRecalibration	KEYWORD2
-setForcedRecalibrationFactor	KEYWORD2
-
-getTemperatureOffset	KEYWORD2
-setTemperatureOffset	KEYWORD2
-
-dataAvailable	KEYWORD2
-readMeasurement	KEYWORD2
-reset	KEYWORD2
-sendCommand	KEYWORD2
-readRegister	KEYWORD2
-computeCRC8	KEYWORD2
-
-#######################################
-# Constants (LITERAL1)
-#######################################
-
-SCD30_ADDRESS	LITERAL1
-COMMAND_CONTINUOUS_MEASUREMENT	LITERAL1
-COMMAND_SET_MEASUREMENT_INTERVAL	LITERAL1
-COMMAND_GET_DATA_READY	LITERAL1
-COMMAND_READ_MEASUREMENT	LITERAL1
-COMMAND_AUTOMATIC_SELF_CALIBRATION	LITERAL1
-COMMAND_SET_FORCED_RECALIBRATION_FACTOR	LITERAL1
-COMMAND_SET_TEMPERATURE_OFFSET	LITERAL1
-COMMAND_SET_ALTITUDE_COMPENSATION	LITERAL1
-COMMAND_RESET	LITERAL1
-COMMAND_STOP_MEAS	LITERAL1
-COMMAND_READ_FW_VER	LITERAL1
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/library.properties b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/library.properties
deleted file mode 100644
index 439df0d90d5b49d79b2b684401099cfe2cb4908a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/library.properties	
+++ /dev/null
@@ -1,9 +0,0 @@
-name=SparkFun SCD30 Arduino Library
-version=1.0.18
-author=SparkFun Electronics
-maintainer=SparkFun Electronics <sparkfun.com>
-sentence=Library for the Sensirion SCD30 CO2 Sensor
-paragraph=An Arduino library for the SCD30 CO2 sensor from Sensirion. The SCD30 is a high quality <a href="https://en.wikipedia.org/wiki/Nondispersive_infrared_sensor">NDIR</a> based CO₂ sensor capable of detecting 400 to 10000ppm with an accuracy of ±(30ppm+3%). In order to improve accuracy the SCD30 has temperature and humidity sensing built-in, as well as commands to set the current altitude.<br><br>Get the SCD30 <a href="https://www.sparkfun.com/products/14751">here</a>.
-category=Sensors
-url=https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library
-architectures=*
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.cpp b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.cpp
deleted file mode 100644
index 3082507c7e217792d31a8e19a9e0ce6aeb700db1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.cpp	
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
-  This is a library written for the SCD30
-  SparkFun sells these at its website: www.sparkfun.com
-  Do you like this library? Help support SparkFun. Buy a board!
-  https://www.sparkfun.com/products/14751
-
-  Written by Nathan Seidle @ SparkFun Electronics, May 22nd, 2018
-
-  Updated February 1st 2021 to include some of the features of paulvha's version of the library
-  (while maintaining backward-compatibility):
-  https://github.com/paulvha/scd30
-  Thank you Paul!
-
-  The SCD30 measures CO2 with accuracy of +/- 30ppm.
-
-  This library handles the initialization of the SCD30 and outputs
-  CO2 levels, relative humidty, and temperature.
-
-  https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library
-
-  Development environment specifics:
-  Arduino IDE 1.8.13
-
-  SparkFun code, firmware, and software is released under the MIT License.
-  Please see LICENSE.md for more details.
-*/
-
-#include "SparkFun_SCD30_Arduino_Library.h"
-
-SCD30::SCD30(void)
-{
-  // Constructor
-}
-
-// Initialize the Serial port
-#ifdef USE_TEENSY3_I2C_LIB
-bool SCD30::begin(i2c_t3 &wirePort, bool autoCalibrate, bool measBegin)
-#else
-bool SCD30::begin(TwoWire &wirePort, bool autoCalibrate, bool measBegin)
-#endif
-{
-  _i2cPort = &wirePort; // Grab which port the user wants us to use
-
-  /* Especially during obtaining the ACK BIT after a byte sent the SCD30 is using clock stretching  (but NOT only there)!
-   * The need for clock stretching is described in the Sensirion_CO2_Sensors_SCD30_Interface_Description.pdf
-   *
-   * The default clock stretch (maximum wait time) on the ESP8266-library (2.4.2) is 230us which is set during _i2cPort->begin();
-   * In the current implementation of the ESP8266 I2C driver there is NO error message when this time expired, while
-   * the clock stretch is still happening, causing uncontrolled behaviour of the hardware combination.
-   *
-   * To set ClockStretchlimit() a check for ESP8266 boards has been added in the driver.
-   *
-   * With setting to 20000, we set a max timeout of 20mS (> 20x the maximum measured) basically disabling the time-out
-   * and now wait for clock stretch to be controlled by the client.
-   */
-
-#if defined(ARDUINO_ARCH_ESP8266)
-  _i2cPort->setClockStretchLimit(200000);
-#endif
-
-  if (isConnected() == false)
-    return (false);
-
-  if (measBegin == false) // Exit now if measBegin is false
-    return (true);
-
-  // Check for device to respond correctly
-  if (beginMeasuring() == true) // Start continuous measurements
-  {
-    setMeasurementInterval(2);             // 2 seconds between measurements
-    setAutoSelfCalibration(autoCalibrate); // Enable auto-self-calibration
-
-    return (true);
-  }
-
-  return (false); // Something went wrong
-}
-
-// Returns true if device responds to a firmware request
-bool SCD30::isConnected()
-{
-  uint16_t fwVer;
-  if (getFirmwareVersion(&fwVer) == false) // Read the firmware version. Return false if the CRC check fails.
-    return (false);
-
-  if (_printDebug == true)
-  {
-    _debugPort->print(F("Firmware version 0x"));
-    _debugPort->println(fwVer, HEX);
-  }
-
-  return (true);
-}
-
-// Calling this function with nothing sets the debug port to Serial
-// You can also call it with other streams like Serial1, SerialUSB, etc.
-void SCD30::enableDebugging(Stream &debugPort)
-{
-  _debugPort = &debugPort;
-  _printDebug = true;
-}
-
-// Returns the latest available CO2 level
-// If the current level has already been reported, trigger a new read
-uint16_t SCD30::getCO2(void)
-{
-  if (co2HasBeenReported == true) // Trigger a new read
-  {
-    if (readMeasurement() == false) // Pull in new co2, humidity, and temp into global vars
-      co2 = 0;                      // Failed to read sensor
-  }
-
-  co2HasBeenReported = true;
-
-  return (uint16_t)co2; // Cut off decimal as co2 is 0 to 10,000
-}
-
-// Returns the latest available humidity
-// If the current level has already been reported, trigger a new read
-float SCD30::getHumidity(void)
-{
-  if (humidityHasBeenReported == true) // Trigger a new read
-    if (readMeasurement() == false)    // Pull in new co2, humidity, and temp into global vars
-      humidity = 0;                    // Failed to read sensor
-
-  humidityHasBeenReported = true;
-
-  return humidity;
-}
-
-// Returns the latest available temperature
-// If the current level has already been reported, trigger a new read
-float SCD30::getTemperature(void)
-{
-  if (temperatureHasBeenReported == true) // Trigger a new read
-    if (readMeasurement() == false)       // Pull in new co2, humidity, and temp into global vars
-      temperature = 0;                    // Failed to read sensor
-
-  temperatureHasBeenReported = true;
-
-  return temperature;
-}
-
-// Enables or disables the ASC
-bool SCD30::setAutoSelfCalibration(bool enable)
-{
-  if (enable)
-    return sendCommand(COMMAND_AUTOMATIC_SELF_CALIBRATION, 1); // Activate continuous ASC
-  else
-    return sendCommand(COMMAND_AUTOMATIC_SELF_CALIBRATION, 0); // Deactivate continuous ASC
-}
-
-// Set the forced recalibration factor. See 1.3.7.
-// The reference CO2 concentration has to be within the range 400 ppm ≤ cref(CO2) ≤ 2000 ppm.
-bool SCD30::setForcedRecalibrationFactor(uint16_t concentration)
-{
-  if (concentration < 400 || concentration > 2000)
-  {
-    return false; // Error check.
-  }
-  return sendCommand(COMMAND_SET_FORCED_RECALIBRATION_FACTOR, concentration);
-}
-
-// Get the temperature offset. See 1.3.8.
-float SCD30::getTemperatureOffset(void)
-{
-  uint16_t response = readRegister(COMMAND_SET_TEMPERATURE_OFFSET);
-
-  union
-  {
-    int16_t signed16;
-    uint16_t unsigned16;
-  } signedUnsigned; // Avoid any ambiguity casting int16_t to uint16_t
-  signedUnsigned.signed16 = response;
-
-  return (((float)signedUnsigned.signed16) / 100.0);
-}
-
-// Set the temperature offset to remove module heating from temp reading
-bool SCD30::setTemperatureOffset(float tempOffset)
-{
-  // Temp offset is only positive. See: https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library/issues/27#issuecomment-971986826
-  //"The SCD30 offset temperature is obtained by subtracting the reference temperature from the SCD30 output temperature"
-  // https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/9.5_CO2/Sensirion_CO2_Sensors_SCD30_Low_Power_Mode.pdf
-
-  if (tempOffset < 0.0)
-    return (false);
-
-  uint16_t value = tempOffset * 100;
-
-  return sendCommand(COMMAND_SET_TEMPERATURE_OFFSET, value);
-}
-
-// Get the altitude compenstation. See 1.3.9.
-uint16_t SCD30::getAltitudeCompensation(void)
-{
-  return readRegister(COMMAND_SET_ALTITUDE_COMPENSATION);
-}
-
-// Set the altitude compenstation. See 1.3.9.
-bool SCD30::setAltitudeCompensation(uint16_t altitude)
-{
-  return sendCommand(COMMAND_SET_ALTITUDE_COMPENSATION, altitude);
-}
-
-// Set the pressure compenstation. This is passed during measurement startup.
-// mbar can be 700 to 1200
-bool SCD30::setAmbientPressure(uint16_t pressure_mbar)
-{
-  if (pressure_mbar < 700 || pressure_mbar > 1200)
-  {
-    return false;
-  }
-  return sendCommand(COMMAND_CONTINUOUS_MEASUREMENT, pressure_mbar);
-}
-
-// SCD30 soft reset
-void SCD30::reset()
-{
-  sendCommand(COMMAND_RESET);
-}
-
-// Get the current ASC setting
-bool SCD30::getAutoSelfCalibration()
-{
-  uint16_t response = readRegister(COMMAND_AUTOMATIC_SELF_CALIBRATION);
-  if (response == 1)
-  {
-    return true;
-  }
-  else
-  {
-    return false;
-  }
-}
-
-// Begins continuous measurements
-// Continuous measurement status is saved in non-volatile memory. When the sensor
-// is powered down while continuous measurement mode is active SCD30 will measure
-// continuously after repowering without sending the measurement command.
-// Returns true if successful
-bool SCD30::beginMeasuring(uint16_t pressureOffset)
-{
-  return (sendCommand(COMMAND_CONTINUOUS_MEASUREMENT, pressureOffset));
-}
-
-// Overload - no pressureOffset
-bool SCD30::beginMeasuring(void)
-{
-  return (beginMeasuring(0));
-}
-
-// Stop continuous measurement
-bool SCD30::StopMeasurement(void)
-{
-  return (sendCommand(COMMAND_STOP_MEAS));
-}
-
-// Sets interval between measurements
-// 2 seconds to 1800 seconds (30 minutes)
-bool SCD30::setMeasurementInterval(uint16_t interval)
-{
-  return sendCommand(COMMAND_SET_MEASUREMENT_INTERVAL, interval);
-}
-
-// Gets interval between measurements
-// 2 seconds to 1800 seconds (30 minutes)
-uint16_t SCD30::getMeasurementInterval(void)
-{
-  uint16_t interval = 0;
-  getSettingValue(COMMAND_SET_MEASUREMENT_INTERVAL, &interval);
-  return (interval);
-}
-
-// Returns true when data is available
-bool SCD30::dataAvailable()
-{
-  uint16_t response = readRegister(COMMAND_GET_DATA_READY);
-
-  if (response == 1)
-    return (true);
-  return (false);
-}
-
-// Get 18 bytes from SCD30
-// Updates global variables with floats
-// Returns true if success
-bool SCD30::readMeasurement()
-{
-  // Verify we have data from the sensor
-  if (dataAvailable() == false)
-    return (false);
-
-  ByteToFl tempCO2;
-  tempCO2.value = 0;
-  ByteToFl tempHumidity;
-  tempHumidity.value = 0;
-  ByteToFl tempTemperature;
-  tempTemperature.value = 0;
-
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(COMMAND_READ_MEASUREMENT >> 8);   // MSB
-  _i2cPort->write(COMMAND_READ_MEASUREMENT & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (0); // Sensor did not ACK
-
-  delay(3);
-
-  const uint8_t receivedBytes = _i2cPort->requestFrom((uint8_t)SCD30_ADDRESS, (uint8_t)18);
-  bool error = false;
-  if (_i2cPort->available())
-  {
-    uint8_t bytesToCrc[2];
-    for (uint8_t x = 0; x < 18; x++)
-    {
-      uint8_t incoming = _i2cPort->read();
-
-      switch (x)
-      {
-      case 0:
-      case 1:
-      case 3:
-      case 4:
-        tempCO2.array[x < 3 ? 3 - x : 4 - x] = incoming;
-        bytesToCrc[x % 3] = incoming;
-        break;
-      case 6:
-      case 7:
-      case 9:
-      case 10:
-        tempTemperature.array[x < 9 ? 9 - x : 10 - x] = incoming;
-        bytesToCrc[x % 3] = incoming;
-        break;
-      case 12:
-      case 13:
-      case 15:
-      case 16:
-        tempHumidity.array[x < 15 ? 15 - x : 16 - x] = incoming;
-        bytesToCrc[x % 3] = incoming;
-        break;
-      default:
-        // Validate CRC
-        uint8_t foundCrc = computeCRC8(bytesToCrc, 2);
-        if (foundCrc != incoming)
-        {
-          if (_printDebug == true)
-          {
-            _debugPort->print(F("readMeasurement: found CRC in byte "));
-            _debugPort->print(x);
-            _debugPort->print(F(", expected 0x"));
-            _debugPort->print(foundCrc, HEX);
-            _debugPort->print(F(", got 0x"));
-            _debugPort->println(incoming, HEX);
-          }
-          error = true;
-        }
-        break;
-      }
-    }
-  }
-  else
-  {
-    if (_printDebug == true)
-    {
-      _debugPort->print(F("readMeasurement: no SCD30 data found from I2C, i2c claims we should receive "));
-      _debugPort->print(receivedBytes);
-      _debugPort->println(F(" bytes"));
-    }
-    return false;
-  }
-
-  if (error)
-  {
-    if (_printDebug == true)
-      _debugPort->println(F("readMeasurement: encountered error reading SCD30 data."));
-    return false;
-  }
-  // Now copy the uint32s into their associated floats
-  co2 = tempCO2.value;
-  temperature = tempTemperature.value;
-  humidity = tempHumidity.value;
-
-  // Mark our global variables as fresh
-  co2HasBeenReported = false;
-  humidityHasBeenReported = false;
-  temperatureHasBeenReported = false;
-
-  return (true); // Success! New data available in globals.
-}
-
-// Gets a setting by reading the appropriate register.
-// Returns true if the CRC is valid.
-bool SCD30::getSettingValue(uint16_t registerAddress, uint16_t *val)
-{
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(registerAddress >> 8);   // MSB
-  _i2cPort->write(registerAddress & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (false); // Sensor did not ACK
-
-  delay(3);
-
-  _i2cPort->requestFrom((uint8_t)SCD30_ADDRESS, (uint8_t)3); // Request data and CRC
-  if (_i2cPort->available())
-  {
-    uint8_t data[2];
-    data[0] = _i2cPort->read();
-    data[1] = _i2cPort->read();
-    uint8_t crc = _i2cPort->read();
-    *val = (uint16_t)data[0] << 8 | data[1];
-    uint8_t expectedCRC = computeCRC8(data, 2);
-    if (crc == expectedCRC) // Return true if CRC check is OK
-      return (true);
-    if (_printDebug == true)
-    {
-      _debugPort->print(F("getSettingValue: CRC fail: expected 0x"));
-      _debugPort->print(expectedCRC, HEX);
-      _debugPort->print(F(", got 0x"));
-      _debugPort->println(crc, HEX);
-    }
-  }
-  return (false);
-}
-
-// Gets two bytes from SCD30
-uint16_t SCD30::readRegister(uint16_t registerAddress)
-{
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(registerAddress >> 8);   // MSB
-  _i2cPort->write(registerAddress & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (0); // Sensor did not ACK
-
-  delay(3);
-
-  _i2cPort->requestFrom((uint8_t)SCD30_ADDRESS, (uint8_t)2);
-  if (_i2cPort->available())
-  {
-    uint8_t msb = _i2cPort->read();
-    uint8_t lsb = _i2cPort->read();
-    return ((uint16_t)msb << 8 | lsb);
-  }
-  return (0); // Sensor did not respond
-}
-
-// Sends a command along with arguments and CRC
-bool SCD30::sendCommand(uint16_t command, uint16_t arguments)
-{
-  uint8_t data[2];
-  data[0] = arguments >> 8;
-  data[1] = arguments & 0xFF;
-  uint8_t crc = computeCRC8(data, 2); // Calc CRC on the arguments only, not the command
-
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(command >> 8);     // MSB
-  _i2cPort->write(command & 0xFF);   // LSB
-  _i2cPort->write(arguments >> 8);   // MSB
-  _i2cPort->write(arguments & 0xFF); // LSB
-  _i2cPort->write(crc);
-  if (_i2cPort->endTransmission() != 0)
-    return (false); // Sensor did not ACK
-
-  return (true);
-}
-
-// Sends just a command, no arguments, no CRC
-bool SCD30::sendCommand(uint16_t command)
-{
-  _i2cPort->beginTransmission(SCD30_ADDRESS);
-  _i2cPort->write(command >> 8);   // MSB
-  _i2cPort->write(command & 0xFF); // LSB
-  if (_i2cPort->endTransmission() != 0)
-    return (false); // Sensor did not ACK
-
-  return (true);
-}
-
-// Given an array and a number of bytes, this calculate CRC8 for those bytes
-// CRC is only calc'd on the data portion (two bytes) of the four bytes being sent
-// From: http://www.sunshine2k.de/articles/coding/crc/understanding_crc.html
-// Tested with: http://www.sunshine2k.de/coding/javascript/crc/crc_js.html
-// x^8+x^5+x^4+1 = 0x31
-uint8_t SCD30::computeCRC8(uint8_t data[], uint8_t len)
-{
-  uint8_t crc = 0xFF; // Init with 0xFF
-
-  for (uint8_t x = 0; x < len; x++)
-  {
-    crc ^= data[x]; // XOR-in the next input byte
-
-    for (uint8_t i = 0; i < 8; i++)
-    {
-      if ((crc & 0x80) != 0)
-        crc = (uint8_t)((crc << 1) ^ 0x31);
-      else
-        crc <<= 1;
-    }
-  }
-
-  return crc; // No output reflection
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.h b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.h
deleted file mode 100644
index 20d651194ffffc58b2d2ceb3656ae3aa26e36f94..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src/SparkFun_SCD30_Arduino_Library.h	
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-  This is a library written for the SCD30
-  SparkFun sells these at its website: www.sparkfun.com
-  Do you like this library? Help support SparkFun. Buy a board!
-  https://www.sparkfun.com/products/14751
-
-  Written by Nathan Seidle @ SparkFun Electronics, May 22nd, 2018
-
-	Updated February 1st 2021 to include some of the features of paulvha's version of the library
-	(while maintaining backward-compatibility):
-	https://github.com/paulvha/scd30
-	Thank you Paul!
-
-  The SCD30 measures CO2 with accuracy of +/- 30ppm.
-
-  This library handles the initialization of the SCD30 and outputs
-  CO2 levels, relative humidty, and temperature.
-
-  https://github.com/sparkfun/SparkFun_SCD30_Arduino_Library
-
-  Development environment specifics:
-  Arduino IDE 1.8.13
-
-	SparkFun code, firmware, and software is released under the MIT License.
-  Please see LICENSE.md for more details.
-*/
-
-#ifndef __SparkFun_SCD30_ARDUINO_LIBARARY_H__
-#define __SparkFun_SCD30_ARDUINO_LIBARARY_H__
-
-// Uncomment the next #define if using an Teensy >= 3 or Teensy LC and want to use the dedicated I2C-Library for it
-// Then you also have to include <i2c_t3.h> on your application instead of <Wire.h>
-
-// #define USE_TEENSY3_I2C_LIB
-
-#include "Arduino.h"
-#ifdef USE_TEENSY3_I2C_LIB
-#include <i2c_t3.h>
-#else
-#include <Wire.h>
-#endif
-
-// The default I2C address for the SCD30 is 0x61.
-#define SCD30_ADDRESS 0x61
-
-// Available commands
-
-#define COMMAND_CONTINUOUS_MEASUREMENT 0x0010
-#define COMMAND_SET_MEASUREMENT_INTERVAL 0x4600
-#define COMMAND_GET_DATA_READY 0x0202
-#define COMMAND_READ_MEASUREMENT 0x0300
-#define COMMAND_AUTOMATIC_SELF_CALIBRATION 0x5306
-#define COMMAND_SET_FORCED_RECALIBRATION_FACTOR 0x5204
-#define COMMAND_SET_TEMPERATURE_OFFSET 0x5403
-#define COMMAND_SET_ALTITUDE_COMPENSATION 0x5102
-#define COMMAND_RESET 0xD304 // Soft reset
-#define COMMAND_STOP_MEAS 0x0104
-#define COMMAND_READ_FW_VER 0xD100
-
-typedef union
-{
-	uint8_t array[4];
-	float value;
-} ByteToFl; // paulvha
-
-class SCD30
-{
-public:
-	SCD30(void);
-
-	bool begin(bool autoCalibrate) { return begin(Wire, autoCalibrate); }
-#ifdef USE_TEENSY3_I2C_LIB
-	bool begin(i2c_t3 &wirePort = Wire, bool autoCalibrate = false, bool measBegin = true); // By default use Wire port
-#else
-	bool begin(TwoWire &wirePort = Wire, bool autoCalibrate = false, bool measBegin = true); // By default use Wire port
-#endif
-
-	bool isConnected();
-	void enableDebugging(Stream &debugPort = Serial); // Turn on debug printing. If user doesn't specify then Serial will be used.
-
-	bool beginMeasuring(uint16_t pressureOffset);
-	bool beginMeasuring(void);
-	bool StopMeasurement(void); // paulvha
-
-	bool setAmbientPressure(uint16_t pressure_mbar);
-
-	bool getSettingValue(uint16_t registerAddress, uint16_t *val);
-	bool getFirmwareVersion(uint16_t *val) { return (getSettingValue(COMMAND_READ_FW_VER, val)); }
-	uint16_t getCO2(void);
-	float getHumidity(void);
-	float getTemperature(void);
-
-	uint16_t getMeasurementInterval(void);
-	bool getMeasurementInterval(uint16_t *val) { return (getSettingValue(COMMAND_SET_MEASUREMENT_INTERVAL, val)); }
-	bool setMeasurementInterval(uint16_t interval);
-
-	uint16_t getAltitudeCompensation(void);
-	bool getAltitudeCompensation(uint16_t *val) { return (getSettingValue(COMMAND_SET_ALTITUDE_COMPENSATION, val)); }
-	bool setAltitudeCompensation(uint16_t altitude);
-
-	bool getAutoSelfCalibration(void);
-	bool setAutoSelfCalibration(bool enable);
-
-	bool getForcedRecalibration(uint16_t *val) { return (getSettingValue(COMMAND_SET_FORCED_RECALIBRATION_FACTOR, val)); }
-	bool setForcedRecalibrationFactor(uint16_t concentration);
-
-	float getTemperatureOffset(void);
-	bool getTemperatureOffset(uint16_t *val) { return (getSettingValue(COMMAND_SET_TEMPERATURE_OFFSET, val)); }
-	bool setTemperatureOffset(float tempOffset);
-
-	bool dataAvailable();
-	bool readMeasurement();
-
-	void reset();
-
-	bool sendCommand(uint16_t command, uint16_t arguments);
-	bool sendCommand(uint16_t command);
-
-	uint16_t readRegister(uint16_t registerAddress);
-
-	uint8_t computeCRC8(uint8_t data[], uint8_t len);
-
-private:
-	// Variables
-#ifdef USE_TEENSY3_I2C_LIB
-	i2c_t3 *_i2cPort; // The generic connection to user's chosen I2C hardware
-#else
-	TwoWire *_i2cPort;																		 // The generic connection to user's chosen I2C hardware
-#endif
-	// Global main datums
-	float co2 = 0;
-	float temperature = 0;
-	float humidity = 0;
-
-	// These track the staleness of the current data
-	// This allows us to avoid calling readMeasurement() every time individual datums are requested
-	bool co2HasBeenReported = true;
-	bool humidityHasBeenReported = true;
-	bool temperatureHasBeenReported = true;
-
-	// Debug
-	Stream *_debugPort;			 // The stream to send debug messages to if enabled. Usually Serial.
-	boolean _printDebug = false; // Flag to print debugging variables
-};
-#endif
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/integrity.dat b/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/integrity.dat
deleted file mode 100644
index df731e1aed5abc3ffdd8374460aa8a8e912bc78e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/integrity.dat
+++ /dev/null
@@ -1,5 +0,0 @@
-fbiego/ESP32Time@^1.1.0
-sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-wollewald/INA219_WE@^1.3.1
-Wire
-envirodiy/SDI-12@^2.1.4
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.vscode/c_cpp_properties.json b/code-snippets/client/sensor_station_analog_espnow/client/.vscode/c_cpp_properties.json
deleted file mode 100644
index 2bcdb7a656548cf5b427a538319d8a0b36359f66..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.vscode/c_cpp_properties.json
+++ /dev/null
@@ -1,475 +0,0 @@
-//
-// !!! WARNING !!! AUTO-GENERATED FILE!
-// PLEASE DO NOT MODIFY IT AND USE "platformio.ini":
-// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-//
-{
-    "configurations": [
-        {
-            "name": "PlatformIO",
-            "includePath": [
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/include",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src",
-                "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/button/button/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qspi_qspi/include",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/cores/esp32",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/variants/esp32c3",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
-                "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
-                ""
-            ],
-            "browse": {
-                "limitSymbolsToIncludedHeaders": true,
-                "path": [
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/include",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SDI-12/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/INA219_WE/src",
-                    "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/libdeps/esp32-c3-devkitm-1/SparkFun SCD30 Arduino Library/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/button/button/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qspi_qspi/include",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/cores/esp32",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/variants/esp32c3",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
-                    "/home/hassan/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
-                    ""
-                ]
-            },
-            "defines": [
-                "PLATFORMIO=60104",
-                "ARDUINO_ESP32C3_DEV",
-                "HAVE_CONFIG_H",
-                "MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
-                "UNITY_INCLUDE_CONFIG_H",
-                "WITH_POSIX",
-                "_GNU_SOURCE",
-                "IDF_VER=\"v4.4.1-1-gb8050b365e\"",
-                "ESP_PLATFORM",
-                "_POSIX_READER_WRITER_LOCKS",
-                "ARDUINO_ARCH_ESP32",
-                "ESP32",
-                "F_CPU=160000000L",
-                "ARDUINO=10812",
-                "ARDUINO_VARIANT=\"esp32c3\"",
-                "ARDUINO_BOARD=\"Espressif ESP32-C3-DevKitM-1\"",
-                "ARDUINO_PARTITION_default",
-                ""
-            ],
-            "cStandard": "c99",
-            "cppStandard": "c++11",
-            "compilerPath": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-gcc",
-            "compilerArgs": [
-                "-march=rv32imc",
-                ""
-            ]
-        }
-    ],
-    "version": 4
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/.vscode/launch.json b/code-snippets/client/sensor_station_analog_espnow/client/.vscode/launch.json
deleted file mode 100644
index 3e5077d2d02fbbea1ca24faa1bc431813719d961..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/.vscode/launch.json
+++ /dev/null
@@ -1,44 +0,0 @@
-// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
-//
-// PIO Unified Debugger
-//
-// Documentation: https://docs.platformio.org/page/plus/debugging.html
-// Configuration: https://docs.platformio.org/page/projectconf/section_env_debug.html
-
-{
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug",
-            "executable": "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart",
-            "preLaunchTask": {
-                "type": "PlatformIO",
-                "task": "Pre-Debug"
-            }
-        },
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug (skip Pre-Debug)",
-            "executable": "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart"
-        },
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug (without uploading)",
-            "executable": "/home/hassan/Documents/TEAM/sensor-system/code-snippets/client/sensor_station_analog_espnow/client/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/hassan/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart",
-            "loadMode": "manual"
-        }
-    ]
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/README b/code-snippets/client/sensor_station_analog_espnow/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src/ram_caching.cpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src/ram_caching.cpp
deleted file mode 100644
index 7b3e4372177608b2392c703dbd352e6a7b47cabb..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src/ram_caching.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <Arduino.h>
-#include "espnow.hpp"
-
-RTC_DATA_ATTR int cachedAmount = -1;
-RTC_DATA_ATTR data_struct backup[10];
-
-data_struct ram_cache_pop(){
-    return backup[cachedAmount--];
-}
-
-void ram_cache_push(data_struct data){
-    backup[++cachedAmount] = data;
-}
-
-bool ram_cache_is_empty(){
-    return cachedAmount == -1;
-}
-
-bool ram_cache_is_full(){
-    return cachedAmount == 9;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src/ram_caching.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src/ram_caching.hpp
deleted file mode 100644
index 979e8496faf9599c0621300b8714fd359321f05b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/caching/src/ram_caching.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _RAM_CACHE
-#define _RAM_CACHE
-#include "espnow.hpp"
-
-bool ram_cache_is_empty();
-bool ram_cache_is_full();
-void ram_cache_push(data_struct data);
-data_struct ram_cache_pop();
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/drs26.cpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 33388611f909857082e2e7d82f0164a7b786c514..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <drs26.hpp>
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck 
-*/
-
-void Forte_DRS26 ::setup()
-{
-    drs26.begin(SDI_DATA);
-}
-
-out_data_drs26 *Forte_DRS26 ::read_data()
-{
-    String sdiResponse = "";
-    String measurement_command="1M!"; //The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is specified as 1M!=Sebsir measurement request at adress 1
-    String data_command="1D0!";       //and the followed data command 1D0! = Sensor data request at adress 1 
-
-    drs26.sendCommand(measurement_command);
-    delay(1000);
-    drs26.sendCommand(data_command);
-
-    while (drs26.available())
-    {
-        char next_character = drs26.read();
-        if ((next_character != '\n') && (next_character != '\r'))
-        {
-            sdiResponse += next_character;
-            delay(10); // 1 character ~ 7.5ms
-        }
-    }
-
- //   Serial.println(sdiResponse);
-
-    if (sdiResponse.length() > 1)
-    {
-        data.id = sdiResponse.substring(0, 7).toInt();
-        data.circumference = sdiResponse.substring(8, 14).toFloat();
-        data.temperatur = sdiResponse.substring(15,21).toFloat();
-        return &data;
-    }
-
-    return 0;
-}
-
-void Forte_DRS26 ::print(out_data_drs26* data_drs26)
-{
-Serial.println("******************************DRS26********************Tree-size**********************************");
-  if(data_drs26==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Sensor ID "); Serial.println(data_drs26->id);
-        Serial.print("Cicumfence "); Serial.println(data_drs26->circumference,4);
-        Serial.print("Temperature "); Serial.println(data_drs26->temperatur,4);
-        Serial.println();
-    }
-  delay(1000);
-
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/drs26.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index a80dd758c4307a941f7a4b23ccbb9ff29c5efcdb..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include <forte_sensor.hpp>
-#include <SDI12.h>
-#include <pinout.hpp>
-#include "Wire.h"
-
-     
-struct out_data_drs26 {
-        int id;
-        float circumference;
-        float temperatur;
-    };
-
-
-class Forte_DRS26 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_drs26* read_data();
-        void print(out_data_drs26*);
- 
-    private:
-        SDI12 drs26;
-        out_data_drs26 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/forte_sensor.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/pinout.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/pinout.hpp
deleted file mode 100644
index cf8f907ad9d9034a8179390e06db5d7aeba37815..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/drs26_digital/pinout.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for SDI12
-#define SDI_DATA 4
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/README b/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/README
deleted file mode 100644
index 55f89c0b2141283b3dd2d94c882cdaccbe2064fe..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/README
+++ /dev/null
@@ -1,11 +0,0 @@
-# basic usage
-
-To send data using espnow, create a new Message object,
-then use the add_data(value, identifier) method for every value
-to fill the message.
-when every value is added, use the send() method to send the data
-to the host (fipy). If the esp client has never recieved a config
-message from the host, it will instead broadcast the message.
-
----
-right now, it is not possible to add more than 10 values.
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src/espnow.cpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src/espnow.cpp
deleted file mode 100644
index aa3bfa8516d36071904fd825c6f1894bb3d57c0e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src/espnow.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <esp_now.h>
-#include <Preferences.h>
-#include <ESP32Time.h>
-#include "WiFi.h"
-#include "espnow.hpp"
-#include "ram_caching.hpp"
-
-uint8_t BROADCAST_MAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-esp_now_peer_info_t hostInfo;
-Preferences preferences;
-ESP32Time rtc;
-void get_host_mac(uint8_t* destination){
-    preferences.begin("config", true);
-    if(preferences.isKey("host")){
-        preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
-    }
-    else{
-        memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-        Serial.println("backup mac used");
-    }
-    preferences.end();
-}
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status){
-    // go to sleep
-}
-
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len){
-    Serial.println("message recieved");
-    config new_config;
-    memcpy(&new_config, incomingData, sizeof(new_config)); // TODO: check for valid mac
-
-    // put the host address in flash mem
-    preferences.begin("config", false);
-    if(!preferences.isKey("host")){
-        preferences.putBytes("host", new_config.host, sizeof(new_config.host));
-        Serial.println("host mac saved to flash");
-    }// host change shouldn't be an issue
-    preferences.end();
-    // sync time
-    rtc.setTime(new_config.time_millis); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
-}
-
-
-
-esp_err_t espnow_setup(){
-    esp_err_t result;
-    WiFi.mode(WIFI_STA);
-    result = esp_now_init();
-    if(result != ESP_OK){
-        //initialization failed
-        return result; // not sure about this
-    }
-    
-    get_host_mac(hostInfo.peer_addr); // check if there is a host saved in flash mem, broadcast otherwise
-
-    hostInfo.channel = 0;
-    hostInfo.encrypt = 0;
-    esp_now_add_peer(&hostInfo);
-
-    esp_now_register_recv_cb(on_data_recv);
-    esp_now_register_send_cb(on_data_sent);
-
-    return ESP_OK;
-}
-
-void Message::add_data(float value, int identifier){
-    if(data.amountData < NUM_SENSORS){
-        data.values[data.amountData] = value;
-        data.identifiers[data.amountData] = identifier;
-        data.amountData++;
-    }
-}
-
-esp_err_t Message::send(){
-    Serial.println("sending Message");
-    esp_err_t success;
-    success = esp_now_send(recipient,  (uint8_t * ) &data , sizeof(data));
-    // if(success != ESP_OK){
-    //     if(!ram_cache_is_full()){
-    //         ram_cache_push(*data);
-    //     }
-    // }
-    for(int i=0; i<data.amountData; i++){
-        Serial.print("identifier: ");
-        Serial.print(data.identifiers[i]);
-        Serial.print("  value: ");
-        Serial.println(data.values[i]);
-    }
-    Serial.println((String) "time sent: " + data.timestamp);
-    Serial.println((String) "Send status: " + success);
-    Serial.println();
-    Serial.flush();
-    Serial.println("done");
-    return success;
-}
-
-Message :: Message(){
-    // data = (data_struct*) malloc(sizeof(data_struct));
-    
-    // check for existing host mac address, use broadcast otherwise
-    get_host_mac(recipient);
-
-    data.amountData = 0;
-    data.timestamp = rtc.getMillis(); // I am assuming we are not sending data from Unix Epoch
-}
-
-Message :: Message(data_struct old_data){
-    memcpy(&data, &old_data, sizeof(data));
-    get_host_mac(recipient);
-}
-
-// Message :: ~Message(){
-//     free((void*) data);
-// }
-
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src/espnow.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src/espnow.hpp
deleted file mode 100644
index ea20ce2993ae066b24c0f4e5becf2faf95a6dda6..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/espnow/src/espnow.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef _ESPNOW
-#define _ESPNOW
-
-#define NUM_SENSORS 10
-//packing the struct without padding, makes reading it on the fipy easier
-#pragma pack(1)
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-typedef struct data_struct{
-    int identifiers[NUM_SENSORS];
-    float values[NUM_SENSORS];
-    int amountData;
-    long timestamp; //maybe make this array
-}data_struct;
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-typedef struct config{
-    uint8_t host[6];
-    long time_millis;
-}config;
-
-class Message{
-    public:
-        Message();
-        Message(data_struct old_data);
-        // ~Message();
-        void add_data(float value, int identifier);
-        esp_err_t send();
-
-    private:
-        data_struct data;
-        uint8_t recipient[6];
-
-};
-
-esp_err_t espnow_setup();
-bool is_host_defined();
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep/f_deep_sleep.cpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep/f_deep_sleep.cpp
deleted file mode 100644
index fc827756ab8792770dad6c1fdc41ccbfb3fbcd09..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep/f_deep_sleep.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "f_deep_sleep.h"
-
-void print_wakeup_reason(){
-  esp_sleep_wakeup_cause_t wakeup_reason;
-
-  wakeup_reason = esp_sleep_get_wakeup_cause();
-
-  switch(wakeup_reason)
-  {
-    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
-    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
-    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
-    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
-    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
-    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
-  }
-}
-
-
-void deep_sleep(int time_in_sec){//Increment boot number and print it every reboot
-  esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
-  esp_deep_sleep_start();
-}
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep/f_deep_sleep.h b/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep/f_deep_sleep.h
deleted file mode 100644
index 876500d27ddac67e99ff0bbc4cecf74acdbeca6a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/f_deep_sleep/f_deep_sleep.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef F_DEEP_SLEEP_H
-#define F_DEEP_SLEEP_H
-#include <Arduino.h>
-void deep_sleep(int time_to_sleep);
-void print_wakeup_reason();
-#endif
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/ina219.cpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/ina219.cpp
deleted file mode 100644
index 6ab763324e1bc1c091e540bd8d3a776f941b8813..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "ina219.hpp"
-
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data_ina219* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        
-        return &data;
-    }
-    else
-        return 0;
-}
-
-void Forte_INA219 :: print(out_data_ina219* data_ina219){
-  Serial.println("******************************INA219********************Power-Consumption**********************************");
-  if(data_ina219==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Shunt Voltage [mV]: "); Serial.println(data_ina219->shuntVoltage_mV);
-        Serial.print("Bus Voltage [V]: "); Serial.println(data_ina219->busVoltage_V);
-        Serial.print("Load Voltage [V]: "); Serial.println(data_ina219->loadVoltage_V);
-        Serial.print("Current[mA]: "); Serial.println(data_ina219->current_mA);
-        Serial.print("Bus Power [mW]: "); Serial.println(data_ina219->power_mW);
-        data_ina219->ina219_overflow== false ? Serial.println("Values OK - no overflow") : Serial.println("Overflow! Choose higher PGAIN");
-        Serial.println();
-    }
-  delay(1000);
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/ina219.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/ina219.hpp
deleted file mode 100644
index e6c600c1a4bfb51fe0e3334d2ec84bf5c1e53d7d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <INA219_WE.h>
-#include <Wire.h>
-
-//TwoWire I2Cone = TwoWire(0);
-//TwoWire I2Ctwo = TwoWire(1);
-     
-struct out_data_ina219 {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_ina219* read_data();
-        void print(out_data_ina219*);
- 
-    private:
-        INA219_WE ina219;
-        out_data_ina219 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/pinout.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 7c3d725bb7cfd202fdb1e762c0f47f539c91e2b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Protocol (for digital communication between ESP and the Sensor)
-#define I2C_SCL 7
-#define I2C_SDA 6
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/pinout.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/pinout.hpp
deleted file mode 100644
index b7ac5326271d1d1da68f3449942e87bd1c9013e0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Proctocol  (for digital communication between ESP and the Sensor)
-#define I2C_SCL 9
-#define I2C_SDA 8
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/scd30.cpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/scd30.cpp
deleted file mode 100644
index c7c2084754bfc94aef7b1ca25947ede9c4c03fc1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "scd30.hpp"
-
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-out_data_scd30* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data.C02= airSensor.getCO2();
-        data.Temperature = airSensor.getTemperature();
-        data.Humidity = airSensor.getHumidity();
-
-        return   &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/scd30.hpp b/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/scd30.hpp
deleted file mode 100644
index d630c0fa808fcdd7ad59dd13eac1e110c6346628..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_analog_espnow/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <Wire.h>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-struct out_data_scd30
-{
-    float C02;
-    float Temperature;
-    float Humidity;
-};
-
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_scd30* read_data();
-
-    private:
-        SCD30 airSensor;
-        out_data_scd30 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/.gitignore b/code-snippets/client/sensor_station_espnow/client/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/code-snippets/client/sensor_station_espnow/client/.gitkeep b/code-snippets/client/sensor_station_espnow/client/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/code-snippets/client/sensor_station_espnow/client/.vscode/extensions.json b/code-snippets/client/sensor_station_espnow/client/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/sensor_station_espnow/client/include/README b/code-snippets/client/sensor_station_espnow/client/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/sensor_station_espnow/client/include/forte_sensor.hpp b/code-snippets/client/sensor_station_espnow/client/include/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/include/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/include/pinout.hpp b/code-snippets/client/sensor_station_espnow/client/include/pinout.hpp
deleted file mode 100644
index 9a9ad92494f6fda373d184ef94f91d17934e01ba..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/include/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C
-#define I2C_SDA 18
-#define I2C_SCL 19
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/README b/code-snippets/client/sensor_station_espnow/client/lib/README
deleted file mode 100644
index 6debab1e8b4c3faa0d06f4ff44bce343ce2cdcbf..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/README
+++ /dev/null
@@ -1,46 +0,0 @@
-
-This directory is intended for project specific (private) libraries.
-PlatformIO will compile them to static libraries and link into executable file.
-
-The source code of each library should be placed in a an own separate directory
-("lib/your_library_name/[here are source files]").
-
-For example, see a structure of the following two libraries `Foo` and `Bar`:
-
-|--lib
-|  |
-|  |--Bar
-|  |  |--docs
-|  |  |--examples
-|  |  |--src
-|  |     |- Bar.c
-|  |     |- Bar.h
-|  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html
-|  |
-|  |--Foo
-|  |  |- Foo.c
-|  |  |- Foo.h
-|  |
-|  |- README --> THIS FILE
-|
-|- platformio.ini
-|--src
-   |- main.c
-
-and a contents of `src/main.c`:
-```
-#include <Foo.h>
-#include <Bar.h>
-
-int main (void)
-{
-  ...
-}
-
-```
-
-PlatformIO Library Dependency Finder will find automatically dependent
-libraries scanning project source files.
-
-More information about PlatformIO Library Dependency Finder
-- https://docs.platformio.org/page/librarymanager/ldf.html
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/caching/src/ram_caching.cpp b/code-snippets/client/sensor_station_espnow/client/lib/caching/src/ram_caching.cpp
deleted file mode 100644
index 7b3e4372177608b2392c703dbd352e6a7b47cabb..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/caching/src/ram_caching.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-#include <Arduino.h>
-#include "espnow.hpp"
-
-RTC_DATA_ATTR int cachedAmount = -1;
-RTC_DATA_ATTR data_struct backup[10];
-
-data_struct ram_cache_pop(){
-    return backup[cachedAmount--];
-}
-
-void ram_cache_push(data_struct data){
-    backup[++cachedAmount] = data;
-}
-
-bool ram_cache_is_empty(){
-    return cachedAmount == -1;
-}
-
-bool ram_cache_is_full(){
-    return cachedAmount == 9;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/caching/src/ram_caching.hpp b/code-snippets/client/sensor_station_espnow/client/lib/caching/src/ram_caching.hpp
deleted file mode 100644
index 979e8496faf9599c0621300b8714fd359321f05b..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/caching/src/ram_caching.hpp
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef _RAM_CACHE
-#define _RAM_CACHE
-#include "espnow.hpp"
-
-bool ram_cache_is_empty();
-bool ram_cache_is_full();
-void ram_cache_push(data_struct data);
-data_struct ram_cache_pop();
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/drs26.cpp b/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/drs26.cpp
deleted file mode 100644
index 33388611f909857082e2e7d82f0164a7b786c514..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/drs26.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-#include <drs26.hpp>
-/*
-It happens for some reason that the sensor cant get reached every 2 time
-Because the sensor use sdi12 protocoll we have to wait aproxemettly 1 secound between the commands
-It is not known how lond the response takes so we use a while loop which can be a risk wehre the programm can get stuck 
-*/
-
-void Forte_DRS26 ::setup()
-{
-    drs26.begin(SDI_DATA);
-}
-
-out_data_drs26 *Forte_DRS26 ::read_data()
-{
-    String sdiResponse = "";
-    String measurement_command="1M!"; //The drs26 sensor uses the sdi12 protocoll , in the sdi12 protocoll is the measurement command is specified as 1M!=Sebsir measurement request at adress 1
-    String data_command="1D0!";       //and the followed data command 1D0! = Sensor data request at adress 1 
-
-    drs26.sendCommand(measurement_command);
-    delay(1000);
-    drs26.sendCommand(data_command);
-
-    while (drs26.available())
-    {
-        char next_character = drs26.read();
-        if ((next_character != '\n') && (next_character != '\r'))
-        {
-            sdiResponse += next_character;
-            delay(10); // 1 character ~ 7.5ms
-        }
-    }
-
- //   Serial.println(sdiResponse);
-
-    if (sdiResponse.length() > 1)
-    {
-        data.id = sdiResponse.substring(0, 7).toInt();
-        data.circumference = sdiResponse.substring(8, 14).toFloat();
-        data.temperatur = sdiResponse.substring(15,21).toFloat();
-        return &data;
-    }
-
-    return 0;
-}
-
-void Forte_DRS26 ::print(out_data_drs26* data_drs26)
-{
-Serial.println("******************************DRS26********************Tree-size**********************************");
-  if(data_drs26==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Sensor ID "); Serial.println(data_drs26->id);
-        Serial.print("Cicumfence "); Serial.println(data_drs26->circumference,4);
-        Serial.print("Temperature "); Serial.println(data_drs26->temperatur,4);
-        Serial.println();
-    }
-  delay(1000);
-
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/drs26.hpp b/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/drs26.hpp
deleted file mode 100644
index a80dd758c4307a941f7a4b23ccbb9ff29c5efcdb..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/drs26.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef _DRS26
-#define _DRS26
-
-#include <forte_sensor.hpp>
-#include <SDI12.h>
-#include <pinout.hpp>
-#include "Wire.h"
-
-     
-struct out_data_drs26 {
-        int id;
-        float circumference;
-        float temperatur;
-    };
-
-
-class Forte_DRS26 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_drs26* read_data();
-        void print(out_data_drs26*);
- 
-    private:
-        SDI12 drs26;
-        out_data_drs26 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/forte_sensor.hpp b/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/pinout.hpp b/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/pinout.hpp
deleted file mode 100644
index cf8f907ad9d9034a8179390e06db5d7aeba37815..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/drs26_digital/pinout.hpp
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for SDI12
-#define SDI_DATA 4
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/espnow/README b/code-snippets/client/sensor_station_espnow/client/lib/espnow/README
deleted file mode 100644
index 55f89c0b2141283b3dd2d94c882cdaccbe2064fe..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/espnow/README
+++ /dev/null
@@ -1,11 +0,0 @@
-# basic usage
-
-To send data using espnow, create a new Message object,
-then use the add_data(value, identifier) method for every value
-to fill the message.
-when every value is added, use the send() method to send the data
-to the host (fipy). If the esp client has never recieved a config
-message from the host, it will instead broadcast the message.
-
----
-right now, it is not possible to add more than 10 values.
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/espnow/src/espnow.cpp b/code-snippets/client/sensor_station_espnow/client/lib/espnow/src/espnow.cpp
deleted file mode 100644
index aa3bfa8516d36071904fd825c6f1894bb3d57c0e..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/espnow/src/espnow.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-#include <esp_now.h>
-#include <Preferences.h>
-#include <ESP32Time.h>
-#include "WiFi.h"
-#include "espnow.hpp"
-#include "ram_caching.hpp"
-
-uint8_t BROADCAST_MAC[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-esp_now_peer_info_t hostInfo;
-Preferences preferences;
-ESP32Time rtc;
-void get_host_mac(uint8_t* destination){
-    preferences.begin("config", true);
-    if(preferences.isKey("host")){
-        preferences.getBytes("host", destination, sizeof(uint8_t) * 6);
-    }
-    else{
-        memcpy(destination, BROADCAST_MAC, sizeof(BROADCAST_MAC));
-        Serial.println("backup mac used");
-    }
-    preferences.end();
-}
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status){
-    // go to sleep
-}
-
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len){
-    Serial.println("message recieved");
-    config new_config;
-    memcpy(&new_config, incomingData, sizeof(new_config)); // TODO: check for valid mac
-
-    // put the host address in flash mem
-    preferences.begin("config", false);
-    if(!preferences.isKey("host")){
-        preferences.putBytes("host", new_config.host, sizeof(new_config.host));
-        Serial.println("host mac saved to flash");
-    }// host change shouldn't be an issue
-    preferences.end();
-    // sync time
-    rtc.setTime(new_config.time_millis); // see https://www.esp32.com/viewtopic.php?t=9965, maybe this needs an offset
-}
-
-
-
-esp_err_t espnow_setup(){
-    esp_err_t result;
-    WiFi.mode(WIFI_STA);
-    result = esp_now_init();
-    if(result != ESP_OK){
-        //initialization failed
-        return result; // not sure about this
-    }
-    
-    get_host_mac(hostInfo.peer_addr); // check if there is a host saved in flash mem, broadcast otherwise
-
-    hostInfo.channel = 0;
-    hostInfo.encrypt = 0;
-    esp_now_add_peer(&hostInfo);
-
-    esp_now_register_recv_cb(on_data_recv);
-    esp_now_register_send_cb(on_data_sent);
-
-    return ESP_OK;
-}
-
-void Message::add_data(float value, int identifier){
-    if(data.amountData < NUM_SENSORS){
-        data.values[data.amountData] = value;
-        data.identifiers[data.amountData] = identifier;
-        data.amountData++;
-    }
-}
-
-esp_err_t Message::send(){
-    Serial.println("sending Message");
-    esp_err_t success;
-    success = esp_now_send(recipient,  (uint8_t * ) &data , sizeof(data));
-    // if(success != ESP_OK){
-    //     if(!ram_cache_is_full()){
-    //         ram_cache_push(*data);
-    //     }
-    // }
-    for(int i=0; i<data.amountData; i++){
-        Serial.print("identifier: ");
-        Serial.print(data.identifiers[i]);
-        Serial.print("  value: ");
-        Serial.println(data.values[i]);
-    }
-    Serial.println((String) "time sent: " + data.timestamp);
-    Serial.println((String) "Send status: " + success);
-    Serial.println();
-    Serial.flush();
-    Serial.println("done");
-    return success;
-}
-
-Message :: Message(){
-    // data = (data_struct*) malloc(sizeof(data_struct));
-    
-    // check for existing host mac address, use broadcast otherwise
-    get_host_mac(recipient);
-
-    data.amountData = 0;
-    data.timestamp = rtc.getMillis(); // I am assuming we are not sending data from Unix Epoch
-}
-
-Message :: Message(data_struct old_data){
-    memcpy(&data, &old_data, sizeof(data));
-    get_host_mac(recipient);
-}
-
-// Message :: ~Message(){
-//     free((void*) data);
-// }
-
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/espnow/src/espnow.hpp b/code-snippets/client/sensor_station_espnow/client/lib/espnow/src/espnow.hpp
deleted file mode 100644
index ea20ce2993ae066b24c0f4e5becf2faf95a6dda6..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/espnow/src/espnow.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef _ESPNOW
-#define _ESPNOW
-
-#define NUM_SENSORS 10
-//packing the struct without padding, makes reading it on the fipy easier
-#pragma pack(1)
-
-// having the data be a struct of basic types makes sending easier,
-// otherwise we would have to serialize the data before sending
-typedef struct data_struct{
-    int identifiers[NUM_SENSORS];
-    float values[NUM_SENSORS];
-    int amountData;
-    long timestamp; //maybe make this array
-}data_struct;
-
-// Format of the message sent from host to client
-// if more things are sent from the host the name might not be accurate anymore
-typedef struct config{
-    uint8_t host[6];
-    long time_millis;
-}config;
-
-class Message{
-    public:
-        Message();
-        Message(data_struct old_data);
-        // ~Message();
-        void add_data(float value, int identifier);
-        esp_err_t send();
-
-    private:
-        data_struct data;
-        uint8_t recipient[6];
-
-};
-
-esp_err_t espnow_setup();
-bool is_host_defined();
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/f_deep_sleep/f_deep_sleep.cpp b/code-snippets/client/sensor_station_espnow/client/lib/f_deep_sleep/f_deep_sleep.cpp
deleted file mode 100644
index fc827756ab8792770dad6c1fdc41ccbfb3fbcd09..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/f_deep_sleep/f_deep_sleep.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "f_deep_sleep.h"
-
-void print_wakeup_reason(){
-  esp_sleep_wakeup_cause_t wakeup_reason;
-
-  wakeup_reason = esp_sleep_get_wakeup_cause();
-
-  switch(wakeup_reason)
-  {
-    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
-    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
-    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
-    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
-    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
-    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
-  }
-}
-
-
-void deep_sleep(int time_in_sec){//Increment boot number and print it every reboot
-  esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
-  esp_deep_sleep_start();
-}
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/f_deep_sleep/f_deep_sleep.h b/code-snippets/client/sensor_station_espnow/client/lib/f_deep_sleep/f_deep_sleep.h
deleted file mode 100644
index 876500d27ddac67e99ff0bbc4cecf74acdbeca6a..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/f_deep_sleep/f_deep_sleep.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef F_DEEP_SLEEP_H
-#define F_DEEP_SLEEP_H
-#include <Arduino.h>
-void deep_sleep(int time_to_sleep);
-void print_wakeup_reason();
-#endif
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/ina219/forte_sensor.hpp b/code-snippets/client/sensor_station_espnow/client/lib/ina219/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/ina219/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/ina219/ina219.cpp b/code-snippets/client/sensor_station_espnow/client/lib/ina219/ina219.cpp
deleted file mode 100644
index 6ab763324e1bc1c091e540bd8d3a776f941b8813..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/ina219/ina219.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-#include "ina219.hpp"
-
-
-void Forte_INA219 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-     if(!ina219.init()){
-        // Sensor init went wrong
-        return;
-    } 
-}
-
-out_data_ina219* Forte_INA219  :: read_data(){
-    if(!ina219.getOverflow())
-    {
-        data.shuntVoltage_mV = ina219.getShuntVoltage_mV();
-        data.busVoltage_V= ina219.getBusVoltage_V();
-        data.current_mA= ina219.getCurrent_mA();
-        data.power_mW= ina219.getBusPower();
-        data.loadVoltage_V = data.busVoltage_V + (data.shuntVoltage_mV/1000);
-        data.ina219_overflow=ina219.getOverflow();
-        
-        return &data;
-    }
-    else
-        return 0;
-}
-
-void Forte_INA219 :: print(out_data_ina219* data_ina219){
-  Serial.println("******************************INA219********************Power-Consumption**********************************");
-  if(data_ina219==0)
-  {
-  Serial.println("Waiting for data!");
-  Serial.println();
-  }
-  else{
-        Serial.print("Shunt Voltage [mV]: "); Serial.println(data_ina219->shuntVoltage_mV);
-        Serial.print("Bus Voltage [V]: "); Serial.println(data_ina219->busVoltage_V);
-        Serial.print("Load Voltage [V]: "); Serial.println(data_ina219->loadVoltage_V);
-        Serial.print("Current[mA]: "); Serial.println(data_ina219->current_mA);
-        Serial.print("Bus Power [mW]: "); Serial.println(data_ina219->power_mW);
-        data_ina219->ina219_overflow== false ? Serial.println("Values OK - no overflow") : Serial.println("Overflow! Choose higher PGAIN");
-        Serial.println();
-    }
-  delay(1000);
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/ina219/ina219.hpp b/code-snippets/client/sensor_station_espnow/client/lib/ina219/ina219.hpp
deleted file mode 100644
index e6c600c1a4bfb51fe0e3334d2ec84bf5c1e53d7d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/ina219/ina219.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef _INA219
-#define _INA219
-
-#include <forte_sensor.hpp>
-#include <pinout.hpp>
-#include <INA219_WE.h>
-#include <Wire.h>
-
-//TwoWire I2Cone = TwoWire(0);
-//TwoWire I2Ctwo = TwoWire(1);
-     
-struct out_data_ina219 {
-        float shuntVoltage_mV = 0.0;
-        float loadVoltage_V = 0.0;
-        float busVoltage_V = 0.0;
-        float current_mA = 0.0;
-        float power_mW = 0.0; 
-        bool ina219_overflow = false;  
-    };
-
-
-class Forte_INA219 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_ina219* read_data();
-        void print(out_data_ina219*);
- 
-    private:
-        INA219_WE ina219;
-        out_data_ina219 data; 
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/ina219/pinout.hpp b/code-snippets/client/sensor_station_espnow/client/lib/ina219/pinout.hpp
deleted file mode 100644
index 7c3d725bb7cfd202fdb1e762c0f47f539c91e2b1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/ina219/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Protocol (for digital communication between ESP and the Sensor)
-#define I2C_SCL 7
-#define I2C_SDA 6
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/scd30/forte_sensor.hpp b/code-snippets/client/sensor_station_espnow/client/lib/scd30/forte_sensor.hpp
deleted file mode 100644
index 8e030b9403653c40c5eecfca88edab96e805631d..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/scd30/forte_sensor.hpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef _FORTE_SENSOR
-#define _FORTE_SENSOR
-
-class Forte_Sensor {
-    public:
-        virtual void* read_data() = 0;
-        virtual void setup() = 0;
-
-    private:
-
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/scd30/pinout.hpp b/code-snippets/client/sensor_station_espnow/client/lib/scd30/pinout.hpp
deleted file mode 100644
index b7ac5326271d1d1da68f3449942e87bd1c9013e0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/scd30/pinout.hpp
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef _FORTE_PINOUT
-#define _FORTE_PINOUT
-
-// Pins for I2C Proctocol  (for digital communication between ESP and the Sensor)
-#define I2C_SCL 9
-#define I2C_SDA 8
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/scd30/scd30.cpp b/code-snippets/client/sensor_station_espnow/client/lib/scd30/scd30.cpp
deleted file mode 100644
index c7c2084754bfc94aef7b1ca25947ede9c4c03fc1..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/scd30/scd30.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "scd30.hpp"
-
-
-void Forte_SCD30 :: setup(){
-    Wire.begin(I2C_SDA, I2C_SCL);
-    if(!airSensor.begin()){
-        // Sensor init went wrong
-        return;
-    }
-}
-
-out_data_scd30* Forte_SCD30 :: read_data(){
-    if(airSensor.dataAvailable())
-    {
-        data.C02= airSensor.getCO2();
-        data.Temperature = airSensor.getTemperature();
-        data.Humidity = airSensor.getHumidity();
-
-        return   &data;
-    }
-    else
-        return 0;
-}
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/lib/scd30/scd30.hpp b/code-snippets/client/sensor_station_espnow/client/lib/scd30/scd30.hpp
deleted file mode 100644
index d630c0fa808fcdd7ad59dd13eac1e110c6346628..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/lib/scd30/scd30.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef _SCD30
-#define _SCD30
-
-#include <forte_sensor.hpp>
-#include <Wire.h>
-#include <pinout.hpp>
-#include <SparkFun_SCD30_Arduino_Library.h>
-
-struct out_data_scd30
-{
-    float C02;
-    float Temperature;
-    float Humidity;
-};
-
-
-class Forte_SCD30 : public Forte_Sensor{
-    public:
-        void setup();
-        out_data_scd30* read_data();
-
-    private:
-        SCD30 airSensor;
-        out_data_scd30 data;
-};
-
-#endif
\ No newline at end of file
diff --git a/code-snippets/client/sensor_station_espnow/client/platformio.ini b/code-snippets/client/sensor_station_espnow/client/platformio.ini
deleted file mode 100644
index 9a7648a1a211054676b28e069a1c3f43efe8abd0..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/platformio.ini
+++ /dev/null
@@ -1,19 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-lib_deps = sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-    Wire
-    wollewald/INA219_WE@^1.3.1
-    envirodiy/SDI-12@^2.1.4
-    fbiego/ESP32Time@^1.1.0
diff --git a/code-snippets/client/sensor_station_espnow/client/src/main.cpp b/code-snippets/client/sensor_station_espnow/client/src/main.cpp
deleted file mode 100644
index 14ccd03962f20d4a7c04ee5fc0ed429da5892973..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/src/main.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <Arduino.h>
-#include <scd30.hpp>
-#include <ina219.hpp>
-#include <drs26.hpp>
-#include "espnow.hpp"
-#include "ram_caching.hpp"
-#include <stdio.h>
-#include <f_deep_sleep.h>
-
-Forte_SCD30 scd30;
-Forte_INA219 ina219;
-Forte_DRS26 drs26;
-
-
-void setup() {
-  Serial.begin(9600);
-  Serial.println();
-  Serial.println("Weak up from deep sleep");
-  ina219.setup();
-  drs26.setup();
-  esp_err_t result = espnow_setup();
-}
-
-
-
-void loop() {
-
-//*****Data from the Sensor INA219
-  out_data_ina219* data_ina219;
-  data_ina219 = ina219.read_data();
-  ina219.print(data_ina219);
-
-//*****Data from the Sensor DRS26
-  out_data_drs26* data_drs26;
-  data_drs26 = drs26.read_data();
-  drs26.print(data_drs26);
-
-
-  //temperatur  0
-  //cicumfence  1
-
-  //load voltage 2
-  //crrent       3
-  Message* new_data = new Message();
-  new_data->add_data(data_drs26->temperatur, 0);
-  new_data->add_data(data_drs26->circumference, 1);
-  new_data->add_data(data_ina219->loadVoltage_V, 2);
-  new_data->add_data(data_ina219->current_mA,3);
-  new_data->send();
-  delete new_data;
-
-
-  Serial.println("Going to sleep");
-  deep_sleep(5);
-
-
-}
-
diff --git a/code-snippets/client/sensor_station_espnow/client/test/README b/code-snippets/client/sensor_station_espnow/client/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/sensor_station_espnow/client/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/code-snippets/client/transfer-data-to-host-endpoint/.gitignore b/code-snippets/client/transfer-data-to-host-endpoint/.gitignore
deleted file mode 100644
index 89cc49cbd652508924b868ea609fa8f6b758ec56..0000000000000000000000000000000000000000
--- a/code-snippets/client/transfer-data-to-host-endpoint/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-.pio
-.vscode/.browse.c_cpp.db*
-.vscode/c_cpp_properties.json
-.vscode/launch.json
-.vscode/ipch
diff --git a/code-snippets/client/transfer-data-to-host-endpoint/.vscode/extensions.json b/code-snippets/client/transfer-data-to-host-endpoint/.vscode/extensions.json
deleted file mode 100644
index 080e70d08b9811fa743afe5094658dba0ed6b7c2..0000000000000000000000000000000000000000
--- a/code-snippets/client/transfer-data-to-host-endpoint/.vscode/extensions.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-    // See http://go.microsoft.com/fwlink/?LinkId=827846
-    // for the documentation about the extensions.json format
-    "recommendations": [
-        "platformio.platformio-ide"
-    ],
-    "unwantedRecommendations": [
-        "ms-vscode.cpptools-extension-pack"
-    ]
-}
diff --git a/code-snippets/client/transfer-data-to-host-endpoint/include/README b/code-snippets/client/transfer-data-to-host-endpoint/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/code-snippets/client/transfer-data-to-host-endpoint/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/code-snippets/client/transfer-data-to-host-endpoint/platformio.ini b/code-snippets/client/transfer-data-to-host-endpoint/platformio.ini
deleted file mode 100644
index 458c08b6f0717089ed05bbfa9af532e8ee811887..0000000000000000000000000000000000000000
--- a/code-snippets/client/transfer-data-to-host-endpoint/platformio.ini
+++ /dev/null
@@ -1,18 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32c3]
-platform = espressif32
-board = esp32-c3-devkitm-1
-framework = arduino
-monitor_speed = 115200
-lib_deps = 
-	sparkfun/SparkFun SCD30 Arduino Library@^1.0.18
-	bblanchon/ArduinoJson@^6.19.4
diff --git a/code-snippets/client/transfer-data-to-host-endpoint/src/main.cpp b/code-snippets/client/transfer-data-to-host-endpoint/src/main.cpp
deleted file mode 100644
index 38d380fd338affc9d4933fa030db7663eb0148bd..0000000000000000000000000000000000000000
--- a/code-snippets/client/transfer-data-to-host-endpoint/src/main.cpp
+++ /dev/null
@@ -1,116 +0,0 @@
-
-/*******************************************
-   LIBRARIES
-   The use of angle brackets (<>) causes the
-   compiler to search the default include
-   directory. Double quotes ("") causes it
-   to search the current working directory
-   and, if that search fails, it defaults
-   to the default include directory.
-*******************************************/
-
-#include <Wire.h>                           // I2C bus
-#include "WiFi.h"                           // WiFi connection
-#include <SparkFun_SCD30_Arduino_Library.h> // CO2 sensor library
-
-/*******************************************
-   VARIABLES & CONSTANTS
-*******************************************/
-
-#define I2C_SDA 18 // use GPIO pin for I2C: SDA 
-#define I2C_SCL 19 // use GPIO pin for I2C: SCL  
-/*******************************************
-   INSTANTIATION
-*******************************************/
-
-SCD30 airSensor;
-WiFiClient client;
-
-void connectToWiFi()
-{
-
-    WiFi.mode(WIFI_STA);
-    WiFi.begin("micropython", "ThisIsAPassword");
-    Serial.print("Connecting to micropython");
-
-    uint8_t i = 0;
-    while (WiFi.status() != WL_CONNECTED)
-    {
-        Serial.print('.');
-        delay(500);
-
-        if ((++i % 16) == 0)
-        {
-            Serial.println(F(" still trying to connect"));
-        }
-    }
-
-    Serial.print(F("Connected. My IP address is: "));
-    Serial.println(WiFi.localIP());
-}
-
-void setup()
-{
-    Serial.begin(115200);
-    Serial.println("SCD30 Example");
-    Wire.begin(I2C_SDA, I2C_SCL);
-
-    if (airSensor.begin() == false)
-    {
-        Serial.println("Air sensor not detected. Please check wiring. Freezing...");
-        while (true)
-        {
-        }
-    }
-    connectToWiFi();
-}
-
-void send_data_wifi(String send_string)
-{
-    // Send data to server
-    int conn = client.connect("192.168.4.1", 80);
-    if (conn == 1)
-    {
-        client.println("POST / HTTP/1.1");
-        client.println("Host: 192.168.4.1");
-        client.println("Content-Type: application/json");
-        client.println("Content-Length: " + String(send_string.length()));
-        client.println();
-        client.println(send_string);
-    }
-    else
-    {
-        client.stop();
-        Serial.println("Connection failed");
-    }
-}
-
-void loop()
-{
-    if (airSensor.dataAvailable())
-    {
-
-        auto c02 = airSensor.getCO2();
-        Serial.print("co2(ppm):");
-        Serial.print(c02);
-
-        auto temp = airSensor.getTemperature();
-        Serial.print(" temp(C):");
-        Serial.print(temp, 1);
-
-        auto humidity = airSensor.getHumidity();
-        Serial.print(" humidity(%):");
-        Serial.print(humidity, 1);
-
-        Serial.println();
-
-        String str = "{\"co2\": " + String(c02) + ", \"temp\": " + String(temp) + ", \"humidity\": " + String(humidity) + "}";
-        send_data_wifi(str);
-        
-    }
-    else
-        Serial.println("Waiting for new data");
-
-    // The SCD30 has data ready every two seconds
-    delay(2500);
-}
\ No newline at end of file
diff --git a/code-snippets/client/transfer-data-to-host-endpoint/test/README b/code-snippets/client/transfer-data-to-host-endpoint/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/code-snippets/client/transfer-data-to-host-endpoint/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/Tests/Mieming/client_esp32C3/client/lib/espnow/README b/code-snippets/espnow_satellite/README
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/lib/espnow/README
rename to code-snippets/espnow_satellite/README
diff --git a/Tests/Mieming/client_esp32C3/client/lib/espnow/src/ClientDataPackage.hpp b/code-snippets/espnow_satellite/src/ClientDataPackage.hpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/lib/espnow/src/ClientDataPackage.hpp
rename to code-snippets/espnow_satellite/src/ClientDataPackage.hpp
diff --git a/Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ESPNow.cpp b/code-snippets/espnow_satellite/src/ESPNow.cpp
similarity index 100%
rename from Tests/Mieming/client_lowPower_esp32Wroom/client/lib/espnow/src/ESPNow.cpp
rename to code-snippets/espnow_satellite/src/ESPNow.cpp
diff --git a/Tests/Mieming/client_esp32C3/client/lib/espnow/src/ESPNow.hpp b/code-snippets/espnow_satellite/src/ESPNow.hpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/lib/espnow/src/ESPNow.hpp
rename to code-snippets/espnow_satellite/src/ESPNow.hpp
diff --git a/Tests/Mieming/client_esp32C3/client/lib/espnow/src/Message.cpp b/code-snippets/espnow_satellite/src/Message.cpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/lib/espnow/src/Message.cpp
rename to code-snippets/espnow_satellite/src/Message.cpp
diff --git a/Tests/Mieming/client_esp32C3/client/lib/espnow/src/Message.hpp b/code-snippets/espnow_satellite/src/Message.hpp
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/lib/espnow/src/Message.hpp
rename to code-snippets/espnow_satellite/src/Message.hpp
diff --git a/code-snippets/host/simple-microdot-webserver.py b/code-snippets/host/simple-microdot-webserver.py
deleted file mode 100644
index c5c4f1eeca6faa691393536c3384ae7fdcffd121..0000000000000000000000000000000000000000
--- a/code-snippets/host/simple-microdot-webserver.py
+++ /dev/null
@@ -1,36 +0,0 @@
-import network
-
-# start the ESP in AP mode
-ap = network.WLAN(network.AP_IF)
-ap.active(True)
-ap.config(essid='micropython', password=b"ThisIsAPassword", channel=11,
-          authmode=network.AUTH_WPA_WPA2_PSK)  # Set up an access point
-print('network config:', ap.ifconfig())
-print('network status:', ap.status())
-
-import uasyncio
-# to install microdot, see https://git.uibk.ac.at/informatik/qe/forte/forte/-/wikis/Microdot-Installation
-from lib.src.microdot_asyncio import Microdot
-
-# setup webserver
-app = Microdot()
-
-# add a route
-@app.post('/')
-async def hello(request):
-    with open("test.txt", "a") as f:
-        f.write("request " + str(request.body) + "\n")
-        print("request")
-    return 'Hello world'
-
-
-def start_server():
-    print('Starting microdot app')
-    try:
-        app.run(port=80)
-    except:
-        app.shutdown()
-
-
-start_server()
-
diff --git a/host/arduino/.gitignore b/host/arduino/.gitignore
deleted file mode 100644
index 3fe18ad4795165c312b8998befee223818bd4b33..0000000000000000000000000000000000000000
--- a/host/arduino/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.pio
-CMakeListsPrivate.txt
-cmake-build-*/ 
diff --git a/host/arduino/CMakeLists.txt b/host/arduino/CMakeLists.txt
deleted file mode 100644
index c357da067b7d61fada76d400d8906af6d1be73dd..0000000000000000000000000000000000000000
--- a/host/arduino/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
-# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-#
-# If you need to override existing CMake configuration or add extra,
-# please create `CMakeListsUser.txt` in the root of project.
-# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
-
-cmake_minimum_required(VERSION 3.13)
-set(CMAKE_SYSTEM_NAME Generic)
-set(CMAKE_C_COMPILER_WORKS 1)
-set(CMAKE_CXX_COMPILER_WORKS 1)
-
-project("arduino" C CXX)
-
-include(CMakeListsPrivate.txt)
-
-if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
-include(CMakeListsUser.txt)
-endif()
-
-add_custom_target(
-    Production ALL
-    COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_custom_target(
-    Debug ALL
-    COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_executable(Z_DUMMY_TARGET ${SRC_LIST})
diff --git a/host/arduino/include/README b/host/arduino/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/host/arduino/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/host/arduino/platformio.ini b/host/arduino/platformio.ini
deleted file mode 100644
index 42aa8668810174009c6cbe21163499d5d1e33475..0000000000000000000000000000000000000000
--- a/host/arduino/platformio.ini
+++ /dev/null
@@ -1,28 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:mkrnb1500]
-platform = atmelsam
-board = mkrnb1500
-framework = arduino
-monitor_speed = 9600
-build_flags =
-    -I include
-    -DCORE_DEBUG_LEVEL=5
-    -std=gnu++17
-build_unflags = -std=gnu++11
-monitor_port = /dev/ttyACM0
-upload_port = /dev/ttyACM0
-
-lib_deps =
-    arduino-libraries/MKRNB@^1.5.1
-    bblanchon/ArduinoJson@^6.19.4
-    arduino-libraries/Arduino Low Power@^1.2.2
-    arduino-libraries/SD@^1.2.4
diff --git a/host/arduino/src/main.cpp b/host/arduino/src/main.cpp
deleted file mode 100644
index 8b27c371f39af73c5b47c716c956a4bec8294f4f..0000000000000000000000000000000000000000
--- a/host/arduino/src/main.cpp
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
-Web client
-
-This sketch connects to a website through a MKR NB 1500 board. Specifically,
-this example downloads the URL "http://example.org/" and
-prints it to the Serial monitor.
-
-Circuit:
-    - MKR NB 1500 board
-    - Antenna
-    - SIM card with a data plan
-
-created 8 Mar 2012
-by Tom Igoe
-*/
-
-// libraries
-#include "ArduinoLowPower.h"
-#include <ArduinoJson.h>
-#include <MKRNB.h>
-#include <SD.h>
-#include <SPI.h>
-#include <string>
-// initialize the library instance
-GPRS gprs;
-NB nbAccess;
-
-void attachToNetwork();
-
-std::string getResponse(NBClient &client);
-std::string getResponseBody(const std::string &response);
-void sendData(std::string data);
-std::string getResponse(std::string server, std::string path, int port)
-{
-	NBClient client;
-	// if you get a connection, report back via serial:
-	if (client.connect(server.c_str(), port)) {
-		Serial.println("connected to server");
-		// Make a HTTP request:
-		client.print("GET ");
-		client.print(path.c_str());
-		client.println(" HTTP/1.1");
-		client.print("Host: ");
-		client.println(server.c_str());
-		client.println("Connection: close");
-		client.println();
-	} else {
-		// if you didn't get a connection to the server:
-		Serial.println("connection failed");
-	}
-
-	std::string response = getResponse(client);
-
-	std::string token = getResponseBody(response);
-	Serial.println(token.c_str());
-	client.stop();
-	return token;
-}
-std::string getResponseBody(const std::string &response)
-{
-	std::string delimiter = "\r\n\r\n";
-	std::string token = response.substr(response.find(delimiter)).replace(0, delimiter.length(), "");
-	return token;
-}
-
-std::string getResponse(NBClient &client)
-{
-	String status = client.readStringUntil('\r');
-	Serial.println(status);
-
-	std::string response;
-	while (client.connected()) {
-		if (client.available()) {
-			char c = client.read();
-			response += c;
-		}
-	}
-	return response;
-}
-
-std::string postRequest(std::string server, std::string path, int port, std::string body)
-{
-	NBClient client;
-	// if you get a connection, report back via serial:
-	if (client.connect(server.c_str(), port)) {
-		Serial.println("connected to server");
-		// Make a HTTP request:
-		client.print("POST ");
-		client.print(path.c_str());
-		client.println(" HTTP/1.1");
-		client.print("Host: ");
-		client.println(server.c_str());
-		client.println("Connection: close");
-		client.println("Content-Type: application/json");
-		client.print("Content-Length: ");
-		client.println(body.length());
-		client.println();
-		client.println(body.c_str());
-	} else {
-		// if you didn't get a connection to the server:
-		Serial.println("connection failed");
-	}
-
-	std::string response = getResponse(client);
-
-	std::string token = getResponseBody(response);
-
-	Serial.println(token.c_str());
-	client.stop();
-	return token;
-}
-
-const int wakeUpPin = 0;
-const int chipSelect = 6;
-
-void wakeUp()
-{
-	Serial.println("Wake up");
-}
-void setup()
-{
-	// initialize serial communications and wait for port to open:
-	Serial.begin(9600);
-	Serial1.begin(9600);
-	while (!Serial) {
-		; // wait for serial port to connect. Needed for native USB port only
-	}
-	pinMode(wakeUpPin, INPUT);
-	// WAKE UP FROM WATCHDOG (PIN)
-	//	LowPower.attachInterruptWakeup(wakeUpPin, wakeUp, RISING);
-
-	if (!SD.begin(chipSelect)) {
-		Serial.println("initialization failed. Things to check:");
-		Serial.println("1. is a card inserted?");
-		Serial.println("2. is your wiring correct?");
-		Serial.println("3. did you change the chipSelect pin to match your shield or module?");
-		Serial.println("Note: press reset button on the board and reopen this Serial Monitor after fixing your issue!");
-		while (true)
-			;
-	}
-
-	Serial.println("Attaching to network");
-	attachToNetwork();
-}
-
-void attachToNetwork()
-{
-	Serial.println("Starting Arduino web client.");
-	// connection state
-	boolean connected = false;
-
-	// After starting the modem with NB.begin()
-	// attach to the GPRS network with the APN, login and password
-	while (!connected) {
-		if ((nbAccess.begin("", "m2m.public.at") == NB_READY) && (gprs.attachGPRS() == GPRS_READY)) {
-			connected = true;
-		} else {
-			Serial.println("Not connected");
-			exit(1);
-			delay(1000);
-		}
-	}
-}
-
-void loop()
-{
-	//	LowPower.deepSleep();
-
-	//	Serial.println("Waking up..");
-
-	String dataString;
-
-	while (Serial1.available()) {
-		dataString += Serial1.readString();
-	}
-
-	// open the file. note that only one file can be open at a time,
-	// so you have to close this one before opening another.
-	File dataFile = SD.open("datalog.txt", FILE_WRITE);
-
-	// if the file is available, write to it:
-	if (dataFile) {
-		if (dataString.length() > 0) {
-			dataFile.println(dataString);
-			Serial.println(dataString);
-			sendData(dataString.c_str());
-		}
-		dataFile.close();
-		// print to the serial port too:
-		//		Serial.println(dataString);
-	}
-	// if the file isn't open, pop up an error:
-	else {
-		Serial.println("error opening datalog.txt");
-	}
-
-	delay(100);
-	//
-	//	Serial.println("Going to sleep");
-	//	LowPower.deepSleep(10000);
-
-	// TODO: SAVE TO EEPROM OR SD CARD VIA SPI
-	// TODO: REFACTOR CODE
-	// TODO: TEST CODE
-}
-void sendData(std::string data)
-{
-
-	Serial.println("connecting...");
-
-	auto response = getResponse("date.jsontest.com", "/", 80);
-	//	convert response to json object
-	DynamicJsonDocument doc(1024);
-	auto error = deserializeJson(doc, response);
-	if (error) {
-		Serial.print(F("deserializeJson() failed: "));
-		Serial.println(error.f_str());
-		return;
-	}
-	const char *date = doc["date"];
-	long long milliseconds_since_epoch = doc["milliseconds_since_epoch"].as<long long>();
-	const char *time = doc["time"];
-	Serial.println(date);
-	Serial.println(milliseconds_since_epoch);
-	Serial.println(time);
-}
diff --git a/host/arduino/test/README b/host/arduino/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/host/arduino/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/host/esp-t-sim7000g/CMakeLists.txt b/host/esp-t-sim7000g/CMakeLists.txt
deleted file mode 100644
index 03adc907c628da9d43428d810bf0cb5517dad941..0000000000000000000000000000000000000000
--- a/host/esp-t-sim7000g/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
-# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-#
-# If you need to override existing CMake configuration or add extra,
-# please create `CMakeListsUser.txt` in the root of project.
-# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
-
-cmake_minimum_required(VERSION 3.13)
-set(CMAKE_SYSTEM_NAME Generic)
-set(CMAKE_C_COMPILER_WORKS 1)
-set(CMAKE_CXX_COMPILER_WORKS 1)
-
-project("esp-t-sim7000g" C CXX)
-
-include(CMakeListsPrivate.txt)
-
-if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
-include(CMakeListsUser.txt)
-endif()
-
-add_custom_target(
-    Production ALL
-    COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_custom_target(
-    Debug ALL
-    COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_executable(Z_DUMMY_TARGET ${SRC_LIST})
diff --git a/host/esp-t-sim7000g/include/README b/host/esp-t-sim7000g/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/host/esp-t-sim7000g/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/host/esp-t-sim7000g/test/README b/host/esp-t-sim7000g/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/host/esp-t-sim7000g/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/host/esp32-espnow-recv/.gitignore b/host/esp32-espnow-recv/.gitignore
deleted file mode 100644
index 3a67520414ce9bac15f6dcbb08355222f39264bf..0000000000000000000000000000000000000000
--- a/host/esp32-espnow-recv/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-.pio
-.vscode/
-CMakeListsPrivate.txt
-cmake-build-*/ 
diff --git a/host/esp32-espnow-recv/CMakeLists.txt b/host/esp32-espnow-recv/CMakeLists.txt
deleted file mode 100644
index ec76a43a4021aedcf5a46645063150fe96de52d8..0000000000000000000000000000000000000000
--- a/host/esp32-espnow-recv/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
-# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-#
-# If you need to override existing CMake configuration or add extra,
-# please create `CMakeListsUser.txt` in the root of project.
-# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
-
-cmake_minimum_required(VERSION 3.13)
-set(CMAKE_SYSTEM_NAME Generic)
-set(CMAKE_C_COMPILER_WORKS 1)
-set(CMAKE_CXX_COMPILER_WORKS 1)
-
-project("esp32" C CXX)
-
-include(CMakeListsPrivate.txt)
-
-if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
-include(CMakeListsUser.txt)
-endif()
-
-add_custom_target(
-    Production ALL
-    COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_custom_target(
-    Debug ALL
-    COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_executable(Z_DUMMY_TARGET ${SRC_LIST})
diff --git a/host/esp32-espnow-recv/include/README b/host/esp32-espnow-recv/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/host/esp32-espnow-recv/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/host/esp32-espnow-recv/platformio.ini b/host/esp32-espnow-recv/platformio.ini
deleted file mode 100644
index 00e269f9df78977a0e770af2c25ff733527b665b..0000000000000000000000000000000000000000
--- a/host/esp32-espnow-recv/platformio.ini
+++ /dev/null
@@ -1,23 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-monitor_speed = 115200
-framework = arduino
-monitor_port = /dev/ttyUSB0
-upload_port = /dev/ttyUSB0
-build_flags =
-    -I include
-    -DCORE_DEBUG_LEVEL=5
-    -std=gnu++17
-build_unflags = -std=gnu++11
-lib_deps = plerup/EspSoftwareSerial@^6.16.1
\ No newline at end of file
diff --git a/host/esp32-espnow-recv/src/main.cpp b/host/esp32-espnow-recv/src/main.cpp
deleted file mode 100644
index 84660754ea252da3afae69374ba34ae633774579..0000000000000000000000000000000000000000
--- a/host/esp32-espnow-recv/src/main.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-#include "FS.h"
-#include "SD.h"
-#include "SPI.h"
-#include <Arduino.h>
-#include <WiFi.h>
-#include <esp_now.h>
-#include <queue>
-#include <sys/unistd.h>
-
-#define RXD2 18
-#define TXD2 19
-
-TaskHandle_t Task1;
-
-static std::queue<std::string> queue;
-const int wakeUpPin = 4;
-
-[[noreturn]] void Task1code(void *parameter)
-{
-	Serial.println(xPortGetCoreID());
-	while (true) {
-
-		if (!queue.empty()) {
-			std::string message = queue.front();
-			queue.pop();
-
-			digitalWrite(wakeUpPin, HIGH);
-			delay(100);
-
-			Serial.println(message.c_str());
-			Serial1.println(message.c_str());
-
-			digitalWrite(wakeUpPin, LOW);
-		}
-
-		delay(5000);
-		//	Code for task 1 - infinite loop
-		//    (...)
-	}
-}
-
-// SoftwareSerial mySerial(RXD2, TXD2);
-
-enum MessageType{
-    dataAck,
-    hostChange
-};
-typedef struct response{
-	MessageType type;
-	uint8_t mac[6];
-	long time;
-}response;
-
-void print_mac(const uint8_t *mac){
-		for (int i = 0; i < 6; i++) {
-		Serial.print(mac[i], HEX);
-		Serial.print(":");
-	}
-	Serial.println();
-	Serial.flush();
-}
-
-void on_data_sent(const uint8_t *mac_addr, esp_now_send_status_t status)
-{
-	// go to sleep
-}
-
-void on_data_recv(const uint8_t *mac, const uint8_t *incomingData, int len)
-{
-	// print mac
-	Serial.println("Message recieved");
-	for (int i = 0; i < 6; i++) {
-		Serial.print(mac[i], HEX);
-		Serial.print(":");
-	}
-	Serial.println();
-	char data[len];
-	memcpy(data, incomingData, len);
-	queue.push(data);
-}
-
-void setup()
-{
-	Serial.begin(115200);
-	Serial1.begin(9600, SERIAL_8N1, RXD2, TXD2);
-	pinMode(wakeUpPin, OUTPUT);
-	digitalWrite(wakeUpPin, LOW);
-
-	WiFi.mode(WIFI_STA);
-	Serial.println("ESPNow init");
-	if (esp_now_init() != ESP_OK) {
-		// initialization failed
-		Serial.println("ESPNow init failed");
-		return; // not sure about this
-	}
-	Serial.println("ESPNow init success");
-
-	xTaskCreatePinnedToCore(Task1code, /* Function to implement the task */
-	                        "Task1",   /* Name of the task */
-	                        10000,     /* Stack size in words */
-	                        nullptr,   /* Task input parameter */
-	                        0,         /* Priority of the task */
-	                        &Task1,    /* Task handle. */
-	                        0);        /* Core where the task should run */
-
-	esp_now_register_recv_cb(on_data_recv);
-	//  write your initialization code here
-}
-
-void loop() {}
\ No newline at end of file
diff --git a/host/esp32-espnow-recv/src/main2.cpp b/host/esp32-espnow-recv/src/main2.cpp
deleted file mode 100644
index 17684dc58c8a30e9e3634b579519c31d3bc2d3d3..0000000000000000000000000000000000000000
--- a/host/esp32-espnow-recv/src/main2.cpp
+++ /dev/null
@@ -1,229 +0,0 @@
-#include "FS.h"
-#include "SD.h"
-#include "SPI.h"
-#include <Arduino.h>
-#include <sys/unistd.h>
-
-#define RXD2 18
-#define TXD2 19
-
-#define SCK 6
-#define MISO 10
-#define MOSI 7
-#define CS 5
-
-/*
-  Rui Santos
-  Complete project details at https://RandomNerdTutorials.com/esp32-microsd-card-arduino/
-
-  This sketch can be found at: Examples > SD(esp32) > SD_Test
-*/
-
-void listDir(fs::FS &fs, const char *dirname, uint8_t levels)
-{
-	Serial.printf("Listing directory: %s\n", dirname);
-
-	File root = fs.open(dirname);
-	if (!root) {
-		Serial.println("Failed to open directory");
-		return;
-	}
-	if (!root.isDirectory()) {
-		Serial.println("Not a directory");
-		return;
-	}
-
-	File file = root.openNextFile();
-	while (file) {
-		if (file.isDirectory()) {
-			Serial.print("  DIR : ");
-			Serial.println(file.name());
-			if (levels) {
-				listDir(fs, file.name(), levels - 1);
-			}
-		} else {
-			Serial.print("  FILE: ");
-			Serial.print(file.name());
-			Serial.print("  SIZE: ");
-			Serial.println(file.size());
-		}
-		file = root.openNextFile();
-	}
-}
-
-void createDir(fs::FS &fs, const char *path)
-{
-	Serial.printf("Creating Dir: %s\n", path);
-	if (fs.mkdir(path)) {
-		Serial.println("Dir created");
-	} else {
-		Serial.println("mkdir failed");
-	}
-}
-
-void removeDir(fs::FS &fs, const char *path)
-{
-	Serial.printf("Removing Dir: %s\n", path);
-	if (fs.rmdir(path)) {
-		Serial.println("Dir removed");
-	} else {
-		Serial.println("rmdir failed");
-	}
-}
-
-void readFile(fs::FS &fs, const char *path)
-{
-	Serial.printf("Reading file: %s\n", path);
-
-	File file = fs.open(path);
-	if (!file) {
-		Serial.println("Failed to open file for reading");
-		return;
-	}
-
-	Serial.print("Read from file: ");
-	while (file.available()) {
-		Serial.write(file.read());
-	}
-	file.close();
-}
-
-void writeFile(fs::FS &fs, const char *path, const char *message)
-{
-	Serial.printf("Writing file: %s\n", path);
-
-	File file = fs.open(path, FILE_WRITE);
-	if (!file) {
-		Serial.println("Failed to open file for writing");
-		return;
-	}
-	if (file.print(message)) {
-		Serial.println("File written");
-	} else {
-		Serial.println("Write failed");
-	}
-	file.close();
-}
-
-void appendFile(fs::FS &fs, const char *path, const char *message)
-{
-	Serial.printf("Appending to file: %s\n", path);
-
-	File file = fs.open(path, FILE_APPEND);
-	if (!file) {
-		Serial.println("Failed to open file for appending");
-		return;
-	}
-	if (file.print(message)) {
-		Serial.println("Message appended");
-	} else {
-		Serial.println("Append failed");
-	}
-	file.close();
-}
-
-void renameFile(fs::FS &fs, const char *path1, const char *path2)
-{
-	Serial.printf("Renaming file %s to %s\n", path1, path2);
-	if (fs.rename(path1, path2)) {
-		Serial.println("File renamed");
-	} else {
-		Serial.println("Rename failed");
-	}
-}
-
-void deleteFile(fs::FS &fs, const char *path)
-{
-	Serial.printf("Deleting file: %s\n", path);
-	if (fs.remove(path)) {
-		Serial.println("File deleted");
-	} else {
-		Serial.println("Delete failed");
-	}
-}
-
-void testFileIO(fs::FS &fs, const char *path)
-{
-	File file = fs.open(path);
-	static uint8_t buf[512];
-	size_t len = 0;
-	uint32_t start = millis();
-	uint32_t end = start;
-	if (file) {
-		len = file.size();
-		size_t flen = len;
-		start = millis();
-		while (len) {
-			size_t toRead = len;
-			if (toRead > 512) {
-				toRead = 512;
-			}
-			file.read(buf, toRead);
-			len -= toRead;
-		}
-		end = millis() - start;
-		Serial.printf("%u bytes read for %u ms\n", flen, end);
-		file.close();
-	} else {
-		Serial.println("Failed to open file for reading");
-	}
-
-	file = fs.open(path, FILE_WRITE);
-	if (!file) {
-		Serial.println("Failed to open file for writing");
-		return;
-	}
-
-	size_t i;
-	start = millis();
-	for (i = 0; i < 2048; i++) {
-		file.write(buf, 512);
-	}
-	end = millis() - start;
-	Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
-	file.close();
-}
-
-void setup_2()
-{
-	Serial.begin(115200);
-	Serial1.begin(115200, SERIAL_8N1, RX, TX);
-	Serial.println("Initializing SD card...");
-	SPI.begin(SCK, MISO, MOSI, -1);
-
-	if (!SD.begin(CS, SPI, 2000000)) {
-		Serial.println("Card Mount Failed");
-		return;
-	}
-	uint8_t cardType = SD.cardType();
-
-	if (cardType == CARD_NONE) {
-		Serial.println("No SD card attached");
-		return;
-	}
-
-	Serial.print("SD Card Type: ");
-	if (cardType == CARD_MMC) {
-		Serial.println("MMC");
-	} else if (cardType == CARD_SD) {
-		Serial.println("SDSC");
-	} else if (cardType == CARD_SDHC) {
-		Serial.println("SDHC");
-	} else {
-		Serial.println("UNKNOWN");
-	}
-
-	uint64_t cardSize = SD.cardSize() / (1024 * 1024);
-	Serial.printf("SD Card Size: %lluMB\n", cardSize);
-
-	listDir(SD, "/", 0);
-	Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
-	Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
-}
-
-void loop_2()
-{
-	if (Serial1.available()) {
-		Serial.println(Serial1.readString());
-	}
-}
diff --git a/host/esp32-espnow-recv/test/README b/host/esp32-espnow-recv/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/host/esp32-espnow-recv/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/host/esp32-serial-recv/.gitignore b/host/esp32-serial-recv/.gitignore
deleted file mode 100644
index 3fe18ad4795165c312b8998befee223818bd4b33..0000000000000000000000000000000000000000
--- a/host/esp32-serial-recv/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-.pio
-CMakeListsPrivate.txt
-cmake-build-*/ 
diff --git a/host/esp32-serial-recv/CMakeLists.txt b/host/esp32-serial-recv/CMakeLists.txt
deleted file mode 100644
index ec76a43a4021aedcf5a46645063150fe96de52d8..0000000000000000000000000000000000000000
--- a/host/esp32-serial-recv/CMakeLists.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-# !!! WARNING !!! AUTO-GENERATED FILE, PLEASE DO NOT MODIFY IT AND USE
-# https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-#
-# If you need to override existing CMake configuration or add extra,
-# please create `CMakeListsUser.txt` in the root of project.
-# The `CMakeListsUser.txt` will not be overwritten by PlatformIO.
-
-cmake_minimum_required(VERSION 3.13)
-set(CMAKE_SYSTEM_NAME Generic)
-set(CMAKE_C_COMPILER_WORKS 1)
-set(CMAKE_CXX_COMPILER_WORKS 1)
-
-project("esp32" C CXX)
-
-include(CMakeListsPrivate.txt)
-
-if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/CMakeListsUser.txt)
-include(CMakeListsUser.txt)
-endif()
-
-add_custom_target(
-    Production ALL
-    COMMAND platformio -c clion run "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_custom_target(
-    Debug ALL
-    COMMAND platformio -c clion debug "$<$<NOT:$<CONFIG:All>>:-e${CMAKE_BUILD_TYPE}>"
-    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
-add_executable(Z_DUMMY_TARGET ${SRC_LIST})
diff --git a/host/esp32-serial-recv/include/README b/host/esp32-serial-recv/include/README
deleted file mode 100644
index 194dcd43252dcbeb2044ee38510415041a0e7b47..0000000000000000000000000000000000000000
--- a/host/esp32-serial-recv/include/README
+++ /dev/null
@@ -1,39 +0,0 @@
-
-This directory is intended for project header files.
-
-A header file is a file containing C declarations and macro definitions
-to be shared between several project source files. You request the use of a
-header file in your project source file (C, C++, etc) located in `src` folder
-by including it, with the C preprocessing directive `#include'.
-
-```src/main.c
-
-#include "header.h"
-
-int main (void)
-{
- ...
-}
-```
-
-Including a header file produces the same results as copying the header file
-into each source file that needs it. Such copying would be time-consuming
-and error-prone. With a header file, the related declarations appear
-in only one place. If they need to be changed, they can be changed in one
-place, and programs that include the header file will automatically use the
-new version when next recompiled. The header file eliminates the labor of
-finding and changing all the copies as well as the risk that a failure to
-find one copy will result in inconsistencies within a program.
-
-In C, the usual convention is to give header files names that end with `.h'.
-It is most portable to use only letters, digits, dashes, and underscores in
-header file names, and at most one dot.
-
-Read more about using header files in official GCC documentation:
-
-* Include Syntax
-* Include Operation
-* Once-Only Headers
-* Computed Includes
-
-https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
diff --git a/host/esp32-serial-recv/platformio.ini b/host/esp32-serial-recv/platformio.ini
deleted file mode 100644
index 6fce3d0006642f1ce346fc75e75b3b74ad999ea7..0000000000000000000000000000000000000000
--- a/host/esp32-serial-recv/platformio.ini
+++ /dev/null
@@ -1,23 +0,0 @@
-; PlatformIO Project Configuration File
-;
-;   Build options: build flags, source filter
-;   Upload options: custom upload port, speed and extra flags
-;   Library options: dependencies, extra library storages
-;   Advanced options: extra scripting
-;
-; Please visit documentation for the other options and examples
-; https://docs.platformio.org/page/projectconf.html
-
-[env:esp32-c3-devkitm-1]
-platform = espressif32
-board = esp32-c3-devkitm-1
-monitor_speed = 115200
-framework = arduino
-monitor_port = /dev/ttyUSB0
-upload_port = /dev/ttyUSB0
-build_flags =
-    -I include
-    -DCORE_DEBUG_LEVEL=5
-    -std=gnu++17
-build_unflags = -std=gnu++11
-lib_deps = plerup/EspSoftwareSerial@^6.16.1
diff --git a/host/esp32-serial-recv/src/main.cpp b/host/esp32-serial-recv/src/main.cpp
deleted file mode 100644
index 511a10e2246580398311eaa9bfcbfd266e4c0120..0000000000000000000000000000000000000000
--- a/host/esp32-serial-recv/src/main.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-#include "FS.h"
-#include "SD.h"
-#include "SPI.h"
-#include <Arduino.h>
-#include <sys/unistd.h>
-
-#define RXD2 18
-#define TXD2 19
-
-#define SCK 6
-#define MISO 10
-#define MOSI 7
-#define CS 5
-
-/*
-  Rui Santos
-  Complete project details at https://RandomNerdTutorials.com/esp32-microsd-card-arduino/
-
-  This sketch can be found at: Examples > SD(esp32) > SD_Test
-*/
-
-void listDir(fs::FS &fs, const char *dirname, uint8_t levels)
-{
-	Serial.printf("Listing directory: %s\n", dirname);
-
-	File root = fs.open(dirname);
-	if (!root) {
-		Serial.println("Failed to open directory");
-		return;
-	}
-	if (!root.isDirectory()) {
-		Serial.println("Not a directory");
-		return;
-	}
-
-	File file = root.openNextFile();
-	while (file) {
-		if (file.isDirectory()) {
-			Serial.print("  DIR : ");
-			Serial.println(file.name());
-			if (levels) {
-				listDir(fs, file.name(), levels - 1);
-			}
-		} else {
-			Serial.print("  FILE: ");
-			Serial.print(file.name());
-			Serial.print("  SIZE: ");
-			Serial.println(file.size());
-		}
-		file = root.openNextFile();
-	}
-}
-
-void createDir(fs::FS &fs, const char *path)
-{
-	Serial.printf("Creating Dir: %s\n", path);
-	if (fs.mkdir(path)) {
-		Serial.println("Dir created");
-	} else {
-		Serial.println("mkdir failed");
-	}
-}
-
-void removeDir(fs::FS &fs, const char *path)
-{
-	Serial.printf("Removing Dir: %s\n", path);
-	if (fs.rmdir(path)) {
-		Serial.println("Dir removed");
-	} else {
-		Serial.println("rmdir failed");
-	}
-}
-
-void readFile(fs::FS &fs, const char *path)
-{
-	Serial.printf("Reading file: %s\n", path);
-
-	File file = fs.open(path);
-	if (!file) {
-		Serial.println("Failed to open file for reading");
-		return;
-	}
-
-	Serial.print("Read from file: ");
-	while (file.available()) {
-		Serial.write(file.read());
-	}
-	file.close();
-}
-
-void writeFile(fs::FS &fs, const char *path, const char *message)
-{
-	Serial.printf("Writing file: %s\n", path);
-
-	File file = fs.open(path, FILE_WRITE);
-	if (!file) {
-		Serial.println("Failed to open file for writing");
-		return;
-	}
-	if (file.print(message)) {
-		Serial.println("File written");
-	} else {
-		Serial.println("Write failed");
-	}
-	file.close();
-}
-
-void appendFile(fs::FS &fs, const char *path, const char *message)
-{
-	Serial.printf("Appending to file: %s\n", path);
-
-	File file = fs.open(path, FILE_APPEND);
-	if (!file) {
-		Serial.println("Failed to open file for appending");
-		return;
-	}
-	if (file.print(message)) {
-		Serial.println("Message appended");
-	} else {
-		Serial.println("Append failed");
-	}
-	file.close();
-}
-
-void renameFile(fs::FS &fs, const char *path1, const char *path2)
-{
-	Serial.printf("Renaming file %s to %s\n", path1, path2);
-	if (fs.rename(path1, path2)) {
-		Serial.println("File renamed");
-	} else {
-		Serial.println("Rename failed");
-	}
-}
-
-void deleteFile(fs::FS &fs, const char *path)
-{
-	Serial.printf("Deleting file: %s\n", path);
-	if (fs.remove(path)) {
-		Serial.println("File deleted");
-	} else {
-		Serial.println("Delete failed");
-	}
-}
-
-void testFileIO(fs::FS &fs, const char *path)
-{
-	File file = fs.open(path);
-	static uint8_t buf[512];
-	size_t len = 0;
-	uint32_t start = millis();
-	uint32_t end = start;
-	if (file) {
-		len = file.size();
-		size_t flen = len;
-		start = millis();
-		while (len) {
-			size_t toRead = len;
-			if (toRead > 512) {
-				toRead = 512;
-			}
-			file.read(buf, toRead);
-			len -= toRead;
-		}
-		end = millis() - start;
-		Serial.printf("%u bytes read for %u ms\n", flen, end);
-		file.close();
-	} else {
-		Serial.println("Failed to open file for reading");
-	}
-
-	file = fs.open(path, FILE_WRITE);
-	if (!file) {
-		Serial.println("Failed to open file for writing");
-		return;
-	}
-
-	size_t i;
-	start = millis();
-	for (i = 0; i < 2048; i++) {
-		file.write(buf, 512);
-	}
-	end = millis() - start;
-	Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end);
-	file.close();
-}
-
-void setup()
-{
-	Serial.begin(115200);
-	// If this (Serial1) is not available, use https://github.com/plerup/espsoftwareserial
-	Serial1.begin(115200, SERIAL_8N1, RXD2, TXD2);
-	Serial.println("Initializing SD card...");
-	SPI.begin(SCK, MISO, MOSI, -1);
-
-	if (!SD.begin(CS, SPI, 2000000)) {
-		Serial.println("Card Mount Failed");
-		return;
-	}
-	uint8_t cardType = SD.cardType();
-
-	if (cardType == CARD_NONE) {
-		Serial.println("No SD card attached");
-		return;
-	}
-
-	Serial.print("SD Card Type: ");
-	if (cardType == CARD_MMC) {
-		Serial.println("MMC");
-	} else if (cardType == CARD_SD) {
-		Serial.println("SDSC");
-	} else if (cardType == CARD_SDHC) {
-		Serial.println("SDHC");
-	} else {
-		Serial.println("UNKNOWN");
-	}
-
-	uint64_t cardSize = SD.cardSize() / (1024 * 1024);
-	Serial.printf("SD Card Size: %lluMB\n", cardSize);
-
-	listDir(SD, "/", 0);
-	Serial.printf("Total space: %lluMB\n", SD.totalBytes() / (1024 * 1024));
-	Serial.printf("Used space: %lluMB\n", SD.usedBytes() / (1024 * 1024));
-
-	createDir(SD, "/test");
-	writeFile(SD, "/test/log.txt", "");
-}
-
-void loop()
-{
-	if (Serial1.available()) {
-		Serial.println("Received");
-		auto data = Serial1.readString();
-		Serial.println(data);
-		appendFile(SD, "/test/log.txt", data.c_str());
-	}
-}
diff --git a/host/esp32-serial-recv/test/README b/host/esp32-serial-recv/test/README
deleted file mode 100644
index 9b1e87bc67c90e7f09a92a3e855444b085c655a6..0000000000000000000000000000000000000000
--- a/host/esp32-serial-recv/test/README
+++ /dev/null
@@ -1,11 +0,0 @@
-
-This directory is intended for PlatformIO Test Runner and project tests.
-
-Unit Testing is a software testing method by which individual units of
-source code, sets of one or more MCU program modules together with associated
-control data, usage procedures, and operating procedures, are tested to
-determine whether they are fit for use. Unit testing finds problems early
-in the development cycle.
-
-More information about PlatformIO Unit Testing:
-- https://docs.platformio.org/en/latest/advanced/unit-testing/index.html
diff --git a/host/esp32/.vscode/c_cpp_properties.json b/host/esp32/.vscode/c_cpp_properties.json
deleted file mode 100644
index b7ff8be96aaa7a1d7ea38e81f7c1048e94a94f05..0000000000000000000000000000000000000000
--- a/host/esp32/.vscode/c_cpp_properties.json
+++ /dev/null
@@ -1,459 +0,0 @@
-//
-// !!! WARNING !!! AUTO-GENERATED FILE!
-// PLEASE DO NOT MODIFY IT AND USE "platformio.ini":
-// https://docs.platformio.org/page/projectconf/section_env_build.html#build-flags
-//
-{
-    "configurations": [
-        {
-            "name": "PlatformIO",
-            "includePath": [
-                "/home/moritz/Documents/TEAM/sensor-system/host/esp32/include",
-                "/home/moritz/Documents/TEAM/sensor-system/host/esp32/src",
-                "/home/moritz/Documents/TEAM/sensor-system/host/esp32/lib/espnow/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
-                "/home/moritz/Documents/TEAM/sensor-system/host/esp32/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/button/button/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qspi_qspi/include",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/cores/esp32",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/variants/esp32c3",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
-                "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
-                ""
-            ],
-            "browse": {
-                "limitSymbolsToIncludedHeaders": true,
-                "path": [
-                    "/home/moritz/Documents/TEAM/sensor-system/host/esp32/include",
-                    "/home/moritz/Documents/TEAM/sensor-system/host/esp32/src",
-                    "/home/moritz/Documents/TEAM/sensor-system/host/esp32/lib/espnow/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WiFi/src",
-                    "/home/moritz/Documents/TEAM/sensor-system/host/esp32/.pio/libdeps/esp32-c3-devkitm-1/ESP32Time",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/newlib/platform_include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions/freertos",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/port/riscv/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freertos/include/esp_additions",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/include/soc/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hw_support/port/esp32c3/private_include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/heap/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/log/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/include/apps/sntp",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/lwip/src/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/lwip/port/esp32/include/arch",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/soc/esp32c3/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/esp32c3/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/hal/platform_port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/include/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rom/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_common/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/soc",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/include/riscv",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_system/port/public_compat",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/riscv/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/driver/esp32c3/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_pm/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ringbuf/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/efuse/esp32c3/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/vfs/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_wifi/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_event/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_netif/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_eth/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcpip_adapter/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_phy/esp32c3/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_ipc/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_trace/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_timer/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/mbedtls/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mbedtls/esp_crt_bundle/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/app_update/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spi_flash/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bootloader_support/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nvs_flash/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/pthread/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/riscv",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_gdbstub/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/espcoredump/include/port/riscv",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wpa_supplicant/esp_supplicant/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ieee802154/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/console",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/asio/asio/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/asio/port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/osi/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/include/esp32c3/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/api/include/api",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/blufi/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/common/btc/profile/esp/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/bt/host/bluedroid/api/include/api",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cbor/port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/unity/unity/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/cmock/CMock/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/coap/libcoap/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/nghttp/nghttp2/lib/includes",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-tls/esp-tls-crypto",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_adc_cal/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_hid/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/tcp_transport/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_client/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_http_server/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_ota/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_https_server/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_lcd/interface",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protobuf-c/protobuf-c",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/common",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/security",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/protocomm/include/transports",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mdns/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_local_ctrl/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/sdmmc/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_serial_slave_link/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_websocket_client/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/expat/expat/lib",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/expat/port/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wear_levelling/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/diskio",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/vfs",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fatfs/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/freemodbus/common/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/idf_test/include/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/jsmn/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json/cJSON",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/libsodium/src/libsodium/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/libsodium/port_include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/mqtt/esp-mqtt/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/openssl/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/spiffs/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/wifi_provisioning/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/button/button/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/rmaker_common/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_parser/upstream",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/json_generator/upstream",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_schedule/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_rainmaker/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/qrcode/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/ws2812_led",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dotprod/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/support/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/hann/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_harris/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/blackman_nuttall/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/nuttall/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/windows/flat_top/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/iir/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fir/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/add/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sub/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mul/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/addc/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/mulc/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/math/sqrt/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/matrix/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/fft/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/dct/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/conv/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/common/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dsp/modules/kalman/ekf_imu13states/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp_littlefs/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/tool",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/typedef",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/image",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/math",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/nn",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/layer",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/detect",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/esp-dl/include/model_zoo",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/include/fb_gfx/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/tools/sdk/esp32c3/qspi_qspi/include",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/cores/esp32",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/variants/esp32c3",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/ArduinoOTA/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/AsyncUDP/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/BLE/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/BluetoothSerial/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/DNSServer/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/EEPROM/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/ESP32/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/ESPmDNS/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Ethernet/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/FFat/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/FS/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/HTTPClient/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdate/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/HTTPUpdateServer/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/I2S/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/LittleFS/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/NetBIOS/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/RainMaker/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SD/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SD_MMC/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SPI/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SPIFFS/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/SimpleBLE/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Ticker/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/USB/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Update/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WebServer/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WiFiClientSecure/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/WiFiProv/src",
-                    "/home/moritz/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src",
-                    ""
-                ]
-            },
-            "defines": [
-                "PLATFORMIO=60103",
-                "ARDUINO_ESP32C3_DEV",
-                "HAVE_CONFIG_H",
-                "MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
-                "UNITY_INCLUDE_CONFIG_H",
-                "WITH_POSIX",
-                "_GNU_SOURCE",
-                "IDF_VER=\"v4.4.1-1-gb8050b365e\"",
-                "ESP_PLATFORM",
-                "_POSIX_READER_WRITER_LOCKS",
-                "ARDUINO_ARCH_ESP32",
-                "ESP32",
-                "F_CPU=160000000L",
-                "ARDUINO=10812",
-                "ARDUINO_VARIANT=\"esp32c3\"",
-                "ARDUINO_BOARD=\"Espressif ESP32-C3-DevKitM-1\"",
-                "ARDUINO_PARTITION_default",
-                ""
-            ],
-            "cStandard": "c99",
-            "cppStandard": "c++11",
-            "compilerPath": "/home/moritz/.platformio/packages/toolchain-riscv32-esp/bin/riscv32-esp-elf-gcc",
-            "compilerArgs": [
-                "-march=rv32imc",
-                ""
-            ]
-        }
-    ],
-    "version": 4
-}
diff --git a/host/esp32/.vscode/launch.json b/host/esp32/.vscode/launch.json
deleted file mode 100644
index 98fe2061cdb4d3d96d5e78f2ebba9805f24aa068..0000000000000000000000000000000000000000
--- a/host/esp32/.vscode/launch.json
+++ /dev/null
@@ -1,44 +0,0 @@
-// AUTOMATICALLY GENERATED FILE. PLEASE DO NOT MODIFY IT MANUALLY
-//
-// PIO Unified Debugger
-//
-// Documentation: https://docs.platformio.org/page/plus/debugging.html
-// Configuration: https://docs.platformio.org/page/projectconf/section_env_debug.html
-
-{
-    "version": "0.2.0",
-    "configurations": [
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug",
-            "executable": "/home/moritz/Documents/TEAM/sensor-system/host/esp32/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/moritz/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart",
-            "preLaunchTask": {
-                "type": "PlatformIO",
-                "task": "Pre-Debug"
-            }
-        },
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug (skip Pre-Debug)",
-            "executable": "/home/moritz/Documents/TEAM/sensor-system/host/esp32/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/moritz/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart"
-        },
-        {
-            "type": "platformio-debug",
-            "request": "launch",
-            "name": "PIO Debug (without uploading)",
-            "executable": "/home/moritz/Documents/TEAM/sensor-system/host/esp32/.pio/build/esp32-c3-devkitm-1/firmware.elf",
-            "projectEnvName": "esp32-c3-devkitm-1",
-            "toolchainBinDir": "/home/moritz/.platformio/packages/toolchain-riscv32-esp/bin",
-            "internalConsoleOptions": "openOnSessionStart",
-            "loadMode": "manual"
-        }
-    ]
-}
diff --git a/host/fipy/LICENSES.md b/host/fipy/LICENSES.md
deleted file mode 100644
index ce547569361b650f90c105fc0a2e6009cfa885e9..0000000000000000000000000000000000000000
--- a/host/fipy/LICENSES.md
+++ /dev/null
@@ -1,279 +0,0 @@
-# Micropython-lib
-
-micropython-lib consists of multiple modules from different sources and
-authors. Each module comes under its own licensing terms. The short name of
-a license can be found in a file within the module directory (usually
-metadata.txt or setup.py). The complete text of each license used is provided
-below. Files not belonging to a particular module are provided under the MIT
-license, unless explicitly stated otherwise.
-
-=============== MIT License ===============
-
-The MIT License (MIT)
-
-Copyright (c) 2013, 2014 micropython-lib contributors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-
-=============== Python License ===============
-
-# A. HISTORY OF THE SOFTWARE
-
-Python was created in the early 1990s by Guido van Rossum at Stichting
-Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
-as a successor of a language called ABC. Guido remains Python's
-principal author, although it includes many contributions from others.
-
-In 1995, Guido continued his work on Python at the Corporation for
-National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
-in Reston, Virginia where he released several versions of the
-software.
-
-In May 2000, Guido and the Python core development team moved to
-BeOpen.com to form the BeOpen PythonLabs team. In October of the same
-year, the PythonLabs team moved to Digital Creations (now Zope
-Corporation, see http://www.zope.com). In 2001, the Python Software
-Foundation (PSF, see http://www.python.org/psf/) was formed, a
-non-profit organization created specifically to own Python-related
-Intellectual Property. Zope Corporation is a sponsoring member of
-the PSF.
-
-All Python releases are Open Source (see http://www.opensource.org for
-the Open Source Definition). Historically, most, but not all, Python
-releases have also been GPL-compatible; the table below summarizes
-the various releases.
-
-    Release         Derived     Year        Owner       GPL-
-                    from                                compatible? (1)
-
-    0.9.0 thru 1.2              1991-1995   CWI         yes
-    1.3 thru 1.5.2  1.2         1995-1999   CNRI        yes
-    1.6             1.5.2       2000        CNRI        no
-    2.0             1.6         2000        BeOpen.com  no
-    1.6.1           1.6         2001        CNRI        yes (2)
-    2.1             2.0+1.6.1   2001        PSF         no
-    2.0.1           2.0+1.6.1   2001        PSF         yes
-    2.1.1           2.1+2.0.1   2001        PSF         yes
-    2.1.2           2.1.1       2002        PSF         yes
-    2.1.3           2.1.2       2002        PSF         yes
-    2.2 and above   2.1.1       2001-now    PSF         yes
-
-Footnotes:
-
-(1) GPL-compatible doesn't mean that we're distributing Python under
-the GPL. All Python licenses, unlike the GPL, let you distribute
-a modified version without making your changes open source. The
-GPL-compatible licenses make it possible to combine Python with
-other software that is released under the GPL; the others don't.
-
-(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
-because its license has a choice of law clause. According to
-CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
-is "not incompatible" with the GPL.
-
-Thanks to the many outside volunteers who have worked under Guido's
-direction to make these releases possible.
-
-# B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
-
-## PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
-
-1. This LICENSE AGREEMENT is between the Python Software Foundation
-   ("PSF"), and the Individual or Organization ("Licensee") accessing and
-   otherwise using this software ("Python") in source or binary form and
-   its associated documentation.
-
-2. Subject to the terms and conditions of this License Agreement, PSF hereby
-   grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
-   analyze, test, perform and/or display publicly, prepare derivative works,
-   distribute, and otherwise use Python alone or in any derivative version,
-   provided, however, that PSF's License Agreement and PSF's notice of copyright,
-   i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
-   2011, 2012, 2013 Python Software Foundation; All Rights Reserved" are retained
-   in Python alone or in any derivative version prepared by Licensee.
-
-3. In the event Licensee prepares a derivative work that is based on
-   or incorporates Python or any part thereof, and wants to make
-   the derivative work available to others as provided herein, then
-   Licensee hereby agrees to include in any such work a brief summary of
-   the changes made to Python.
-
-4. PSF is making Python available to Licensee on an "AS IS"
-   basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-   IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
-   DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-   FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
-   INFRINGE ANY THIRD PARTY RIGHTS.
-
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-   FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-   A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
-   OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6. This License Agreement will automatically terminate upon a material
-   breach of its terms and conditions.
-
-7. Nothing in this License Agreement shall be deemed to create any
-   relationship of agency, partnership, or joint venture between PSF and
-   Licensee. This License Agreement does not grant permission to use PSF
-   trademarks or trade name in a trademark sense to endorse or promote
-   products or services of Licensee, or any third party.
-
-8. By copying, installing or otherwise using Python, Licensee
-   agrees to be bound by the terms and conditions of this License
-   Agreement.
-
-## BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
-
-BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
-
-1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
-   office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
-   Individual or Organization ("Licensee") accessing and otherwise using
-   this software in source or binary form and its associated
-   documentation ("the Software").
-
-2. Subject to the terms and conditions of this BeOpen Python License
-   Agreement, BeOpen hereby grants Licensee a non-exclusive,
-   royalty-free, world-wide license to reproduce, analyze, test, perform
-   and/or display publicly, prepare derivative works, distribute, and
-   otherwise use the Software alone or in any derivative version,
-   provided, however, that the BeOpen Python License is retained in the
-   Software, alone or in any derivative version prepared by Licensee.
-
-3. BeOpen is making the Software available to Licensee on an "AS IS"
-   basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-   IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
-   DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-   FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
-   INFRINGE ANY THIRD PARTY RIGHTS.
-
-4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
-   SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
-   AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
-   DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-5. This License Agreement will automatically terminate upon a material
-   breach of its terms and conditions.
-
-6. This License Agreement shall be governed by and interpreted in all
-   respects by the law of the State of California, excluding conflict of
-   law provisions. Nothing in this License Agreement shall be deemed to
-   create any relationship of agency, partnership, or joint venture
-   between BeOpen and Licensee. This License Agreement does not grant
-   permission to use BeOpen trademarks or trade names in a trademark
-   sense to endorse or promote products or services of Licensee, or any
-   third party. As an exception, the "BeOpen Python" logos available at
-   http://www.pythonlabs.com/logos.html may be used according to the
-   permissions granted on that web page.
-
-7. By copying, installing or otherwise using the software, Licensee
-   agrees to be bound by the terms and conditions of this License
-   Agreement.
-
-## CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
-
-1.  This LICENSE AGREEMENT is between the Corporation for National
-    Research Initiatives, having an office at 1895 Preston White Drive,
-    Reston, VA 20191 ("CNRI"), and the Individual or Organization
-    ("Licensee") accessing and otherwise using Python 1.6.1 software in
-    source or binary form and its associated documentation.
-
-2.  Subject to the terms and conditions of this License Agreement, CNRI
-    hereby grants Licensee a nonexclusive, royalty-free, world-wide
-    license to reproduce, analyze, test, perform and/or display publicly,
-    prepare derivative works, distribute, and otherwise use Python 1.6.1
-    alone or in any derivative version, provided, however, that CNRI's
-    License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
-    1995-2001 Corporation for National Research Initiatives; All Rights
-    Reserved" are retained in Python 1.6.1 alone or in any derivative
-    version prepared by Licensee. Alternately, in lieu of CNRI's License
-    Agreement, Licensee may substitute the following text (omitting the
-    quotes): "Python 1.6.1 is made available subject to the terms and
-    conditions in CNRI's License Agreement. This Agreement together with
-    Python 1.6.1 may be located on the Internet using the following
-    unique, persistent identifier (known as a handle): 1895.22/1013. This
-    Agreement may also be obtained from a proxy server on the Internet
-    using the following URL: http://hdl.handle.net/1895.22/1013".
-
-3.  In the event Licensee prepares a derivative work that is based on
-    or incorporates Python 1.6.1 or any part thereof, and wants to make
-    the derivative work available to others as provided herein, then
-    Licensee hereby agrees to include in any such work a brief summary of
-    the changes made to Python 1.6.1.
-
-4.  CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
-    basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
-    IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
-    DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
-    FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
-    INFRINGE ANY THIRD PARTY RIGHTS.
-
-5.  CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
-    1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
-    A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
-    OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-
-6.  This License Agreement will automatically terminate upon a material
-    breach of its terms and conditions.
-
-7.  This License Agreement shall be governed by the federal
-    intellectual property law of the United States, including without
-    limitation the federal copyright law, and, to the extent such
-    U.S. federal law does not apply, by the law of the Commonwealth of
-    Virginia, excluding Virginia's conflict of law provisions.
-    Notwithstanding the foregoing, with regard to derivative works based
-    on Python 1.6.1 that incorporate non-separable material that was
-    previously distributed under the GNU General Public License (GPL), the
-    law of the Commonwealth of Virginia shall govern this License
-    Agreement only as to issues arising under or with respect to
-    Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
-    License Agreement shall be deemed to create any relationship of
-    agency, partnership, or joint venture between CNRI and Licensee. This
-    License Agreement does not grant permission to use CNRI trademarks or
-    trade name in a trademark sense to endorse or promote products or
-    services of Licensee, or any third party.
-
-8.  By clicking on the "ACCEPT" button where indicated, or by copying,
-    installing or otherwise using Python 1.6.1, Licensee agrees to be
-    bound by the terms and conditions of this License Agreement.
-
-            ACCEPT
-
-## CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
-
-Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
-The Netherlands. All rights reserved.
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Stichting Mathematisch
-Centrum or CWI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
-THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
-FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
-OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/host/fipy/boot.py b/host/fipy/boot.py
deleted file mode 100644
index b8e7bb0948e95d8d7e45ecd78640aa95d841f6d3..0000000000000000000000000000000000000000
--- a/host/fipy/boot.py
+++ /dev/null
@@ -1 +0,0 @@
-# boot.py -- run on boot-up
diff --git a/host/fipy/lib/espnow.py b/host/fipy/lib/espnow.py
deleted file mode 100644
index 6afe2a8b0c2d766e626dd864c493e6a3dd8ab6e7..0000000000000000000000000000000000000000
--- a/host/fipy/lib/espnow.py
+++ /dev/null
@@ -1,57 +0,0 @@
-import network
-from network import ESPNOW
-import time
-from lib.rtc_time import RTCTime
-import struct
-
-w = network.WLAN()
-self_mac, sta = w.mac()
-peer_list = []
-
-class Forte_ESPNOW:
-    def __init__(self):
-        ESPNOW.init()
-        ESPNOW.on_recv(espnow_recv)
-    
-    def add_peer(mac):
-        peer_list.append(ESPNOW.add_peer(mac))
-
-def espnow_respond(mac):
-    msg = struct.pack("<6sl", self_mac, time.time())
-    print(int(time.time()))
-
-    ESPNOW.send(mac, msg)
-    print("response sent")
-
-def espnow_recv(result):
-    print("message recv")
-    mac, peer, msg = result
-
-    data = bytes_to_data(msg)
-    try:
-        print("amount data: " + str(data["amountData"]))
-    #     print(data["timestamp"])
-    #     print(data["data"])
-
-    except Exception as error:
-        print(error)
-
-    if(peer not in peer_list):
-        Forte_ESPNOW.add_peer(mac)
-    
-    espnow_respond(mac)
-
-def bytes_to_data(msg):
-    # turn bytes from message into 22-tuple of integers(identifiers), floats(values), integer(amount) and long(timestamp)
-    data = struct.unpack("<10i10fil", bytes(msg))
-    amountData = data[20]
-    timestamp = data[21]
-    identifiers = data[0:amountData]
-    values = data[10 : (10 + amountData)]
-    return {
-        "amountData": amountData,
-        "timestamp": timestamp,
-        "data": dict(zip(identifiers, values)),
-    }
-
-
diff --git a/host/fipy/lib/rtc_time.py b/host/fipy/lib/rtc_time.py
deleted file mode 100644
index d57b3944d0e00847266b988349464009d3e0a971..0000000000000000000000000000000000000000
--- a/host/fipy/lib/rtc_time.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from time import sleep
-from machine import RTC
-
-
-class RTCTime:
-    # def __init__(
-    #     self,
-    #     main_ntp_server: str = "pool.ntp.org",
-    #     backup_ntp_server: str = "time.nist.gov",
-    #     update_interval_seconds: int = 3600,
-    # ):
-    #     self.rtc = RTC()
-    #     self._setup_ntp(main_ntp_server, backup_ntp_server, update_interval_seconds)
-    
-    
-    def __init__(self, datetime):
-        self.rtc = RTC()
-        self.rtc.init(datetime)
-
-    def _setup_ntp(
-        self, main_ntp_server: str, backup_ntp_server: str, update_interval_seconds: int
-    ):
-        print("Setting up NTP")
-        self.rtc.ntp_sync(main_ntp_server, update_interval_seconds, backup_ntp_server)
-        while not self.rtc.synced():
-            print(self.rtc.synced())
-            sleep(1)
-
-    
-
-    def get_time(self):
-        return self.rtc.now()
-
-    def is_synchronized(self):
-        return self.rtc.synced()
diff --git a/host/fipy/lib/server_transfer.py b/host/fipy/lib/server_transfer.py
deleted file mode 100644
index 00b7a53e6e3f20fa3c657c042a94ef21d0c55a9e..0000000000000000000000000000000000000000
--- a/host/fipy/lib/server_transfer.py
+++ /dev/null
@@ -1,38 +0,0 @@
-class DataTransferInterface:
-    def connect(self):
-        pass
-
-    def disconnect(self):
-        pass
-
-    def send(self, data: str):
-        pass
-
-
-from network import WLAN
-import lib.urequests as requests
-
-
-class DataTransferWiFi(DataTransferInterface):
-    def connect(self, ssid: str, password: str):
-        self.wlan = WLAN(mode=WLAN.STA)
-        self.wlan.connect(ssid, auth=(WLAN.WPA2, password))
-        while not self.wlan.isconnected():
-            pass
-        print("Connected to Wifi")
-
-    def disconnect(self):
-        self.wlan.disconnect()
-
-    def send(self, data: str):
-        res = requests.post(
-            "http://influxdb.qe-forte.uibk.ac.at/api/v2/write?org=QE&bucket=fipy-tests&precision=s",
-            data=data,
-            headers={
-                "Authorization": "Token EML8-F4SfE6XiEAAcawwyA8cWzniCW7eYkCGnJ6hRnf1fyN4BrnxdBd3S56j4-MAZmi0FJu867YHvhflKeFmTw==",
-                "Content-Type": "text/plain; charset=utf-8",
-                "Accept": "application/json",
-            },
-        )
-        print(res.status_code)
-        print(res.reason)
diff --git a/host/fipy/lib/urequests.py b/host/fipy/lib/urequests.py
deleted file mode 100644
index a4488d1db2c5ed67970686839b01d2256505289d..0000000000000000000000000000000000000000
--- a/host/fipy/lib/urequests.py
+++ /dev/null
@@ -1,199 +0,0 @@
-# MIT Licensed https://github.com/micropython/micropython-lib/blob/master/python-ecosys/urequests/urequests.py
-import usocket
-
-
-class Response:
-    def __init__(self, f):
-        self.raw = f
-        self.encoding = "utf-8"
-        self._cached = None
-
-    def close(self):
-        if self.raw:
-            self.raw.close()
-            self.raw = None
-        self._cached = None
-
-    @property
-    def content(self):
-        if self._cached is None:
-            try:
-                self._cached = self.raw.read()
-            finally:
-                self.raw.close()
-                self.raw = None
-        return self._cached
-
-    @property
-    def text(self):
-        return str(self.content, self.encoding)
-
-    def json(self):
-        import ujson
-
-        return ujson.loads(self.content)
-
-
-def request(
-    method,
-    url,
-    data=None,
-    json=None,
-    headers={},
-    stream=None,
-    auth=None,
-    timeout=None,
-    parse_headers=True,
-):
-    redirect = None  # redirection url, None means no redirection
-    chunked_data = (
-        data and getattr(data, "__iter__", None) and not getattr(data, "__len__", None)
-    )
-
-    if auth is not None:
-        import ubinascii
-
-        username, password = auth
-        formated = b"{}:{}".format(username, password)
-        formated = str(ubinascii.b2a_base64(formated)[:-1], "ascii")
-        headers["Authorization"] = "Basic {}".format(formated)
-
-    try:
-        proto, dummy, host, path = url.split("/", 3)
-    except ValueError:
-        proto, dummy, host = url.split("/", 2)
-        path = ""
-    if proto == "http:":
-        port = 80
-    elif proto == "https:":
-        import ussl
-
-        port = 443
-    else:
-        raise ValueError("Unsupported protocol: " + proto)
-
-    if ":" in host:
-        host, port = host.split(":", 1)
-        port = int(port)
-
-    ai = usocket.getaddrinfo(host, port, 0, usocket.SOCK_STREAM)
-    ai = ai[0]
-
-    resp_d = None
-    if parse_headers is not False:
-        resp_d = {}
-
-    s = usocket.socket(ai[0], usocket.SOCK_STREAM, ai[2])
-
-    if timeout is not None:
-        # Note: settimeout is not supported on all platforms, will raise
-        # an AttributeError if not available.
-        s.settimeout(timeout)
-
-    try:
-        s.connect(ai[-1])
-        if proto == "https:":
-            s = ussl.wrap_socket(s, server_hostname=host)
-        s.write(b"%s /%s HTTP/1.0\r\n" % (method, path))
-        if not "Host" in headers:
-            s.write(b"Host: %s\r\n" % host)
-        # Iterate over keys to avoid tuple alloc
-        for k in headers:
-            s.write(k)
-            s.write(b": ")
-            s.write(headers[k])
-            s.write(b"\r\n")
-        if json is not None:
-            assert data is None
-            import ujson
-
-            data = ujson.dumps(json)
-            s.write(b"Content-Type: application/json\r\n")
-        if data:
-            if chunked_data:
-                s.write(b"Transfer-Encoding: chunked\r\n")
-            else:
-                s.write(b"Content-Length: %d\r\n" % len(data))
-        s.write(b"Connection: close\r\n\r\n")
-        if data:
-            if chunked_data:
-                for chunk in data:
-                    s.write(b"%x\r\n" % len(chunk))
-                    s.write(chunk)
-                    s.write(b"\r\n")
-                s.write("0\r\n\r\n")
-            else:
-                s.write(data)
-
-        l = s.readline()
-        # print(l)
-        l = l.split(None, 2)
-        if len(l) < 2:
-            # Invalid response
-            raise ValueError("HTTP error: BadStatusLine:\n%s" % l)
-        status = int(l[1])
-        reason = ""
-        if len(l) > 2:
-            reason = l[2].rstrip()
-        while True:
-            l = s.readline()
-            if not l or l == b"\r\n":
-                break
-            # print(l)
-            if l.startswith(b"Transfer-Encoding:"):
-                if b"chunked" in l:
-                    raise ValueError("Unsupported " + str(l, "utf-8"))
-            elif l.startswith(b"Location:") and not 200 <= status <= 299:
-                if status in [301, 302, 303, 307, 308]:
-                    redirect = str(l[10:-2], "utf-8")
-                else:
-                    raise NotImplementedError("Redirect %d not yet supported" % status)
-            if parse_headers is False:
-                pass
-            elif parse_headers is True:
-                l = str(l, "utf-8")
-                k, v = l.split(":", 1)
-                resp_d[k] = v.strip()
-            else:
-                parse_headers(l, resp_d)
-    except OSError:
-        s.close()
-        raise
-
-    if redirect:
-        s.close()
-        if status in [301, 302, 303]:
-            return request("GET", redirect, None, None, headers, stream)
-        else:
-            return request(method, redirect, data, json, headers, stream)
-    else:
-        resp = Response(s)
-        resp.status_code = status
-        resp.reason = reason
-        if resp_d is not None:
-            resp.headers = resp_d
-        return resp
-
-
-def head(url, **kw):
-    return request("HEAD", url, **kw)
-
-
-def get(url, **kw):
-    return request("GET", url, **kw)
-
-
-def post(url, **kw):
-    return request("POST", url, **kw)
-
-
-def put(url, **kw):
-    return request("PUT", url, **kw)
-
-
-def patch(url, **kw):
-    return request("PATCH", url, **kw)
-
-
-def delete(url, **kw):
-    return request("DELETE", url, **kw)
diff --git a/host/fipy/main.py b/host/fipy/main.py
deleted file mode 100644
index 9e65d65ab025701fe5dd71b5f2f25b2a839d741b..0000000000000000000000000000000000000000
--- a/host/fipy/main.py
+++ /dev/null
@@ -1,58 +0,0 @@
-# main.py -- put your code here!
-from network import WLAN
-from network import ESPNOW
-import binascii
-import struct
-from time import sleep
-from lib.server_transfer import DataTransferWiFi
-from lib.rtc_time import RTCTime
-
-
-def bytes_to_data(msg):
-    # turn bytes from message into 22-tuple of integers(identifiers), floats(values), integer(amount) and long(timestamp)
-    data = struct.unpack("<10i10fil", bytes(msg))
-    amountData = data[20]
-    timestamp = data[21]
-    identifiers = data[0:amountData]
-    values = data[10 : (10 + amountData)]
-    return {
-        "amountData": amountData,
-        "timestamp": timestamp,
-        "data": dict(zip(identifiers, values)),
-    }
-
-
-def espnow_recv(result):
-    mac, peer, msg = result
-
-    data = bytes_to_data(msg)
-    try:
-        print(data["amountData"])
-        print(data["timestamp"])
-        print(data["data"])
-        print(str(binascii.hexlify(mac), "ascii"))
-
-    except Exception as error:
-        print(error)
-
-
-data = DataTransferWiFi()
-data.connect("Z", "AbsoluteSandwich")
-data.send(
-    "airSensors,sensor_id=TLM0201 temperature=73.97038159354763,humidity=35.23103248356096,co=0.4844531056779361 1661175680\nairSensors,sensor_id=TLM0202 temperature=75.30007505999716,humidity=35.65192991869171,co=0.5141876544505826 1661175680\nairSensors,sensor_id=TLM0202 temperature=75.30007505999756,humidity=35.65192991869171,co=0.5141876544505826 1661175680"
-)
-# data.disconnect()
-
-rtc_time = RTCTime((2014, 5, 1, 4, 13, 0, 0, 0))
-# w = WLAN()
-
-# ESPNOW.init()
-# p = ESPNOW.add_peer("58cf79043c84")
-
-# ESPNOW.on_recv(espnow_recv)
-
-while True:
-    print("...")
-    sleep(5)
-    print(rtc_time.get_time())
-    pass
diff --git a/host/fipy/pymakr.conf b/host/fipy/pymakr.conf
deleted file mode 100644
index 7f8e723b49b71b94f7fd6f092d9130d4af36050c..0000000000000000000000000000000000000000
--- a/host/fipy/pymakr.conf
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "name": "Host Fipy"
-}
\ No newline at end of file
diff --git a/host/fipy/pymakr.json b/host/fipy/pymakr.json
deleted file mode 100644
index 4cfd21b33ba6faf6e052521bf37eab88befef466..0000000000000000000000000000000000000000
--- a/host/fipy/pymakr.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "onUpdate" : "restartScript"
-}
\ No newline at end of file
diff --git a/host/esp-t-sim7000g/.gitignore b/host/host_central_mast/.gitignore
similarity index 100%
rename from host/esp-t-sim7000g/.gitignore
rename to host/host_central_mast/.gitignore
diff --git a/Tests/Mieming/client_esp32C3/client/include/README b/host/host_central_mast/include/README
similarity index 100%
rename from Tests/Mieming/client_esp32C3/client/include/README
rename to host/host_central_mast/include/README
diff --git a/host/esp-t-sim7000g/platformio.ini b/host/host_central_mast/platformio.ini
similarity index 100%
rename from host/esp-t-sim7000g/platformio.ini
rename to host/host_central_mast/platformio.ini
diff --git a/host/esp-t-sim7000g/src/main.cpp b/host/host_central_mast/src/main.cpp
similarity index 100%
rename from host/esp-t-sim7000g/src/main.cpp
rename to host/host_central_mast/src/main.cpp
diff --git a/host/esp-t-sim7000g/src/main2.cpp b/host/host_central_mast/src/main2.cpp
similarity index 93%
rename from host/esp-t-sim7000g/src/main2.cpp
rename to host/host_central_mast/src/main2.cpp
index 036405dc530d2707fb79b11198afd96ba70be78a..aaedda0570dfadd1926531602f0c527d39e6f870 100644
--- a/host/esp-t-sim7000g/src/main2.cpp
+++ b/host/host_central_mast/src/main2.cpp
@@ -120,10 +120,10 @@
 //#endif
 //
 //#ifdef USE_SSL
-//TinyGsmClientSecure client(modem);
+//TinyGsmClientSecure client_satellite(modem);
 //const int port = 443;
 //#else
-//TinyGsmClient client(modem);
+//TinyGsmClient client_satellite(modem);
 //const int port = 80;
 //#endif
 //
@@ -258,7 +258,7 @@
 //
 //	SerialMon.print("Connecting to ");
 //	SerialMon.println(server);
-//	if (!client.connect(server, port)) {
+//	if (!client_satellite.connect(server, port)) {
 //		SerialMon.println(" fail");
 //		delay(10000);
 //		return;
@@ -267,16 +267,16 @@
 //
 //	// Make a HTTP GET request:
 //	SerialMon.println("Performing HTTP GET request...");
-//	client.print(String("GET ") + resource + " HTTP/1.1\r\n");
-//	client.print(String("Host: ") + server + "\r\n");
-//	client.print("Connection: close\r\n\r\n");
-//	client.println();
+//	client_satellite.print(String("GET ") + resource + " HTTP/1.1\r\n");
+//	client_satellite.print(String("Host: ") + server + "\r\n");
+//	client_satellite.print("Connection: close\r\n\r\n");
+//	client_satellite.println();
 //
 //	uint32_t timeout = millis();
-//	while (client.connected() && millis() - timeout < 10000L) {
+//	while (client_satellite.connected() && millis() - timeout < 10000L) {
 //		// Print available data
-//		while (client.available()) {
-//			char c = client.read();
+//		while (client_satellite.available()) {
+//			char c = client_satellite.read();
 //			SerialMon.print(c);
 //			timeout = millis();
 //		}
@@ -285,7 +285,7 @@
 //
 //	// Shutdown
 //
-//	client.stop();
+//	client_satellite.stop();
 //	SerialMon.println(F("Server disconnected"));
 //
 //#if TINY_GSM_USE_WIFI
diff --git a/Tests/Mieming/host_esp32Wroom/client/test/README b/host/host_central_mast/test/README
similarity index 100%
rename from Tests/Mieming/host_esp32Wroom/client/test/README
rename to host/host_central_mast/test/README